[
  {
    "path": ".gitignore",
    "content": "\n*.DS_Store\n\n*.sublime-project\n\n*.sublime-workspace\n\nnode_modules/*\n\n*.log\n\n.idea/\n"
  },
  {
    "path": ".jshintrc",
    "content": "{\n    \"debug\": true,\n    \"devel\": true,\n    \"browser\": true,\n    \"asi\": true,\n    \"unused\": true,\n    \"eqnull\": true\n}"
  },
  {
    "path": ".travis.yml",
    "content": "\nlanguage: node_js\nnode_js:\n    - 8\nbefore_script:\n    - npm install -g grunt-cli\nbefore_install: npm install -g npm@latest\ninstall: npm ci\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\n## 3.5.6\n\n- [#667](https://github.com/amsul/pickadate.js/issues/667) Fixed issue where script was executed before `body` was loaded.\n- [#648](https://github.com/amsul/pickadate.js/issues/648) Fixed re-binding events to `P.$holder` after a re-render.\n- [#652](https://github.com/amsul/pickadate.js/issues/652) Added Persian translations.\n- [#669](https://github.com/amsul/pickadate.js/issues/669) Fix in Chinese translations.\n- [#683](https://github.com/amsul/pickadate.js/issues/683) Fix in Japanese translations.\n\n\n## 3.5.5\n\n- [#180](https://github.com/amsul/pickadate.js/issues/180) Fixed date picker to use UTC dates.\n- [#503](https://github.com/amsul/pickadate.js/issues/503) Fixed time picker to use local times.\n- Fixed color for “clear” button on time picker.\n- Translations fixes for [Italian](https://github.com/amsul/pickadate.js/issues/507), [Slovak](https://github.com/amsul/pickadate.js/issues/505), [French](https://github.com/amsul/pickadate.js/issues/499), [Russian](https://github.com/amsul/pickadate.js/issues/484), [Spanish](https://github.com/amsul/pickadate.js/issues/482), [Hindi](https://github.com/amsul/pickadate.js/commit/4b7b7194395657b2360c335839f5b4e21f43987a), [Brazilian Portuguese](https://github.com/amsul/pickadate.js/commit/67d0f6d26aba689c31c9ad402a109b478ffdac92)\n- [#437](https://github.com/amsul/pickadate.js/issues/437): Added Common JS to UMD.\n- [#478](https://github.com/amsul/pickadate.js/issues/478): Added “close” button.\n- [#406](https://github.com/amsul/pickadate.js/issues/406): Allow `clear` method to be `muted`.\n- [#510](https://github.com/amsul/pickadate.js/issues/510): Added `valueSubmit` to get value of hidden input element.\n- [#439](https://github.com/amsul/pickadate.js/issues/439): Added ability to set min/max date & time using formatted strings.\n- [#451](https://github.com/amsul/pickadate.js/issues/451): Added French accessibility labels.\n- [#462](https://github.com/amsul/pickadate.js/issues/462): Fixed time offset issues by using UTC based times.\n- [#476](https://github.com/amsul/pickadate.js/issues/476): Fixed the `main` files in `bower.json`.\n- [#442](https://github.com/amsul/pickadate.js/issues/442): Fixed flickering on webkit browsers.\n- [#438](https://github.com/amsul/pickadate.js/issues/438): Fixed adding an ID to the hidden element to remain unique.\n- [#456](https://github.com/amsul/pickadate.js/issues/456): Fixed “today” button to be disabled when the date is disabled.\n- [#419](https://github.com/amsul/pickadate.js/issues/419): Fixed time picker not scrolling to correct position with the “classic” theme.\n- [#531](https://github.com/amsul/pickadate.js/issues/531): Fixed mutation of date object passed to `normalize`.\n- [#441](https://github.com/amsul/pickadate.js/issues/441): Fixed IE8 `getComputedStyle` error.\n- [#465](https://github.com/amsul/pickadate.js/issues/465): Fixed IE8 error on changing input `type`.\n- [#519](https://github.com/amsul/pickadate.js/issues/519): Fixed IE8 error of picker in `iframe`.\n- [#523](https://github.com/amsul/pickadate.js/issues/523): Fixed iOS8 bug of picker not opening in view.\n- Fixed bug where it was possible to unbind internal bindings.\n- [#420](https://github.com/amsul/pickadate.js/issues/420): [Updated docs](http://amsul.github.io/pickadate.js/api.htm#method-trigger) the `trigger` method’s ability to pass data to event callbacks.\n- [#562](https://github.com/amsul/pickadate.js/issues/562): Fixed hidden `input` to move into `container` when option is used.\n- [#581](https://github.com/amsul/pickadate.js/issues/581): Added ARIA label for dates and times.\n- [#575](https://github.com/amsul/pickadate.js/issues/575): Removed the Sizzle dependency.\n- Added `closeOnSelect` and `closeOnClear` boolean options.\n\n\n## 3.5.2\n- [#398](https://github.com/amsul/pickadate.js/issues/398): Fixed Nepali translations.\n- [#403](https://github.com/amsul/pickadate.js/issues/403): Fixed month nav pointer styling with Bootstrap (`border-box` issue).\n- [#405](https://github.com/amsul/pickadate.js/issues/405): Fixed scrollbar width checker.\n- [#421](https://github.com/amsul/pickadate.js/issues/421): Fixed `picker.get('select', 'yyyy-mm-dd')` when `select` is `null`.\n- [#423](https://github.com/amsul/pickadate.js/issues/423): Added Vietnamese translations.\n- [#427](https://github.com/amsul/pickadate.js/issues/427): Fixed enabling date when `firstDay` is set.\n- [#428](https://github.com/amsul/pickadate.js/issues/428): Fixed `$` conflict in Arabic translations.\n- [#430](https://github.com/amsul/pickadate.js/issues/430): Improved differentiation between “selected” and “highlighted” dates/times.\n\n\n## 3.5.0\n\n- [#162](https://github.com/amsul/pickadate.js/issues/162): Fixed page scrolling issue when modal view is open in the default theme.\n- [#350](https://github.com/amsul/pickadate.js/issues/350): Fixed Hungarian translations typo.\n- [#351](https://github.com/amsul/pickadate.js/issues/351) & [#388](https://github.com/amsul/pickadate.js/issues/388) & [#393](https://github.com/amsul/pickadate.js/issues/393): Fixed issue with script freezing when `min` is `true` and “today” is disabled.\n- [#358](https://github.com/amsul/pickadate.js/issues/358): Fixed parsing months as 1-indexed when value is a string.\n- [#360](https://github.com/amsul/pickadate.js/issues/360): Improved Grunt script to build a cleaner project.\n- [#361](https://github.com/amsul/pickadate.js/issues/361): Fixed alternate API syntax not returning the correct value.\n- [#367](https://github.com/amsul/pickadate.js/issues/367): [Added a note](http://amsul.github.io/pickadate.js/date.htm#formatting-rules) on how to appropriately use the `yy` format.\n- [#369](https://github.com/amsul/pickadate.js/issues/369): Added Nepali translations.\n- [#377](https://github.com/amsul/pickadate.js/issues/377): Added the [`hiddenName` option](http://amsul.github.io/pickadate.js/date.htm#formats_use_hidden_only) to use the visible `input`’s name as the hidden `input`’s name.\n- [#381](https://github.com/amsul/pickadate.js/issues/381): Added missing semi-colon to `legacy.js`.\n- [#384](https://github.com/amsul/pickadate.js/issues/384): Year selector appears *before* the month selector.\n- [#387](https://github.com/amsul/pickadate.js/issues/387): Fixed issue where the `clear` method did not reset the `select` value to `null`.\n- [#395](https://github.com/amsul/pickadate.js/issues/395): [Added a note](http://amsul.github.io/pickadate.js/api.htm#method-open-close) on how to use a separate button to open/close the picker.\n\n## 3.4.0\n\n- ARIA support added. :star2:\n- [#128](https://github.com/amsul/pickadate.js/issues/128): Date parser recognizes a string value and uses month index as 1.\n- [#316](https://github.com/amsul/pickadate.js/issues/316): Date and time parser fall back to default format if none is specified.\n- [#326](https://github.com/amsul/pickadate.js/issues/326): Fixed `set('disable', true)` crashing with `max: true` in options.\n- [#329](https://github.com/amsul/pickadate.js/issues/329): Fixed time picker not parsing midnight correcly.\n- [#325](https://github.com/amsul/pickadate.js/issues/325): Fixed Firefox bug with querying for active element with `$.contains`.\n- [#330](https://github.com/amsul/pickadate.js/issues/330): Fixed month selector navigation from month with more days to one with less.\n- [#332](https://github.com/amsul/pickadate.js/issues/332): Fixed issue where right-clicks caused picker to close in Firefox.\n- [#338](https://github.com/amsul/pickadate.js/issues/338): Fixed IE issue with month & year selector not working correctly.\n- Improved time picker setting a time relative to “now”.\n- Improved disabling/enabling dates and times.\n- Spanish translations typo fixed.\n- Added [the `off` method](http://amsul.github.io/pickadate.js/api.htm#method-off).\n- Added Galician translations.\n- Added Slovenian translations.\n- Added Icelandic translations.\n- Added option to disable [dates](http://amsul.github.io/pickadate.js/date.htm#disable-dates-use-ranges) & [times](http://amsul.github.io/pickadate.js/time.htm#disable-times-use-ranges) within a range.\n- Added option to set the [`select`](http://amsul.github.io/pickadate.js/api.htm#method-set-select-date), [`highlight`](http://amsul.github.io/pickadate.js/api.htm#method-set-highlight-date), and [`view`](http://amsul.github.io/pickadate.js/api.htm#method-set-view-date) using a string and parsing format.\n- Added some performance improvents.\n- Added more tests and documentation.\n- Fixed `picker.get('select')` when there’s no value.\n\n\n## 3.3.2\n\n- [#283](https://github.com/amsul/pickadate.js/issues/283): Adjusted font size for narrow screens.\n- [#285](https://github.com/amsul/pickadate.js/issues/285): Fixed `select` menu click on Firefox.\n- [#294](https://github.com/amsul/pickadate.js/issues/294): Fixed issue with `stop` method called within `onClose`.\n- [#303](https://github.com/amsul/pickadate.js/issues/303): Fixed issue with `value` not being parsed when `formatSubmit` is used.\n\n\n## 3.3.1\n\n- [#260](https://github.com/amsul/pickadate.js/issues/260): Fixed border from preventing picker from opening.\n- [#248](https://github.com/amsul/pickadate.js/issues/248): Added option to enable dates/times disabled within a range.\n- [#255](https://github.com/amsul/pickadate.js/issues/255): Added traditional Chinese.\n- [#249](https://github.com/amsul/pickadate.js/issues/249) & [#120](https://github.com/amsul/pickadate.js/issues/120): Fixed jQuery Mobile and MagnificPopup click issues.\n- [#247](https://github.com/amsul/pickadate.js/issues/247): Fixed setting min limit on time picker.\n- [#278](https://github.com/amsul/pickadate.js/issues/278) & [#285](https://github.com/amsul/pickadate.js/issues/285): Fixed Firefox and IE bug for finding `activeElement`.\n- [#279](https://github.com/amsul/pickadate.js/issues/279): Added option to `set` things with [muted callbacks](http://amsul.github.io/pickadate.js/pickadate.js/api.htm#muted-callbacks).\n- Fixed French translations capitalization.\n- Fixed time picker scrolling.\n- Added setting a [time using a native JavaScript date objects](http://amsul.github.io/pickadate.js/api.htm#method-set-select-time).\n- Added option to keep an [editable `input`](http://amsul.github.io/pickadate.js/date.htm#editable) element.\n\n\n## 3.3.0\n\n- [#238](https://github.com/amsul/pickadate.js/issues/238): Improved disabled dates validation.\n- [#236](https://github.com/amsul/pickadate.js/issues/236): Fixed transparency issue in IE8 on XP.\n- [#159](https://github.com/amsul/pickadate.js/issues/159): Added functionality to reset disabled dates/times.\n- [#232](https://github.com/amsul/pickadate.js/issues/232): Dropdown styling tweaked.\n- [#197](https://github.com/amsul/pickadate.js/issues/197): Fixed issue with forms not submitting on Firefox.\n- [#230](https://github.com/amsul/pickadate.js/issues/230): Fixed issue with selected time scrolling into view.\n- [#208](https://github.com/amsul/pickadate.js/issues/208) & [#209](https://github.com/amsul/pickadate.js/issues/209): Added `hiddenPrefix` option for hidden input element’s name attribute.\n- [#130](https://github.com/amsul/pickadate.js/issues/130): Fixed issue with passing focus to an element with custom jQuery builds.\n- [#246](https://github.com/amsul/pickadate.js/issues/246) & [#242](https://github.com/amsul/pickadate.js/issues/242): Resolved jQuery conflict.\n- [#247](https://github.com/amsul/pickadate.js/issues/247): Fixed issue with time picker intervals and the min selectable time.\n- Added option to disabled/enable dates using JavaScript Date objects.\n- Tweaked functionality in enabling/disabling dates and times.\n- Improved support for RTL languages and keyboard navigation.\n- Added `rtl.css` for styling RTL languages appropriatey.\n\n\n## 3.2.2\n\n- [#216](https://github.com/amsul/pickadate.js/issues/216): Added generic Arabic translations.\n- [#210](https://github.com/amsul/pickadate.js/issues/210): Fixed jQuery conflict in picker extension files.\n- [#223](https://github.com/amsul/pickadate.js/issues/223): Time picker “disabled” attribute fix.\n- Fixed issue with IE losing key bindings when clicked within picker.\n- Improved delegated click handling on picker elements.\n\n## 3.2.1\n\n- [#210](https://github.com/amsul/pickadate.js/issues/210): Wrapped files using UMD patterns.\n- [#207](https://github.com/amsul/pickadate.js/issues/207): Japanese translations added.\n- Some other slight improvements.\n\n## 3.2.0\n\n- [#178](https://github.com/amsul/pickadate.js/issues/178): Fix for flicker on iOS while changing months.\n- Added `render(true)` option to render full picker or just the “face” ([read more](http://amsul.github.io/pickadate.js/api.htm#method-render)).\n\n## 3.1.4\n\n- Fix for Polish translation.\n- Added a `container` option to specify the picker root element’s outlet.\n- Fix for `$` conflict in translation files.\n\n## 3.1.3\n\n- Korean translations added.\n\n## 3.1.2\n\n- [#168](https://github.com/amsul/pickadate.js/issues/168): Fixed month navigation with disabled dates.\n\n## 3.1.1\n\n- [#161](https://github.com/amsul/pickadate.js/issues/161): Corrected “no-drop” cursor on input element for certain browsers.\n- [#158](https://github.com/amsul/pickadate.js/issues/158): Fixed CSS for disabled dates with unfocused input.\n- [#155](https://github.com/amsul/pickadate.js/issues/155): Corrected unescaped translations.\n\n## 3.1.0\n\n- [#140](https://github.com/amsul/pickadate.js/issues/140): Fix for freezing with unexpected date format.\n- [#154](https://github.com/amsul/pickadate.js/issues/154): Fix for “mm” and “m” formats opening with incorrect month.\n- Border styling adjusted for disabled times.\n\n## v3.0.5\n\n- [#145](https://github.com/amsul/pickadate.js/issues/145): Fix for `getFirstWordLength` not being defined.\n- [#137](https://github.com/amsul/pickadate.js/issues/137): Corrected Norwegian translation.\n\n## v3.0.4\n\n- [#132](https://github.com/amsul/pickadate.js/issues/132): Fix for using `firstDay` with month starting on Sunday.\n- Improved disabled dates validation.\n\n## v3.0.3\n\n- [#126](https://github.com/amsul/pickadate.js/issues/126): Fix for all dates disabled.\n- [#127](https://github.com/amsul/pickadate.js/issues/127): Fix for jQuery no conflict.\n- [#129](https://github.com/amsul/pickadate.js/issues/129): Fix for month nav wrapping around same year.\n\n## v3.0.2\n\n- [#124](https://github.com/amsul/pickadate.js/issues/124): Fixed bug with navigating past year.\n\n## v3.0.1\n\n- [#123](https://github.com/amsul/pickadate.js/issues/123): Removed `hiddenSuffix` extra quote character.\n- Fixed issue with month navigation on the 31st date.\n\n## v3.0.0\n\nWith this major release, the entire API has been rethought to allow the picker to be much more configurable and extensible. These are the most notable updates:\n\n- [#20](https://github.com/amsul/pickadate.js/issues/20): Introduced a new [time picker](http://amsul.github.io/pickadate.js/time.htm).\n- [#112](https://github.com/amsul/pickadate.js/issues/112): Firefox select month/year fix.\n- [#84](https://github.com/amsul/pickadate.js/issues/84): Scrollbar not hidden to avoid page shift.\n- [#89](https://github.com/amsul/pickadate.js/issues/89): Better event handling on clicks/focuses/keydowns within the holder.\n- [#98](https://github.com/amsul/pickadate.js/issues/98): Destroy picker data from element.\n- Added Grunt.js build system.\n- Added QUnit test suite.\n- Added Travis integration.\n- Updated themes to be LESS-based.\n- Removed “inline” and “inline-fixed” themes.\n- Removed jam.js bindings within `package.json`.\n- Removed official support for IE7. Still works but looks odd.\n\nTo enable all this goodness, some **backward-incompatible changes** have been introduced. These are the main ones:\n\n<a name=\"zero-as-index\"></a>\n- [#85](https://github.com/amsul/pickadate.js/issues/85): Months have __zero-as-index__:\n\n\tJust as in JavaScript’s native Date object, the `month` used to create dates is now \tbased on zero as the first index. Meaning:\n\n\t```\n\t[2013,0,1] → January 01, 2013\n\t[2013,11,1] → December 01, 2013\n\t```\n\n- API revised:\n\n\t```\n\tisOpen → get('open')\n\tgetDate → get('select')\n\tgetDateLimit → get('min') or get('max')\n\tsetDate → set('select', …)\n\tsetDateLimit → set('min', …) or set('max', …)\n\tshow → set('view', …)\n\t```\n\n- Options revised:\n\n\t```\n\tshowMonthsFull → showMonthsShort\n\tshowWeekdaysShort → showWeekdaysFull\n\tyearSelector → selectYears\n\tmonthSelector → selectMonths\n\tdateMin → min\n\tdateMax → max\n\tdatesDisabled → disable\n\tonSelect → onSet\n\t```\n\n- Options removed:\n\n\t```\n\tmonthPrev\n\tmonthNext\n\t```\n\tTo add labels for the month navigation tabs, use CSS pseudo-elements instead.\n\n- A few [HTML classes](http://amsul.github.io/pickadate.js/date.htm#classes) name and property changes.\n\n- [Formatting rules](http://amsul.github.io/pickadate.js/date.htm#formats) that appear within a word need to be escaped with an exclamation mark (!).\n\n\n<br>\n#### Please do read the [docs](http://amsul.github.io/pickadate.js/date.htm#options) and [api](http://amsul.github.io/pickadate.js/api.htm) to see exactly how these new options and methods work.\n\n\n\n\n<br>\n## Older changelogs\n\nIf you’re looking for changes in older versions, please [browse the tags](https://github.com/amsul/pickadate.js/tags) for the relevant commit archive and changelog file.\n\n\n\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing\n\nWant to help contribute something to the project? Awesome! :smile:\n\nPlease take a moment to review this doc to make contributions easy and effective for everyone.\n\nIf there’s anything you’d like to discuss before diving in, you can find us on Gitter.\n\n[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/amsul/pickadate.js)\n\n\n<a name=\"bugs\"></a>\n\n## Bug reports\n\nIf you believe you’ve found a bug within the repository code:\n\n- Search the existing issues to avoid duplicates and to check if it has already been solved.\n- Make sure you’re using the latest build.\n- Isolate the problem and create a [reduced test case](http://css-tricks.com/6263-reduced-test-cases/) - preferably supported with a live example.\n- Try to be as detailed as possible in the report (OS, browser, expected outcome vs actual outcome, etc).\n- Please **do not** use the issue tracker for personal support requests. Instead try [Stack Overflow](http://stackoverflow.com/questions/tagged/pickadate) or the likes with a `pickadate` tag.\n\n\n\n\n<a name=\"pull-requests\"></a>\n\n## Pull requests\n\nIf you’re submitting a pull request, please respect the coding standards used (indentations, comments, semi-colons, etc) as per the **Golden Rule**:\n\n> All code in any code base should look like a single person typed it, no matter how many people contributed.\n\nA few other things to keep in mind:\n\n- Make sure the changes are suitable within the scope of this project.\n- Discuss any significant features before endeavoring into developing them. I’d hate to have anyone spend effort on something only for me to not merge it into the main project.\n- Include the relevant test coverage if any JavaScript files are involved.\n- Compile the project using `grunt build --verbose` to make sure everything passes with a green flag.\n- Use the Semantic Versioning guide, as mentioned in the [readme file](https://github.com/amsul/pickadate.js/#readme), in the case that a version bump is due.\n\n\n#### All pull requests should be submitted to the `master` branch.\n\n\n\n\n<a name=\"features\"></a>\n\n## Feature requests\n\nFeature requests are welcome. But take a moment to find out whether your idea fits within the scope and aims of this project. It’s up to *you* to make a strong case to the merits of this feature. Please provide as much detail and context as possible.\n\n\n\n"
  },
  {
    "path": "Gruntfile.js",
    "content": "\n/*!\n * This Gruntfile is used to build the project files.\n */\n\n/*jshint\n    node: true\n */\n\n\nmodule.exports = function( grunt ) {\n\n    // Read the package manifest.\n    var packageJSON = grunt.file.readJSON( 'package.json' )\n\n\n    // Load the NPM tasks.\n    grunt.loadNpmTasks( 'grunt-contrib-watch' )\n    grunt.loadNpmTasks( 'grunt-contrib-jshint' )\n    grunt.loadNpmTasks( 'grunt-contrib-qunit' )\n    grunt.loadNpmTasks( 'grunt-contrib-less' )\n    grunt.loadNpmTasks( 'grunt-contrib-cssmin' )\n    grunt.loadNpmTasks( 'grunt-contrib-uglify' )\n    grunt.loadNpmTasks( 'grunt-autoprefixer' )\n\n\n    // Setup the initial configurations.\n    grunt.initConfig({\n\n\n        // Add the package data.\n        pkg: packageJSON,\n\n\n        // Set up the directories.\n        dirs: {\n            tests: 'tests',\n            lib: {\n                src: 'lib',\n                min: 'lib/compressed'\n            },\n            themes: {\n                src: 'lib/themes-source',\n                dest: 'lib/themes',\n                min: 'lib/compressed/themes'\n            },\n            translations: {\n                src: 'lib/translations',\n                min: 'lib/compressed/translations'\n            },\n        },\n\n\n        // Compile LESS into CSS.\n        less: {\n            options: {\n                style: 'expanded'\n            },\n            themes: {\n                files: {\n                    '<%= dirs.themes.dest %>/default.css': [ '<%= dirs.themes.src %>/base.less', '<%= dirs.themes.src %>/default.less' ],\n                    '<%= dirs.themes.dest %>/classic.css': [ '<%= dirs.themes.src %>/base.less', '<%= dirs.themes.src %>/classic.less' ],\n                    '<%= dirs.themes.dest %>/default.date.css': [ '<%= dirs.themes.src %>/base.date.less', '<%= dirs.themes.src %>/default.date.less' ],\n                    '<%= dirs.themes.dest %>/default.time.css': [ '<%= dirs.themes.src %>/base.time.less', '<%= dirs.themes.src %>/default.time.less' ],\n                    '<%= dirs.themes.dest %>/classic.date.css': [ '<%= dirs.themes.src %>/base.date.less', '<%= dirs.themes.src %>/classic.date.less' ],\n                    '<%= dirs.themes.dest %>/classic.time.css': [ '<%= dirs.themes.src %>/base.time.less', '<%= dirs.themes.src %>/classic.time.less' ],\n                    '<%= dirs.themes.dest %>/rtl.css': [ '<%= dirs.themes.src %>/rtl.less' ]\n                }\n            }\n        },\n\n\n        // Lint the files.\n        jshint: {\n            options: {\n                jshintrc: true\n            },\n            gruntfile: 'Gruntfile.js',\n            lib: [\n                '<%= dirs.tests %>/units/*.js',\n                '<%= dirs.lib.src %>/**/*.js',\n\n                // Ignore the legacy and minified files.\n                '!<%= dirs.lib.src %>/legacy.js',\n                '!<%= dirs.lib.src %>/compressed/**/*.js'\n            ]\n        },\n\n\n        // Minify all the things!\n        uglify: {\n            options: {\n                preserveComments: 'some'\n            },\n            lib: {\n                files: [\n                    {\n                        expand : true,\n                        cwd : '<%= dirs.lib.src %>',\n                        src   : [ '**/*.js', '!compressed/**/*.js' ],\n                        dest : '<%= dirs.lib.min %>'\n                    }\n                ]\n            }\n        },\n        cssmin: {\n            lib: {\n                expand: true,\n                cwd: '<%= dirs.themes.dest %>',\n                src: [ '**/*.css', '!compressed/**/*.css' ],\n                dest: '<%= dirs.themes.min %>'\n            }\n        },\n\n\n        // Prefix the styles.\n        autoprefixer: {\n            options: {\n                browsers: [ '> 5%', 'last 2 versions', 'ie 8', 'ie 9' ]\n            },\n            themes: {\n                src: '<%= dirs.themes.dest %>/**/*.css'\n            },\n        },\n\n\n        // Unit test the files.\n        qunit: {\n            lib: [ '<%= dirs.tests %>/units/all.htm' ]\n        },\n\n\n        // Watch the project files.\n        watch: {\n            develop: {\n                files: [\n                    '<%= dirs.themes.src %>/**/*.less'\n                ],\n                tasks: [ 'develop-once' ]\n            },\n        }\n\n    }) //grunt.initConfig\n\n\n    // Register the tasks.\n    grunt.registerTask( 'default', [ 'develop' ] )\n\n    grunt.registerTask( 'develop', [ 'develop-once', 'watch:develop' ] )\n    grunt.registerTask( 'develop-once', [ 'less:themes', 'autoprefixer:themes' ] )\n\n    grunt.registerTask( 'package', [ 'develop-once', 'uglify', 'cssmin' ] )\n\n    grunt.registerTask( 'test', [ 'jshint', 'qunit' ] )\n\n} //module.exports\n\n\n"
  },
  {
    "path": "LICENSE.md",
    "content": "Copyright 2014 Amsul, http://amsul.ca\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "README.md",
    "content": "# pickadate [![Build status: master](https://travis-ci.org/amsul/pickadate.js.svg?branch=master)](https://travis-ci.org/amsul/pickadate.js) [![jsDelivr Hits](https://data.jsdelivr.com/v1/package/npm/pickadate/badge?style=rounded)](https://www.jsdelivr.com/package/npm/pickadate)\n\nThe mobile-friendly, responsive, and lightweight jQuery date & time input picker.\n\n[![Join the community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/pickadate)\n\n\n#### To get started, check out the:\n\n[Homepage](http://amsul.ca/pickadate.js) - [Date picker](http://amsul.ca/pickadate.js/date) - [Time picker](http://amsul.ca/pickadate.js/time) - [API](http://amsul.ca/pickadate.js/api)\n\n\n#### To get it:\n\n[Download the latest stable build](https://github.com/amsul/pickadate.js/archive/master.zip)\n\n*or*\n\n`git clone git://github.com/amsul/pickadate.js.git`\n\n*or*\n\n`bower install pickadate`\n\n\n\n\n<br>\n\n## Library files\n\nThe `lib` folder includes the library files with a `compressed` folder containing the minified counter-parts. These files are minified using [Grunt](#building-with-grunt).\n\n### Pickers\n\nThere are three picker files:\n\n* `picker.js` The core file (required before any other picker)\n* `picker.date.js` The date picker\n* `picker.time.js` The time picker\n\n_To support old browsers, namely IE8, **also include** the `legacy.js` file._\n\n\n### Themes\n\nAll themes are [generated using LESS](#less-styling) and compiled from the `lib/themes-source` folder into the `lib/themes` folder.\n\nThere are two themes:\n\n* `default.css` The default modal-style theme\n* `classic.css` The classic dropdown-style theme\n\nBased on the theme, pick the relevant picker styles:\n\n* `default.date.css` and `default.time.css` when using the default theme\n* `classic.date.css` and `classic.time.css` when using the classic theme\n\n__**__ For languages with text flowing from right-to-left, also include the `rtl.css` stylesheet.\n\n\n### Translations\n\nThe translations live in the `lib/translations` folder. There are currently [43 language translations](https://github.com/amsul/pickadate.js/tree/master/lib/translations) included.\n\n\n\n\n<br>\n\n## Building with Grunt\n\n[Grunt](http://gruntjs.com/) `~0.4.5` is used to build the project files. To get started, clone the project and then run:\n\n- `npm install` to get the required node modules.\n- `grunt test --verbose` to confirm you have all the dependencies.\n\n\nType out `grunt --help` to see a list of all the tasks available. The generally used tasks are:\n\n- `grunt develop` compiles the LESS files and watches for any source changes.\n- `grunt package` compiles and then minifies the source files.\n- `grunt test` tests the entire package.\n\n\n\n\n<br>\n\n<a name=\"less-styling\"></a>\n## Styling with LESS\n\nThe picker themes are built using [LESS](http://lesscss.org/) with Grunt. To customize the CSS output, read the `_variables.less` file in the `lib/themes-source` folder. You can specify:\n\n- colors for the theme,\n- sizes for the picker,\n- media-query breakpoints,\n- and a whole bunch of other stuff.\n\n\nMake sure to run the `grunt develop` task before making any changes to compile it into CSS.\n\n\n\n\n\n<br>\n\n## Bugs\n\nBefore opening a new issue, please search the existing [Issues](https://github.com/amsul/pickadate.js/issues) for anything similar – there might already be an answer to your problem. You might also wanna check out the [Contributing](https://github.com/amsul/pickadate.js/blob/master/CONTRIBUTING.md) guide.\n\n\n\n\n\n<br>\n\n## Contributing\n\nBefore contributing any code to the project, please take a look at the [Contributing](https://github.com/amsul/pickadate.js/blob/master/CONTRIBUTING.md) guide.\n\nIf there’s anything you’d like to discuss, we like to hang out on Spectrum.\n\n\n[![Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/pickadate)\n\n\n\n\n\n<br>\n\n## Support\n\nIf you find this library useful and would like to see further development, consider [supporting it](http://selz.co/1g80kCZ).\n\n\n\n\n\n<br><br>\n\n---\n\n© 2014 [Amsul](http://twitter.com/amsul_)\n\nLicensed under [MIT](http://amsul.ca/MIT)\n"
  },
  {
    "path": "bower.json",
    "content": "{\n  \"name\": \"pickadate\",\n  \"description\": \"The mobile-friendly, responsive, and lightweight jQuery date & time input picker.\",\n  \"main\": [\n    \"lib/picker.js\",\n    \"lib/picker.date.js\",\n    \"lib/picker.time.js\",\n    \"lib/themes/default.css\",\n    \"lib/themes/default.date.css\",\n    \"lib/themes/default.time.css\"\n  ],\n  \"license\": \"MIT\",\n  \"ignore\": [\n    \"*.md\",\n    \"*.htm\",\n    \"_docs\",\n    \"demo\"\n  ],\n  \"keywords\": [\n    \"date\",\n    \"time\",\n    \"picker\",\n    \"input\",\n    \"responsive\"\n  ],\n  \"authors\": {\n    \"name\": \"Amsul\",\n    \"email\": \"reach@amsul.ca\",\n    \"homepage\": \"http://amsul.ca\"\n  },\n  \"homepage\": \"http://amsul.ca/pickadate.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/amsul/pickadate.js.git\"\n  },\n  \"dependencies\": {\n    \"jquery\": \">=1.7\"\n  },\n  \"devDependencies\": {\n    \"grunt\": \"^0.4.5\",\n    \"grunt-autoprefixer\": \"^1.0.1\",\n    \"grunt-contrib-copy\": \"^0.5.0\",\n    \"grunt-contrib-cssmin\": \"^0.9.0\",\n    \"grunt-contrib-jshint\": \"^0.10.0\",\n    \"grunt-contrib-less\": \"^0.11.4\",\n    \"grunt-contrib-qunit\": \"^0.4.0\",\n    \"grunt-contrib-uglify\": \"^0.4.1\",\n    \"grunt-contrib-watch\": \"^0.6.1\",\n    \"phantomjs\": \"^1.9.7-5\",\n    \"zlib-browserify\": \"0.0.3\"\n  }\n}"
  },
  {
    "path": "lib/compressed/legacy.js",
    "content": "/*!\n * Legacy browser support\n */\n[].map||(Array.prototype.map=function(a,b){for(var c=this,d=c.length,e=new Array(d),f=0;f<d;f++)f in c&&(e[f]=a.call(b,c[f],f,c));return e}),[].filter||(Array.prototype.filter=function(a){if(null==this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(\"function\"!=typeof a)throw new TypeError;for(var d=[],e=arguments[1],f=0;f<c;f++)if(f in b){var g=b[f];a.call(e,g,f,b)&&d.push(g)}return d}),[].indexOf||(Array.prototype.indexOf=function(a){if(null==this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=0;if(arguments.length>1&&(d=Number(arguments[1]),d!=d?d=0:0!==d&&d!=1/0&&d!=-1/0&&(d=(d>0||-1)*Math.floor(Math.abs(d)))),d>=c)return-1;for(var e=d>=0?d:Math.max(c-Math.abs(d),0);e<c;e++)if(e in b&&b[e]===a)return e;return-1});/*!\n * Cross-Browser Split 1.1.1\n * Copyright 2007-2012 Steven Levithan <stevenlevithan.com>\n * Available under the MIT License\n * http://blog.stevenlevithan.com/archives/cross-browser-split\n */\nvar nativeSplit=String.prototype.split,compliantExecNpcg=void 0===/()??/.exec(\"\")[1];String.prototype.split=function(a,b){var c=this;if(\"[object RegExp]\"!==Object.prototype.toString.call(a))return nativeSplit.call(c,a,b);var d,e,f,g,h=[],i=(a.ignoreCase?\"i\":\"\")+(a.multiline?\"m\":\"\")+(a.extended?\"x\":\"\")+(a.sticky?\"y\":\"\"),j=0;for(a=new RegExp(a.source,i+\"g\"),c+=\"\",compliantExecNpcg||(d=new RegExp(\"^\"+a.source+\"$(?!\\\\s)\",i)),b=void 0===b?-1>>>0:b>>>0;(e=a.exec(c))&&!((f=e.index+e[0].length)>j&&(h.push(c.slice(j,e.index)),!compliantExecNpcg&&e.length>1&&e[0].replace(d,function(){for(var a=1;a<arguments.length-2;a++)void 0===arguments[a]&&(e[a]=void 0)}),e.length>1&&e.index<c.length&&Array.prototype.push.apply(h,e.slice(1)),g=e[0].length,j=f,h.length>=b));)a.lastIndex===e.index&&a.lastIndex++;return j===c.length?!g&&a.test(\"\")||h.push(\"\"):h.push(c.slice(j)),h.length>b?h.slice(0,b):h};"
  },
  {
    "path": "lib/compressed/picker.date.js",
    "content": "/*!\n * Date picker for pickadate.js v3.6.4\n * http://amsul.github.io/pickadate.js/date.htm\n */\n!function(a){\"function\"==typeof define&&define.amd?define([\"./picker\",\"jquery\"],a):\"object\"==typeof exports?module.exports=a(require(\"./picker.js\"),require(\"jquery\")):a(Picker,jQuery)}(function(a,b){function c(a,b){var c=this,d=a.$node[0],e=d.value,f=a.$node.data(\"value\"),g=f||e,h=f?b.formatSubmit:b.format,i=function(){return d.currentStyle?\"rtl\"==d.currentStyle.direction:\"rtl\"==getComputedStyle(a.$root[0]).direction};c.settings=b,c.$node=a.$node,c.queue={min:\"measure create\",max:\"measure create\",now:\"now create\",select:\"parse create validate\",highlight:\"parse navigate create validate\",view:\"parse create validate viewset\",disable:\"deactivate\",enable:\"activate\"},c.item={},c.item.clear=null,c.item.disable=(b.disable||[]).slice(0),c.item.enable=-function(a){return!0===a[0]?a.shift():-1}(c.item.disable),c.set(\"min\",b.min).set(\"max\",b.max).set(\"now\"),g?c.set(\"select\",g,{format:h,defaultValue:!0}):c.set(\"select\",null).set(\"highlight\",c.item.now),c.key={40:7,38:-7,39:function(){return i()?-1:1},37:function(){return i()?1:-1},go:function(a){var b=c.item.highlight,d=new Date(b.year,b.month,b.date+a);c.set(\"highlight\",d,{interval:a}),this.render()}},a.on(\"render\",function(){a.$root.find(\".\"+b.klass.selectMonth).on(\"change\",function(){var c=this.value;c&&(a.set(\"highlight\",[a.get(\"view\").year,c,a.get(\"highlight\").date]),a.$root.find(\".\"+b.klass.selectMonth).trigger(\"focus\"))}),a.$root.find(\".\"+b.klass.selectYear).on(\"change\",function(){var c=this.value;c&&(a.set(\"highlight\",[c,a.get(\"view\").month,a.get(\"highlight\").date]),a.$root.find(\".\"+b.klass.selectYear).trigger(\"focus\"))})},1).on(\"open\",function(){var d=\"\";c.disabled(c.get(\"now\"))&&(d=\":not(.\"+b.klass.buttonToday+\")\"),a.$root.find(\"button\"+d+\", select\").attr(\"disabled\",!1)},1).on(\"close\",function(){a.$root.find(\"button, select\").attr(\"disabled\",!0)},1)}var d=7,e=a._;c.prototype.set=function(a,b,c){var d=this,e=d.item;return null===b?(\"clear\"==a&&(a=\"select\"),e[a]=b,d):(e[\"enable\"==a?\"disable\":\"flip\"==a?\"enable\":a]=d.queue[a].split(\" \").map(function(e){return b=d[e](a,b,c)}).pop(),\"select\"==a?d.set(\"highlight\",e.select,c):\"highlight\"==a?d.set(\"view\",e.highlight,c):a.match(/^(flip|min|max|disable|enable)$/)&&(e.select&&d.disabled(e.select)&&d.set(\"select\",e.select,c),e.highlight&&d.disabled(e.highlight)&&d.set(\"highlight\",e.highlight,c)),d)},c.prototype.get=function(a){return this.item[a]},c.prototype.create=function(a,c,d){var f,g=this;return c=void 0===c?a:c,c==-1/0||c==1/0?f=c:b.isPlainObject(c)&&e.isInteger(c.pick)?c=c.obj:b.isArray(c)?(c=new Date(c[0],c[1],c[2]),c=e.isDate(c)?c:g.create().obj):c=e.isInteger(c)||e.isDate(c)?g.normalize(new Date(c),d):g.now(a,c,d),{year:f||c.getFullYear(),month:f||c.getMonth(),date:f||c.getDate(),day:f||c.getDay(),obj:f||c,pick:f||c.getTime()}},c.prototype.createRange=function(a,c){var d=this,f=function(a){return!0===a||b.isArray(a)||e.isDate(a)?d.create(a):a};return e.isInteger(a)||(a=f(a)),e.isInteger(c)||(c=f(c)),e.isInteger(a)&&b.isPlainObject(c)?a=[c.year,c.month,c.date+a]:e.isInteger(c)&&b.isPlainObject(a)&&(c=[a.year,a.month,a.date+c]),{from:f(a),to:f(c)}},c.prototype.withinRange=function(a,b){return a=this.createRange(a.from,a.to),b.pick>=a.from.pick&&b.pick<=a.to.pick},c.prototype.overlapRanges=function(a,b){var c=this;return a=c.createRange(a.from,a.to),b=c.createRange(b.from,b.to),c.withinRange(a,b.from)||c.withinRange(a,b.to)||c.withinRange(b,a.from)||c.withinRange(b,a.to)},c.prototype.now=function(a,b,c){return b=new Date,c&&c.rel&&b.setDate(b.getDate()+c.rel),this.normalize(b,c)},c.prototype.navigate=function(a,c,d){var e,f,g,h,i=b.isArray(c),j=b.isPlainObject(c),k=this.item.view;if(i||j){for(j?(f=c.year,g=c.month,h=c.date):(f=+c[0],g=+c[1],h=+c[2]),d&&d.nav&&k&&k.month!==g&&(f=k.year,g=k.month),e=new Date(f,g+(d&&d.nav?d.nav:0),1),f=e.getFullYear(),g=e.getMonth();new Date(f,g,h).getMonth()!==g;)h-=1;c=[f,g,h]}return c},c.prototype.normalize=function(a){return a.setHours(0,0,0,0),a},c.prototype.measure=function(a,b){var c=this;return e.isInteger(b)?b=c.now(a,b,{rel:b}):b?\"string\"==typeof b&&(b=c.parse(a,b)):b=\"min\"==a?-1/0:1/0,b},c.prototype.viewset=function(a,b){return this.create([b.year,b.month,1])},c.prototype.validate=function(a,c,d){var f,g,h,i,j=this,k=c,l=d&&d.interval?d.interval:1,m=-1===j.item.enable,n=j.item.min,o=j.item.max,p=m&&j.item.disable.filter(function(a){if(b.isArray(a)){var d=j.create(a).pick;d<c.pick?f=!0:d>c.pick&&(g=!0)}return e.isInteger(a)}).length;if((!d||!d.nav&&!d.defaultValue)&&(!m&&j.disabled(c)||m&&j.disabled(c)&&(p||f||g)||!m&&(c.pick<=n.pick||c.pick>=o.pick)))for(m&&!p&&(!g&&l>0||!f&&l<0)&&(l*=-1);j.disabled(c)&&(Math.abs(l)>1&&(c.month<k.month||c.month>k.month)&&(c=k,l=l>0?1:-1),c.pick<=n.pick?(h=!0,l=1,c=j.create([n.year,n.month,n.date+(c.pick===n.pick?0:-1)])):c.pick>=o.pick&&(i=!0,l=-1,c=j.create([o.year,o.month,o.date+(c.pick===o.pick?0:1)])),!h||!i);)c=j.create([c.year,c.month,c.date+l]);return c},c.prototype.disabled=function(a){var c=this,d=c.item.disable.filter(function(d){return e.isInteger(d)?a.day===(c.settings.firstDay?d:d-1)%7:b.isArray(d)||e.isDate(d)?a.pick===c.create(d).pick:b.isPlainObject(d)?c.withinRange(d,a):void 0});return d=d.length&&!d.filter(function(a){return b.isArray(a)&&\"inverted\"==a[3]||b.isPlainObject(a)&&a.inverted}).length,-1===c.item.enable?!d:d||a.pick<c.item.min.pick||a.pick>c.item.max.pick},c.prototype.parse=function(a,b,c){var d=this,f={};return b&&\"string\"==typeof b?(c&&c.format||(c=c||{},c.format=d.settings.format),d.formats.toArray(c.format).map(function(a){var c=d.formats[a],g=c?e.trigger(c,d,[b,f]):a.replace(/^!/,\"\").length;c&&(f[a]=b.substr(0,g)),b=b.substr(g)}),[f.yyyy||f.yy,+(f.mm||f.m)-1,f.dd||f.d]):b},c.prototype.formats=function(){function a(a,b,c){var d=a.match(/[^\\x00-\\x7F]+|\\w+/)[0];return c.mm||c.m||(c.m=b.indexOf(d)+1),d.length}function b(a){return a.match(/\\w+/)[0].length}return{d:function(a,b){return a?e.digits(a):b.date},dd:function(a,b){return a?2:e.lead(b.date)},ddd:function(a,c){return a?b(a):this.settings.weekdaysShort[c.day]},dddd:function(a,c){return a?b(a):this.settings.weekdaysFull[c.day]},m:function(a,b){return a?e.digits(a):b.month+1},mm:function(a,b){return a?2:e.lead(b.month+1)},mmm:function(b,c){var d=this.settings.monthsShort;return b?a(b,d,c):d[c.month]},mmmm:function(b,c){var d=this.settings.monthsFull;return b?a(b,d,c):d[c.month]},yy:function(a,b){return a?2:(\"\"+b.year).slice(2)},yyyy:function(a,b){return a?4:b.year},toArray:function(a){return a.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g)},toString:function(a,b){var c=this;return c.formats.toArray(a).map(function(a){return e.trigger(c.formats[a],c,[0,b])||a.replace(/^!/,\"\")}).join(\"\")}}}(),c.prototype.isDateExact=function(a,c){var d=this;return e.isInteger(a)&&e.isInteger(c)||\"boolean\"==typeof a&&\"boolean\"==typeof c?a===c:(e.isDate(a)||b.isArray(a))&&(e.isDate(c)||b.isArray(c))?d.create(a).pick===d.create(c).pick:!(!b.isPlainObject(a)||!b.isPlainObject(c))&&d.isDateExact(a.from,c.from)&&d.isDateExact(a.to,c.to)},c.prototype.isDateOverlap=function(a,c){var d=this,f=d.settings.firstDay?1:0;return e.isInteger(a)&&(e.isDate(c)||b.isArray(c))?(a=a%7+f)===d.create(c).day+1:e.isInteger(c)&&(e.isDate(a)||b.isArray(a))?(c=c%7+f)===d.create(a).day+1:!(!b.isPlainObject(a)||!b.isPlainObject(c))&&d.overlapRanges(a,c)},c.prototype.flipEnable=function(a){var b=this.item;b.enable=a||(-1==b.enable?1:-1)},c.prototype.deactivate=function(a,c){var d=this,f=d.item.disable.slice(0);return\"flip\"==c?d.flipEnable():!1===c?(d.flipEnable(1),f=[]):!0===c?(d.flipEnable(-1),f=[]):c.map(function(a){for(var c,g=0;g<f.length;g+=1)if(d.isDateExact(a,f[g])){c=!0;break}c||(e.isInteger(a)||e.isDate(a)||b.isArray(a)||b.isPlainObject(a)&&a.from&&a.to)&&f.push(a)}),f},c.prototype.activate=function(a,c){var d=this,f=d.item.disable,g=f.length;return\"flip\"==c?d.flipEnable():!0===c?(d.flipEnable(1),f=[]):!1===c?(d.flipEnable(-1),f=[]):c.map(function(a){var c,h,i,j;for(i=0;i<g;i+=1){if(h=f[i],d.isDateExact(h,a)){c=f[i]=null,j=!0;break}if(d.isDateOverlap(h,a)){b.isPlainObject(a)?(a.inverted=!0,c=a):b.isArray(a)?(c=a,c[3]||c.push(\"inverted\")):e.isDate(a)&&(c=[a.getFullYear(),a.getMonth(),a.getDate(),\"inverted\"]);break}}if(c)for(i=0;i<g;i+=1)if(d.isDateExact(f[i],a)){f[i]=null;break}if(j)for(i=0;i<g;i+=1)if(d.isDateOverlap(f[i],a)){f[i]=null;break}c&&f.push(c)}),f.filter(function(a){return null!=a})},c.prototype.nodes=function(a){var b=this,c=b.settings,f=b.item,g=f.now,h=f.select,i=f.highlight,j=f.view,k=f.disable,l=f.min,m=f.max,n=function(a,b){return c.firstDay&&(a.push(a.shift()),b.push(b.shift())),e.node(\"thead\",e.node(\"tr\",e.group({min:0,max:d-1,i:1,node:\"th\",item:function(d){return[a[d],c.klass.weekdays,'scope=col title=\"'+b[d]+'\"']}})))}((c.showWeekdaysFull?c.weekdaysFull:c.weekdaysShort).slice(0),c.weekdaysFull.slice(0)),o=function(a){return e.node(\"div\",\" \",c.klass[\"nav\"+(a?\"Next\":\"Prev\")]+(a&&j.year>=m.year&&j.month>=m.month||!a&&j.year<=l.year&&j.month<=l.month?\" \"+c.klass.navDisabled:\"\"),\"data-nav=\"+(a||-1)+\" \"+e.ariaAttr({role:\"button\",controls:b.$node[0].id+\"_table\"})+' title=\"'+(a?c.labelMonthNext:c.labelMonthPrev)+'\"')},p=function(){var d=c.showMonthsShort?c.monthsShort:c.monthsFull;return c.selectMonths?e.node(\"select\",e.group({min:0,max:11,i:1,node:\"option\",item:function(a){return[d[a],0,\"value=\"+a+(j.month==a?\" selected\":\"\")+(j.year==l.year&&a<l.month||j.year==m.year&&a>m.month?\" disabled\":\"\")]}}),c.klass.selectMonth,(a?\"\":\"disabled\")+\" \"+e.ariaAttr({controls:b.$node[0].id+\"_table\"})+' title=\"'+c.labelMonthSelect+'\"'):e.node(\"div\",d[j.month],c.klass.month)},q=function(){var d=j.year,f=!0===c.selectYears?5:~~(c.selectYears/2);if(f){var g=l.year,h=m.year,i=d-f,k=d+f;if(g>i&&(k+=g-i,i=g),h<k){var n=i-g,o=k-h;i-=n>o?o:n,k=h}return e.node(\"select\",e.group({min:i,max:k,i:1,node:\"option\",item:function(a){return[a,0,\"value=\"+a+(d==a?\" selected\":\"\")]}}),c.klass.selectYear,(a?\"\":\"disabled\")+\" \"+e.ariaAttr({controls:b.$node[0].id+\"_table\"})+' title=\"'+c.labelYearSelect+'\"')}return e.node(\"div\",d,c.klass.year)};return e.node(\"div\",(c.selectYears?q()+p():p()+q())+o()+o(1),c.klass.header)+e.node(\"table\",n+e.node(\"tbody\",e.group({min:0,max:5,i:1,node:\"tr\",item:function(a){var f=c.firstDay&&0===b.create([j.year,j.month,1]).day?-7:0;return[e.group({min:d*a-j.day+f+1,max:function(){return this.min+d-1},i:1,node:\"td\",item:function(a){a=b.create([j.year,j.month,a+(c.firstDay?1:0)]);var d=h&&h.pick==a.pick,f=i&&i.pick==a.pick,n=k&&b.disabled(a)||a.pick<l.pick||a.pick>m.pick,o=e.trigger(b.formats.toString,b,[c.format,a]);return[e.node(\"div\",a.date,function(b){return b.push(j.month==a.month?c.klass.infocus:c.klass.outfocus),g.pick==a.pick&&b.push(c.klass.now),d&&b.push(c.klass.selected),f&&b.push(c.klass.highlighted),n&&b.push(c.klass.disabled),b.join(\" \")}([c.klass.day]),\"data-pick=\"+a.pick+\" \"+e.ariaAttr({role:\"gridcell\",label:o,selected:!(!d||b.$node.val()!==o)||null,activedescendant:!!f||null,disabled:!!n||null})),\"\",e.ariaAttr({role:\"presentation\"})]}})]}})),c.klass.table,'id=\"'+b.$node[0].id+'_table\" '+e.ariaAttr({role:\"grid\",controls:b.$node[0].id,readonly:!0}))+e.node(\"div\",e.node(\"button\",c.today,c.klass.buttonToday,\"type=button data-pick=\"+g.pick+(a&&!b.disabled(g)?\"\":\" disabled\")+\" \"+e.ariaAttr({controls:b.$node[0].id}))+e.node(\"button\",c.clear,c.klass.buttonClear,\"type=button data-clear=1\"+(a?\"\":\" disabled\")+\" \"+e.ariaAttr({controls:b.$node[0].id}))+e.node(\"button\",c.close,c.klass.buttonClose,\"type=button data-close=true \"+(a?\"\":\" disabled\")+\" \"+e.ariaAttr({controls:b.$node[0].id})),c.klass.footer)},c.defaults=function(a){return{labelMonthNext:\"Next month\",labelMonthPrev:\"Previous month\",labelMonthSelect:\"Select a month\",labelYearSelect:\"Select a year\",monthsFull:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthsShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],weekdaysFull:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],weekdaysShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],today:\"Today\",clear:\"Clear\",close:\"Close\",closeOnSelect:!0,closeOnClear:!0,updateInput:!0,format:\"d mmmm, yyyy\",klass:{table:a+\"table\",header:a+\"header\",navPrev:a+\"nav--prev\",navNext:a+\"nav--next\",navDisabled:a+\"nav--disabled\",month:a+\"month\",year:a+\"year\",selectMonth:a+\"select--month\",selectYear:a+\"select--year\",weekdays:a+\"weekday\",day:a+\"day\",disabled:a+\"day--disabled\",selected:a+\"day--selected\",highlighted:a+\"day--highlighted\",now:a+\"day--today\",infocus:a+\"day--infocus\",outfocus:a+\"day--outfocus\",footer:a+\"footer\",buttonClear:a+\"button--clear\",buttonToday:a+\"button--today\",buttonClose:a+\"button--close\"}}}(a.klasses().picker+\"__\"),a.extend(\"pickadate\",c)});"
  },
  {
    "path": "lib/compressed/picker.js",
    "content": "/*!\n * pickadate.js v3.6.4, 2019/05/25\n * By Amsul, http://amsul.ca\n * Hosted on http://amsul.github.io/pickadate.js\n * Licensed under MIT\n */\n!function(a){\"function\"==typeof define&&define.amd?define(\"picker\",[\"jquery\"],a):\"object\"==typeof exports?module.exports=a(require(\"jquery\")):\"object\"==typeof window?window.Picker=a(jQuery):this.Picker=a(jQuery)}(function(a){function b(g,h,j,l){function n(){return b._.node(\"div\",b._.node(\"div\",b._.node(\"div\",b._.node(\"div\",B.component.nodes(w.open),y.box),y.wrap),y.frame),y.holder,'tabindex=\"-1\"')}function o(){z.data(h,B).addClass(y.input).val(z.data(\"value\")?B.get(\"select\",x.format):g.value).on(\"focus.\"+w.id+\" click.\"+w.id,function(a){a.preventDefault(),B.open()}).on(\"mousedown\",function(){w.handlingOpen=!0;var b=function(){setTimeout(function(){a(document).off(\"mouseup\",b),w.handlingOpen=!1},0)};a(document).on(\"mouseup\",b)}),x.editable||z.on(\"keydown.\"+w.id,u),f(g,{haspopup:!0,expanded:!1,readonly:!1,owns:g.id+\"_root\"})}function p(){f(B.$root[0],\"hidden\",!0)}function q(){B.$holder.on({keydown:u,\"focus.toOpen\":t,blur:function(){z.removeClass(y.target)},focusin:function(a){B.$root.removeClass(y.focused),a.stopPropagation()},\"mousedown click\":function(b){var c=e(b,g);c!=B.$holder[0]&&(b.stopPropagation(),\"mousedown\"!=b.type||a(c).is(\"input, select, textarea, button, option\")||(b.preventDefault(),B.$holder.eq(0).focus()))}}).on(\"click\",\"[data-pick], [data-nav], [data-clear], [data-close]\",function(){var b=a(this),c=b.data(),d=b.hasClass(y.navDisabled)||b.hasClass(y.disabled),e=i();e=e&&(e.type||e.href?e:null),(d||e&&!a.contains(B.$root[0],e))&&B.$holder.eq(0).focus(),!d&&c.nav?B.set(\"highlight\",B.component.item.highlight,{nav:c.nav}):!d&&\"pick\"in c?(B.set(\"select\",c.pick),x.closeOnSelect&&B.close(!0)):c.clear?(B.clear(),x.closeOnClear&&B.close(!0)):c.close&&B.close(!0)})}function r(){var b;!0===x.hiddenName?(b=g.name,g.name=\"\"):(b=[\"string\"==typeof x.hiddenPrefix?x.hiddenPrefix:\"\",\"string\"==typeof x.hiddenSuffix?x.hiddenSuffix:\"_submit\"],b=b[0]+g.name+b[1]),B._hidden=a('<input type=hidden name=\"'+b+'\"'+(z.data(\"value\")||g.value?' value=\"'+B.get(\"select\",x.formatSubmit)+'\"':\"\")+\">\")[0],z.on(\"change.\"+w.id,function(){B._hidden.value=g.value?B.get(\"select\",x.formatSubmit):\"\"})}function s(){v&&m?B.$holder.find(\".\"+y.frame).one(\"transitionend\",function(){B.$holder.eq(0).focus()}):setTimeout(function(){B.$holder.eq(0).focus()},0)}function t(a){a.stopPropagation(),z.addClass(y.target),B.$root.addClass(y.focused),B.open()}function u(a){var b=a.keyCode,c=/^(8|46)$/.test(b);if(27==b)return B.close(!0),!1;(32==b||c||!w.open&&B.component.key[b])&&(a.preventDefault(),a.stopPropagation(),c?B.clear().close():B.open())}if(!g)return b;var v=!1,w={id:g.id||\"P\"+Math.abs(~~(Math.random()*new Date)),handlingOpen:!1},x=j?a.extend(!0,{},j.defaults,l):l||{},y=a.extend({},b.klasses(),x.klass),z=a(g),A=function(){return this.start()},B=A.prototype={constructor:A,$node:z,start:function(){return w&&w.start?B:(w.methods={},w.start=!0,w.open=!1,w.type=g.type,g.autofocus=g==i(),g.readOnly=!x.editable,g.id=g.id||w.id,\"text\"!=g.type&&(g.type=\"text\"),B.component=new j(B,x),B.$root=a('<div class=\"'+y.picker+'\" id=\"'+g.id+'_root\" />'),p(),B.$holder=a(n()).appendTo(B.$root),q(),x.formatSubmit&&r(),o(),x.containerHidden?a(x.containerHidden).append(B._hidden):z.after(B._hidden),x.container?a(x.container).append(B.$root):z.after(B.$root),B.on({start:B.component.onStart,render:B.component.onRender,stop:B.component.onStop,open:B.component.onOpen,close:B.component.onClose,set:B.component.onSet}).on({start:x.onStart,render:x.onRender,stop:x.onStop,open:x.onOpen,close:x.onClose,set:x.onSet}),v=c(B.$holder[0]),g.autofocus&&B.open(),B.trigger(\"start\").trigger(\"render\"))},render:function(b){return b?(B.$holder=a(n()),q(),B.$root.html(B.$holder)):B.$root.find(\".\"+y.box).html(B.component.nodes(w.open)),B.trigger(\"render\")},stop:function(){return w.start?(B.close(),B._hidden&&B._hidden.parentNode.removeChild(B._hidden),B.$root.remove(),z.removeClass(y.input).removeData(h),setTimeout(function(){z.off(\".\"+w.id)},0),g.type=w.type,g.readOnly=!1,B.trigger(\"stop\"),w.methods={},w.start=!1,B):B},open:function(c){return w.open?B:(z.addClass(y.active),f(g,\"expanded\",!0),setTimeout(function(){B.$root.addClass(y.opened),f(B.$root[0],\"hidden\",!1)},0),!1!==c&&(w.open=!0,v&&a(\"body\").css(\"overflow\",\"hidden\").css(\"padding-right\",\"+=\"+d()),s(),k.on(\"click.\"+w.id+\" focusin.\"+w.id,function(a){if(!w.handlingOpen){var b=e(a,g);a.isSimulated||b==g||b==document||3==a.which||B.close(b===B.$holder[0])}}).on(\"keydown.\"+w.id,function(c){var d=c.keyCode,f=B.component.key[d],h=e(c,g);27==d?B.close(!0):h!=B.$holder[0]||!f&&13!=d?a.contains(B.$root[0],h)&&13==d&&(c.preventDefault(),h.click()):(c.preventDefault(),f?b._.trigger(B.component.key.go,B,[b._.trigger(f)]):B.$root.find(\".\"+y.highlighted).hasClass(y.disabled)||(B.set(\"select\",B.component.item.highlight),x.closeOnSelect&&B.close(!0)))})),B.trigger(\"open\"))},close:function(b){return b&&(x.editable?g.focus():(B.$holder.off(\"focus.toOpen\").focus(),setTimeout(function(){B.$holder.on(\"focus.toOpen\",t)},0))),z.removeClass(y.active),f(g,\"expanded\",!1),setTimeout(function(){B.$root.removeClass(y.opened+\" \"+y.focused),f(B.$root[0],\"hidden\",!0)},0),w.open?(w.open=!1,v&&a(\"body\").css(\"overflow\",\"\").css(\"padding-right\",\"-=\"+d()),k.off(\".\"+w.id),B.trigger(\"close\")):B},clear:function(a){return B.set(\"clear\",null,a)},set:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(d=g&&a.isPlainObject(c)?c:d||{},b){g||(h[b]=c);for(e in h)f=h[e],e in B.component.item&&(void 0===f&&(f=null),B.component.set(e,f,d)),\"select\"!=e&&\"clear\"!=e||!x.updateInput||z.val(\"clear\"==e?\"\":B.get(e,x.format)).trigger(\"change\");B.render()}return d.muted?B:B.trigger(\"set\",h)},get:function(a,c){if(a=a||\"value\",null!=w[a])return w[a];if(\"valueSubmit\"==a){if(B._hidden)return B._hidden.value;a=\"value\"}if(\"value\"==a)return g.value;if(a in B.component.item){if(\"string\"==typeof c){var d=B.component.get(a);return d?b._.trigger(B.component.formats.toString,B.component,[c,d]):\"\"}return B.component.get(a)}},on:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(b){g||(h[b]=c);for(e in h)f=h[e],d&&(e=\"_\"+e),w.methods[e]=w.methods[e]||[],w.methods[e].push(f)}return B},off:function(){var a,b,c=arguments;for(a=0,namesCount=c.length;a<namesCount;a+=1)(b=c[a])in w.methods&&delete w.methods[b];return B},trigger:function(a,c){var d=function(a){var d=w.methods[a];d&&d.map(function(a){b._.trigger(a,B,[c])})};return d(\"_\"+a),d(a),B}};return new A}function c(a){var b,c=\"position\";return a.currentStyle?b=a.currentStyle[c]:window.getComputedStyle&&(b=getComputedStyle(a)[c]),\"fixed\"==b}function d(){if(l.height()<=j.height())return 0;var b=a('<div style=\"visibility:hidden;width:100px\" />').appendTo(\"body\"),c=b[0].offsetWidth;b.css(\"overflow\",\"scroll\");var d=a('<div style=\"width:100%\" />').appendTo(b),e=d[0].offsetWidth;return b.remove(),c-e}function e(a,b){var c=[];return a.path&&(c=a.path),a.originalEvent&&a.originalEvent.path&&(c=a.originalEvent.path),c&&c.length>0?b&&c.indexOf(b)>=0?b:c[0]:a.target}function f(b,c,d){if(a.isPlainObject(c))for(var e in c)g(b,e,c[e]);else g(b,c,d)}function g(a,b,c){a.setAttribute((\"role\"==b?\"\":\"aria-\")+b,c)}function h(b,c){a.isPlainObject(b)||(b={attribute:c}),c=\"\";for(var d in b){var e=(\"role\"==d?\"\":\"aria-\")+d;c+=null==b[d]?\"\":e+'=\"'+b[d]+'\"'}return c}function i(){try{return document.activeElement}catch(a){}}var j=a(window),k=a(document),l=a(document.documentElement),m=null!=document.documentElement.style.transition;return b.klasses=function(a){return a=a||\"picker\",{picker:a,opened:a+\"--opened\",focused:a+\"--focused\",input:a+\"__input\",active:a+\"__input--active\",target:a+\"__input--target\",holder:a+\"__holder\",frame:a+\"__frame\",wrap:a+\"__wrap\",box:a+\"__box\"}},b._={group:function(a){for(var c,d=\"\",e=b._.trigger(a.min,a);e<=b._.trigger(a.max,a,[e]);e+=a.i)c=b._.trigger(a.item,a,[e]),d+=b._.node(a.node,c[0],c[1],c[2]);return d},node:function(b,c,d,e){return c?(c=a.isArray(c)?c.join(\"\"):c,d=d?' class=\"'+d+'\"':\"\",e=e?\" \"+e:\"\",\"<\"+b+d+e+\">\"+c+\"</\"+b+\">\"):\"\"},lead:function(a){return(a<10?\"0\":\"\")+a},trigger:function(a,b,c){return\"function\"==typeof a?a.apply(b,c||[]):a},digits:function(a){return/\\d/.test(a[1])?2:1},isDate:function(a){return{}.toString.call(a).indexOf(\"Date\")>-1&&this.isInteger(a.getDate())},isInteger:function(a){return{}.toString.call(a).indexOf(\"Number\")>-1&&a%1==0},ariaAttr:h},b.extend=function(c,d){a.fn[c]=function(e,f){var g=this.data(c);return\"picker\"==e?g:g&&\"string\"==typeof e?b._.trigger(g[e],g,[f]):this.each(function(){a(this).data(c)||new b(this,c,d,e)})},a.fn[c].defaults=d.defaults},b});"
  },
  {
    "path": "lib/compressed/picker.time.js",
    "content": "/*!\n * Time picker for pickadate.js v3.6.4\n * http://amsul.github.io/pickadate.js/time.htm\n */\n!function(a){\"function\"==typeof define&&define.amd?define([\"./picker\",\"jquery\"],a):\"object\"==typeof exports?module.exports=a(require(\"./picker.js\"),require(\"jquery\")):a(Picker,jQuery)}(function(a,b){function c(a,b){var c=this,d=a.$node[0].value,e=a.$node.data(\"value\"),f=e||d,g=e?b.formatSubmit:b.format;c.settings=b,c.$node=a.$node,c.queue={interval:\"i\",min:\"measure create\",max:\"measure create\",now:\"now create\",select:\"parse create validate\",highlight:\"parse create validate\",view:\"parse create validate\",disable:\"deactivate\",enable:\"activate\"},c.item={},c.item.clear=null,c.item.interval=b.interval||30,c.item.disable=(b.disable||[]).slice(0),c.item.enable=-function(a){return!0===a[0]?a.shift():-1}(c.item.disable),c.set(\"min\",b.min).set(\"max\",b.max).set(\"now\"),f?c.set(\"select\",f,{format:g}):c.set(\"select\",null).set(\"highlight\",c.item.now),c.key={40:1,38:-1,39:1,37:-1,go:function(a){c.set(\"highlight\",c.item.highlight.pick+a*c.item.interval,{interval:a*c.item.interval}),this.render()}},a.on(\"render\",function(){var c=a.$root.children(),d=c.find(\".\"+b.klass.viewset),e=function(a){return[\"webkit\",\"moz\",\"ms\",\"o\",\"\"].map(function(b){return(b?\"-\"+b+\"-\":\"\")+a})},f=function(a,b){e(\"transform\").map(function(c){a.css(c,b)}),e(\"transition\").map(function(c){a.css(c,b)})};d.length&&(f(c,\"none\"),c[0].scrollTop=~~d.position().top-2*d[0].clientHeight,f(c,\"\"))},1).on(\"open\",function(){a.$root.find(\"button\").attr(\"disabled\",!1)},1).on(\"close\",function(){a.$root.find(\"button\").attr(\"disabled\",!0)},1)}var d=24,e=60,f=12,g=d*e,h=a._;c.prototype.set=function(a,b,c){var d=this,e=d.item;return null===b?(\"clear\"==a&&(a=\"select\"),e[a]=b,d):(e[\"enable\"==a?\"disable\":\"flip\"==a?\"enable\":a]=d.queue[a].split(\" \").map(function(e){return b=d[e](a,b,c)}).pop(),\"select\"==a?d.set(\"highlight\",e.select,c):\"highlight\"==a?d.set(\"view\",e.highlight,c):\"interval\"==a?d.set(\"min\",e.min,c).set(\"max\",e.max,c):a.match(/^(flip|min|max|disable|enable)$/)&&(e.select&&d.disabled(e.select)&&d.set(\"select\",b,c),e.highlight&&d.disabled(e.highlight)&&d.set(\"highlight\",b,c),\"min\"==a&&d.set(\"max\",e.max,c)),d)},c.prototype.get=function(a){return this.item[a]},c.prototype.create=function(a,c,f){var i=this;return c=void 0===c?a:c,h.isDate(c)&&(c=[c.getHours(),c.getMinutes()]),b.isPlainObject(c)&&h.isInteger(c.pick)?c=c.pick:b.isArray(c)?c=+c[0]*e+ +c[1]:h.isInteger(c)||(c=i.now(a,c,f)),\"max\"==a&&c<i.item.min.pick&&(c+=g),\"min\"!=a&&\"max\"!=a&&(c-i.item.min.pick)%i.item.interval!=0&&(c+=i.item.interval),c=i.normalize(a,c,f),{hour:~~(d+c/e)%d,mins:(e+c%e)%e,time:(g+c)%g,pick:c%g}},c.prototype.createRange=function(a,c){var d=this,e=function(a){return!0===a||b.isArray(a)||h.isDate(a)?d.create(a):a};return h.isInteger(a)||(a=e(a)),h.isInteger(c)||(c=e(c)),h.isInteger(a)&&b.isPlainObject(c)?a=[c.hour,c.mins+a*d.settings.interval]:h.isInteger(c)&&b.isPlainObject(a)&&(c=[a.hour,a.mins+c*d.settings.interval]),{from:e(a),to:e(c)}},c.prototype.withinRange=function(a,b){return a=this.createRange(a.from,a.to),b.pick>=a.from.pick&&b.pick<=a.to.pick},c.prototype.overlapRanges=function(a,b){var c=this;return a=c.createRange(a.from,a.to),b=c.createRange(b.from,b.to),c.withinRange(a,b.from)||c.withinRange(a,b.to)||c.withinRange(b,a.from)||c.withinRange(b,a.to)},c.prototype.now=function(a,b){var c,d=this.item.interval,f=new Date,g=f.getHours()*e+f.getMinutes(),i=h.isInteger(b);return g-=g%d,c=b<0&&d*b+g<=-d,g+=\"min\"==a&&c?0:d,i&&(g+=d*(c&&\"max\"!=a?b+1:b)),g},c.prototype.normalize=function(a,b){var c=this.item.interval,d=this.item.min&&this.item.min.pick||0;return b-=\"min\"==a?0:(b-d)%c},c.prototype.measure=function(a,c,f){var g=this;return c||(c=\"min\"==a?[0,0]:[d-1,e-1]),\"string\"==typeof c?c=g.parse(a,c):!0===c||h.isInteger(c)?c=g.now(a,c,f):b.isPlainObject(c)&&h.isInteger(c.pick)&&(c=g.normalize(a,c.pick,f)),c},c.prototype.validate=function(a,b,c){var d=this,e=c&&c.interval?c.interval:d.item.interval;return d.disabled(b)&&(b=d.shift(b,e)),b=d.scope(b),d.disabled(b)&&(b=d.shift(b,-1*e)),b},c.prototype.disabled=function(a){var c=this,d=c.item.disable.filter(function(d){return h.isInteger(d)?a.hour==d:b.isArray(d)||h.isDate(d)?a.pick==c.create(d).pick:b.isPlainObject(d)?c.withinRange(d,a):void 0});return d=d.length&&!d.filter(function(a){return b.isArray(a)&&\"inverted\"==a[2]||b.isPlainObject(a)&&a.inverted}).length,-1===c.item.enable?!d:d||a.pick<c.item.min.pick||a.pick>c.item.max.pick},c.prototype.shift=function(a,b){var c=this,d=c.item.min.pick,e=c.item.max.pick;for(b=b||c.item.interval;c.disabled(a)&&(a=c.create(a.pick+=b),!(a.pick<=d||a.pick>=e)););return a},c.prototype.scope=function(a){var b=this.item.min.pick,c=this.item.max.pick;return this.create(a.pick>c?c:a.pick<b?b:a)},c.prototype.parse=function(a,b,c){var d,f,g,i,j,k=this,l={};if(!b||\"string\"!=typeof b)return b;c&&c.format||(c=c||{},c.format=k.settings.format),k.formats.toArray(c.format).map(function(a){var c,d=k.formats[a],e=d?h.trigger(d,k,[b,l]):a.replace(/^!/,\"\").length;d&&(c=b.substr(0,e),l[a]=c.match(/^\\d+$/)?+c:c),b=b.substr(e)});for(i in l)j=l[i],h.isInteger(j)?i.match(/^(h|hh)$/i)?(d=j,\"h\"!=i&&\"hh\"!=i||(d%=12)):\"i\"==i&&(f=j):i.match(/^a$/i)&&j.match(/^p/i)&&(\"h\"in l||\"hh\"in l)&&(g=!0);return(g?d+12:d)*e+f},c.prototype.formats={h:function(a,b){return a?h.digits(a):b.hour%f||f},hh:function(a,b){return a?2:h.lead(b.hour%f||f)},H:function(a,b){return a?h.digits(a):\"\"+b.hour%24},HH:function(a,b){return a?h.digits(a):h.lead(b.hour%24)},i:function(a,b){return a?2:h.lead(b.mins)},a:function(a,b){return a?4:g/2>b.time%g?\"a.m.\":\"p.m.\"},A:function(a,b){return a?2:g/2>b.time%g?\"AM\":\"PM\"},toArray:function(a){return a.split(/(h{1,2}|H{1,2}|i|a|A|!.)/g)},toString:function(a,b){var c=this;return c.formats.toArray(a).map(function(a){return h.trigger(c.formats[a],c,[0,b])||a.replace(/^!/,\"\")}).join(\"\")}},c.prototype.isTimeExact=function(a,c){var d=this;return h.isInteger(a)&&h.isInteger(c)||\"boolean\"==typeof a&&\"boolean\"==typeof c?a===c:(h.isDate(a)||b.isArray(a))&&(h.isDate(c)||b.isArray(c))?d.create(a).pick===d.create(c).pick:!(!b.isPlainObject(a)||!b.isPlainObject(c))&&(d.isTimeExact(a.from,c.from)&&d.isTimeExact(a.to,c.to))},c.prototype.isTimeOverlap=function(a,c){var d=this;return h.isInteger(a)&&(h.isDate(c)||b.isArray(c))?a===d.create(c).hour:h.isInteger(c)&&(h.isDate(a)||b.isArray(a))?c===d.create(a).hour:!(!b.isPlainObject(a)||!b.isPlainObject(c))&&d.overlapRanges(a,c)},c.prototype.flipEnable=function(a){var b=this.item;b.enable=a||(-1==b.enable?1:-1)},c.prototype.deactivate=function(a,c){var d=this,e=d.item.disable.slice(0);return\"flip\"==c?d.flipEnable():!1===c?(d.flipEnable(1),e=[]):!0===c?(d.flipEnable(-1),e=[]):c.map(function(a){for(var c,f=0;f<e.length;f+=1)if(d.isTimeExact(a,e[f])){c=!0;break}c||(h.isInteger(a)||h.isDate(a)||b.isArray(a)||b.isPlainObject(a)&&a.from&&a.to)&&e.push(a)}),e},c.prototype.activate=function(a,c){var d=this,e=d.item.disable,f=e.length;return\"flip\"==c?d.flipEnable():!0===c?(d.flipEnable(1),e=[]):!1===c?(d.flipEnable(-1),e=[]):c.map(function(a){var c,g,i,j;for(i=0;i<f;i+=1){if(g=e[i],d.isTimeExact(g,a)){c=e[i]=null,j=!0;break}if(d.isTimeOverlap(g,a)){b.isPlainObject(a)?(a.inverted=!0,c=a):b.isArray(a)?(c=a,c[2]||c.push(\"inverted\")):h.isDate(a)&&(c=[a.getFullYear(),a.getMonth(),a.getDate(),\"inverted\"]);break}}if(c)for(i=0;i<f;i+=1)if(d.isTimeExact(e[i],a)){e[i]=null;break}if(j)for(i=0;i<f;i+=1)if(d.isTimeOverlap(e[i],a)){e[i]=null;break}c&&e.push(c)}),e.filter(function(a){return null!=a})},c.prototype.i=function(a,b){return h.isInteger(b)&&b>0?b:this.item.interval},c.prototype.nodes=function(a){var b=this,c=b.settings,d=b.item.select,e=b.item.highlight,f=b.item.view,g=b.item.disable;return h.node(\"ul\",h.group({min:b.item.min.pick,max:b.item.max.pick,i:b.item.interval,node:\"li\",item:function(a){a=b.create(a);var i=a.pick,j=d&&d.pick==i,k=e&&e.pick==i,l=g&&b.disabled(a),m=h.trigger(b.formats.toString,b,[c.format,a]);return[h.trigger(b.formats.toString,b,[h.trigger(c.formatLabel,b,[a])||c.format,a]),function(a){return j&&a.push(c.klass.selected),k&&a.push(c.klass.highlighted),f&&f.pick==i&&a.push(c.klass.viewset),l&&a.push(c.klass.disabled),a.join(\" \")}([c.klass.listItem]),\"data-pick=\"+a.pick+\" \"+h.ariaAttr({role:\"option\",label:m,selected:!(!j||b.$node.val()!==m)||null,activedescendant:!!k||null,disabled:!!l||null})]}})+h.node(\"li\",h.node(\"button\",c.clear,c.klass.buttonClear,\"type=button data-clear=1\"+(a?\"\":\" disabled\")+\" \"+h.ariaAttr({controls:b.$node[0].id})),\"\",h.ariaAttr({role:\"presentation\"})),c.klass.list,h.ariaAttr({role:\"listbox\",controls:b.$node[0].id}))},c.defaults=function(a){return{clear:\"Clear\",format:\"h:i A\",interval:30,closeOnSelect:!0,closeOnClear:!0,updateInput:!0,klass:{picker:a+\" \"+a+\"--time\",holder:a+\"__holder\",list:a+\"__list\",listItem:a+\"__list-item\",disabled:a+\"__list-item--disabled\",selected:a+\"__list-item--selected\",highlighted:a+\"__list-item--highlighted\",viewset:a+\"__list-item--viewset\",now:a+\"__list-item--now\",buttonClear:a+\"__button--clear\"}}}(a.klasses().picker),a.extend(\"pickatime\",c)});"
  },
  {
    "path": "lib/compressed/themes/classic.css",
    "content": ".picker,.picker__holder{width:100%;position:absolute}.picker{font-size:16px;text-align:left;line-height:1.2;color:#000;z-index:10000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0}.picker__input{cursor:default}.picker__input.picker__input--active{border-color:#0089ec}.picker__holder{overflow-y:auto;-webkit-overflow-scrolling:touch;background:#fff;border:1px solid #aaa;border-top-width:0;border-bottom-width:0;border-radius:0 0 5px 5px;box-sizing:border-box;min-width:176px;max-width:466px;max-height:0;-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";filter:alpha(opacity=0);-moz-opacity:0;opacity:0;transform:translateY(-1em) perspective(600px) rotateX(10deg);transition:transform .15s ease-out,opacity .15s ease-out,max-height 0s .15s,border-width 0s .15s}/*!\n * Classic picker styling for pickadate.js\n * Demo: http://amsul.github.io/pickadate.js\n */.picker__frame{padding:1px}.picker__wrap{margin:-1px}.picker--opened .picker__holder{max-height:25em;-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)\";filter:alpha(opacity=100);-moz-opacity:1;opacity:1;border-top-width:1px;border-bottom-width:1px;transform:translateY(0) perspective(600px) rotateX(0);transition:transform .15s ease-out,opacity .15s ease-out,max-height 0s,border-width 0s;box-shadow:0 6px 18px 1px rgba(0,0,0,.12)}"
  },
  {
    "path": "lib/compressed/themes/classic.date.css",
    "content": ".picker__footer,.picker__header,.picker__table{text-align:center}.picker__box{padding:0 1em}.picker__header{position:relative;margin-top:.75em}.picker__month,.picker__year{font-weight:500;display:inline-block;margin-left:.25em;margin-right:.25em}.picker__year{color:#999;font-size:.8em;font-style:italic}.picker__select--month,.picker__select--year{border:1px solid #b7b7b7;height:2em;padding:.5em;margin-left:.25em;margin-right:.25em}.picker__select--month{width:35%}.picker__select--year{width:22.5%}.picker__select--month:focus,.picker__select--year:focus{border-color:#0089ec}.picker__nav--next,.picker__nav--prev{position:absolute;padding:.5em 1.25em;width:1em;height:1em;box-sizing:content-box;top:-.25em}.picker__nav--prev{left:-1em;padding-right:1.25em}.picker__nav--next{right:-1em;padding-left:1.25em}@media (min-width:24.5em){.picker__select--month,.picker__select--year{margin-top:-.5em}.picker__nav--next,.picker__nav--prev{top:-.33em}.picker__nav--prev{padding-right:1.5em}.picker__nav--next{padding-left:1.5em}}.picker__nav--next:before,.picker__nav--prev:before{content:\" \";border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:.75em solid #000;width:0;height:0;display:block;margin:0 auto}.picker__nav--next:before{border-right:0;border-left:.75em solid #000}.picker__nav--next:hover,.picker__nav--prev:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__nav--disabled,.picker__nav--disabled:before,.picker__nav--disabled:before:hover,.picker__nav--disabled:hover{cursor:default;background:0 0;border-right-color:#f5f5f5;border-left-color:#f5f5f5}.picker__table{border-collapse:collapse;border-spacing:0;table-layout:fixed;font-size:inherit;width:100%;margin-top:.75em;margin-bottom:.5em}@media (min-height:33.875em){.picker__table{margin-bottom:.75em}}.picker__table td{margin:0;padding:0}.picker__weekday{width:14.285714286%;font-size:.75em;padding-bottom:.25em;color:#999;font-weight:500}@media (min-height:33.875em){.picker__weekday{padding-bottom:.5em}}.picker__day{padding:.3125em 0;font-weight:200;border:1px solid transparent}.picker__day--today{position:relative}.picker__day--today:before{content:\" \";position:absolute;top:2px;right:2px;width:0;height:0;border-top:.5em solid #0059bc;border-left:.5em solid transparent}.picker__day--disabled:before{border-top-color:#aaa}.picker__day--outfocus{color:#ddd}.picker--focused .picker__day--highlighted,.picker__day--highlighted:hover,.picker__day--infocus:hover,.picker__day--outfocus:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__day--highlighted{border-color:#0089ec}.picker--focused .picker__day--selected,.picker__day--selected,.picker__day--selected:hover{background:#0089ec;color:#fff}.picker--focused .picker__day--disabled,.picker__day--disabled,.picker__day--disabled:hover{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default}.picker__day--highlighted.picker__day--disabled,.picker__day--highlighted.picker__day--disabled:hover{background:#bbb}.picker__button--clear,.picker__button--close,.picker__button--today{border:1px solid #fff;background:#fff;font-size:.8em;padding:.66em 0;font-weight:700;width:33%;display:inline-block;vertical-align:bottom}.picker__button--clear:hover,.picker__button--close:hover,.picker__button--today:hover{cursor:pointer;color:#000;background:#b1dcfb;border-bottom-color:#b1dcfb}.picker__button--clear:focus,.picker__button--close:focus,.picker__button--today:focus{background:#b1dcfb;border-color:#0089ec;outline:0}.picker__button--clear:before,.picker__button--close:before,.picker__button--today:before{position:relative;display:inline-block;height:0}.picker__button--clear:before,.picker__button--today:before{content:\" \";margin-right:.45em}.picker__button--today:before{top:-.05em;width:0;border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker__button--clear:before{top:-.25em;width:.66em;border-top:3px solid #e20}.picker__button--close:before{content:\"\\D7\";top:-.1em;vertical-align:top;font-size:1.1em;margin-right:.35em;color:#777}.picker__button--today[disabled],.picker__button--today[disabled]:hover{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default}.picker__button--today[disabled]:before{border-top-color:#aaa}"
  },
  {
    "path": "lib/compressed/themes/classic.time.css",
    "content": ".picker__list{list-style:none;padding:.75em 0 4.2em;margin:0}.picker__list-item{border-bottom:1px solid #ddd;border-top:1px solid #ddd;margin-bottom:-1px;position:relative;background:#fff;padding:.75em 1.25em}.picker__list-item--highlighted,.picker__list-item:hover{border-color:#0089ec;z-index:10}.picker--focused .picker__list-item--highlighted,.picker__list-item--highlighted:hover,.picker__list-item:hover{color:#000;background:#b1dcfb;cursor:pointer}@media (min-height:46.75em){.picker__list-item{padding:.5em 1em}}.picker--focused .picker__list-item--selected,.picker__list-item--selected,.picker__list-item--selected:hover{background:#0089ec;color:#fff;z-index:10}.picker--focused .picker__list-item--disabled,.picker__list-item--disabled,.picker__list-item--disabled:hover{background:#f5f5f5;color:#ddd;cursor:default;border-color:#ddd;z-index:auto}.picker--time .picker__button--clear{display:block;width:80%;margin:1em auto 0;padding:1em 1.25em;background:0 0;border:0;font-weight:500;font-size:.67em;text-align:center;text-transform:uppercase;color:#666}.picker--time .picker__button--clear:focus,.picker--time .picker__button--clear:hover{background:#e20;border-color:#e20;cursor:pointer;color:#fff;outline:0}.picker--time .picker__button--clear:before{top:-.25em;color:#666;font-size:1.25em;font-weight:700}.picker--time .picker__button--clear:focus:before,.picker--time .picker__button--clear:hover:before{color:#fff;border-color:#fff}.picker--time{min-width:256px;max-width:320px}.picker--time .picker__holder{background:#f2f2f2}@media (min-height:40.125em){.picker--time .picker__holder{font-size:.875em}}.picker--time .picker__box{padding:0;position:relative}"
  },
  {
    "path": "lib/compressed/themes/default.css",
    "content": ".picker{font-size:16px;text-align:left;line-height:1.2;color:#000;position:absolute;z-index:10000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0}.picker__input{cursor:default}.picker__input.picker__input--active{border-color:#0089ec}.picker__holder{width:100%;overflow-y:auto;-webkit-overflow-scrolling:touch;position:fixed;transition:background .15s ease-out,transform 0s .15s;-webkit-backface-visibility:hidden}/*!\n * Default mobile-first, responsive styling for pickadate.js\n * Demo: http://amsul.github.io/pickadate.js\n */.picker__frame,.picker__holder{top:0;bottom:0;left:0;right:0;-ms-transform:translateY(100%);transform:translateY(100%)}.picker__frame{position:absolute;margin:0 auto;min-width:256px;max-width:666px;width:100%;-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";filter:alpha(opacity=0);-moz-opacity:0;opacity:0;transition:all .15s ease-out}.picker__wrap{display:table;width:100%;height:100%}@media (min-height:33.875em){.picker__frame{overflow:visible;top:auto;bottom:-100%;max-height:80%}.picker__wrap{display:block}}.picker__box{background:#fff;display:table-cell;vertical-align:middle}@media (min-height:26.5em){.picker__box{font-size:1.25em}}@media (min-height:33.875em){.picker__box{display:block;font-size:1.33em;border:1px solid #777;border-top-color:#898989;border-bottom-width:0;border-radius:5px 5px 0 0;box-shadow:0 12px 36px 16px rgba(0,0,0,.24)}.picker--opened .picker__frame{top:auto;bottom:0}}@media (min-height:40.125em){.picker__frame{margin-bottom:7.5%}.picker__box{font-size:1.5em;border-bottom-width:1px;border-radius:5px}}.picker--opened .picker__holder{-ms-transform:translateY(0);transform:translateY(0);zoom:1;background:rgba(0,0,0,.32);transition:background .15s ease-out}.picker--opened .picker__frame{-ms-transform:translateY(0);transform:translateY(0);-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)\";filter:alpha(opacity=100);-moz-opacity:1;opacity:1}"
  },
  {
    "path": "lib/compressed/themes/default.date.css",
    "content": ".picker__footer,.picker__header,.picker__table{text-align:center}.picker__box{padding:0 1em}.picker__header{position:relative;margin-top:.75em}.picker__month,.picker__year{font-weight:500;display:inline-block;margin-left:.25em;margin-right:.25em}.picker__year{color:#999;font-size:.8em;font-style:italic}.picker__select--month,.picker__select--year{border:1px solid #b7b7b7;height:2em;padding:.5em;margin-left:.25em;margin-right:.25em}.picker__select--month{width:35%}.picker__select--year{width:22.5%}.picker__select--month:focus,.picker__select--year:focus{border-color:#0089ec}.picker__nav--next,.picker__nav--prev{position:absolute;padding:.5em 1.25em;width:1em;height:1em;box-sizing:content-box;top:-.25em}.picker__nav--prev{left:-1em;padding-right:1.25em}.picker__nav--next{right:-1em;padding-left:1.25em}@media (min-width:24.5em){.picker__select--month,.picker__select--year{margin-top:-.5em}.picker__nav--next,.picker__nav--prev{top:-.33em}.picker__nav--prev{padding-right:1.5em}.picker__nav--next{padding-left:1.5em}}.picker__nav--next:before,.picker__nav--prev:before{content:\" \";border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:.75em solid #000;width:0;height:0;display:block;margin:0 auto}.picker__nav--next:before{border-right:0;border-left:.75em solid #000}.picker__nav--next:hover,.picker__nav--prev:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__nav--disabled,.picker__nav--disabled:before,.picker__nav--disabled:before:hover,.picker__nav--disabled:hover{cursor:default;background:0 0;border-right-color:#f5f5f5;border-left-color:#f5f5f5}.picker__table{border-collapse:collapse;border-spacing:0;table-layout:fixed;font-size:inherit;width:100%;margin-top:.75em;margin-bottom:.5em}@media (min-height:33.875em){.picker__table{margin-bottom:.75em}}.picker__table td{margin:0;padding:0}.picker__weekday{width:14.285714286%;font-size:.75em;padding-bottom:.25em;color:#999;font-weight:500}@media (min-height:33.875em){.picker__weekday{padding-bottom:.5em}}.picker__day{padding:.3125em 0;font-weight:200;border:1px solid transparent}.picker__day--today{position:relative}.picker__day--today:before{content:\" \";position:absolute;top:2px;right:2px;width:0;height:0;border-top:.5em solid #0059bc;border-left:.5em solid transparent}.picker__day--disabled:before{border-top-color:#aaa}.picker__day--outfocus{color:#ddd}.picker--focused .picker__day--highlighted,.picker__day--highlighted:hover,.picker__day--infocus:hover,.picker__day--outfocus:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__day--highlighted{border-color:#0089ec}.picker--focused .picker__day--selected,.picker__day--selected,.picker__day--selected:hover{background:#0089ec;color:#fff}.picker--focused .picker__day--disabled,.picker__day--disabled,.picker__day--disabled:hover{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default}.picker__day--highlighted.picker__day--disabled,.picker__day--highlighted.picker__day--disabled:hover{background:#bbb}.picker__button--clear,.picker__button--close,.picker__button--today{border:1px solid #fff;background:#fff;font-size:.8em;padding:.66em 0;font-weight:700;width:33%;display:inline-block;vertical-align:bottom}.picker__button--clear:hover,.picker__button--close:hover,.picker__button--today:hover{cursor:pointer;color:#000;background:#b1dcfb;border-bottom-color:#b1dcfb}.picker__button--clear:focus,.picker__button--close:focus,.picker__button--today:focus{background:#b1dcfb;border-color:#0089ec;outline:0}.picker__button--clear:before,.picker__button--close:before,.picker__button--today:before{position:relative;display:inline-block;height:0}.picker__button--clear:before,.picker__button--today:before{content:\" \";margin-right:.45em}.picker__button--today:before{top:-.05em;width:0;border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker__button--clear:before{top:-.25em;width:.66em;border-top:3px solid #e20}.picker__button--close:before{content:\"\\D7\";top:-.1em;vertical-align:top;font-size:1.1em;margin-right:.35em;color:#777}.picker__button--today[disabled],.picker__button--today[disabled]:hover{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default}.picker__button--today[disabled]:before{border-top-color:#aaa}"
  },
  {
    "path": "lib/compressed/themes/default.time.css",
    "content": ".picker__list{list-style:none;padding:.75em 0 4.2em;margin:0}.picker__list-item{border-bottom:1px solid #ddd;border-top:1px solid #ddd;margin-bottom:-1px;position:relative;background:#fff;padding:.75em 1.25em}.picker__list-item--highlighted,.picker__list-item:hover{border-color:#0089ec;z-index:10}.picker--focused .picker__list-item--highlighted,.picker__list-item--highlighted:hover,.picker__list-item:hover{cursor:pointer;color:#000;background:#b1dcfb}@media (min-height:46.75em){.picker__list-item{padding:.5em 1em}}.picker--focused .picker__list-item--selected,.picker__list-item--selected,.picker__list-item--selected:hover{background:#0089ec;color:#fff;z-index:10}.picker--focused .picker__list-item--disabled,.picker__list-item--disabled,.picker__list-item--disabled:hover{background:#f5f5f5;color:#ddd;cursor:default;border-color:#ddd;z-index:auto}.picker--time .picker__button--clear{display:block;width:80%;margin:1em auto 0;padding:1em 1.25em;background:0 0;border:0;font-weight:500;font-size:.67em;text-align:center;text-transform:uppercase;color:#666}.picker--time .picker__button--clear:focus,.picker--time .picker__button--clear:hover{background:#e20;border-color:#e20;cursor:pointer;color:#fff;outline:0}.picker--time .picker__button--clear:before{top:-.25em;color:#666;font-size:1.25em;font-weight:700}.picker--time .picker__button--clear:focus:before,.picker--time .picker__button--clear:hover:before{color:#fff;border-color:#fff}.picker--time .picker__frame{min-width:256px;max-width:320px}.picker--time .picker__box{font-size:1em;background:#f2f2f2;padding:0}@media (min-height:40.125em){.picker--time .picker__box{margin-bottom:5em}}"
  },
  {
    "path": "lib/compressed/themes/rtl.css",
    "content": "/*!\n * Styling for RTL (right-to-left) languages using pickadate.js\n */.picker{direction:rtl}.picker__nav--next{right:auto;left:-1em}.picker__nav--prev{left:auto;right:-1em}.picker__nav--next:before{border-left:0;border-right:.75em solid #000}.picker__nav--prev:before{border-right:0;border-left:.75em solid #000}"
  },
  {
    "path": "lib/compressed/translations/ar.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"يناير\",\"فبراير\",\"مارس\",\"ابريل\",\"مايو\",\"يونيو\",\"يوليو\",\"اغسطس\",\"سبتمبر\",\"اكتوبر\",\"نوفمبر\",\"ديسمبر\"],monthsShort:[\"يناير\",\"فبراير\",\"مارس\",\"ابريل\",\"مايو\",\"يونيو\",\"يوليو\",\"اغسطس\",\"سبتمبر\",\"اكتوبر\",\"نوفمبر\",\"ديسمبر\"],weekdaysFull:[\"الاحد\",\"الاثنين\",\"الثلاثاء\",\"الاربعاء\",\"الخميس\",\"الجمعة\",\"السبت\"],weekdaysShort:[\"الاحد\",\"الاثنين\",\"الثلاثاء\",\"الاربعاء\",\"الخميس\",\"الجمعة\",\"السبت\"],today:\"اليوم\",clear:\"مسح\",format:\"yyyy mmmm dd\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"مسح\"});"
  },
  {
    "path": "lib/compressed/translations/bg_BG.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"януари\",\"февруари\",\"март\",\"април\",\"май\",\"юни\",\"юли\",\"август\",\"септември\",\"октомври\",\"ноември\",\"декември\"],monthsShort:[\"янр\",\"фев\",\"мар\",\"апр\",\"май\",\"юни\",\"юли\",\"авг\",\"сеп\",\"окт\",\"ное\",\"дек\"],weekdaysFull:[\"неделя\",\"понеделник\",\"вторник\",\"сряда\",\"четвъртък\",\"петък\",\"събота\"],weekdaysShort:[\"нд\",\"пн\",\"вт\",\"ср\",\"чт\",\"пт\",\"сб\"],today:\"днес\",clear:\"изтривам\",firstDay:1,format:\"d mmmm yyyy г.\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"изтривам\"});"
  },
  {
    "path": "lib/compressed/translations/bs_BA.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"januar\",\"februar\",\"mart\",\"april\",\"maj\",\"juni\",\"juli\",\"august\",\"septembar\",\"oktobar\",\"novembar\",\"decembar\"],monthsShort:[\"jan\",\"feb\",\"mar\",\"apr\",\"maj\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"dec\"],weekdaysFull:[\"nedjelja\",\"ponedjeljak\",\"utorak\",\"srijeda\",\"cetvrtak\",\"petak\",\"subota\"],weekdaysShort:[\"ne\",\"po\",\"ut\",\"sr\",\"če\",\"pe\",\"su\"],today:\"danas\",clear:\"izbrisati\",firstDay:1,format:\"dd. mmmm yyyy.\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"izbrisati\"});"
  },
  {
    "path": "lib/compressed/translations/ca_ES.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Gener\",\"Febrer\",\"Març\",\"Abril\",\"Maig\",\"juny\",\"Juliol\",\"Agost\",\"Setembre\",\"Octubre\",\"Novembre\",\"Desembre\"],monthsShort:[\"Gen\",\"Feb\",\"Mar\",\"Abr\",\"Mai\",\"Jun\",\"Jul\",\"Ago\",\"Set\",\"Oct\",\"Nov\",\"Des\"],weekdaysFull:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"],weekdaysShort:[\"diu\",\"dil\",\"dim\",\"dmc\",\"dij\",\"div\",\"dis\"],today:\"avui\",clear:\"esborra\",close:\"tanca\",firstDay:1,format:\"dddd d !de mmmm !de yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"esborra\"});"
  },
  {
    "path": "lib/compressed/translations/cs_CZ.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"leden\",\"únor\",\"březen\",\"duben\",\"květen\",\"červen\",\"červenec\",\"srpen\",\"září\",\"říjen\",\"listopad\",\"prosinec\"],monthsShort:[\"led\",\"úno\",\"bře\",\"dub\",\"kvě\",\"čer\",\"čvc\",\"srp\",\"zář\",\"říj\",\"lis\",\"pro\"],weekdaysFull:[\"neděle\",\"pondělí\",\"úterý\",\"středa\",\"čtvrtek\",\"pátek\",\"sobota\"],weekdaysShort:[\"ne\",\"po\",\"út\",\"st\",\"čt\",\"pá\",\"so\"],today:\"dnes\",clear:\"vymazat\",firstDay:1,format:\"d. mmmm yyyy\",formatSubmit:\"yyyy/mm/dd\",close:\"zavřít\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"vymazat\"});"
  },
  {
    "path": "lib/compressed/translations/da_DK.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"januar\",\"februar\",\"marts\",\"april\",\"maj\",\"juni\",\"juli\",\"august\",\"september\",\"oktober\",\"november\",\"december\"],monthsShort:[\"jan\",\"feb\",\"mar\",\"apr\",\"maj\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"dec\"],weekdaysFull:[\"søndag\",\"mandag\",\"tirsdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lørdag\"],weekdaysShort:[\"søn\",\"man\",\"tir\",\"ons\",\"tor\",\"fre\",\"lør\"],today:\"i dag\",clear:\"slet\",close:\"luk\",firstDay:1,format:\"d. mmmm yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"slet\"});"
  },
  {
    "path": "lib/compressed/translations/de_DE.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],monthsShort:[\"Jan\",\"Feb\",\"Mär\",\"Apr\",\"Mai\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dez\"],weekdaysFull:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"],weekdaysShort:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],today:\"Heute\",clear:\"Löschen\",close:\"Schließen\",firstDay:1,format:\"dddd, dd. mmmm yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"Löschen\",format:\"H:i\"});"
  },
  {
    "path": "lib/compressed/translations/el_GR.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Ιανουάριος\",\"Φεβρουάριος\",\"Μάρτιος\",\"Απρίλιος\",\"Μάιος\",\"Ιούνιος\",\"Ιούλιος\",\"Αύγουστος\",\"Σεπτέμβριος\",\"Οκτώβριος\",\"Νοέμβριος\",\"Δεκέμβριος\"],monthsShort:[\"Ιαν\",\"Φεβ\",\"Μαρ\",\"Απρ\",\"Μαι\",\"Ιουν\",\"Ιουλ\",\"Αυγ\",\"Σεπ\",\"Οκτ\",\"Νοε\",\"Δεκ\"],weekdaysFull:[\"Κυριακή\",\"Δευτέρα\",\"Τρίτη\",\"Τετάρτη\",\"Πέμπτη\",\"Παρασκευή\",\"Σάββατο\"],weekdaysShort:[\"Κυρ\",\"Δευ\",\"Τρι\",\"Τετ\",\"Πεμ\",\"Παρ\",\"Σαβ\"],today:\"σήμερα\",clear:\"Διαγραφή\",firstDay:1,format:\"d mmmm yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"Διαγραφή\"});"
  },
  {
    "path": "lib/compressed/translations/es_ES.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Enero\",\"Febrero\",\"Marzo\",\"Abril\",\"Mayo\",\"Junio\",\"Julio\",\"Agosto\",\"Septiembre\",\"Octubre\",\"Noviembre\",\"Diciembre\"],monthsShort:[\"ene\",\"feb\",\"mar\",\"abr\",\"may\",\"jun\",\"jul\",\"ago\",\"sep\",\"oct\",\"nov\",\"dic\"],weekdaysFull:[\"Domingo\",\"Lunes\",\"Martes\",\"Miércoles\",\"Jueves\",\"Viernes\",\"Sábado\"],weekdaysShort:[\"dom\",\"lun\",\"mar\",\"mié\",\"jue\",\"vie\",\"sáb\"],today:\"Hoy\",clear:\"Borrar\",close:\"Cerrar\",firstDay:1,format:\"dddd d !de mmmm !de yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"Borrar\"});"
  },
  {
    "path": "lib/compressed/translations/et_EE.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"jaanuar\",\"veebruar\",\"märts\",\"aprill\",\"mai\",\"juuni\",\"juuli\",\"august\",\"september\",\"oktoober\",\"november\",\"detsember\"],monthsShort:[\"jaan\",\"veebr\",\"märts\",\"apr\",\"mai\",\"juuni\",\"juuli\",\"aug\",\"sept\",\"okt\",\"nov\",\"dets\"],weekdaysFull:[\"pühapäev\",\"esmaspäev\",\"teisipäev\",\"kolmapäev\",\"neljapäev\",\"reede\",\"laupäev\"],weekdaysShort:[\"püh\",\"esm\",\"tei\",\"kol\",\"nel\",\"ree\",\"lau\"],today:\"täna\",clear:\"kustuta\",firstDay:1,format:\"d. mmmm yyyy. a\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"kustuta\"});"
  },
  {
    "path": "lib/compressed/translations/eu_ES.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"urtarrila\",\"otsaila\",\"martxoa\",\"apirila\",\"maiatza\",\"ekaina\",\"uztaila\",\"abuztua\",\"iraila\",\"urria\",\"azaroa\",\"abendua\"],monthsShort:[\"urt\",\"ots\",\"mar\",\"api\",\"mai\",\"eka\",\"uzt\",\"abu\",\"ira\",\"urr\",\"aza\",\"abe\"],weekdaysFull:[\"igandea\",\"astelehena\",\"asteartea\",\"asteazkena\",\"osteguna\",\"ostirala\",\"larunbata\"],weekdaysShort:[\"ig.\",\"al.\",\"ar.\",\"az.\",\"og.\",\"or.\",\"lr.\"],today:\"gaur\",clear:\"garbitu\",firstDay:1,format:\"dddd, yyyy(e)ko mmmmren da\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"garbitu\"});"
  },
  {
    "path": "lib/compressed/translations/fa_IR.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"ژانویه\",\"فوریه\",\"مارس\",\"آوریل\",\"مه\",\"ژوئن\",\"ژوئیه\",\"اوت\",\"سپتامبر\",\"اکتبر\",\"نوامبر\",\"دسامبر\"],monthsShort:[\"ژانویه\",\"فوریه\",\"مارس\",\"آوریل\",\"مه\",\"ژوئن\",\"ژوئیه\",\"اوت\",\"سپتامبر\",\"اکتبر\",\"نوامبر\",\"دسامبر\"],weekdaysFull:[\"یکشنبه\",\"دوشنبه\",\"سه شنبه\",\"چهارشنبه\",\"پنجشنبه\",\"جمعه\",\"شنبه\"],weekdaysShort:[\"یکشنبه\",\"دوشنبه\",\"سه شنبه\",\"چهارشنبه\",\"پنجشنبه\",\"جمعه\",\"شنبه\"],today:\"امروز\",clear:\"پاک کردن\",close:\"بستن\",format:\"yyyy mmmm dd\",formatSubmit:\"yyyy/mm/dd\",labelMonthNext:\"ماه بعدی\",labelMonthPrev:\"ماه قبلی\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"پاک کردن\"});"
  },
  {
    "path": "lib/compressed/translations/fi_FI.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"tammikuu\",\"helmikuu\",\"maaliskuu\",\"huhtikuu\",\"toukokuu\",\"kesäkuu\",\"heinäkuu\",\"elokuu\",\"syyskuu\",\"lokakuu\",\"marraskuu\",\"joulukuu\"],monthsShort:[\"tammi\",\"helmi\",\"maalis\",\"huhti\",\"touko\",\"kesä\",\"heinä\",\"elo\",\"syys\",\"loka\",\"marras\",\"joulu\"],weekdaysFull:[\"sunnuntai\",\"maanantai\",\"tiistai\",\"keskiviikko\",\"torstai\",\"perjantai\",\"lauantai\"],weekdaysShort:[\"su\",\"ma\",\"ti\",\"ke\",\"to\",\"pe\",\"la\"],today:\"tänään\",clear:\"tyhjennä\",firstDay:1,format:\"d.m.yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"tyhjennä\"});"
  },
  {
    "path": "lib/compressed/translations/fr_FR.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Janvier\",\"Février\",\"Mars\",\"Avril\",\"Mai\",\"Juin\",\"Juillet\",\"Août\",\"Septembre\",\"Octobre\",\"Novembre\",\"Décembre\"],monthsShort:[\"Jan\",\"Fev\",\"Mar\",\"Avr\",\"Mai\",\"Juin\",\"Juil\",\"Aou\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],weekdaysFull:[\"Dimanche\",\"Lundi\",\"Mardi\",\"Mercredi\",\"Jeudi\",\"Vendredi\",\"Samedi\"],weekdaysShort:[\"Dim\",\"Lun\",\"Mar\",\"Mer\",\"Jeu\",\"Ven\",\"Sam\"],today:\"Aujourd'hui\",clear:\"Effacer\",close:\"Fermer\",firstDay:1,format:\"dd mmmm yyyy\",formatSubmit:\"yyyy/mm/dd\",labelMonthNext:\"Mois suivant\",labelMonthPrev:\"Mois précédent\",labelMonthSelect:\"Sélectionner un mois\",labelYearSelect:\"Sélectionner une année\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"Effacer\",format:\"H:i\"});"
  },
  {
    "path": "lib/compressed/translations/ge_GEO.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"იანვარი\",\"თებერვალი\",\"მარტი\",\"აპრილი\",\"მაისი\",\"ივნისი\",\"ივლისი\",\"აგვისტო\",\"სექტემბერი\",\"ოქტომბერი\",\"ნოემბერი\",\"დეკემბერი\"],monthsShort:[\"იან\",\"თებ\",\"მარტ\",\"აპრ\",\"მაი\",\"ივნ\",\"ივლ\",\"აგვ\",\"სექტ\",\"ოქტ\",\"ნოემ\",\"დეკ\"],weekdaysFull:[\"კვირა\",\"ორშაბათი\",\"სამშაბათი\",\"ოთხშაბათი\",\"ხუშაბათი\",\"პარასკევი\",\"შაბათი\"],weekdaysShort:[\"კვ\",\"ორ\",\"სამ\",\"ოთხ\",\"ხუთ\",\"პარ\",\"შაბ\"],today:\"დღეს\",clear:\"გასუფთავება\",firstDay:1,format:\"d mmmm yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"გასუფთავება\"});"
  },
  {
    "path": "lib/compressed/translations/gl_ES.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Xaneiro\",\"Febreiro\",\"Marzo\",\"Abril\",\"Maio\",\"Xuño\",\"Xullo\",\"Agosto\",\"Setembro\",\"Outubro\",\"Novembro\",\"Decembro\"],monthsShort:[\"xan\",\"feb\",\"mar\",\"abr\",\"mai\",\"xun\",\"xul\",\"ago\",\"sep\",\"out\",\"nov\",\"dec\"],weekdaysFull:[\"domingo\",\"luns\",\"martes\",\"mércores\",\"xoves\",\"venres\",\"sábado\"],weekdaysShort:[\"dom\",\"lun\",\"mar\",\"mér\",\"xov\",\"ven\",\"sab\"],today:\"hoxe\",clear:\"borrar\",firstDay:1,format:\"dddd d !de mmmm !de yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"borrar\"});"
  },
  {
    "path": "lib/compressed/translations/he_IL.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"ינואר\",\"פברואר\",\"מרץ\",\"אפריל\",\"מאי\",\"יוני\",\"יולי\",\"אוגוסט\",\"ספטמבר\",\"אוקטובר\",\"נובמבר\",\"דצמבר\"],monthsShort:[\"ינו\",\"פבר\",\"מרץ\",\"אפר\",\"מאי\",\"יונ\",\"יול\",\"אוג\",\"ספט\",\"אוק\",\"נוב\",\"דצמ\"],weekdaysFull:[\"יום ראשון\",\"יום שני\",\"יום שלישי\",\"יום רביעי\",\"יום חמישי\",\"יום ששי\",\"יום שבת\"],weekdaysShort:[\"א\",\"ב\",\"ג\",\"ד\",\"ה\",\"ו\",\"ש\"],today:\"היום\",clear:\"למחוק\",format:\"yyyy mmmmב d dddd\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"למחוק\"});"
  },
  {
    "path": "lib/compressed/translations/hi_IN.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"जनवरी\",\"फरवरी\",\"मार्च\",\"अप्रैल\",\"मई\",\"जून\",\"जुलाई\",\"अगस्त\",\"सितम्बर\",\"अक्टूबर\",\"नवम्बर\",\"दिसम्बर\"],monthsShort:[\"जन\",\"फर\",\"मार्च\",\"अप्रैल\",\"मई\",\"जून\",\"जु\",\"अग\",\"सित\",\"अक्टू\",\"नव\",\"दिस\"],weekdaysFull:[\"रविवार\",\"सोमवार\",\"मंगलवार\",\"बुधवार\",\"गुरुवार\",\"शुक्रवार\",\"शनिवार\"],weekdaysShort:[\"रवि\",\"सोम\",\"मंगल\",\"बुध\",\"गुरु\",\"शुक्र\",\"शनि\"],today:\"आज की तारीख चयन करें\",clear:\"चुनी हुई तारीख को मिटाएँ\",close:\"विंडो बंद करे\",firstDay:1,format:\"dd/mm/yyyy\",formatSubmit:\"yyyy/mm/dd\",labelMonthNext:\"अगले माह का चयन करें\",labelMonthPrev:\"पिछले माह का चयन करें\",labelMonthSelect:\"किसि एक महीने का चयन करें\",labelYearSelect:\"किसि एक वर्ष का चयन करें\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"चुनी हुई तारीख को मिटाएँ\"});"
  },
  {
    "path": "lib/compressed/translations/hr_HR.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"siječanj\",\"veljača\",\"ožujak\",\"travanj\",\"svibanj\",\"lipanj\",\"srpanj\",\"kolovoz\",\"rujan\",\"listopad\",\"studeni\",\"prosinac\"],monthsShort:[\"sij\",\"velj\",\"ožu\",\"tra\",\"svi\",\"lip\",\"srp\",\"kol\",\"ruj\",\"lis\",\"stu\",\"pro\"],weekdaysFull:[\"nedjelja\",\"ponedjeljak\",\"utorak\",\"srijeda\",\"četvrtak\",\"petak\",\"subota\"],weekdaysShort:[\"ned\",\"pon\",\"uto\",\"sri\",\"čet\",\"pet\",\"sub\"],today:\"Danas\",clear:\"Izbriši\",close:\"Zatvori\",firstDay:1,format:\"d. mmmm yyyy.\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"Izbriši\"});"
  },
  {
    "path": "lib/compressed/translations/hu_HU.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"január\",\"február\",\"március\",\"április\",\"május\",\"június\",\"július\",\"augusztus\",\"szeptember\",\"október\",\"november\",\"december\"],monthsShort:[\"jan\",\"febr\",\"márc\",\"ápr\",\"máj\",\"jún\",\"júl\",\"aug\",\"szept\",\"okt\",\"nov\",\"dec\"],weekdaysFull:[\"vasárnap\",\"hétfő\",\"kedd\",\"szerda\",\"csütörtök\",\"péntek\",\"szombat\"],weekdaysShort:[\"V\",\"H\",\"K\",\"Sze\",\"CS\",\"P\",\"Szo\"],today:\"Ma\",clear:\"Törlés\",close:\"Bezárás\",firstDay:1,format:\"yyyy. mmmm dd.\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"Törlés\"});"
  },
  {
    "path": "lib/compressed/translations/id_ID.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Januari\",\"Februari\",\"Maret\",\"April\",\"Mei\",\"Juni\",\"Juli\",\"Agustus\",\"September\",\"Oktober\",\"November\",\"Desember\"],monthsShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Mei\",\"Jun\",\"Jul\",\"Agu\",\"Sep\",\"Okt\",\"Nov\",\"Des\"],weekdaysFull:[\"Minggu\",\"Senin\",\"Selasa\",\"Rabu\",\"Kamis\",\"Jumat\",\"Sabtu\"],weekdaysShort:[\"Min\",\"Sen\",\"Sel\",\"Rab\",\"Kam\",\"Jum\",\"Sab\"],today:\"hari ini\",clear:\"menghapus\",firstDay:1,format:\"d mmmm yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"menghapus\"});"
  },
  {
    "path": "lib/compressed/translations/is_IS.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"janúar\",\"febrúar\",\"mars\",\"apríl\",\"maí\",\"júní\",\"júlí\",\"ágúst\",\"september\",\"október\",\"nóvember\",\"desember\"],monthsShort:[\"jan\",\"feb\",\"mar\",\"apr\",\"maí\",\"jún\",\"júl\",\"ágú\",\"sep\",\"okt\",\"nóv\",\"des\"],weekdaysFull:[\"sunnudagur\",\"mánudagur\",\"þriðjudagur\",\"miðvikudagur\",\"fimmtudagur\",\"föstudagur\",\"laugardagur\"],weekdaysShort:[\"sun\",\"mán\",\"þri\",\"mið\",\"fim\",\"fös\",\"lau\"],today:\"Í dag\",clear:\"Hreinsa\",firstDay:1,format:\"dd. mmmm yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"Hreinsa\"});"
  },
  {
    "path": "lib/compressed/translations/it_IT.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"gennaio\",\"febbraio\",\"marzo\",\"aprile\",\"maggio\",\"giugno\",\"luglio\",\"agosto\",\"settembre\",\"ottobre\",\"novembre\",\"dicembre\"],monthsShort:[\"gen\",\"feb\",\"mar\",\"apr\",\"mag\",\"giu\",\"lug\",\"ago\",\"set\",\"ott\",\"nov\",\"dic\"],weekdaysFull:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"],weekdaysShort:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],today:\"Oggi\",clear:\"Cancella\",close:\"Chiudi\",firstDay:1,format:\"dddd d mmmm yyyy\",formatSubmit:\"yyyy/mm/dd\",labelMonthNext:\"Mese successivo\",labelMonthPrev:\"Mese precedente\",labelMonthSelect:\"Seleziona un mese\",labelYearSelect:\"Seleziona un anno\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"Cancella\",format:\"HH:i\",formatSubmit:\"HH:i\"});"
  },
  {
    "path": "lib/compressed/translations/ja_JP.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],monthsShort:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],weekdaysFull:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"],weekdaysShort:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],today:\"今日\",clear:\"消去\",close:\"閉じる\",firstDay:1,format:\"yyyy年mm月dd日\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"消去\"});"
  },
  {
    "path": "lib/compressed/translations/km_KH.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"មករា\",\"កុម្ភៈ\",\"មីនា\",\"មេសា\",\"ឧសភា\",\"មិថុនា\",\"កក្កដា\",\"សីហា\",\"កញ្ញា\",\"តុលា\",\"វិច្ឆិកា\",\"ធ្នូ\"],monthsShort:[\"មក.\",\"កុ.\",\"មី.\",\"មេ.\",\"ឧស.\",\"មិថុ.\",\"កក្ក.\",\"សី.\",\"កញ.\",\"តុ.\",\"វិច្ឆ.\",\"ធ.\"],weekdaysFull:[\"អាទិត្យ\",\"ចន្ទ\",\"អង្គារ\",\"ពុធ\",\"ព្រហស្បតិ៍\",\"សុក្រ\",\"សៅរ៍\"],weekdaysShort:[\"អា.\",\"ច.\",\"អ.\",\"ព.\",\"ព្រ.\",\"សុ.\",\"ស.\"],today:\"ថ្ងៃនេះ\",clear:\"លុប\",close:\"បិទ\",labelMonthNext:\"ខែបន្ទាប់\",labelMonthPrev:\"ខែមុន\",labelMonthSelect:\"ជ្រើសរើសខែ\",labelYearSelect:\"ជ្រើសរើសឆ្នាំ\",firstDay:1,showMonthsShort:!1,showWeekdaysFull:!0,format:\"ថ្ងៃទី d ខែmmmm ឆ្នាំ yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"លុប\"});"
  },
  {
    "path": "lib/compressed/translations/ko_KR.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"1월\",\"2월\",\"3월\",\"4월\",\"5월\",\"6월\",\"7월\",\"8월\",\"9월\",\"10월\",\"11월\",\"12월\"],monthsShort:[\"1월\",\"2월\",\"3월\",\"4월\",\"5월\",\"6월\",\"7월\",\"8월\",\"9월\",\"10월\",\"11월\",\"12월\"],weekdaysFull:[\"일요일\",\"월요일\",\"화요일\",\"수요일\",\"목요일\",\"금요일\",\"토요일\"],weekdaysShort:[\"일\",\"월\",\"화\",\"수\",\"목\",\"금\",\"토\"],today:\"오늘\",clear:\"취소\",firstDay:1,format:\"yyyy 년 mm 월 dd 일\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"취소\"});"
  },
  {
    "path": "lib/compressed/translations/lt_LT.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{labelMonthNext:\"Sekantis mėnuo\",labelMonthPrev:\"Ankstesnis mėnuo\",labelMonthSelect:\"Pasirinkite mėnesį\",labelYearSelect:\"Pasirinkite metus\",monthsFull:[\"Sausis\",\"Vasaris\",\"Kovas\",\"Balandis\",\"Gegužė\",\"Birželis\",\"Liepa\",\"Rugpjūtis\",\"Rugsėjis\",\"Spalis\",\"Lapkritis\",\"Gruodis\"],monthsShort:[\"Sau\",\"Vas\",\"Kov\",\"Bal\",\"Geg\",\"Bir\",\"Lie\",\"Rgp\",\"Rgs\",\"Spa\",\"Lap\",\"Grd\"],weekdaysFull:[\"Sekmadienis\",\"Pirmadienis\",\"Antradienis\",\"Trečiadienis\",\"Ketvirtadienis\",\"Penktadienis\",\"Šeštadienis\"],weekdaysShort:[\"Sk\",\"Pr\",\"An\",\"Tr\",\"Kt\",\"Pn\",\"Št\"],today:\"Šiandien\",clear:\"Išvalyti\",close:\"Uždaryti\",firstDay:1,format:\"yyyy-mm-dd\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"Išvalyti\",format:\"HH:i\"});"
  },
  {
    "path": "lib/compressed/translations/lv_LV.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Janvāris\",\"Februāris\",\"Marts\",\"Aprīlis\",\"Maijs\",\"Jūnijs\",\"Jūlijs\",\"Augusts\",\"Septembris\",\"Oktobris\",\"Novembris\",\"Decembris\"],monthsShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Mai\",\"Jūn\",\"Jūl\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],weekdaysFull:[\"Svētdiena\",\"Pirmdiena\",\"Otrdiena\",\"Trešdiena\",\"Ceturtdiena\",\"Piektdiena\",\"Sestdiena\"],weekdaysShort:[\"Sv\",\"P\",\"O\",\"T\",\"C\",\"Pk\",\"S\"],today:\"Šodiena\",clear:\"Dzēst\",close:\"Aizvērt\",firstDay:1,format:\"yyyy.mm.dd. dddd\",formatSubmit:\"yyyy/mm/dd\",labelMonthNext:\"Nākamais mēnesis\",labelMonthPrev:\"Iepriekšējais mēnesis\",labelMonthSelect:\"Izvēlēties mēnesi\",labelYearSelect:\"Izvēlēties gadu\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"Dzēst\"});"
  },
  {
    "path": "lib/compressed/translations/nb_NO.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"januar\",\"februar\",\"mars\",\"april\",\"mai\",\"juni\",\"juli\",\"august\",\"september\",\"oktober\",\"november\",\"desember\"],monthsShort:[\"jan\",\"feb\",\"mar\",\"apr\",\"mai\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"des\"],weekdaysFull:[\"søndag\",\"mandag\",\"tirsdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lørdag\"],weekdaysShort:[\"søn\",\"man\",\"tir\",\"ons\",\"tor\",\"fre\",\"lør\"],today:\"i dag\",clear:\"nullstill\",close:\"lukk\",firstDay:1,format:\"dd. mmm. yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"nullstill\"});"
  },
  {
    "path": "lib/compressed/translations/ne_NP.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"जनवरी\",\"फेब्रुअरी\",\"मार्च\",\"अप्रिल\",\"मे\",\"जुन\",\"जुलाई\",\"अगस्त\",\"सेप्टेम्बर\",\"अक्टोबर\",\"नोवेम्बर\",\"डिसेम्बर\"],monthsShort:[\"जन\",\"फेब्रु\",\"मार्च\",\"अप्रिल\",\"मे\",\"जुन\",\"जुल\",\"अग\",\"सेप्टे\",\"अक्टो\",\"नोभे\",\"डिसे\"],weekdaysFull:[\"सोमबार\",\"मङ्लबार\",\"बुधबार\",\"बिहीबार\",\"शुक्रबार\",\"शनिबार\",\"आईतबार\"],weekdaysShort:[\"सोम\",\"मंगल्\",\"बुध\",\"बिही\",\"शुक्र\",\"शनि\",\"आईत\"],numbers:[\"०\",\"१\",\"२\",\"३\",\"४\",\"५\",\"६\",\"७\",\"८\",\"९\"],today:\"आज\",clear:\"मेटाउनुहोस्\",format:\"dddd, dd mmmm, yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"मेटाउनुहोस्\"});"
  },
  {
    "path": "lib/compressed/translations/nl_NL.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"januari\",\"februari\",\"maart\",\"april\",\"mei\",\"juni\",\"juli\",\"augustus\",\"september\",\"oktober\",\"november\",\"december\"],monthsShort:[\"jan\",\"feb\",\"mrt\",\"apr\",\"mei\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"dec\"],weekdaysFull:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"],weekdaysShort:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],today:\"vandaag\",clear:\"wissen\",close:\"sluiten\",firstDay:1,format:\"dddd d mmmm yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"wissen\"});"
  },
  {
    "path": "lib/compressed/translations/no_NO.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"januar\",\"februar\",\"mars\",\"april\",\"mai\",\"juni\",\"juli\",\"august\",\"september\",\"oktober\",\"november\",\"desember\"],monthsShort:[\"jan\",\"feb\",\"mar\",\"apr\",\"mai\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"des\"],weekdaysFull:[\"søndag\",\"mandag\",\"tirsdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lørdag\"],weekdaysShort:[\"søn\",\"man\",\"tir\",\"ons\",\"tor\",\"fre\",\"lør\"],today:\"i dag\",clear:\"nullstill\",firstDay:1,format:\"dd. mmm. yyyy\",formatSubmit:\"yyyy/mm/dd\"});"
  },
  {
    "path": "lib/compressed/translations/pl_PL.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"styczeń\",\"luty\",\"marzec\",\"kwiecień\",\"maj\",\"czerwiec\",\"lipiec\",\"sierpień\",\"wrzesień\",\"październik\",\"listopad\",\"grudzień\"],monthsShort:[\"sty\",\"lut\",\"mar\",\"kwi\",\"maj\",\"cze\",\"lip\",\"sie\",\"wrz\",\"paź\",\"lis\",\"gru\"],weekdaysFull:[\"niedziela\",\"poniedziałek\",\"wtorek\",\"środa\",\"czwartek\",\"piątek\",\"sobota\"],weekdaysShort:[\"niedz.\",\"pn.\",\"wt.\",\"śr.\",\"cz.\",\"pt.\",\"sob.\"],today:\"Dzisiaj\",clear:\"Usuń\",close:\"Zamknij\",firstDay:1,format:\"d mmmm yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"usunąć\"});"
  },
  {
    "path": "lib/compressed/translations/pt_BR.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"janeiro\",\"fevereiro\",\"março\",\"abril\",\"maio\",\"junho\",\"julho\",\"agosto\",\"setembro\",\"outubro\",\"novembro\",\"dezembro\"],monthsShort:[\"jan\",\"fev\",\"mar\",\"abr\",\"mai\",\"jun\",\"jul\",\"ago\",\"set\",\"out\",\"nov\",\"dez\"],weekdaysFull:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"],weekdaysShort:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sab\"],today:\"hoje\",clear:\"limpar\",close:\"fechar\",format:\"dddd, d !de mmmm !de yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"limpar\"});"
  },
  {
    "path": "lib/compressed/translations/pt_PT.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Janeiro\",\"Fevereiro\",\"Março\",\"Abril\",\"Maio\",\"Junho\",\"Julho\",\"Agosto\",\"Setembro\",\"Outubro\",\"Novembro\",\"Dezembro\"],monthsShort:[\"jan\",\"fev\",\"mar\",\"abr\",\"mai\",\"jun\",\"jul\",\"ago\",\"set\",\"out\",\"nov\",\"dez\"],weekdaysFull:[\"Domingo\",\"Segunda\",\"Terça\",\"Quarta\",\"Quinta\",\"Sexta\",\"Sábado\"],weekdaysShort:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sab\"],today:\"Hoje\",clear:\"Limpar\",close:\"Fechar\",format:\"d !de mmmm !de yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"Limpar\"});"
  },
  {
    "path": "lib/compressed/translations/ro_RO.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"ianuarie\",\"februarie\",\"martie\",\"aprilie\",\"mai\",\"iunie\",\"iulie\",\"august\",\"septembrie\",\"octombrie\",\"noiembrie\",\"decembrie\"],monthsShort:[\"ian\",\"feb\",\"mar\",\"apr\",\"mai\",\"iun\",\"iul\",\"aug\",\"sep\",\"oct\",\"noi\",\"dec\"],weekdaysFull:[\"duminică\",\"luni\",\"marţi\",\"miercuri\",\"joi\",\"vineri\",\"sâmbătă\"],weekdaysShort:[\"D\",\"L\",\"Ma\",\"Mi\",\"J\",\"V\",\"S\"],today:\"azi\",clear:\"șterge\",firstDay:1,format:\"dd mmmm yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"șterge\"});"
  },
  {
    "path": "lib/compressed/translations/ru_RU.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"января\",\"февраля\",\"марта\",\"апреля\",\"мая\",\"июня\",\"июля\",\"августа\",\"сентября\",\"октября\",\"ноября\",\"декабря\"],monthsShort:[\"янв\",\"фев\",\"мар\",\"апр\",\"май\",\"июн\",\"июл\",\"авг\",\"сен\",\"окт\",\"ноя\",\"дек\"],weekdaysFull:[\"воскресенье\",\"понедельник\",\"вторник\",\"среда\",\"четверг\",\"пятница\",\"суббота\"],weekdaysShort:[\"вс\",\"пн\",\"вт\",\"ср\",\"чт\",\"пт\",\"сб\"],today:\"сегодня\",clear:\"удалить\",close:\"закрыть\",firstDay:1,format:\"d mmmm yyyy г.\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"удалить\"});"
  },
  {
    "path": "lib/compressed/translations/sk_SK.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"január\",\"február\",\"marec\",\"apríl\",\"máj\",\"jún\",\"júl\",\"august\",\"september\",\"október\",\"november\",\"december\"],monthsShort:[\"jan\",\"feb\",\"mar\",\"apr\",\"máj\",\"jún\",\"júl\",\"aug\",\"sep\",\"okt\",\"nov\",\"dec\"],weekdaysFull:[\"nedeľa\",\"pondelok\",\"utorok\",\"streda\",\"štvrtok\",\"piatok\",\"sobota\"],weekdaysShort:[\"Ne\",\"Po\",\"Ut\",\"St\",\"Št\",\"Pi\",\"So\"],today:\"dnes\",clear:\"vymazať\",close:\"zavrieť\",firstDay:1,format:\"d. mmmm yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"vymazať\"});"
  },
  {
    "path": "lib/compressed/translations/sl_SI.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"januar\",\"februar\",\"marec\",\"april\",\"maj\",\"junij\",\"julij\",\"avgust\",\"september\",\"oktober\",\"november\",\"december\"],monthsShort:[\"jan\",\"feb\",\"mar\",\"apr\",\"maj\",\"jun\",\"jul\",\"avg\",\"sep\",\"okt\",\"nov\",\"dec\"],weekdaysFull:[\"nedelja\",\"ponedeljek\",\"torek\",\"sreda\",\"četrtek\",\"petek\",\"sobota\"],weekdaysShort:[\"ned\",\"pon\",\"tor\",\"sre\",\"čet\",\"pet\",\"sob\"],today:\"danes\",clear:\"izbriši\",close:\"zapri\",firstDay:1,format:\"d. mmmm yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"izbriši\"});"
  },
  {
    "path": "lib/compressed/translations/sr_RS_cy.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"јануар\",\"фебруар\",\"март\",\"април\",\"мај\",\"јун\",\"јул\",\"август\",\"септембар\",\"октобар\",\"новембар\",\"децембар\"],monthsShort:[\"јан.\",\"феб.\",\"март\",\"апр.\",\"мај\",\"јун\",\"јул\",\"авг.\",\"септ.\",\"окт.\",\"нов.\",\"дец.\"],weekdaysFull:[\"недеља\",\"понедељак\",\"уторак\",\"среда\",\"четвртак\",\"петак\",\"субота\"],weekdaysShort:[\"нед.\",\"пон.\",\"ут.\",\"ср.\",\"чет.\",\"пет.\",\"суб.\"],today:\"данас\",clear:\"избриши\",close:\"затвори\",firstDay:1,format:\"d. MMMM yyyy.\",formatSubmit:\"yyyy/mm/dd\",labelMonthNext:\"Следећи месец\",labelMonthPrev:\"Претходни месец\",labelMonthSelect:\"Изаберите месец\",labelYearSelect:\"Изаберите годину\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"избриши\"});"
  },
  {
    "path": "lib/compressed/translations/sr_RS_lt.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"januar\",\"februar\",\"mart\",\"april\",\"maj\",\"jun\",\"juli\",\"avgust\",\"septembar\",\"oktobar\",\"novembar\",\"decembar\"],monthsShort:[\"jan.\",\"feb.\",\"mart\",\"apr.\",\"maj\",\"jun\",\"jul\",\"avg.\",\"sept.\",\"okt.\",\"nov.\",\"dec.\"],weekdaysFull:[\"nedelja\",\"ponedeljak\",\"utorak\",\"sreda\",\"četvrtak\",\"petak\",\"subota\"],weekdaysShort:[\"ned.\",\"pon.\",\"ut.\",\"sr.\",\"čet.\",\"pet.\",\"sub.\"],today:\"danas\",clear:\"izbriši\",close:\"zatvori\",firstDay:1,format:\"d. MMMM yyyy.\",formatSubmit:\"yyyy/mm/dd\",labelMonthNext:\"Sledeći mesec\",labelMonthPrev:\"Prethodni mesec\",labelMonthSelect:\"Izaberite mesec\",labelYearSelect:\"Izaberite godinu\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"izbriši\"});"
  },
  {
    "path": "lib/compressed/translations/sv_SE.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"januari\",\"februari\",\"mars\",\"april\",\"maj\",\"juni\",\"juli\",\"augusti\",\"september\",\"oktober\",\"november\",\"december\"],monthsShort:[\"jan\",\"feb\",\"mar\",\"apr\",\"maj\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"dec\"],weekdaysFull:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"],weekdaysShort:[\"sön\",\"mån\",\"tis\",\"ons\",\"tor\",\"fre\",\"lör\"],today:\"Idag\",clear:\"Rensa\",close:\"Stäng\",firstDay:1,format:\"yyyy-mm-dd\",formatSubmit:\"yyyy/mm/dd\",labelMonthNext:\"Nästa månad\",labelMonthPrev:\"Föregående månad\",labelMonthSelect:\"Välj månad\",labelYearSelect:\"Välj år\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"Rensa\"});"
  },
  {
    "path": "lib/compressed/translations/th_TH.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"มกราคม\",\"กุมภาพันธ์\",\"มีนาคม\",\"เมษายน\",\"พฤษภาคม\",\"มิถุนายน\",\"กรกฎาคม\",\"สิงหาคม\",\"กันยายน\",\"ตุลาคม\",\"พฤศจิกายน\",\"ธันวาคม\"],monthsShort:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],weekdaysFull:[\"อาทิตย์\",\"จันทร์\",\"อังคาร\",\"พุธ\",\"พฤหัสบดี\",\"ศุกร์\",\"เสาร์\"],weekdaysShort:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],today:\"วันนี้\",clear:\"ลบ\",format:\"d mmmm yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"ลบ\"});"
  },
  {
    "path": "lib/compressed/translations/tr_TR.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Ocak\",\"Şubat\",\"Mart\",\"Nisan\",\"Mayıs\",\"Haziran\",\"Temmuz\",\"Ağustos\",\"Eylül\",\"Ekim\",\"Kasım\",\"Aralık\"],monthsShort:[\"Oca\",\"Şub\",\"Mar\",\"Nis\",\"May\",\"Haz\",\"Tem\",\"Ağu\",\"Eyl\",\"Eki\",\"Kas\",\"Ara\"],weekdaysFull:[\"Pazar\",\"Pazartesi\",\"Salı\",\"Çarşamba\",\"Perşembe\",\"Cuma\",\"Cumartesi\"],weekdaysShort:[\"Pzr\",\"Pzt\",\"Sal\",\"Çrş\",\"Prş\",\"Cum\",\"Cmt\"],today:\"Bugün\",clear:\"Sil\",close:\"Kapat\",firstDay:1,format:\"dd mmmm yyyy dddd\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"sil\"});"
  },
  {
    "path": "lib/compressed/translations/uk_UA.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"січень\",\"лютий\",\"березень\",\"квітень\",\"травень\",\"червень\",\"липень\",\"серпень\",\"вересень\",\"жовтень\",\"листопад\",\"грудень\"],monthsShort:[\"січ\",\"лют\",\"бер\",\"кві\",\"тра\",\"чер\",\"лип\",\"сер\",\"вер\",\"жов\",\"лис\",\"гру\"],weekdaysFull:[\"неділя\",\"понеділок\",\"вівторок\",\"середа\",\"четвер\",\"п‘ятниця\",\"субота\"],weekdaysShort:[\"нд\",\"пн\",\"вт\",\"ср\",\"чт\",\"пт\",\"сб\"],today:\"сьогодні\",clear:\"викреслити\",firstDay:1,format:\"dd mmmm yyyy p.\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"викреслити\"});"
  },
  {
    "path": "lib/compressed/translations/vi_VN.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"Tháng Một\",\"Tháng Hai\",\"Tháng Ba\",\"Tháng Tư\",\"Tháng Năm\",\"Tháng Sáu\",\"Tháng Bảy\",\"Tháng Tám\",\"Tháng Chín\",\"Tháng Mười\",\"Tháng Mười Một\",\"Tháng Mười Hai\"],monthsShort:[\"Một\",\"Hai\",\"Ba\",\"Tư\",\"Năm\",\"Sáu\",\"Bảy\",\"Tám\",\"Chín\",\"Mười\",\"Mười Một\",\"Mười Hai\"],weekdaysFull:[\"Chủ Nhật\",\"Thứ Hai\",\"Thứ Ba\",\"Thứ Tư\",\"Thứ Năm\",\"Thứ Sáu\",\"Thứ Bảy\"],weekdaysShort:[\"C.Nhật\",\"T.Hai\",\"T.Ba\",\"T.Tư\",\"T.Năm\",\"T.Sáu\",\"T.Bảy\"],today:\"Hôm Nay\",clear:\"Xoá\",close:\"Đóng\",firstDay:1,format:\"Bạn chọn: dddd, dd mmmm, yyyy\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"Xoá\"});"
  },
  {
    "path": "lib/compressed/translations/zh_CN.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],monthsShort:[\"一\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\",\"八\",\"九\",\"十\",\"十一\",\"十二\"],weekdaysFull:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"],weekdaysShort:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],today:\"今天\",clear:\"清除\",close:\"关闭\",firstDay:1,format:\"yyyy 年 mm 月 dd 日\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"清除\"});"
  },
  {
    "path": "lib/compressed/translations/zh_TW.js",
    "content": "jQuery.extend(jQuery.fn.pickadate.defaults,{monthsFull:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],monthsShort:[\"一\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\",\"八\",\"九\",\"十\",\"十一\",\"十二\"],weekdaysFull:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"],weekdaysShort:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],today:\"今天\",clear:\"清除\",close:\"關閉\",firstDay:1,format:\"yyyy 年 mm 月 dd 日\",formatSubmit:\"yyyy/mm/dd\"}),jQuery.extend(jQuery.fn.pickatime.defaults,{clear:\"清除\"});"
  },
  {
    "path": "lib/legacy.js",
    "content": "\n/*jshint\n   asi: true,\n   unused: true,\n   boss: true,\n   loopfunc: true,\n   eqnull: true\n */\n\n\n/*!\n * Legacy browser support\n */\n\n\n// Map array support\nif ( ![].map ) {\n    Array.prototype.map = function ( callback, self ) {\n        var array = this, len = array.length, newArray = new Array( len )\n        for ( var i = 0; i < len; i++ ) {\n            if ( i in array ) {\n                newArray[ i ] = callback.call( self, array[ i ], i, array )\n            }\n        }\n        return newArray\n    }\n}\n\n\n// Filter array support\nif ( ![].filter ) {\n    Array.prototype.filter = function( callback ) {\n        if ( this == null ) throw new TypeError()\n        var t = Object( this ), len = t.length >>> 0\n        if ( typeof callback != 'function' ) throw new TypeError()\n        var newArray = [], thisp = arguments[ 1 ]\n        for ( var i = 0; i < len; i++ ) {\n          if ( i in t ) {\n            var val = t[ i ]\n            if ( callback.call( thisp, val, i, t ) ) newArray.push( val )\n          }\n        }\n        return newArray\n    }\n}\n\n\n// Index of array support\nif ( ![].indexOf ) {\n    Array.prototype.indexOf = function( searchElement ) {\n        if ( this == null ) throw new TypeError()\n        var t = Object( this ), len = t.length >>> 0\n        if ( len === 0 ) return -1\n        var n = 0\n        if ( arguments.length > 1 ) {\n            n = Number( arguments[ 1 ] )\n            if ( n != n ) {\n                n = 0\n            }\n            else if ( n !== 0 && n != Infinity && n != -Infinity ) {\n                n = ( n > 0 || -1 ) * Math.floor( Math.abs( n ) )\n            }\n        }\n        if ( n >= len ) return -1\n        var k = n >= 0 ? n : Math.max( len - Math.abs( n ), 0 )\n        for ( ; k < len; k++ ) {\n            if ( k in t && t[ k ] === searchElement ) return k\n        }\n        return -1\n    }\n}\n\n\n/*!\n * Cross-Browser Split 1.1.1\n * Copyright 2007-2012 Steven Levithan <stevenlevithan.com>\n * Available under the MIT License\n * http://blog.stevenlevithan.com/archives/cross-browser-split\n */\nvar nativeSplit = String.prototype.split, compliantExecNpcg = /()??/.exec('')[1] === undefined\nString.prototype.split = function(separator, limit) {\n    var str = this\n    if (Object.prototype.toString.call(separator) !== '[object RegExp]') {\n        return nativeSplit.call(str, separator, limit)\n    }\n    var output = [],\n        flags = (separator.ignoreCase ? 'i' : '') +\n                (separator.multiline  ? 'm' : '') +\n                (separator.extended   ? 'x' : '') +\n                (separator.sticky     ? 'y' : ''),\n        lastLastIndex = 0,\n        separator2, match, lastIndex, lastLength\n    separator = new RegExp(separator.source, flags + 'g')\n    str += ''\n    if (!compliantExecNpcg) {\n        separator2 = new RegExp('^' + separator.source + '$(?!\\\\s)', flags)\n    }\n    limit = limit === undefined ? -1 >>> 0 : limit >>> 0\n    while (match = separator.exec(str)) {\n        lastIndex = match.index + match[0].length\n        if (lastIndex > lastLastIndex) {\n            output.push(str.slice(lastLastIndex, match.index))\n            if (!compliantExecNpcg && match.length > 1) {\n                match[0].replace(separator2, function () {\n                    for (var i = 1; i < arguments.length - 2; i++) {\n                        if (arguments[i] === undefined) {\n                            match[i] = undefined\n                        }\n                    }\n                })\n            }\n            if (match.length > 1 && match.index < str.length) {\n                Array.prototype.push.apply(output, match.slice(1))\n            }\n            lastLength = match[0].length\n            lastLastIndex = lastIndex\n            if (output.length >= limit) {\n                break\n            }\n        }\n        if (separator.lastIndex === match.index) {\n            separator.lastIndex++\n        }\n    }\n    if (lastLastIndex === str.length) {\n        if (lastLength || !separator.test('')) {\n            output.push('')\n        }\n    } else {\n        output.push(str.slice(lastLastIndex))\n    }\n    return output.length > limit ? output.slice(0, limit) : output\n};\n"
  },
  {
    "path": "lib/picker.date.js",
    "content": "/*!\n * Date picker for pickadate.js v3.6.4\n * http://amsul.github.io/pickadate.js/date.htm\n */\n\n(function ( factory ) {\n\n    // AMD.\n    if ( typeof define == 'function' && define.amd )\n        define( ['./picker', 'jquery'], factory )\n\n    // Node.js/browserify.\n    else if ( typeof exports == 'object' )\n        module.exports = factory( require('./picker.js'), require('jquery') )\n\n    // Browser globals.\n    else factory( Picker, jQuery )\n\n}(function( Picker, $ ) {\n\n\n/**\n * Globals and constants\n */\nvar DAYS_IN_WEEK = 7,\n    WEEKS_IN_CALENDAR = 6,\n    _ = Picker._\n\n\n\n/**\n * The date picker constructor\n */\nfunction DatePicker( picker, settings ) {\n\n    var calendar = this,\n        element = picker.$node[ 0 ],\n        elementValue = element.value,\n        elementDataValue = picker.$node.data( 'value' ),\n        valueString = elementDataValue || elementValue,\n        formatString = elementDataValue ? settings.formatSubmit : settings.format,\n        isRTL = function() {\n\n            return element.currentStyle ?\n\n                // For IE.\n                element.currentStyle.direction == 'rtl' :\n\n                // For normal browsers.\n                getComputedStyle( picker.$root[0] ).direction == 'rtl'\n        }\n\n    calendar.settings = settings\n    calendar.$node = picker.$node\n\n    // The queue of methods that will be used to build item objects.\n    calendar.queue = {\n        min: 'measure create',\n        max: 'measure create',\n        now: 'now create',\n        select: 'parse create validate',\n        highlight: 'parse navigate create validate',\n        view: 'parse create validate viewset',\n        disable: 'deactivate',\n        enable: 'activate'\n    }\n\n    // The component's item object.\n    calendar.item = {}\n\n    calendar.item.clear = null\n    calendar.item.disable = ( settings.disable || [] ).slice( 0 )\n    calendar.item.enable = -(function( collectionDisabled ) {\n        return collectionDisabled[ 0 ] === true ? collectionDisabled.shift() : -1\n    })( calendar.item.disable )\n\n    calendar.\n        set( 'min', settings.min ).\n        set( 'max', settings.max ).\n        set( 'now' )\n\n    // When there’s a value, set the `select`, which in turn\n    // also sets the `highlight` and `view`.\n    if ( valueString ) {\n        calendar.set( 'select', valueString, {\n            format: formatString,\n            defaultValue: true\n        })\n    }\n\n    // If there’s no value, default to highlighting “today”.\n    else {\n        calendar.\n            set( 'select', null ).\n            set( 'highlight', calendar.item.now )\n    }\n\n\n    // The keycode to movement mapping.\n    calendar.key = {\n        40: 7, // Down\n        38: -7, // Up\n        39: function() { return isRTL() ? -1 : 1 }, // Right\n        37: function() { return isRTL() ? 1 : -1 }, // Left\n        go: function( timeChange ) {\n            var highlightedObject = calendar.item.highlight,\n                targetDate = new Date( highlightedObject.year, highlightedObject.month, highlightedObject.date + timeChange )\n            calendar.set(\n                'highlight',\n                targetDate,\n                { interval: timeChange }\n            )\n            this.render()\n        }\n    }\n\n\n    // Bind some picker events.\n    picker.\n        on( 'render', function() {\n            picker.$root.find( '.' + settings.klass.selectMonth ).on( 'change', function() {\n                var value = this.value\n                if ( value ) {\n                    picker.set( 'highlight', [ picker.get( 'view' ).year, value, picker.get( 'highlight' ).date ] )\n                    picker.$root.find( '.' + settings.klass.selectMonth ).trigger( 'focus' )\n                }\n            })\n            picker.$root.find( '.' + settings.klass.selectYear ).on( 'change', function() {\n                var value = this.value\n                if ( value ) {\n                    picker.set( 'highlight', [ value, picker.get( 'view' ).month, picker.get( 'highlight' ).date ] )\n                    picker.$root.find( '.' + settings.klass.selectYear ).trigger( 'focus' )\n                }\n            })\n        }, 1 ).\n        on( 'open', function() {\n            var includeToday = ''\n            if ( calendar.disabled( calendar.get('now') ) ) {\n                includeToday = ':not(.' + settings.klass.buttonToday + ')'\n            }\n            picker.$root.find( 'button' + includeToday + ', select' ).attr( 'disabled', false )\n        }, 1 ).\n        on( 'close', function() {\n            picker.$root.find( 'button, select' ).attr( 'disabled', true )\n        }, 1 )\n\n} //DatePicker\n\n\n/**\n * Set a datepicker item object.\n */\nDatePicker.prototype.set = function( type, value, options ) {\n\n    var calendar = this,\n        calendarItem = calendar.item\n\n    // If the value is `null` just set it immediately.\n    if ( value === null ) {\n        if ( type == 'clear' ) type = 'select'\n        calendarItem[ type ] = value\n        return calendar\n    }\n\n    // Otherwise go through the queue of methods, and invoke the functions.\n    // Update this as the time unit, and set the final value as this item.\n    // * In the case of `enable`, keep the queue but set `disable` instead.\n    //   And in the case of `flip`, keep the queue but set `enable` instead.\n    calendarItem[ ( type == 'enable' ? 'disable' : type == 'flip' ? 'enable' : type ) ] = calendar.queue[ type ].split( ' ' ).map( function( method ) {\n        value = calendar[ method ]( type, value, options )\n        return value\n    }).pop()\n\n    // Check if we need to cascade through more updates.\n    if ( type == 'select' ) {\n        calendar.set( 'highlight', calendarItem.select, options )\n    }\n    else if ( type == 'highlight' ) {\n        calendar.set( 'view', calendarItem.highlight, options )\n    }\n    else if ( type.match( /^(flip|min|max|disable|enable)$/ ) ) {\n        if ( calendarItem.select && calendar.disabled( calendarItem.select ) ) {\n            calendar.set( 'select', calendarItem.select, options )\n        }\n        if ( calendarItem.highlight && calendar.disabled( calendarItem.highlight ) ) {\n            calendar.set( 'highlight', calendarItem.highlight, options )\n        }\n    }\n\n    return calendar\n} //DatePicker.prototype.set\n\n\n/**\n * Get a datepicker item object.\n */\nDatePicker.prototype.get = function( type ) {\n    return this.item[ type ]\n} //DatePicker.prototype.get\n\n\n/**\n * Create a picker date object.\n */\nDatePicker.prototype.create = function( type, value, options ) {\n\n    var isInfiniteValue,\n        calendar = this\n\n    // If there’s no value, use the type as the value.\n    value = value === undefined ? type : value\n\n\n    // If it’s infinity, update the value.\n    if ( value == -Infinity || value == Infinity ) {\n        isInfiniteValue = value\n    }\n\n    // If it’s an object, use the native date object.\n    else if ( $.isPlainObject( value ) && _.isInteger( value.pick ) ) {\n        value = value.obj\n    }\n\n    // If it’s an array, convert it into a date and make sure\n    // that it’s a valid date – otherwise default to today.\n    else if ( $.isArray( value ) ) {\n        value = new Date( value[ 0 ], value[ 1 ], value[ 2 ] )\n        value = _.isDate( value ) ? value : calendar.create().obj\n    }\n\n    // If it’s a number or date object, make a normalized date.\n    else if ( _.isInteger( value ) || _.isDate( value ) ) {\n        value = calendar.normalize( new Date( value ), options )\n    }\n\n    // If it’s a literal true or any other case, set it to now.\n    else /*if ( value === true )*/ {\n        value = calendar.now( type, value, options )\n    }\n\n    // Return the compiled object.\n    return {\n        year: isInfiniteValue || value.getFullYear(),\n        month: isInfiniteValue || value.getMonth(),\n        date: isInfiniteValue || value.getDate(),\n        day: isInfiniteValue || value.getDay(),\n        obj: isInfiniteValue || value,\n        pick: isInfiniteValue || value.getTime()\n    }\n} //DatePicker.prototype.create\n\n\n/**\n * Create a range limit object using an array, date object,\n * literal “true”, or integer relative to another time.\n */\nDatePicker.prototype.createRange = function( from, to ) {\n\n    var calendar = this,\n        createDate = function( date ) {\n            if ( date === true || $.isArray( date ) || _.isDate( date ) ) {\n                return calendar.create( date )\n            }\n            return date\n        }\n\n    // Create objects if possible.\n    if ( !_.isInteger( from ) ) {\n        from = createDate( from )\n    }\n    if ( !_.isInteger( to ) ) {\n        to = createDate( to )\n    }\n\n    // Create relative dates.\n    if ( _.isInteger( from ) && $.isPlainObject( to ) ) {\n        from = [ to.year, to.month, to.date + from ];\n    }\n    else if ( _.isInteger( to ) && $.isPlainObject( from ) ) {\n        to = [ from.year, from.month, from.date + to ];\n    }\n\n    return {\n        from: createDate( from ),\n        to: createDate( to )\n    }\n} //DatePicker.prototype.createRange\n\n\n/**\n * Check if a date unit falls within a date range object.\n */\nDatePicker.prototype.withinRange = function( range, dateUnit ) {\n    range = this.createRange(range.from, range.to)\n    return dateUnit.pick >= range.from.pick && dateUnit.pick <= range.to.pick\n}\n\n\n/**\n * Check if two date range objects overlap.\n */\nDatePicker.prototype.overlapRanges = function( one, two ) {\n\n    var calendar = this\n\n    // Convert the ranges into comparable dates.\n    one = calendar.createRange( one.from, one.to )\n    two = calendar.createRange( two.from, two.to )\n\n    return calendar.withinRange( one, two.from ) || calendar.withinRange( one, two.to ) ||\n        calendar.withinRange( two, one.from ) || calendar.withinRange( two, one.to )\n}\n\n\n/**\n * Get the date today.\n */\nDatePicker.prototype.now = function( type, value, options ) {\n    value = new Date()\n    if ( options && options.rel ) {\n        value.setDate( value.getDate() + options.rel )\n    }\n    return this.normalize( value, options )\n}\n\n\n/**\n * Navigate to next/prev month.\n */\nDatePicker.prototype.navigate = function( type, value, options ) {\n\n    var targetDateObject,\n        targetYear,\n        targetMonth,\n        targetDate,\n        isTargetArray = $.isArray( value ),\n        isTargetObject = $.isPlainObject( value ),\n        viewsetObject = this.item.view/*,\n        safety = 100*/\n\n\n    if ( isTargetArray || isTargetObject ) {\n\n        if ( isTargetObject ) {\n            targetYear = value.year\n            targetMonth = value.month\n            targetDate = value.date\n        }\n        else {\n            targetYear = +value[0]\n            targetMonth = +value[1]\n            targetDate = +value[2]\n        }\n\n        // If we’re navigating months but the view is in a different\n        // month, navigate to the view’s year and month.\n        if ( options && options.nav && viewsetObject && viewsetObject.month !== targetMonth ) {\n            targetYear = viewsetObject.year\n            targetMonth = viewsetObject.month\n        }\n\n        // Figure out the expected target year and month.\n        targetDateObject = new Date( targetYear, targetMonth + ( options && options.nav ? options.nav : 0 ), 1 )\n        targetYear = targetDateObject.getFullYear()\n        targetMonth = targetDateObject.getMonth()\n\n        // If the month we’re going to doesn’t have enough days,\n        // keep decreasing the date until we reach the month’s last date.\n        while ( /*safety &&*/ new Date( targetYear, targetMonth, targetDate ).getMonth() !== targetMonth ) {\n            targetDate -= 1\n            /*safety -= 1\n            if ( !safety ) {\n                throw 'Fell into an infinite loop while navigating to ' + new Date( targetYear, targetMonth, targetDate ) + '.'\n            }*/\n        }\n\n        value = [ targetYear, targetMonth, targetDate ]\n    }\n\n    return value\n} //DatePicker.prototype.navigate\n\n\n/**\n * Normalize a date by setting the hours to midnight.\n */\nDatePicker.prototype.normalize = function( value/*, options*/ ) {\n    value.setHours( 0, 0, 0, 0 )\n    return value\n}\n\n\n/**\n * Measure the range of dates.\n */\nDatePicker.prototype.measure = function( type, value/*, options*/ ) {\n\n    var calendar = this\n    \n    // If it's an integer, get a date relative to today.\n    if ( _.isInteger( value ) ) {\n        value = calendar.now( type, value, { rel: value } )\n    }\n\n    // If it’s anything false-y, remove the limits.\n    else if ( !value ) {\n        value = type == 'min' ? -Infinity : Infinity\n    }\n\n    // If it’s a string, parse it.\n    else if ( typeof value == 'string' ) {\n        value = calendar.parse( type, value )\n    }\n\n    return value\n} ///DatePicker.prototype.measure\n\n\n/**\n * Create a viewset object based on navigation.\n */\nDatePicker.prototype.viewset = function( type, dateObject/*, options*/ ) {\n    return this.create([ dateObject.year, dateObject.month, 1 ])\n}\n\n\n/**\n * Validate a date as enabled and shift if needed.\n */\nDatePicker.prototype.validate = function( type, dateObject, options ) {\n\n    var calendar = this,\n\n        // Keep a reference to the original date.\n        originalDateObject = dateObject,\n\n        // Make sure we have an interval.\n        interval = options && options.interval ? options.interval : 1,\n\n        // Check if the calendar enabled dates are inverted.\n        isFlippedBase = calendar.item.enable === -1,\n\n        // Check if we have any enabled dates after/before now.\n        hasEnabledBeforeTarget, hasEnabledAfterTarget,\n\n        // The min & max limits.\n        minLimitObject = calendar.item.min,\n        maxLimitObject = calendar.item.max,\n\n        // Check if we’ve reached the limit during shifting.\n        reachedMin, reachedMax,\n\n        // Check if the calendar is inverted and at least one weekday is enabled.\n        hasEnabledWeekdays = isFlippedBase && calendar.item.disable.filter( function( value ) {\n\n            // If there’s a date, check where it is relative to the target.\n            if ( $.isArray( value ) ) {\n                var dateTime = calendar.create( value ).pick\n                if ( dateTime < dateObject.pick ) hasEnabledBeforeTarget = true\n                else if ( dateTime > dateObject.pick ) hasEnabledAfterTarget = true\n            }\n\n            // Return only integers for enabled weekdays.\n            return _.isInteger( value )\n        }).length/*,\n\n        safety = 100*/\n\n\n\n    // Cases to validate for:\n    // [1] Not inverted and date disabled.\n    // [2] Inverted and some dates enabled.\n    // [3] Not inverted and out of range.\n    //\n    // Cases to **not** validate for:\n    // • Navigating months.\n    // • Not inverted and date enabled.\n    // • Inverted and all dates disabled.\n    // • ..and anything else.\n    if ( !options || (!options.nav && !options.defaultValue) ) if (\n        /* 1 */ ( !isFlippedBase && calendar.disabled( dateObject ) ) ||\n        /* 2 */ ( isFlippedBase && calendar.disabled( dateObject ) && ( hasEnabledWeekdays || hasEnabledBeforeTarget || hasEnabledAfterTarget ) ) ||\n        /* 3 */ ( !isFlippedBase && (dateObject.pick <= minLimitObject.pick || dateObject.pick >= maxLimitObject.pick) )\n    ) {\n\n\n        // When inverted, flip the direction if there aren’t any enabled weekdays\n        // and there are no enabled dates in the direction of the interval.\n        if ( isFlippedBase && !hasEnabledWeekdays && ( ( !hasEnabledAfterTarget && interval > 0 ) || ( !hasEnabledBeforeTarget && interval < 0 ) ) ) {\n            interval *= -1\n        }\n\n\n        // Keep looping until we reach an enabled date.\n        while ( /*safety &&*/ calendar.disabled( dateObject ) ) {\n\n            /*safety -= 1\n            if ( !safety ) {\n                throw 'Fell into an infinite loop while validating ' + dateObject.obj + '.'\n            }*/\n\n\n            // If we’ve looped into the next/prev month with a large interval, return to the original date and flatten the interval.\n            if ( Math.abs( interval ) > 1 && ( dateObject.month < originalDateObject.month || dateObject.month > originalDateObject.month ) ) {\n                dateObject = originalDateObject\n                interval = interval > 0 ? 1 : -1\n            }\n\n\n            // If we’ve reached the min/max limit, reverse the direction, flatten the interval and set it to the limit.\n            if ( dateObject.pick <= minLimitObject.pick ) {\n                reachedMin = true\n                interval = 1\n                dateObject = calendar.create([\n                    minLimitObject.year,\n                    minLimitObject.month,\n                    minLimitObject.date + (dateObject.pick === minLimitObject.pick ? 0 : -1)\n                ])\n            }\n            else if ( dateObject.pick >= maxLimitObject.pick ) {\n                reachedMax = true\n                interval = -1\n                dateObject = calendar.create([\n                    maxLimitObject.year,\n                    maxLimitObject.month,\n                    maxLimitObject.date + (dateObject.pick === maxLimitObject.pick ? 0 : 1)\n                ])\n            }\n\n\n            // If we’ve reached both limits, just break out of the loop.\n            if ( reachedMin && reachedMax ) {\n                break\n            }\n\n\n            // Finally, create the shifted date using the interval and keep looping.\n            dateObject = calendar.create([ dateObject.year, dateObject.month, dateObject.date + interval ])\n        }\n\n    } //endif\n\n\n    // Return the date object settled on.\n    return dateObject\n} //DatePicker.prototype.validate\n\n\n/**\n * Check if a date is disabled.\n */\nDatePicker.prototype.disabled = function( dateToVerify ) {\n\n    var\n        calendar = this,\n\n        // Filter through the disabled dates to check if this is one.\n        isDisabledMatch = calendar.item.disable.filter( function( dateToDisable ) {\n\n            // If the date is a number, match the weekday with 0index and `firstDay` check.\n            if ( _.isInteger( dateToDisable ) ) {\n                return dateToVerify.day === ( calendar.settings.firstDay ? dateToDisable : dateToDisable - 1 ) % 7\n            }\n\n            // If it’s an array or a native JS date, create and match the exact date.\n            if ( $.isArray( dateToDisable ) || _.isDate( dateToDisable ) ) {\n                return dateToVerify.pick === calendar.create( dateToDisable ).pick\n            }\n\n            // If it’s an object, match a date within the “from” and “to” range.\n            if ( $.isPlainObject( dateToDisable ) ) {\n                return calendar.withinRange( dateToDisable, dateToVerify )\n            }\n        })\n\n    // If this date matches a disabled date, confirm it’s not inverted.\n    isDisabledMatch = isDisabledMatch.length && !isDisabledMatch.filter(function( dateToDisable ) {\n        return $.isArray( dateToDisable ) && dateToDisable[3] == 'inverted' ||\n            $.isPlainObject( dateToDisable ) && dateToDisable.inverted\n    }).length\n\n    // Check the calendar “enabled” flag and respectively flip the\n    // disabled state. Then also check if it’s beyond the min/max limits.\n    return calendar.item.enable === -1 ? !isDisabledMatch : isDisabledMatch ||\n        dateToVerify.pick < calendar.item.min.pick ||\n        dateToVerify.pick > calendar.item.max.pick\n\n} //DatePicker.prototype.disabled\n\n\n/**\n * Parse a string into a usable type.\n */\nDatePicker.prototype.parse = function( type, value, options ) {\n\n    var calendar = this,\n        parsingObject = {}\n\n    // If it’s already parsed, we’re good.\n    if ( !value || typeof value != 'string' ) {\n        return value\n    }\n\n    // We need a `.format` to parse the value with.\n    if ( !( options && options.format ) ) {\n        options = options || {}\n        options.format = calendar.settings.format\n    }\n\n    // Convert the format into an array and then map through it.\n    calendar.formats.toArray( options.format ).map( function( label ) {\n\n        var\n            // Grab the formatting label.\n            formattingLabel = calendar.formats[ label ],\n\n            // The format length is from the formatting label function or the\n            // label length without the escaping exclamation (!) mark.\n            formatLength = formattingLabel ? _.trigger( formattingLabel, calendar, [ value, parsingObject ] ) : label.replace( /^!/, '' ).length\n\n        // If there's a format label, split the value up to the format length.\n        // Then add it to the parsing object with appropriate label.\n        if ( formattingLabel ) {\n            parsingObject[ label ] = value.substr( 0, formatLength )\n        }\n\n        // Update the value as the substring from format length to end.\n        value = value.substr( formatLength )\n    })\n\n    // Compensate for month 0index.\n    return [\n        parsingObject.yyyy || parsingObject.yy,\n        +( parsingObject.mm || parsingObject.m ) - 1,\n        parsingObject.dd || parsingObject.d\n    ]\n} //DatePicker.prototype.parse\n\n\n/**\n * Various formats to display the object in.\n */\nDatePicker.prototype.formats = (function() {\n\n    // Return the length of the first word in a collection.\n    function getWordLengthFromCollection( string, collection, dateObject ) {\n\n        // Grab the first word from the string.\n        // Regex pattern from http://stackoverflow.com/q/150033\n        var word = string.match( /[^\\x00-\\x7F]+|[a-zA-Z0-9_\\u0080-\\u00FF]+/ )[ 0 ]\n\n        // If there's no month index, add it to the date object\n        if ( !dateObject.mm && !dateObject.m ) {\n            dateObject.m = collection.indexOf( word ) + 1\n        }\n\n        // Return the length of the word.\n        return word.length\n    }\n\n    // Get the length of the first word in a string.\n    function getFirstWordLength( string ) {\n        return string.match( /[a-zA-Z0-9_\\u0080-\\u00FF]+/ )[ 0 ].length\n    }\n\n    return {\n\n        d: function( string, dateObject ) {\n\n            // If there's string, then get the digits length.\n            // Otherwise return the selected date.\n            return string ? _.digits( string ) : dateObject.date\n        },\n        dd: function( string, dateObject ) {\n\n            // If there's a string, then the length is always 2.\n            // Otherwise return the selected date with a leading zero.\n            return string ? 2 : _.lead( dateObject.date )\n        },\n        ddd: function( string, dateObject ) {\n\n            // If there's a string, then get the length of the first word.\n            // Otherwise return the short selected weekday.\n            return string ? getFirstWordLength( string ) : this.settings.weekdaysShort[ dateObject.day ]\n        },\n        dddd: function( string, dateObject ) {\n\n            // If there's a string, then get the length of the first word.\n            // Otherwise return the full selected weekday.\n            return string ? getFirstWordLength( string ) : this.settings.weekdaysFull[ dateObject.day ]\n        },\n        m: function( string, dateObject ) {\n\n            // If there's a string, then get the length of the digits\n            // Otherwise return the selected month with 0index compensation.\n            return string ? _.digits( string ) : dateObject.month + 1\n        },\n        mm: function( string, dateObject ) {\n\n            // If there's a string, then the length is always 2.\n            // Otherwise return the selected month with 0index and leading zero.\n            return string ? 2 : _.lead( dateObject.month + 1 )\n        },\n        mmm: function( string, dateObject ) {\n\n            var collection = this.settings.monthsShort\n\n            // If there's a string, get length of the relevant month from the short\n            // months collection. Otherwise return the selected month from that collection.\n            return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ]\n        },\n        mmmm: function( string, dateObject ) {\n\n            var collection = this.settings.monthsFull\n\n            // If there's a string, get length of the relevant month from the full\n            // months collection. Otherwise return the selected month from that collection.\n            return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ]\n        },\n        yy: function( string, dateObject ) {\n\n            // If there's a string, then the length is always 2.\n            // Otherwise return the selected year by slicing out the first 2 digits.\n            return string ? 2 : ( '' + dateObject.year ).slice( 2 )\n        },\n        yyyy: function( string, dateObject ) {\n\n            // If there's a string, then the length is always 4.\n            // Otherwise return the selected year.\n            return string ? 4 : dateObject.year\n        },\n\n        // Create an array by splitting the formatting string passed.\n        toArray: function( formatString ) { return formatString.split( /(d{1,4}|m{1,4}|y{4}|yy|!.)/g ) },\n\n        // Format an object into a string using the formatting options.\n        toString: function ( formatString, itemObject ) {\n            var calendar = this\n            return calendar.formats.toArray( formatString ).map( function( label ) {\n                return _.trigger( calendar.formats[ label ], calendar, [ 0, itemObject ] ) || label.replace( /^!/, '' )\n            }).join( '' )\n        }\n    }\n})() //DatePicker.prototype.formats\n\n\n\n\n/**\n * Check if two date units are the exact.\n */\nDatePicker.prototype.isDateExact = function( one, two ) {\n\n    var calendar = this\n\n    // When we’re working with weekdays, do a direct comparison.\n    if (\n        ( _.isInteger( one ) && _.isInteger( two ) ) ||\n        ( typeof one == 'boolean' && typeof two == 'boolean' )\n     ) {\n        return one === two\n    }\n\n    // When we’re working with date representations, compare the “pick” value.\n    if (\n        ( _.isDate( one ) || $.isArray( one ) ) &&\n        ( _.isDate( two ) || $.isArray( two ) )\n    ) {\n        return calendar.create( one ).pick === calendar.create( two ).pick\n    }\n\n    // When we’re working with range objects, compare the “from” and “to”.\n    if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {\n        return calendar.isDateExact( one.from, two.from ) && calendar.isDateExact( one.to, two.to )\n    }\n\n    return false\n}\n\n\n/**\n * Check if two date units overlap.\n */\nDatePicker.prototype.isDateOverlap = function( one, two ) {\n\n    var calendar = this,\n        firstDay = calendar.settings.firstDay ? 1 : 0\n\n    // When we’re working with a weekday index, compare the days.\n    if ( _.isInteger( one ) && ( _.isDate( two ) || $.isArray( two ) ) ) {\n        one = one % 7 + firstDay\n        return one === calendar.create( two ).day + 1\n    }\n    if ( _.isInteger( two ) && ( _.isDate( one ) || $.isArray( one ) ) ) {\n        two = two % 7 + firstDay\n        return two === calendar.create( one ).day + 1\n    }\n\n    // When we’re working with range objects, check if the ranges overlap.\n    if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {\n        return calendar.overlapRanges( one, two )\n    }\n\n    return false\n}\n\n\n/**\n * Flip the “enabled” state.\n */\nDatePicker.prototype.flipEnable = function(val) {\n    var itemObject = this.item\n    itemObject.enable = val || (itemObject.enable == -1 ? 1 : -1)\n}\n\n\n/**\n * Mark a collection of dates as “disabled”.\n */\nDatePicker.prototype.deactivate = function( type, datesToDisable ) {\n\n    var calendar = this,\n        disabledItems = calendar.item.disable.slice(0)\n\n\n    // If we’re flipping, that’s all we need to do.\n    if ( datesToDisable == 'flip' ) {\n        calendar.flipEnable()\n    }\n\n    else if ( datesToDisable === false ) {\n        calendar.flipEnable(1)\n        disabledItems = []\n    }\n\n    else if ( datesToDisable === true ) {\n        calendar.flipEnable(-1)\n        disabledItems = []\n    }\n\n    // Otherwise go through the dates to disable.\n    else {\n\n        datesToDisable.map(function( unitToDisable ) {\n\n            var matchFound\n\n            // When we have disabled items, check for matches.\n            // If something is matched, immediately break out.\n            for ( var index = 0; index < disabledItems.length; index += 1 ) {\n                if ( calendar.isDateExact( unitToDisable, disabledItems[index] ) ) {\n                    matchFound = true\n                    break\n                }\n            }\n\n            // If nothing was found, add the validated unit to the collection.\n            if ( !matchFound ) {\n                if (\n                    _.isInteger( unitToDisable ) ||\n                    _.isDate( unitToDisable ) ||\n                    $.isArray( unitToDisable ) ||\n                    ( $.isPlainObject( unitToDisable ) && unitToDisable.from && unitToDisable.to )\n                ) {\n                    disabledItems.push( unitToDisable )\n                }\n            }\n        })\n    }\n\n    // Return the updated collection.\n    return disabledItems\n} //DatePicker.prototype.deactivate\n\n\n/**\n * Mark a collection of dates as “enabled”.\n */\nDatePicker.prototype.activate = function( type, datesToEnable ) {\n\n    var calendar = this,\n        disabledItems = calendar.item.disable,\n        disabledItemsCount = disabledItems.length\n\n    // If we’re flipping, that’s all we need to do.\n    if ( datesToEnable == 'flip' ) {\n        calendar.flipEnable()\n    }\n\n    else if ( datesToEnable === true ) {\n        calendar.flipEnable(1)\n        disabledItems = []\n    }\n\n    else if ( datesToEnable === false ) {\n        calendar.flipEnable(-1)\n        disabledItems = []\n    }\n\n    // Otherwise go through the disabled dates.\n    else {\n\n        datesToEnable.map(function( unitToEnable ) {\n\n            var matchFound,\n                disabledUnit,\n                index,\n                isExactRange\n\n            // Go through the disabled items and try to find a match.\n            for ( index = 0; index < disabledItemsCount; index += 1 ) {\n\n                disabledUnit = disabledItems[index]\n\n                // When an exact match is found, remove it from the collection.\n                if ( calendar.isDateExact( disabledUnit, unitToEnable ) ) {\n                    matchFound = disabledItems[index] = null\n                    isExactRange = true\n                    break\n                }\n\n                // When an overlapped match is found, add the “inverted” state to it.\n                else if ( calendar.isDateOverlap( disabledUnit, unitToEnable ) ) {\n                    if ( $.isPlainObject( unitToEnable ) ) {\n                        unitToEnable.inverted = true\n                        matchFound = unitToEnable\n                    }\n                    else if ( $.isArray( unitToEnable ) ) {\n                        matchFound = unitToEnable\n                        if ( !matchFound[3] ) matchFound.push( 'inverted' )\n                    }\n                    else if ( _.isDate( unitToEnable ) ) {\n                        matchFound = [ unitToEnable.getFullYear(), unitToEnable.getMonth(), unitToEnable.getDate(), 'inverted' ]\n                    }\n                    break\n                }\n            }\n\n            // If a match was found, remove a previous duplicate entry.\n            if ( matchFound ) for ( index = 0; index < disabledItemsCount; index += 1 ) {\n                if ( calendar.isDateExact( disabledItems[index], unitToEnable ) ) {\n                    disabledItems[index] = null\n                    break\n                }\n            }\n\n            // In the event that we’re dealing with an exact range of dates,\n            // make sure there are no “inverted” dates because of it.\n            if ( isExactRange ) for ( index = 0; index < disabledItemsCount; index += 1 ) {\n                if ( calendar.isDateOverlap( disabledItems[index], unitToEnable ) ) {\n                    disabledItems[index] = null\n                    break\n                }\n            }\n\n            // If something is still matched, add it into the collection.\n            if ( matchFound ) {\n                disabledItems.push( matchFound )\n            }\n        })\n    }\n\n    // Return the updated collection.\n    return disabledItems.filter(function( val ) { return val != null })\n} //DatePicker.prototype.activate\n\n\n/**\n * Create a string for the nodes in the picker.\n */\nDatePicker.prototype.nodes = function( isOpen ) {\n\n    var\n        calendar = this,\n        settings = calendar.settings,\n        calendarItem = calendar.item,\n        nowObject = calendarItem.now,\n        selectedObject = calendarItem.select,\n        highlightedObject = calendarItem.highlight,\n        viewsetObject = calendarItem.view,\n        disabledCollection = calendarItem.disable,\n        minLimitObject = calendarItem.min,\n        maxLimitObject = calendarItem.max,\n\n\n        // Create the calendar table head using a copy of weekday labels collection.\n        // * We do a copy so we don't mutate the original array.\n        tableHead = (function( collection, fullCollection ) {\n\n            // If the first day should be Monday, move Sunday to the end.\n            if ( settings.firstDay ) {\n                collection.push( collection.shift() )\n                fullCollection.push( fullCollection.shift() )\n            }\n\n            // Create and return the table head group.\n            return _.node(\n                'thead',\n                _.node(\n                    'tr',\n                    _.group({\n                        min: 0,\n                        max: DAYS_IN_WEEK - 1,\n                        i: 1,\n                        node: 'th',\n                        item: function( counter ) {\n                            return [\n                                collection[ counter ],\n                                settings.klass.weekdays,\n                                'scope=col title=\"' + fullCollection[ counter ] + '\"'\n                            ]\n                        }\n                    })\n                )\n            ) //endreturn\n        })( ( settings.showWeekdaysFull ? settings.weekdaysFull : settings.weekdaysShort ).slice( 0 ), settings.weekdaysFull.slice( 0 ) ), //tableHead\n\n\n        // Create the nav for next/prev month.\n        createMonthNav = function( next ) {\n\n            // Otherwise, return the created month tag.\n            return _.node(\n                'div',\n                ' ',\n                settings.klass[ 'nav' + ( next ? 'Next' : 'Prev' ) ] + (\n\n                    // If the focused month is outside the range, disabled the button.\n                    ( next && viewsetObject.year >= maxLimitObject.year && viewsetObject.month >= maxLimitObject.month ) ||\n                    ( !next && viewsetObject.year <= minLimitObject.year && viewsetObject.month <= minLimitObject.month ) ?\n                    ' ' + settings.klass.navDisabled : ''\n                ),\n                'data-nav=' + ( next || -1 ) + ' ' + 'tabindex=\"0\" ' +\n                _.ariaAttr({\n                    role: 'button',\n                    controls: calendar.$node[0].id + '_table'\n                }) + ' ' +\n                'title=\"' + (next ? settings.labelMonthNext : settings.labelMonthPrev ) + '\"'\n            ) //endreturn\n        }, //createMonthNav\n\n\n        // Create the month label.\n        createMonthLabel = function() {\n\n            var monthsCollection = settings.showMonthsShort ? settings.monthsShort : settings.monthsFull\n\n            // If there are months to select, add a dropdown menu.\n            if ( settings.selectMonths ) {\n\n                return _.node( 'select',\n                    _.group({\n                        min: 0,\n                        max: 11,\n                        i: 1,\n                        node: 'option',\n                        item: function( loopedMonth ) {\n\n                            return [\n\n                                // The looped month and no classes.\n                                monthsCollection[ loopedMonth ], 0,\n\n                                // Set the value and selected index.\n                                'value=' + loopedMonth +\n                                ( viewsetObject.month == loopedMonth ? ' selected' : '' ) +\n                                (\n                                    (\n                                        ( viewsetObject.year == minLimitObject.year && loopedMonth < minLimitObject.month ) ||\n                                        ( viewsetObject.year == maxLimitObject.year && loopedMonth > maxLimitObject.month )\n                                    ) ?\n                                    ' disabled' : ''\n                                )\n                            ]\n                        }\n                    }),\n                    settings.klass.selectMonth,\n                    ( isOpen ? '' : 'disabled' ) + ' ' +\n                    _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' +\n                    'title=\"' + settings.labelMonthSelect + '\"'\n                )\n            }\n\n            // If there's a need for a month selector\n            return _.node( 'div', monthsCollection[ viewsetObject.month ], settings.klass.month )\n        }, //createMonthLabel\n\n\n        // Create the year label.\n        createYearLabel = function() {\n\n            var focusedYear = viewsetObject.year,\n\n            // If years selector is set to a literal \"true\", set it to 5. Otherwise\n            // divide in half to get half before and half after focused year.\n            numberYears = settings.selectYears === true ? 5 : ~~( settings.selectYears / 2 )\n\n            // If there are years to select, add a dropdown menu.\n            if ( numberYears ) {\n\n                var\n                    minYear = minLimitObject.year,\n                    maxYear = maxLimitObject.year,\n                    lowestYear = focusedYear - numberYears,\n                    highestYear = focusedYear + numberYears\n\n                // If the min year is greater than the lowest year, increase the highest year\n                // by the difference and set the lowest year to the min year.\n                if ( minYear > lowestYear ) {\n                    highestYear += minYear - lowestYear\n                    lowestYear = minYear\n                }\n\n                // If the max year is less than the highest year, decrease the lowest year\n                // by the lower of the two: available and needed years. Then set the\n                // highest year to the max year.\n                if ( maxYear < highestYear ) {\n\n                    var availableYears = lowestYear - minYear,\n                        neededYears = highestYear - maxYear\n\n                    lowestYear -= availableYears > neededYears ? neededYears : availableYears\n                    highestYear = maxYear\n                }\n\n                return _.node( 'select',\n                    _.group({\n                        min: lowestYear,\n                        max: highestYear,\n                        i: 1,\n                        node: 'option',\n                        item: function( loopedYear ) {\n                            return [\n\n                                // The looped year and no classes.\n                                loopedYear, 0,\n\n                                // Set the value and selected index.\n                                'value=' + loopedYear + ( focusedYear == loopedYear ? ' selected' : '' )\n                            ]\n                        }\n                    }),\n                    settings.klass.selectYear,\n                    ( isOpen ? '' : 'disabled' ) + ' ' + _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' +\n                    'title=\"' + settings.labelYearSelect + '\"'\n                )\n            }\n\n            // Otherwise just return the year focused\n            return _.node( 'div', focusedYear, settings.klass.year )\n        } //createYearLabel\n\n\n    // Create and return the entire calendar.\n    return _.node(\n        'div',\n        ( settings.selectYears ? createYearLabel() + createMonthLabel() : createMonthLabel() + createYearLabel() ) +\n        createMonthNav() + createMonthNav( 1 ),\n        settings.klass.header\n    ) + _.node(\n        'table',\n        tableHead +\n        _.node(\n            'tbody',\n            _.group({\n                min: 0,\n                max: WEEKS_IN_CALENDAR - 1,\n                i: 1,\n                node: 'tr',\n                item: function( rowCounter ) {\n\n                    // If Monday is the first day and the month starts on Sunday, shift the date back a week.\n                    var shiftDateBy = settings.firstDay && calendar.create([ viewsetObject.year, viewsetObject.month, 1 ]).day === 0 ? -7 : 0\n\n                    return [\n                        _.group({\n                            min: DAYS_IN_WEEK * rowCounter - viewsetObject.day + shiftDateBy + 1, // Add 1 for weekday 0index\n                            max: function() {\n                                return this.min + DAYS_IN_WEEK - 1\n                            },\n                            i: 1,\n                            node: 'td',\n                            item: function( targetDate ) {\n\n                                // Convert the time date from a relative date to a target date.\n                                targetDate = calendar.create([ viewsetObject.year, viewsetObject.month, targetDate + ( settings.firstDay ? 1 : 0 ) ])\n\n                                var isSelected = selectedObject && selectedObject.pick == targetDate.pick,\n                                    isHighlighted = highlightedObject && highlightedObject.pick == targetDate.pick,\n                                    isDisabled = disabledCollection && calendar.disabled( targetDate ) || targetDate.pick < minLimitObject.pick || targetDate.pick > maxLimitObject.pick,\n                                    formattedDate = _.trigger( calendar.formats.toString, calendar, [ settings.format, targetDate ] ),\n                                    calendarNodeUniqueId = settings.id + '_' + targetDate.pick\n\n                                return [\n                                    _.node(\n                                        'div',\n                                        targetDate.date,\n                                        (function( klasses ) {\n\n                                            // Add the `infocus` or `outfocus` classes based on month in view.\n                                            klasses.push( viewsetObject.month == targetDate.month ? settings.klass.infocus : settings.klass.outfocus )\n\n                                            // Add the `today` class if needed.\n                                            if ( nowObject.pick == targetDate.pick ) {\n                                                klasses.push( settings.klass.now )\n                                            }\n\n                                            // Add the `selected` class if something's selected and the time matches.\n                                            if ( isSelected ) {\n                                                klasses.push( settings.klass.selected )\n                                            }\n\n                                            // Add the `highlighted` class if something's highlighted and the time matches.\n                                            if ( isHighlighted ) {\n                                                klasses.push( settings.klass.highlighted )\n                                            }\n\n                                            // Add the `disabled` class if something's disabled and the object matches.\n                                            if ( isDisabled ) {\n                                                klasses.push( settings.klass.disabled )\n                                            }\n\n                                            return klasses.join( ' ' )\n                                        })([ settings.klass.day ]),\n                                        'data-pick=' + targetDate.pick + ' id=' + calendarNodeUniqueId + ' tabindex=\"0\" ' + _.ariaAttr({\n                                            role: 'gridcell',\n                                            label: formattedDate,\n                                            selected: isSelected && calendar.$node.val() === formattedDate ? true : null,\n                                            activedescendant: isHighlighted ? targetDate.pick : null,\n                                            disabled: isDisabled ? true : null\n                                        })\n                                    ),\n                                    ''\n                                ] //endreturn\n                            }\n                        })\n                    ] //endreturn\n                }\n            })\n        ),\n        settings.klass.table,\n        'id=\"' + calendar.$node[0].id + '_table' + '\" ' + _.ariaAttr({\n            role: 'grid',\n            controls: calendar.$node[0].id,\n            readonly: true\n        })\n    ) +\n\n    // * For Firefox forms to submit, make sure to set the buttons’ `type` attributes as “button”.\n    _.node(\n        'div',\n        _.node( 'button', settings.today, settings.klass.buttonToday,\n            'type=button data-pick=' + nowObject.pick +\n            ( isOpen && !calendar.disabled(nowObject) ? '' : ' disabled' ) + ' ' +\n            _.ariaAttr({ controls: calendar.$node[0].id }) ) +\n        _.node( 'button', settings.clear, settings.klass.buttonClear,\n            'type=button data-clear=1' +\n            ( isOpen ? '' : ' disabled' ) + ' ' +\n            _.ariaAttr({ controls: calendar.$node[0].id }) ) +\n        _.node('button', settings.close, settings.klass.buttonClose,\n            'type=button data-close=true ' +\n            ( isOpen ? '' : ' disabled' ) + ' ' +\n            _.ariaAttr({ controls: calendar.$node[0].id }) ),\n        settings.klass.footer\n    ) //endreturn\n} //DatePicker.prototype.nodes\n\n\n\n\n/**\n * The date picker defaults.\n */\nDatePicker.defaults = (function( prefix ) {\n\n    return {\n\n        // The title label to use for the month nav buttons\n        labelMonthNext: 'Next month',\n        labelMonthPrev: 'Previous month',\n\n        // The title label to use for the dropdown selectors\n        labelMonthSelect: 'Select a month',\n        labelYearSelect: 'Select a year',\n\n        // Months and weekdays\n        monthsFull: [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ],\n        monthsShort: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ],\n        weekdaysFull: [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ],\n        weekdaysShort: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ],\n\n        // Today and clear\n        today: 'Today',\n        clear: 'Clear',\n        close: 'Close',\n\n        // Picker close behavior\n        closeOnSelect: true,\n        closeOnClear: true,\n\n        // Update input value on select/clear\n        updateInput: true,\n\n        // The format to show on the `input` element\n        format: 'd mmmm, yyyy',\n\n        // Classes\n        klass: {\n\n            table: prefix + 'table',\n\n            header: prefix + 'header',\n\n            navPrev: prefix + 'nav--prev',\n            navNext: prefix + 'nav--next',\n            navDisabled: prefix + 'nav--disabled',\n\n            month: prefix + 'month',\n            year: prefix + 'year',\n\n            selectMonth: prefix + 'select--month',\n            selectYear: prefix + 'select--year',\n\n            weekdays: prefix + 'weekday',\n\n            day: prefix + 'day',\n            disabled: prefix + 'day--disabled',\n            selected: prefix + 'day--selected',\n            highlighted: prefix + 'day--highlighted',\n            now: prefix + 'day--today',\n            infocus: prefix + 'day--infocus',\n            outfocus: prefix + 'day--outfocus',\n\n            footer: prefix + 'footer',\n\n            buttonClear: prefix + 'button--clear',\n            buttonToday: prefix + 'button--today',\n            buttonClose: prefix + 'button--close'\n        }\n    }\n})( Picker.klasses().picker + '__' )\n\n\n\n\n\n/**\n * Extend the picker to add the date picker.\n */\nPicker.extend( 'pickadate', DatePicker )\n\n\n}));\n\n\n\n"
  },
  {
    "path": "lib/picker.js",
    "content": "/*!\n * pickadate.js v3.6.4, 2019/05/25\n * By Amsul, http://amsul.ca\n * Hosted on http://amsul.github.io/pickadate.js\n * Licensed under MIT\n */\n\n(function ( factory ) {\n\n    // AMD.\n    if ( typeof define == 'function' && define.amd )\n        define( 'picker', ['jquery'], factory )\n\n    // Node.js/browserify.\n    else if ( typeof exports == 'object' )\n        module.exports = factory( require('jquery') )\n\n    // Browser globals.\n    else if ( typeof window == 'object' )\n        window.Picker = factory( jQuery )\n    \n    else this.Picker = factory( jQuery )\n\n}(function( $ ) {\n\nvar $window = $( window )\nvar $document = $( document )\nvar $html = $( document.documentElement )\nvar supportsTransitions = document.documentElement.style.transition != null\n\n\n/**\n * The picker constructor that creates a blank picker.\n */\nfunction PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {\n\n    // If there’s no element, return the picker constructor.\n    if ( !ELEMENT ) return PickerConstructor\n\n\n    var\n        IS_DEFAULT_THEME = false,\n\n\n        // The state of the picker.\n        STATE = {\n            id: ELEMENT.id || 'P' + Math.abs( ~~(Math.random() * new Date()) ),\n            handlingOpen: false,\n        },\n\n\n        // Merge the defaults and options passed.\n        SETTINGS = COMPONENT ? $.extend( true, {}, COMPONENT.defaults, OPTIONS ) : OPTIONS || {},\n\n\n        // Merge the default classes with the settings classes.\n        CLASSES = $.extend( {}, PickerConstructor.klasses(), SETTINGS.klass ),\n\n\n        // The element node wrapper into a jQuery object.\n        $ELEMENT = $( ELEMENT ),\n\n\n        // Pseudo picker constructor.\n        PickerInstance = function() {\n            return this.start()\n        },\n\n\n        // The picker prototype.\n        P = PickerInstance.prototype = {\n\n            constructor: PickerInstance,\n\n            $node: $ELEMENT,\n\n\n            /**\n             * Initialize everything\n             */\n            start: function() {\n\n                // If it’s already started, do nothing.\n                if ( STATE && STATE.start ) return P\n\n\n                // Update the picker states.\n                STATE.methods = {}\n                STATE.start = true\n                STATE.open = false\n                STATE.type = ELEMENT.type\n\n\n                // Confirm focus state, convert into text input to remove UA stylings,\n                // and set as readonly to prevent keyboard popup.\n                ELEMENT.autofocus = ELEMENT == getActiveElement()\n                ELEMENT.readOnly = !SETTINGS.editable\n                SETTINGS.id = ELEMENT.id = ELEMENT.id || STATE.id\n                if ( ELEMENT.type != 'text' ) {\n                    ELEMENT.type = 'text'\n                }\n\n                // Create a new picker component with the settings.\n                P.component = new COMPONENT(P, SETTINGS)\n\n\n                // Create the picker root and then prepare it.\n                P.$root = $( '<div class=\"' + CLASSES.picker + '\" id=\"' + ELEMENT.id + '_root\" />' )\n                prepareElementRoot()\n\n\n                // Create the picker holder and then prepare it.\n                P.$holder = $( createWrappedComponent() ).appendTo( P.$root )\n                prepareElementHolder()\n\n\n                // If there’s a format for the hidden input element, create the element.\n                if ( SETTINGS.formatSubmit ) {\n                    prepareElementHidden()\n                }\n\n\n                // Prepare the input element.\n                prepareElement()\n\n\n                // Insert the hidden input as specified in the settings.\n                if ( SETTINGS.containerHidden ) $( SETTINGS.containerHidden ).append( P._hidden )\n                else $ELEMENT.after( P._hidden )\n\n\n                // Insert the root as specified in the settings.\n                if ( SETTINGS.container ) $( SETTINGS.container ).append( P.$root )\n                else $ELEMENT.after( P.$root )\n\n\n                // Bind the default component and settings events.\n                P.on({\n                    start: P.component.onStart,\n                    render: P.component.onRender,\n                    stop: P.component.onStop,\n                    open: P.component.onOpen,\n                    close: P.component.onClose,\n                    set: P.component.onSet\n                }).on({\n                    start: SETTINGS.onStart,\n                    render: SETTINGS.onRender,\n                    stop: SETTINGS.onStop,\n                    open: SETTINGS.onOpen,\n                    close: SETTINGS.onClose,\n                    set: SETTINGS.onSet\n                })\n\n\n                // Once we’re all set, check the theme in use.\n                IS_DEFAULT_THEME = isUsingDefaultTheme( P.$holder[0] )\n\n\n                // If the element has autofocus, open the picker.\n                if ( ELEMENT.autofocus ) {\n                    P.open()\n                }\n\n\n                // Trigger queued the “start” and “render” events.\n                return P.trigger( 'start' ).trigger( 'render' )\n            }, //start\n\n\n            /**\n             * Render a new picker\n             */\n            render: function( entireComponent ) {\n\n                // Insert a new component holder in the root or box.\n                if ( entireComponent ) {\n                    P.$holder = $( createWrappedComponent() )\n                    prepareElementHolder()\n                    P.$root.html( P.$holder )\n                }\n                else P.$root.find( '.' + CLASSES.box ).html( P.component.nodes( STATE.open ) )\n\n                // Trigger the queued “render” events.\n                return P.trigger( 'render' )\n            }, //render\n\n\n            /**\n             * Destroy everything\n             */\n            stop: function() {\n\n                // If it’s already stopped, do nothing.\n                if ( !STATE.start ) return P\n\n                // Then close the picker.\n                P.close()\n\n                // Remove the hidden field.\n                if ( P._hidden ) {\n                    P._hidden.parentNode.removeChild( P._hidden )\n                }\n\n                // Remove the root.\n                P.$root.remove()\n\n                // Remove the input class, remove the stored data, and unbind\n                // the events (after a tick for IE - see `P.close`).\n                $ELEMENT.removeClass( CLASSES.input ).removeData( NAME )\n                setTimeout( function() {\n                    $ELEMENT.off( '.' + STATE.id )\n                }, 0)\n\n                // Restore the element state\n                ELEMENT.type = STATE.type\n                ELEMENT.readOnly = false\n\n                // Trigger the queued “stop” events.\n                P.trigger( 'stop' )\n\n                // Reset the picker states.\n                STATE.methods = {}\n                STATE.start = false\n\n                return P\n            }, //stop\n\n\n            /**\n             * Open up the picker\n             */\n            open: function( dontGiveFocus ) {\n\n                // If it’s already open, do nothing.\n                if ( STATE.open ) return P\n\n                // Add the “active” class.\n                $ELEMENT.addClass( CLASSES.active )\n\n                // * A Firefox bug, when `html` has `overflow:hidden`, results in\n                //   killing transitions :(. So add the “opened” state on the next tick.\n                //   Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289\n                setTimeout( function() {\n\n                    // Add the “opened” class to the picker root.\n                    P.$root.addClass( CLASSES.opened )\n                    aria( P.$root[0], 'hidden', false )\n\n                }, 0 )\n\n                // If we have to give focus, bind the element and doc events.\n                if ( dontGiveFocus !== false ) {\n\n                    // Set it as open.\n                    STATE.open = true\n\n                    // Prevent the page from scrolling.\n                    if ( IS_DEFAULT_THEME ) {\n                        $('body').\n                            css( 'overflow', 'hidden' ).\n                            css( 'padding-right', '+=' + getScrollbarWidth() )\n                    }\n\n                    // Pass focus to the root element’s jQuery object.\n                    focusPickerOnceOpened()\n\n                    // Bind the document events.\n                    $document.on( 'click.' + STATE.id + ' focusin.' + STATE.id, function( event ) {\n                        // If the picker is currently midway through processing\n                        // the opening sequence of events then don't handle clicks\n                        // on any part of the DOM. This is caused by a bug in Chrome 73\n                        // where a click event is being generated with the incorrect\n                        // path in it.\n                        // In short, if someone does a click that finishes after the\n                        // new element is created then the path contains only the\n                        // parent element and not the input element itself.\n                        if (STATE.handlingOpen) {\n                          return;\n                        }\n\n                        var target = getRealEventTarget( event, ELEMENT )\n\n                        // If the target of the event is not the element, close the picker picker.\n                        // * Don’t worry about clicks or focusins on the root because those don’t bubble up.\n                        //   Also, for Firefox, a click on an `option` element bubbles up directly\n                        //   to the doc. So make sure the target wasn't the doc.\n                        // * In Firefox stopPropagation() doesn’t prevent right-click events from bubbling,\n                        //   which causes the picker to unexpectedly close when right-clicking it. So make\n                        //   sure the event wasn’t a right-click.\n                        // * In Chrome 62 and up, password autofill causes a simulated focusin event which\n                        //   closes the picker.\n                        if ( ! event.isSimulated && target != ELEMENT && target != document && event.which != 3 ) {\n\n                            // If the target was the holder that covers the screen,\n                            // keep the element focused to maintain tabindex.\n                            P.close( target === P.$holder[0] )\n                        }\n\n                    }).on( 'keydown.' + STATE.id, function( event ) {\n\n                        var\n                            // Get the keycode.\n                            keycode = event.keyCode,\n\n                            // Translate that to a selection change.\n                            keycodeToMove = P.component.key[ keycode ],\n\n                            // Grab the target.\n                            target = getRealEventTarget( event, ELEMENT )\n\n\n                        // On escape, close the picker and give focus.\n                        if ( keycode == 27 ) {\n                            P.close( true )\n                        }\n\n\n                        // Check if there is a key movement or “enter” keypress on the element.\n                        else if ( target == P.$holder[0] && ( keycodeToMove || keycode == 13 ) ) {\n\n                            // Prevent the default action to stop page movement.\n                            event.preventDefault()\n\n                            // Trigger the key movement action.\n                            if ( keycodeToMove ) {\n                                PickerConstructor._.trigger( P.component.key.go, P, [ PickerConstructor._.trigger( keycodeToMove ) ] )\n                            }\n\n                            // On “enter”, if the highlighted item isn’t disabled, set the value and close.\n                            else if ( !P.$root.find( '.' + CLASSES.highlighted ).hasClass( CLASSES.disabled ) ) {\n                                P.set( 'select', P.component.item.highlight )\n                                if ( SETTINGS.closeOnSelect ) {\n                                    P.close( true )\n                                }\n                            }\n                        }\n\n\n                        // If the target is within the root and “enter” is pressed,\n                        // prevent the default action and trigger a click on the target instead.\n                        else if ( $.contains( P.$root[0], target ) && keycode == 13 ) {\n                            event.preventDefault()\n                            target.click()\n                        }\n                    })\n                }\n\n                // Trigger the queued “open” events.\n                return P.trigger( 'open' )\n            }, //open\n\n\n            /**\n             * Close the picker\n             */\n            close: function( giveFocus ) {\n\n                // If we need to give focus, do it before changing states.\n                if ( giveFocus ) {\n                    if ( SETTINGS.editable ) {\n                        ELEMENT.focus()\n                    }\n                    else {\n                        // ....ah yes! It would’ve been incomplete without a crazy workaround for IE :|\n                        // The focus is triggered *after* the close has completed - causing it\n                        // to open again. So unbind and rebind the event at the next tick.\n                        P.$holder.off( 'focus.toOpen' ).focus()\n                        setTimeout( function() {\n                            P.$holder.on( 'focus.toOpen', handleFocusToOpenEvent )\n                        }, 0 )\n                    }\n                }\n\n                // Remove the “active” class.\n                $ELEMENT.removeClass( CLASSES.active )\n\n                // * A Firefox bug, when `html` has `overflow:hidden`, results in\n                //   killing transitions :(. So remove the “opened” state on the next tick.\n                //   Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289\n                setTimeout( function() {\n\n                    // Remove the “opened” and “focused” class from the picker root.\n                    P.$root.removeClass( CLASSES.opened + ' ' + CLASSES.focused )\n                    aria( P.$root[0], 'hidden', true )\n\n                }, 0 )\n\n                // If it’s already closed, do nothing more.\n                if ( !STATE.open ) return P\n\n                // Set it as closed.\n                STATE.open = false\n\n                // Allow the page to scroll.\n                if ( IS_DEFAULT_THEME ) {\n                    $('body').\n                        css( 'overflow', '' ).\n                        css( 'padding-right', '-=' + getScrollbarWidth() )\n                }\n\n                // Unbind the document events.\n                $document.off( '.' + STATE.id )\n\n                // Trigger the queued “close” events.\n                return P.trigger( 'close' )\n            }, //close\n\n\n            /**\n             * Clear the values\n             */\n            clear: function( options ) {\n                return P.set( 'clear', null, options )\n            }, //clear\n\n\n            /**\n             * Set something\n             */\n            set: function( thing, value, options ) {\n\n                var thingItem, thingValue,\n                    thingIsObject = $.isPlainObject( thing ),\n                    thingObject = thingIsObject ? thing : {}\n\n                // Make sure we have usable options.\n                options = thingIsObject && $.isPlainObject( value ) ? value : options || {}\n\n                if ( thing ) {\n\n                    // If the thing isn’t an object, make it one.\n                    if ( !thingIsObject ) {\n                        thingObject[ thing ] = value\n                    }\n\n                    // Go through the things of items to set.\n                    for ( thingItem in thingObject ) {\n\n                        // Grab the value of the thing.\n                        thingValue = thingObject[ thingItem ]\n\n                        // First, if the item exists and there’s a value, set it.\n                        if ( thingItem in P.component.item ) {\n                            if ( thingValue === undefined ) thingValue = null\n                            P.component.set( thingItem, thingValue, options )\n                        }\n\n                        // Then, check to update the element value and broadcast a change.\n                        if ( ( thingItem == 'select' || thingItem == 'clear' ) && SETTINGS.updateInput ) {\n                            $ELEMENT.\n                                val( thingItem == 'clear' ? '' : P.get( thingItem, SETTINGS.format ) ).\n                                trigger( 'change' )\n                        }\n                    }\n\n                    // Render a new picker.\n                    P.render()\n                }\n\n                // When the method isn’t muted, trigger queued “set” events and pass the `thingObject`.\n                return options.muted ? P : P.trigger( 'set', thingObject )\n            }, //set\n\n\n            /**\n             * Get something\n             */\n            get: function( thing, format ) {\n\n                // Make sure there’s something to get.\n                thing = thing || 'value'\n\n                // If a picker state exists, return that.\n                if ( STATE[ thing ] != null ) {\n                    return STATE[ thing ]\n                }\n\n                // Return the submission value, if that.\n                if ( thing == 'valueSubmit' ) {\n                    if ( P._hidden ) {\n                        return P._hidden.value\n                    }\n                    thing = 'value'\n                }\n\n                // Return the value, if that.\n                if ( thing == 'value' ) {\n                    return ELEMENT.value\n                }\n\n                // Check if a component item exists, return that.\n                if ( thing in P.component.item ) {\n                    if ( typeof format == 'string' ) {\n                        var thingValue = P.component.get( thing )\n                        return thingValue ?\n                            PickerConstructor._.trigger(\n                                P.component.formats.toString,\n                                P.component,\n                                [ format, thingValue ]\n                            ) : ''\n                    }\n                    return P.component.get( thing )\n                }\n            }, //get\n\n\n\n            /**\n             * Bind events on the things.\n             */\n            on: function( thing, method, internal ) {\n\n                var thingName, thingMethod,\n                    thingIsObject = $.isPlainObject( thing ),\n                    thingObject = thingIsObject ? thing : {}\n\n                if ( thing ) {\n\n                    // If the thing isn’t an object, make it one.\n                    if ( !thingIsObject ) {\n                        thingObject[ thing ] = method\n                    }\n\n                    // Go through the things to bind to.\n                    for ( thingName in thingObject ) {\n\n                        // Grab the method of the thing.\n                        thingMethod = thingObject[ thingName ]\n\n                        // If it was an internal binding, prefix it.\n                        if ( internal ) {\n                            thingName = '_' + thingName\n                        }\n\n                        // Make sure the thing methods collection exists.\n                        STATE.methods[ thingName ] = STATE.methods[ thingName ] || []\n\n                        // Add the method to the relative method collection.\n                        STATE.methods[ thingName ].push( thingMethod )\n                    }\n                }\n\n                return P\n            }, //on\n\n\n\n            /**\n             * Unbind events on the things.\n             */\n            off: function() {\n                var i, thingName,\n                    names = arguments;\n                for ( i = 0, namesCount = names.length; i < namesCount; i += 1 ) {\n                    thingName = names[i]\n                    if ( thingName in STATE.methods ) {\n                        delete STATE.methods[thingName]\n                    }\n                }\n                return P\n            },\n\n\n            /**\n             * Fire off method events.\n             */\n            trigger: function( name, data ) {\n                var _trigger = function( name ) {\n                    var methodList = STATE.methods[ name ]\n                    if ( methodList ) {\n                        methodList.map( function( method ) {\n                            PickerConstructor._.trigger( method, P, [ data ] )\n                        })\n                    }\n                }\n                _trigger( '_' + name )\n                _trigger( name )\n                return P\n            } //trigger\n        } //PickerInstance.prototype\n\n\n    /**\n     * Wrap the picker holder components together.\n     */\n    function createWrappedComponent() {\n\n        // Create a picker wrapper holder\n        return PickerConstructor._.node( 'div',\n\n            // Create a picker wrapper node\n            PickerConstructor._.node( 'div',\n\n                // Create a picker frame\n                PickerConstructor._.node( 'div',\n\n                    // Create a picker box node\n                    PickerConstructor._.node( 'div',\n\n                        // Create the components nodes.\n                        P.component.nodes( STATE.open ),\n\n                        // The picker box class\n                        CLASSES.box\n                    ),\n\n                    // Picker wrap class\n                    CLASSES.wrap\n                ),\n\n                // Picker frame class\n                CLASSES.frame\n            ),\n\n            // Picker holder class\n            CLASSES.holder,\n\n            'tabindex=\"-1\"'\n        ) //endreturn\n    } //createWrappedComponent\n\n    /**\n     * Prepare the input element with all bindings.\n     */\n    function prepareElement() {\n\n        $ELEMENT.\n\n            // Store the picker data by component name.\n            data(NAME, P).\n\n            // Add the “input” class name.\n            addClass(CLASSES.input).\n\n            // If there’s a `data-value`, update the value of the element.\n            val( $ELEMENT.data('value') ?\n                P.get('select', SETTINGS.format) :\n                ELEMENT.value\n            ).\n\n            // On focus/click, open the picker.\n            on( 'focus.' + STATE.id + ' click.' + STATE.id,\n                function(event) {\n                    event.preventDefault()\n                    P.open()\n                }\n            )\n\n            // Mousedown handler to capture when the user starts interacting\n            // with the picker. This is used in working around a bug in Chrome 73.\n            .on('mousedown', function() {\n              STATE.handlingOpen = true;\n              var handler = function() {\n                // By default mouseup events are fired before a click event.\n                // By using a timeout we can force the mouseup to be handled\n                // after the corresponding click event is handled.\n                setTimeout(function() {\n                  $(document).off('mouseup', handler);\n                  STATE.handlingOpen = false;\n                }, 0);\n              };\n              $(document).on('mouseup', handler);\n            });\n\n\n        // Only bind keydown events if the element isn’t editable.\n        if ( !SETTINGS.editable ) {\n\n            $ELEMENT.\n\n                // Handle keyboard event based on the picker being opened or not.\n                on( 'keydown.' + STATE.id, handleKeydownEvent )\n        }\n\n\n        // Update the aria attributes.\n        aria(ELEMENT, {\n            haspopup: true,\n            readonly: false,\n            owns: ELEMENT.id + '_root'\n        })\n    }\n\n\n    /**\n     * Prepare the root picker element with all bindings.\n     */\n    function prepareElementRoot() {\n        aria( P.$root[0], 'hidden', true )\n    }\n\n\n     /**\n      * Prepare the holder picker element with all bindings.\n      */\n    function prepareElementHolder() {\n\n        P.$holder.\n\n            on({\n\n                // For iOS8.\n                keydown: handleKeydownEvent,\n\n                'focus.toOpen': handleFocusToOpenEvent,\n\n                blur: function() {\n                    // Remove the “target” class.\n                    $ELEMENT.removeClass( CLASSES.target )\n                },\n\n                // When something within the holder is focused, stop from bubbling\n                // to the doc and remove the “focused” state from the root.\n                focusin: function( event ) {\n                    P.$root.removeClass( CLASSES.focused )\n                    event.stopPropagation()\n                },\n\n                // When something within the holder is clicked, stop it\n                // from bubbling to the doc.\n                'mousedown click': function( event ) {\n\n                    var target = getRealEventTarget( event, ELEMENT )\n\n                    // Make sure the target isn’t the root holder so it can bubble up.\n                    if ( target != P.$holder[0] ) {\n\n                        event.stopPropagation()\n\n                        // * For mousedown events, cancel the default action in order to\n                        //   prevent cases where focus is shifted onto external elements\n                        //   when using things like jQuery mobile or MagnificPopup (ref: #249 & #120).\n                        //   Also, for Firefox, don’t prevent action on the `option` element.\n                        if ( event.type == 'mousedown' && !$( target ).is( 'input, select, textarea, button, option' )) {\n\n                            event.preventDefault()\n\n                            // Re-focus onto the holder so that users can click away\n                            // from elements focused within the picker.\n                            P.$holder.eq(0).focus()\n                        }\n                    }\n                }\n\n            }).\n\n            // If there’s a click on an actionable element, carry out the actions.\n            on( 'click', '[data-pick], [data-nav], [data-clear], [data-close]', function() {\n\n                var $target = $( this ),\n                    targetData = $target.data(),\n                    targetDisabled = $target.hasClass( CLASSES.navDisabled ) || $target.hasClass( CLASSES.disabled ),\n\n                    // * For IE, non-focusable elements can be active elements as well\n                    //   (http://stackoverflow.com/a/2684561).\n                    activeElement = getActiveElement()\n                    activeElement = activeElement && ( (activeElement.type || activeElement.href ) ? activeElement : null);\n\n                // If it’s disabled or nothing inside is actively focused, re-focus the element.\n                if ( targetDisabled || activeElement && !$.contains( P.$root[0], activeElement ) ) {\n                    P.$holder.eq(0).focus()\n                }\n\n                // If something is superficially changed, update the `highlight` based on the `nav`.\n                if ( !targetDisabled && targetData.nav ) {\n                    P.set( 'highlight', P.component.item.highlight, { nav: targetData.nav } )\n                }\n\n                // If something is picked, set `select` then close with focus.\n                else if ( !targetDisabled && 'pick' in targetData ) {\n                    P.set( 'select', targetData.pick )\n                    if ( SETTINGS.closeOnSelect ) {\n                        P.close( true )\n                    }\n                }\n\n                // If a “clear” button is pressed, empty the values and close with focus.\n                else if ( targetData.clear ) {\n                    P.clear()\n                    if ( SETTINGS.closeOnClear ) {\n                        P.close( true )\n                    }\n                }\n\n                else if ( targetData.close ) {\n                    P.close( true )\n                }\n\n            }) //P.$holder\n\n    }\n\n\n     /**\n      * Prepare the hidden input element along with all bindings.\n      */\n    function prepareElementHidden() {\n\n        var name\n\n        if ( SETTINGS.hiddenName === true ) {\n            name = ELEMENT.name\n            ELEMENT.name = ''\n        }\n        else {\n            name = [\n                typeof SETTINGS.hiddenPrefix == 'string' ? SETTINGS.hiddenPrefix : '',\n                typeof SETTINGS.hiddenSuffix == 'string' ? SETTINGS.hiddenSuffix : '_submit'\n            ]\n            name = name[0] + ELEMENT.name + name[1]\n        }\n\n        P._hidden = $(\n            '<input ' +\n            'type=hidden ' +\n\n            // Create the name using the original input’s with a prefix and suffix.\n            'name=\"' + name + '\"' +\n\n            // If the element has a value, set the hidden value as well.\n            (\n                $ELEMENT.data('value') || ELEMENT.value ?\n                    ' value=\"' + P.get('select', SETTINGS.formatSubmit) + '\"' :\n                    ''\n            ) +\n            '>'\n        )[0]\n\n        $ELEMENT.\n\n            // If the value changes, update the hidden input with the correct format.\n            on('change.' + STATE.id, function() {\n                P._hidden.value = ELEMENT.value ?\n                    P.get('select', SETTINGS.formatSubmit) :\n                    ''\n            })\n    }\n\n\n    // Wait for transitions to end before focusing the holder. Otherwise, while\n    // using the `container` option, the view jumps to the container.\n    function focusPickerOnceOpened() {\n\n        if (IS_DEFAULT_THEME && supportsTransitions) {\n            P.$holder.find('.' + CLASSES.frame).one('transitionend', function() {\n                P.$holder.eq(0).focus()\n            })\n        }\n        else {\n            setTimeout(function() {\n                P.$holder.eq(0).focus()\n            }, 0)\n        }\n    }\n\n\n    function handleFocusToOpenEvent(event) {\n\n        // Stop the event from propagating to the doc.\n        event.stopPropagation()\n\n        // Add the “target” class.\n        $ELEMENT.addClass( CLASSES.target )\n\n        // Add the “focused” class to the root.\n        P.$root.addClass( CLASSES.focused )\n\n        // And then finally open the picker.\n        P.open()\n    }\n\n\n    // For iOS8.\n    function handleKeydownEvent( event ) {\n\n        var keycode = event.keyCode,\n\n            // Check if one of the delete keys was pressed.\n            isKeycodeDelete = /^(8|46)$/.test(keycode)\n\n        // For some reason IE clears the input value on “escape”.\n        if ( keycode == 27 ) {\n            P.close( true )\n            return false\n        }\n\n        // Check if `space` or `delete` was pressed or the picker is closed with a key movement.\n        if ( keycode == 32 || isKeycodeDelete || !STATE.open && P.component.key[keycode] ) {\n\n            // Prevent it from moving the page and bubbling to doc.\n            event.preventDefault()\n            event.stopPropagation()\n\n            // If `delete` was pressed, clear the values and close the picker.\n            // Otherwise open the picker.\n            if ( isKeycodeDelete ) { P.clear().close() }\n            else { P.open() }\n        }\n    }\n\n\n    // Return a new picker instance.\n    return new PickerInstance()\n} //PickerConstructor\n\n\n\n/**\n * The default classes and prefix to use for the HTML classes.\n */\nPickerConstructor.klasses = function( prefix ) {\n    prefix = prefix || 'picker'\n    return {\n\n        picker: prefix,\n        opened: prefix + '--opened',\n        focused: prefix + '--focused',\n\n        input: prefix + '__input',\n        active: prefix + '__input--active',\n        target: prefix + '__input--target',\n\n        holder: prefix + '__holder',\n\n        frame: prefix + '__frame',\n        wrap: prefix + '__wrap',\n\n        box: prefix + '__box'\n    }\n} //PickerConstructor.klasses\n\n\n\n/**\n * Check if the default theme is being used.\n */\nfunction isUsingDefaultTheme( element ) {\n\n    var theme,\n        prop = 'position'\n\n    // For IE.\n    if ( element.currentStyle ) {\n        theme = element.currentStyle[prop]\n    }\n\n    // For normal browsers.\n    else if ( window.getComputedStyle ) {\n        theme = getComputedStyle( element )[prop]\n    }\n\n    return theme == 'fixed'\n}\n\n\n\n/**\n * Get the width of the browser’s scrollbar.\n * Taken from: https://github.com/VodkaBears/Remodal/blob/master/src/jquery.remodal.js\n */\nfunction getScrollbarWidth() {\n\n    if ( $html.height() <= $window.height() ) {\n        return 0\n    }\n\n    var $outer = $( '<div style=\"visibility:hidden;width:100px\" />' ).\n        appendTo( 'body' )\n\n    // Get the width without scrollbars.\n    var widthWithoutScroll = $outer[0].offsetWidth\n\n    // Force adding scrollbars.\n    $outer.css( 'overflow', 'scroll' )\n\n    // Add the inner div.\n    var $inner = $( '<div style=\"width:100%\" />' ).appendTo( $outer )\n\n    // Get the width with scrollbars.\n    var widthWithScroll = $inner[0].offsetWidth\n\n    // Remove the divs.\n    $outer.remove()\n\n    // Return the difference between the widths.\n    return widthWithoutScroll - widthWithScroll\n}\n\n\n\n/**\n * Get the target element from the event.\n * If ELEMENT is supplied and present in the event path (ELEMENT is ancestor of the target),\n * returns ELEMENT instead\n */\nfunction getRealEventTarget( event, ELEMENT ) {\n\n    var path = []\n\n    if ( event.path ) {\n        path = event.path\n    }\n\n    if ( event.originalEvent && event.originalEvent.path ) {\n        path = event.originalEvent.path\n    }\n\n    if ( path && path.length > 0 ) {\n        if ( ELEMENT && path.indexOf( ELEMENT ) >= 0 ) {\n            return ELEMENT\n        } else {\n            return path[0]\n        }\n    }\n\n    return event.target\n}\n\n/**\n * PickerConstructor helper methods.\n */\nPickerConstructor._ = {\n\n    /**\n     * Create a group of nodes. Expects:\n     * `\n        {\n            min:    {Integer},\n            max:    {Integer},\n            i:      {Integer},\n            node:   {String},\n            item:   {Function}\n        }\n     * `\n     */\n    group: function( groupObject ) {\n\n        var\n            // Scope for the looped object\n            loopObjectScope,\n\n            // Create the nodes list\n            nodesList = '',\n\n            // The counter starts from the `min`\n            counter = PickerConstructor._.trigger( groupObject.min, groupObject )\n\n\n        // Loop from the `min` to `max`, incrementing by `i`\n        for ( ; counter <= PickerConstructor._.trigger( groupObject.max, groupObject, [ counter ] ); counter += groupObject.i ) {\n\n            // Trigger the `item` function within scope of the object\n            loopObjectScope = PickerConstructor._.trigger( groupObject.item, groupObject, [ counter ] )\n\n            // Splice the subgroup and create nodes out of the sub nodes\n            nodesList += PickerConstructor._.node(\n                groupObject.node,\n                loopObjectScope[ 0 ],   // the node\n                loopObjectScope[ 1 ],   // the classes\n                loopObjectScope[ 2 ]    // the attributes\n            )\n        }\n\n        // Return the list of nodes\n        return nodesList\n    }, //group\n\n\n    /**\n     * Create a dom node string\n     */\n    node: function( wrapper, item, klass, attribute ) {\n\n        // If the item is false-y, just return an empty string\n        if ( !item ) return ''\n\n        // If the item is an array, do a join\n        item = $.isArray( item ) ? item.join( '' ) : item\n\n        // Check for the class\n        klass = klass ? ' class=\"' + klass + '\"' : ''\n\n        // Check for any attributes\n        attribute = attribute ? ' ' + attribute : ''\n\n        // Return the wrapped item\n        return '<' + wrapper + klass + attribute + '>' + item + '</' + wrapper + '>'\n    }, //node\n\n\n    /**\n     * Lead numbers below 10 with a zero.\n     */\n    lead: function( number ) {\n        return ( number < 10 ? '0': '' ) + number\n    },\n\n\n    /**\n     * Trigger a function otherwise return the value.\n     */\n    trigger: function( callback, scope, args ) {\n        return typeof callback == 'function' ? callback.apply( scope, args || [] ) : callback\n    },\n\n\n    /**\n     * If the second character is a digit, length is 2 otherwise 1.\n     */\n    digits: function( string ) {\n        return ( /\\d/ ).test( string[ 1 ] ) ? 2 : 1\n    },\n\n\n    /**\n     * Tell if something is a date object.\n     */\n    isDate: function( value ) {\n        return {}.toString.call( value ).indexOf( 'Date' ) > -1 && this.isInteger( value.getDate() )\n    },\n\n\n    /**\n     * Tell if something is an integer.\n     */\n    isInteger: function( value ) {\n        return {}.toString.call( value ).indexOf( 'Number' ) > -1 && value % 1 === 0\n    },\n\n\n    /**\n     * Create ARIA attribute strings.\n     */\n    ariaAttr: ariaAttr\n} //PickerConstructor._\n\n\n\n/**\n * Extend the picker with a component and defaults.\n */\nPickerConstructor.extend = function( name, Component ) {\n\n    // Extend jQuery.\n    $.fn[ name ] = function( options, action ) {\n\n        // Grab the component data.\n        var componentData = this.data( name )\n\n        // If the picker is requested, return the data object.\n        if ( options == 'picker' ) {\n            return componentData\n        }\n\n        // If the component data exists and `options` is a string, carry out the action.\n        if ( componentData && typeof options == 'string' ) {\n            return PickerConstructor._.trigger( componentData[ options ], componentData, [ action ] )\n        }\n\n        // Otherwise go through each matched element and if the component\n        // doesn’t exist, create a new picker using `this` element\n        // and merging the defaults and options with a deep copy.\n        return this.each( function() {\n            var $this = $( this )\n            if ( !$this.data( name ) ) {\n                new PickerConstructor( this, name, Component, options )\n            }\n        })\n    }\n\n    // Set the defaults.\n    $.fn[ name ].defaults = Component.defaults\n} //PickerConstructor.extend\n\n\n\nfunction aria(element, attribute, value) {\n    if ( $.isPlainObject(attribute) ) {\n        for ( var key in attribute ) {\n            ariaSet(element, key, attribute[key])\n        }\n    }\n    else {\n        ariaSet(element, attribute, value)\n    }\n}\nfunction ariaSet(element, attribute, value) {\n    element.setAttribute(\n        (attribute == 'role' ? '' : 'aria-') + attribute,\n        value\n    )\n}\nfunction ariaAttr(attribute, data) {\n    if ( !$.isPlainObject(attribute) ) {\n        attribute = { attribute: data }\n    }\n    data = ''\n    for ( var key in attribute ) {\n        var attr = (key == 'role' ? '' : 'aria-') + key,\n            attrVal = attribute[key]\n        data += attrVal == null ? '' : attr + '=\"' + attribute[key] + '\"'\n    }\n    return data\n}\n\n// IE8 bug throws an error for activeElements within iframes.\nfunction getActiveElement() {\n    try {\n        return document.activeElement\n    } catch ( err ) { }\n}\n\n\n\n// Expose the picker constructor.\nreturn PickerConstructor\n\n\n}));\n"
  },
  {
    "path": "lib/picker.time.js",
    "content": "/*!\n * Time picker for pickadate.js v3.6.4\n * http://amsul.github.io/pickadate.js/time.htm\n */\n\n(function ( factory ) {\n\n    // AMD.\n    if ( typeof define == 'function' && define.amd )\n        define( ['./picker', 'jquery'], factory )\n\n    // Node.js/browserify.\n    else if ( typeof exports == 'object' )\n        module.exports = factory( require('./picker.js'), require('jquery') )\n\n    // Browser globals.\n    else factory( Picker, jQuery )\n\n}(function( Picker, $ ) {\n\n\n/**\n * Globals and constants\n */\nvar HOURS_IN_DAY = 24,\n    MINUTES_IN_HOUR = 60,\n    HOURS_TO_NOON = 12,\n    MINUTES_IN_DAY = HOURS_IN_DAY * MINUTES_IN_HOUR,\n    _ = Picker._\n\n\n\n/**\n * The time picker constructor\n */\nfunction TimePicker( picker, settings ) {\n\n    var clock = this,\n        elementValue = picker.$node[ 0 ].value,\n        elementDataValue = picker.$node.data( 'value' ),\n        valueString = elementDataValue || elementValue,\n        formatString = elementDataValue ? settings.formatSubmit : settings.format\n\n    clock.settings = settings\n    clock.$node = picker.$node\n\n    // The queue of methods that will be used to build item objects.\n    clock.queue = {\n        interval: 'i',\n        min: 'measure create',\n        max: 'measure create',\n        now: 'now create',\n        select: 'parse create validate',\n        highlight: 'parse create validate',\n        view: 'parse create validate',\n        disable: 'deactivate',\n        enable: 'activate'\n    }\n\n    // The component's item object.\n    clock.item = {}\n\n    clock.item.clear = null\n    clock.item.interval = settings.interval || 30\n    clock.item.disable = ( settings.disable || [] ).slice( 0 )\n    clock.item.enable = -(function( collectionDisabled ) {\n        return collectionDisabled[ 0 ] === true ? collectionDisabled.shift() : -1\n    })( clock.item.disable )\n\n    clock.\n        set( 'min', settings.min ).\n        set( 'max', settings.max ).\n        set( 'now' )\n\n    // When there’s a value, set the `select`, which in turn\n    // also sets the `highlight` and `view`.\n    if ( valueString ) {\n        clock.set( 'select', valueString, {\n            format: formatString\n        })\n    }\n\n    // If there’s no value, default to highlighting “today”.\n    else {\n        clock.\n            set( 'select', null ).\n            set( 'highlight', clock.item.now )\n    }\n\n    // The keycode to movement mapping.\n    clock.key = {\n        40: 1, // Down\n        38: -1, // Up\n        39: 1, // Right\n        37: -1, // Left\n        go: function( timeChange ) {\n            clock.set(\n                'highlight',\n                clock.item.highlight.pick + timeChange * clock.item.interval,\n                { interval: timeChange * clock.item.interval }\n            )\n            this.render()\n        }\n    }\n\n\n    // Bind some picker events.\n    picker.\n        on( 'render', function() {\n            var $pickerHolder = picker.$root.children(),\n                $viewset = $pickerHolder.find( '.' + settings.klass.viewset ),\n                vendors = function( prop ) {\n                    return ['webkit', 'moz', 'ms', 'o', ''].map(function( vendor ) {\n                        return ( vendor ? '-' + vendor + '-' : '' ) + prop\n                    })\n                },\n                animations = function( $el, state ) {\n                    vendors( 'transform' ).map(function( prop ) {\n                        $el.css( prop, state )\n                    })\n                    vendors( 'transition' ).map(function( prop ) {\n                        $el.css( prop, state )\n                    })\n                }\n            if ( $viewset.length ) {\n                animations( $pickerHolder, 'none' )\n                $pickerHolder[ 0 ].scrollTop = ~~$viewset.position().top - ( $viewset[ 0 ].clientHeight * 2 )\n                animations( $pickerHolder, '' )\n            }\n        }, 1 ).\n        on( 'open', function() {\n            picker.$root.find( 'button' ).attr( 'disabled', false )\n        }, 1 ).\n        on( 'close', function() {\n            picker.$root.find( 'button' ).attr( 'disabled', true )\n        }, 1 )\n\n} //TimePicker\n\n\n/**\n * Set a timepicker item object.\n */\nTimePicker.prototype.set = function( type, value, options ) {\n\n    var clock = this,\n        clockItem = clock.item\n\n    // If the value is `null` just set it immediately.\n    if ( value === null ) {\n        if ( type == 'clear' ) type = 'select'\n        clockItem[ type ] = value\n        return clock\n    }\n\n    // Otherwise go through the queue of methods, and invoke the functions.\n    // Update this as the time unit, and set the final value as this item.\n    // * In the case of `enable`, keep the queue but set `disable` instead.\n    //   And in the case of `flip`, keep the queue but set `enable` instead.\n    clockItem[ ( type == 'enable' ? 'disable' : type == 'flip' ? 'enable' : type ) ] = clock.queue[ type ].split( ' ' ).map( function( method ) {\n        value = clock[ method ]( type, value, options )\n        return value\n    }).pop()\n\n    // Check if we need to cascade through more updates.\n    if ( type == 'select' ) {\n        clock.set( 'highlight', clockItem.select, options )\n    }\n    else if ( type == 'highlight' ) {\n        clock.set( 'view', clockItem.highlight, options )\n    }\n    else if ( type == 'interval' ) {\n        clock.\n            set( 'min', clockItem.min, options ).\n            set( 'max', clockItem.max, options )\n    }\n    else if ( type.match( /^(flip|min|max|disable|enable)$/ ) ) {\n        if ( clockItem.select && clock.disabled( clockItem.select ) ) {\n            clock.set( 'select', value, options )\n        }\n        if ( clockItem.highlight && clock.disabled( clockItem.highlight ) ) {\n            clock.set( 'highlight', value, options )\n        }\n        if ( type == 'min' ) {\n            clock.set( 'max', clockItem.max, options )\n        }\n    }\n\n    return clock\n} //TimePicker.prototype.set\n\n\n/**\n * Get a timepicker item object.\n */\nTimePicker.prototype.get = function( type ) {\n    return this.item[ type ]\n} //TimePicker.prototype.get\n\n\n/**\n * Create a picker time object.\n */\nTimePicker.prototype.create = function( type, value, options ) {\n\n    var clock = this\n\n    // If there’s no value, use the type as the value.\n    value = value === undefined ? type : value\n\n    // If it’s a date object, convert it into an array.\n    if ( _.isDate( value ) ) {\n        value = [ value.getHours(), value.getMinutes() ]\n    }\n\n    // If it’s an object, use the “pick” value.\n    if ( $.isPlainObject( value ) && _.isInteger( value.pick ) ) {\n        value = value.pick\n    }\n\n    // If it’s an array, convert it into minutes.\n    else if ( $.isArray( value ) ) {\n        value = +value[ 0 ] * MINUTES_IN_HOUR + (+value[ 1 ])\n    }\n\n    // If no valid value is passed, set it to “now”.\n    else if ( !_.isInteger( value ) ) {\n        value = clock.now( type, value, options )\n    }\n\n    // If we’re setting the max, make sure it’s greater than the min.\n    if ( type == 'max' && value < clock.item.min.pick ) {\n        value += MINUTES_IN_DAY\n    }\n\n    // If the value doesn’t fall directly on the interval,\n    // add one interval to indicate it as “passed”.\n    if ( type != 'min' && type != 'max' && (value - clock.item.min.pick) % clock.item.interval !== 0 ) {\n        value += clock.item.interval\n    }\n\n    // Normalize it into a “reachable” interval.\n    value = clock.normalize( type, value, options )\n\n    // Return the compiled object.\n    return {\n\n        // Divide to get hours from minutes.\n        hour: ~~( HOURS_IN_DAY + value / MINUTES_IN_HOUR ) % HOURS_IN_DAY,\n\n        // The remainder is the minutes.\n        mins: ( MINUTES_IN_HOUR + value % MINUTES_IN_HOUR ) % MINUTES_IN_HOUR,\n\n        // The time in total minutes.\n        time: ( MINUTES_IN_DAY + value ) % MINUTES_IN_DAY,\n\n        // Reference to the “relative” value to pick.\n        pick: value % MINUTES_IN_DAY\n    }\n} //TimePicker.prototype.create\n\n\n/**\n * Create a range limit object using an array, date object,\n * literal “true”, or integer relative to another time.\n */\nTimePicker.prototype.createRange = function( from, to ) {\n\n    var clock = this,\n        createTime = function( time ) {\n            if ( time === true || $.isArray( time ) || _.isDate( time ) ) {\n                return clock.create( time )\n            }\n            return time\n        }\n\n    // Create objects if possible.\n    if ( !_.isInteger( from ) ) {\n        from = createTime( from )\n    }\n    if ( !_.isInteger( to ) ) {\n        to = createTime( to )\n    }\n\n    // Create relative times.\n    if ( _.isInteger( from ) && $.isPlainObject( to ) ) {\n        from = [ to.hour, to.mins + ( from * clock.settings.interval ) ];\n    }\n    else if ( _.isInteger( to ) && $.isPlainObject( from ) ) {\n        to = [ from.hour, from.mins + ( to * clock.settings.interval ) ];\n    }\n\n    return {\n        from: createTime( from ),\n        to: createTime( to )\n    }\n} //TimePicker.prototype.createRange\n\n\n/**\n * Check if a time unit falls within a time range object.\n */\nTimePicker.prototype.withinRange = function( range, timeUnit ) {\n    range = this.createRange(range.from, range.to)\n    return timeUnit.pick >= range.from.pick && timeUnit.pick <= range.to.pick\n}\n\n\n/**\n * Check if two time range objects overlap.\n */\nTimePicker.prototype.overlapRanges = function( one, two ) {\n\n    var clock = this\n\n    // Convert the ranges into comparable times.\n    one = clock.createRange( one.from, one.to )\n    two = clock.createRange( two.from, two.to )\n\n    return clock.withinRange( one, two.from ) || clock.withinRange( one, two.to ) ||\n        clock.withinRange( two, one.from ) || clock.withinRange( two, one.to )\n}\n\n\n/**\n * Get the time relative to now.\n */\nTimePicker.prototype.now = function( type, value/*, options*/ ) {\n\n    var interval = this.item.interval,\n        date = new Date(),\n        nowMinutes = date.getHours() * MINUTES_IN_HOUR + date.getMinutes(),\n        isValueInteger = _.isInteger( value ),\n        isBelowInterval\n\n    // Make sure “now” falls within the interval range.\n    nowMinutes -= nowMinutes % interval\n\n    // Check if the difference is less than the interval itself.\n    isBelowInterval = value < 0 && interval * value + nowMinutes <= -interval\n\n    // Add an interval because the time has “passed”.\n    nowMinutes += type == 'min' && isBelowInterval ? 0 : interval\n\n    // If the value is a number, adjust by that many intervals.\n    if ( isValueInteger ) {\n        nowMinutes += interval * (\n            isBelowInterval && type != 'max' ?\n                value + 1 :\n                value\n            )\n    }\n\n    // Return the final calculation.\n    return nowMinutes\n} //TimePicker.prototype.now\n\n\n/**\n * Normalize minutes to be “reachable” based on the min and interval.\n */\nTimePicker.prototype.normalize = function( type, value/*, options*/ ) {\n\n    var interval = this.item.interval,\n        minTime = this.item.min && this.item.min.pick || 0\n\n    // If setting min time, don’t shift anything.\n    // Otherwise get the value and min difference and then\n    // normalize the difference with the interval.\n    value -= type == 'min' ? 0 : ( value - minTime ) % interval\n\n    // Return the adjusted value.\n    return value\n} //TimePicker.prototype.normalize\n\n\n/**\n * Measure the range of minutes.\n */\nTimePicker.prototype.measure = function( type, value, options ) {\n\n    var clock = this\n\n    // If it’s anything false-y, set it to the default.\n    if ( !value ) {\n        value = type == 'min' ? [ 0, 0 ] : [ HOURS_IN_DAY - 1, MINUTES_IN_HOUR - 1 ]\n    }\n\n    // If it’s a string, parse it.\n    if ( typeof value == 'string' ) {\n        value = clock.parse( type, value )\n    }\n\n    // If it’s a literal true, or an integer, make it relative to now.\n    else if ( value === true || _.isInteger( value ) ) {\n        value = clock.now( type, value, options )\n    }\n\n    // If it’s an object already, just normalize it.\n    else if ( $.isPlainObject( value ) && _.isInteger( value.pick ) ) {\n        value = clock.normalize( type, value.pick, options )\n    }\n\n    return value\n} ///TimePicker.prototype.measure\n\n\n/**\n * Validate an object as enabled.\n */\nTimePicker.prototype.validate = function( type, timeObject, options ) {\n\n    var clock = this,\n        interval = options && options.interval ? options.interval : clock.item.interval\n\n    // Check if the object is disabled.\n    if ( clock.disabled( timeObject ) ) {\n\n        // Shift with the interval until we reach an enabled time.\n        timeObject = clock.shift( timeObject, interval )\n    }\n\n    // Scope the object into range.\n    timeObject = clock.scope( timeObject )\n\n    // Do a second check to see if we landed on a disabled min/max.\n    // In that case, shift using the opposite interval as before.\n    if ( clock.disabled( timeObject ) ) {\n        timeObject = clock.shift( timeObject, interval * -1 )\n    }\n\n    // Return the final object.\n    return timeObject\n} //TimePicker.prototype.validate\n\n\n/**\n * Check if an object is disabled.\n */\nTimePicker.prototype.disabled = function( timeToVerify ) {\n\n    var clock = this,\n\n        // Filter through the disabled times to check if this is one.\n        isDisabledMatch = clock.item.disable.filter( function( timeToDisable ) {\n\n            // If the time is a number, match the hours.\n            if ( _.isInteger( timeToDisable ) ) {\n                return timeToVerify.hour == timeToDisable\n            }\n\n            // If it’s an array, create the object and match the times.\n            if ( $.isArray( timeToDisable ) || _.isDate( timeToDisable ) ) {\n                return timeToVerify.pick == clock.create( timeToDisable ).pick\n            }\n\n            // If it’s an object, match a time within the “from” and “to” range.\n            if ( $.isPlainObject( timeToDisable ) ) {\n                return clock.withinRange( timeToDisable, timeToVerify )\n            }\n        })\n\n    // If this time matches a disabled time, confirm it’s not inverted.\n    isDisabledMatch = isDisabledMatch.length && !isDisabledMatch.filter(function( timeToDisable ) {\n        return $.isArray( timeToDisable ) && timeToDisable[2] == 'inverted' ||\n            $.isPlainObject( timeToDisable ) && timeToDisable.inverted\n    }).length\n\n    // If the clock is \"enabled\" flag is flipped, flip the condition.\n    return clock.item.enable === -1 ? !isDisabledMatch : isDisabledMatch ||\n        timeToVerify.pick < clock.item.min.pick ||\n        timeToVerify.pick > clock.item.max.pick\n} //TimePicker.prototype.disabled\n\n\n/**\n * Shift an object by an interval until we reach an enabled object.\n */\nTimePicker.prototype.shift = function( timeObject, interval ) {\n\n    var clock = this,\n        minLimit = clock.item.min.pick,\n        maxLimit = clock.item.max.pick/*,\n        safety = 1000*/\n\n    interval = interval || clock.item.interval\n\n    // Keep looping as long as the time is disabled.\n    while ( /*safety &&*/ clock.disabled( timeObject ) ) {\n\n        /*safety -= 1\n        if ( !safety ) {\n            throw 'Fell into an infinite loop while shifting to ' + timeObject.hour + ':' + timeObject.mins + '.'\n        }*/\n\n        // Increase/decrease the time by the interval and keep looping.\n        timeObject = clock.create( timeObject.pick += interval )\n\n        // If we've looped beyond the limits, break out of the loop.\n        if ( timeObject.pick <= minLimit || timeObject.pick >= maxLimit ) {\n            break\n        }\n    }\n\n    // Return the final object.\n    return timeObject\n} //TimePicker.prototype.shift\n\n\n/**\n * Scope an object to be within range of min and max.\n */\nTimePicker.prototype.scope = function( timeObject ) {\n    var minLimit = this.item.min.pick,\n        maxLimit = this.item.max.pick\n    return this.create( timeObject.pick > maxLimit ? maxLimit : timeObject.pick < minLimit ? minLimit : timeObject )\n} //TimePicker.prototype.scope\n\n\n/**\n * Parse a string into a usable type.\n */\nTimePicker.prototype.parse = function( type, value, options ) {\n\n    var hour, minutes, isPM, item, parseValue,\n        clock = this,\n        parsingObject = {}\n\n    // If it’s already parsed, we’re good.\n    if ( !value || typeof value != 'string' ) {\n        return value\n    }\n\n    // We need a `.format` to parse the value with.\n    if ( !( options && options.format ) ) {\n        options = options || {}\n        options.format = clock.settings.format\n    }\n\n    // Convert the format into an array and then map through it.\n    clock.formats.toArray( options.format ).map( function( label ) {\n\n        var\n            substring,\n\n            // Grab the formatting label.\n            formattingLabel = clock.formats[ label ],\n\n            // The format length is from the formatting label function or the\n            // label length without the escaping exclamation (!) mark.\n            formatLength = formattingLabel ?\n                _.trigger( formattingLabel, clock, [ value, parsingObject ] ) :\n                label.replace( /^!/, '' ).length\n\n        // If there's a format label, split the value up to the format length.\n        // Then add it to the parsing object with appropriate label.\n        if ( formattingLabel ) {\n            substring = value.substr( 0, formatLength )\n            parsingObject[ label ] = substring.match(/^\\d+$/) ? +substring : substring\n        }\n\n        // Update the time value as the substring from format length to end.\n        value = value.substr( formatLength )\n    })\n\n    // Grab the hour and minutes from the parsing object.\n    for ( item in parsingObject ) {\n        parseValue = parsingObject[item]\n        if ( _.isInteger(parseValue) ) {\n            if ( item.match(/^(h|hh)$/i) ) {\n                hour = parseValue\n                if ( item == 'h' || item == 'hh' ) {\n                    hour %= 12\n                }\n            }\n            else if ( item == 'i' ) {\n                minutes = parseValue\n            }\n        }\n        else if ( item.match(/^a$/i) && parseValue.match(/^p/i) && ('h' in parsingObject || 'hh' in parsingObject) ) {\n            isPM = true\n        }\n    }\n\n    // Calculate it in minutes and return.\n    return (isPM ? hour + 12 : hour) * MINUTES_IN_HOUR + minutes\n} //TimePicker.prototype.parse\n\n\n/**\n * Various formats to display the object in.\n */\nTimePicker.prototype.formats = {\n\n    h: function( string, timeObject ) {\n\n        // If there's string, then get the digits length.\n        // Otherwise return the selected hour in \"standard\" format.\n        return string ? _.digits( string ) : timeObject.hour % HOURS_TO_NOON || HOURS_TO_NOON\n    },\n    hh: function( string, timeObject ) {\n\n        // If there's a string, then the length is always 2.\n        // Otherwise return the selected hour in \"standard\" format with a leading zero.\n        return string ? 2 : _.lead( timeObject.hour % HOURS_TO_NOON || HOURS_TO_NOON )\n    },\n    H: function( string, timeObject ) {\n\n        // If there's string, then get the digits length.\n        // Otherwise return the selected hour in \"military\" format as a string.\n        return string ? _.digits( string ) : '' + ( timeObject.hour % 24 )\n    },\n    HH: function( string, timeObject ) {\n\n        // If there's string, then get the digits length.\n        // Otherwise return the selected hour in \"military\" format with a leading zero.\n        return string ? _.digits( string ) : _.lead( timeObject.hour % 24 )\n    },\n    i: function( string, timeObject ) {\n\n        // If there's a string, then the length is always 2.\n        // Otherwise return the selected minutes.\n        return string ? 2 : _.lead( timeObject.mins )\n    },\n    a: function( string, timeObject ) {\n\n        // If there's a string, then the length is always 4.\n        // Otherwise check if it's more than \"noon\" and return either am/pm.\n        return string ? 4 : MINUTES_IN_DAY / 2 > timeObject.time % MINUTES_IN_DAY ? 'a.m.' : 'p.m.'\n    },\n    A: function( string, timeObject ) {\n\n        // If there's a string, then the length is always 2.\n        // Otherwise check if it's more than \"noon\" and return either am/pm.\n        return string ? 2 : MINUTES_IN_DAY / 2 > timeObject.time % MINUTES_IN_DAY ? 'AM' : 'PM'\n    },\n\n    // Create an array by splitting the formatting string passed.\n    toArray: function( formatString ) { return formatString.split( /(h{1,2}|H{1,2}|i|a|A|!.)/g ) },\n\n    // Format an object into a string using the formatting options.\n    toString: function ( formatString, itemObject ) {\n        var clock = this\n        return clock.formats.toArray( formatString ).map( function( label ) {\n            return _.trigger( clock.formats[ label ], clock, [ 0, itemObject ] ) || label.replace( /^!/, '' )\n        }).join( '' )\n    }\n} //TimePicker.prototype.formats\n\n\n\n\n/**\n * Check if two time units are the exact.\n */\nTimePicker.prototype.isTimeExact = function( one, two ) {\n\n    var clock = this\n\n    // When we’re working with minutes, do a direct comparison.\n    if (\n        ( _.isInteger( one ) && _.isInteger( two ) ) ||\n        ( typeof one == 'boolean' && typeof two == 'boolean' )\n     ) {\n        return one === two\n    }\n\n    // When we’re working with time representations, compare the “pick” value.\n    if (\n        ( _.isDate( one ) || $.isArray( one ) ) &&\n        ( _.isDate( two ) || $.isArray( two ) )\n    ) {\n        return clock.create( one ).pick === clock.create( two ).pick\n    }\n\n    // When we’re working with range objects, compare the “from” and “to”.\n    if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {\n        return clock.isTimeExact( one.from, two.from ) && clock.isTimeExact( one.to, two.to )\n    }\n\n    return false\n}\n\n\n/**\n * Check if two time units overlap.\n */\nTimePicker.prototype.isTimeOverlap = function( one, two ) {\n\n    var clock = this\n\n    // When we’re working with an integer, compare the hours.\n    if ( _.isInteger( one ) && ( _.isDate( two ) || $.isArray( two ) ) ) {\n        return one === clock.create( two ).hour\n    }\n    if ( _.isInteger( two ) && ( _.isDate( one ) || $.isArray( one ) ) ) {\n        return two === clock.create( one ).hour\n    }\n\n    // When we’re working with range objects, check if the ranges overlap.\n    if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {\n        return clock.overlapRanges( one, two )\n    }\n\n    return false\n}\n\n\n/**\n * Flip the “enabled” state.\n */\nTimePicker.prototype.flipEnable = function(val) {\n    var itemObject = this.item\n    itemObject.enable = val || (itemObject.enable == -1 ? 1 : -1)\n}\n\n\n/**\n * Mark a collection of times as “disabled”.\n */\nTimePicker.prototype.deactivate = function( type, timesToDisable ) {\n\n    var clock = this,\n        disabledItems = clock.item.disable.slice(0)\n\n\n    // If we’re flipping, that’s all we need to do.\n    if ( timesToDisable == 'flip' ) {\n        clock.flipEnable()\n    }\n\n    else if ( timesToDisable === false ) {\n        clock.flipEnable(1)\n        disabledItems = []\n    }\n\n    else if ( timesToDisable === true ) {\n        clock.flipEnable(-1)\n        disabledItems = []\n    }\n\n    // Otherwise go through the times to disable.\n    else {\n\n        timesToDisable.map(function( unitToDisable ) {\n\n            var matchFound\n\n            // When we have disabled items, check for matches.\n            // If something is matched, immediately break out.\n            for ( var index = 0; index < disabledItems.length; index += 1 ) {\n                if ( clock.isTimeExact( unitToDisable, disabledItems[index] ) ) {\n                    matchFound = true\n                    break\n                }\n            }\n\n            // If nothing was found, add the validated unit to the collection.\n            if ( !matchFound ) {\n                if (\n                    _.isInteger( unitToDisable ) ||\n                    _.isDate( unitToDisable ) ||\n                    $.isArray( unitToDisable ) ||\n                    ( $.isPlainObject( unitToDisable ) && unitToDisable.from && unitToDisable.to )\n                ) {\n                    disabledItems.push( unitToDisable )\n                }\n            }\n        })\n    }\n\n    // Return the updated collection.\n    return disabledItems\n} //TimePicker.prototype.deactivate\n\n\n/**\n * Mark a collection of times as “enabled”.\n */\nTimePicker.prototype.activate = function( type, timesToEnable ) {\n\n    var clock = this,\n        disabledItems = clock.item.disable,\n        disabledItemsCount = disabledItems.length\n\n    // If we’re flipping, that’s all we need to do.\n    if ( timesToEnable == 'flip' ) {\n        clock.flipEnable()\n    }\n\n    else if ( timesToEnable === true ) {\n        clock.flipEnable(1)\n        disabledItems = []\n    }\n\n    else if ( timesToEnable === false ) {\n        clock.flipEnable(-1)\n        disabledItems = []\n    }\n\n    // Otherwise go through the disabled times.\n    else {\n\n        timesToEnable.map(function( unitToEnable ) {\n\n            var matchFound,\n                disabledUnit,\n                index,\n                isRangeMatched\n\n            // Go through the disabled items and try to find a match.\n            for ( index = 0; index < disabledItemsCount; index += 1 ) {\n\n                disabledUnit = disabledItems[index]\n\n                // When an exact match is found, remove it from the collection.\n                if ( clock.isTimeExact( disabledUnit, unitToEnable ) ) {\n                    matchFound = disabledItems[index] = null\n                    isRangeMatched = true\n                    break\n                }\n\n                // When an overlapped match is found, add the “inverted” state to it.\n                else if ( clock.isTimeOverlap( disabledUnit, unitToEnable ) ) {\n                    if ( $.isPlainObject( unitToEnable ) ) {\n                        unitToEnable.inverted = true\n                        matchFound = unitToEnable\n                    }\n                    else if ( $.isArray( unitToEnable ) ) {\n                        matchFound = unitToEnable\n                        if ( !matchFound[2] ) matchFound.push( 'inverted' )\n                    }\n                    else if ( _.isDate( unitToEnable ) ) {\n                        matchFound = [ unitToEnable.getFullYear(), unitToEnable.getMonth(), unitToEnable.getDate(), 'inverted' ]\n                    }\n                    break\n                }\n            }\n\n            // If a match was found, remove a previous duplicate entry.\n            if ( matchFound ) for ( index = 0; index < disabledItemsCount; index += 1 ) {\n                if ( clock.isTimeExact( disabledItems[index], unitToEnable ) ) {\n                    disabledItems[index] = null\n                    break\n                }\n            }\n\n            // In the event that we’re dealing with an overlap of range times,\n            // make sure there are no “inverted” times because of it.\n            if ( isRangeMatched ) for ( index = 0; index < disabledItemsCount; index += 1 ) {\n                if ( clock.isTimeOverlap( disabledItems[index], unitToEnable ) ) {\n                    disabledItems[index] = null\n                    break\n                }\n            }\n\n            // If something is still matched, add it into the collection.\n            if ( matchFound ) {\n                disabledItems.push( matchFound )\n            }\n        })\n    }\n\n    // Return the updated collection.\n    return disabledItems.filter(function( val ) { return val != null })\n} //TimePicker.prototype.activate\n\n\n/**\n * The division to use for the range intervals.\n */\nTimePicker.prototype.i = function( type, value/*, options*/ ) {\n    return _.isInteger( value ) && value > 0 ? value : this.item.interval\n}\n\n\n/**\n * Create a string for the nodes in the picker.\n */\nTimePicker.prototype.nodes = function( isOpen ) {\n\n    var\n        clock = this,\n        settings = clock.settings,\n        selectedObject = clock.item.select,\n        highlightedObject = clock.item.highlight,\n        viewsetObject = clock.item.view,\n        disabledCollection = clock.item.disable\n\n    return _.node(\n        'ul',\n        _.group({\n            min: clock.item.min.pick,\n            max: clock.item.max.pick,\n            i: clock.item.interval,\n            node: 'li',\n            item: function( loopedTime ) {\n                loopedTime = clock.create( loopedTime )\n                var timeMinutes = loopedTime.pick,\n                    isSelected = selectedObject && selectedObject.pick == timeMinutes,\n                    isHighlighted = highlightedObject && highlightedObject.pick == timeMinutes,\n                    isDisabled = disabledCollection && clock.disabled( loopedTime ),\n                    formattedTime = _.trigger( clock.formats.toString, clock, [ settings.format, loopedTime ] )\n                return [\n                    _.trigger( clock.formats.toString, clock, [ _.trigger( settings.formatLabel, clock, [ loopedTime ] ) || settings.format, loopedTime ] ),\n                    (function( klasses ) {\n\n                        if ( isSelected ) {\n                            klasses.push( settings.klass.selected )\n                        }\n\n                        if ( isHighlighted ) {\n                            klasses.push( settings.klass.highlighted )\n                        }\n\n                        if ( viewsetObject && viewsetObject.pick == timeMinutes ) {\n                            klasses.push( settings.klass.viewset )\n                        }\n\n                        if ( isDisabled ) {\n                            klasses.push( settings.klass.disabled )\n                        }\n\n                        return klasses.join( ' ' )\n                    })( [ settings.klass.listItem ] ),\n                    'data-pick=' + loopedTime.pick + ' ' + _.ariaAttr({\n                        role: 'option',\n                        label: formattedTime,\n                        selected: isSelected && clock.$node.val() === formattedTime ? true : null,\n                        activedescendant: isHighlighted ? true : null,\n                        disabled: isDisabled ? true : null\n                    })\n                ]\n            }\n        }) +\n\n        // * For Firefox forms to submit, make sure to set the button’s `type` attribute as “button”.\n        _.node(\n            'li',\n            _.node(\n                'button',\n                settings.clear,\n                settings.klass.buttonClear,\n                'type=button data-clear=1' + ( isOpen ? '' : ' disabled' ) + ' ' +\n                _.ariaAttr({ controls: clock.$node[0].id })\n            ),\n            '', _.ariaAttr({ role: 'presentation' })\n        ),\n        settings.klass.list,\n        _.ariaAttr({ role: 'listbox', controls: clock.$node[0].id })\n    )\n} //TimePicker.prototype.nodes\n\n\n\n\n\n\n\n/**\n * Extend the picker to add the component with the defaults.\n */\nTimePicker.defaults = (function( prefix ) {\n\n    return {\n\n        // Clear\n        clear: 'Clear',\n\n        // The format to show on the `input` element\n        format: 'h:i A',\n\n        // The interval between each time\n        interval: 30,\n\n        // Picker close behavior\n        closeOnSelect: true,\n        closeOnClear: true,\n\n        // Update input value on select/clear\n        updateInput: true,\n\n        // Classes\n        klass: {\n\n            picker: prefix + ' ' + prefix + '--time',\n            holder: prefix + '__holder',\n\n            list: prefix + '__list',\n            listItem: prefix + '__list-item',\n\n            disabled: prefix + '__list-item--disabled',\n            selected: prefix + '__list-item--selected',\n            highlighted: prefix + '__list-item--highlighted',\n            viewset: prefix + '__list-item--viewset',\n            now: prefix + '__list-item--now',\n\n            buttonClear: prefix + '__button--clear'\n        }\n    }\n})( Picker.klasses().picker )\n\n\n\n\n\n/**\n * Extend the picker to add the time picker.\n */\nPicker.extend( 'pickatime', TimePicker )\n\n\n}));\n\n\n\n"
  },
  {
    "path": "lib/themes/classic.css",
    "content": "/* ==========================================================================\n   $BASE-PICKER\n   ========================================================================== */\n/**\n * Note: the root picker element should *NOT* be styled more than what’s here.\n */\n.picker {\n  font-size: 16px;\n  text-align: left;\n  line-height: 1.2;\n  color: #000;\n  position: absolute;\n  z-index: 10000;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  outline: none;\n}\n/**\n * The picker input element.\n */\n.picker__input {\n  cursor: default;\n}\n/**\n * When the picker is opened, the input element is “activated”.\n */\n.picker__input.picker__input--active {\n  border-color: #0089ec;\n}\n/**\n * The holder is the only “scrollable” top-level container element.\n */\n.picker__holder {\n  width: 100%;\n  overflow-y: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n/*!\n * Classic picker styling for pickadate.js\n * Demo: http://amsul.github.io/pickadate.js\n */\n/**\n * Note: the root picker element should *NOT* be styled more than what’s here.\n */\n.picker {\n  width: 100%;\n}\n/**\n * The holder is the base of the picker.\n */\n.picker__holder {\n  position: absolute;\n  background: #fff;\n  border: 1px solid #aaaaaa;\n  border-top-width: 0;\n  border-bottom-width: 0;\n  border-radius: 0 0 5px 5px;\n  box-sizing: border-box;\n  min-width: 176px;\n  max-width: 466px;\n  max-height: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  filter: alpha(opacity=0);\n  -moz-opacity: 0;\n  opacity: 0;\n  transform: translateY(-1em) perspective(600px) rotateX(10deg);\n  transition: transform 0.15s ease-out, opacity 0.15s ease-out, max-height 0s 0.15s, border-width 0s 0.15s;\n}\n/**\n * The frame and wrap work together to ensure that\n * clicks within the picker don’t reach the holder.\n */\n.picker__frame {\n  padding: 1px;\n}\n.picker__wrap {\n  margin: -1px;\n}\n/**\n * When the picker opens...\n */\n.picker--opened .picker__holder {\n  max-height: 25em;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)\";\n  filter: alpha(opacity=100);\n  -moz-opacity: 1;\n  opacity: 1;\n  border-top-width: 1px;\n  border-bottom-width: 1px;\n  transform: translateY(0) perspective(600px) rotateX(0);\n  transition: transform 0.15s ease-out, opacity 0.15s ease-out, max-height 0s, border-width 0s;\n  box-shadow: 0 6px 18px 1px rgba(0, 0, 0, 0.12);\n}\n"
  },
  {
    "path": "lib/themes/classic.date.css",
    "content": "/* ==========================================================================\n   $BASE-DATE-PICKER\n   ========================================================================== */\n/**\n * The picker box.\n */\n.picker__box {\n  padding: 0 1em;\n}\n/**\n * The header containing the month and year stuff.\n */\n.picker__header {\n  text-align: center;\n  position: relative;\n  margin-top: .75em;\n}\n/**\n * The month and year labels.\n */\n.picker__month,\n.picker__year {\n  font-weight: 500;\n  display: inline-block;\n  margin-left: .25em;\n  margin-right: .25em;\n}\n.picker__year {\n  color: #999;\n  font-size: .8em;\n  font-style: italic;\n}\n/**\n * The month and year selectors.\n */\n.picker__select--month,\n.picker__select--year {\n  border: 1px solid #b7b7b7;\n  height: 2em;\n  padding: .5em;\n  margin-left: .25em;\n  margin-right: .25em;\n}\n@media (min-width: 24.5em) {\n  .picker__select--month,\n  .picker__select--year {\n    margin-top: -0.5em;\n  }\n}\n.picker__select--month {\n  width: 35%;\n}\n.picker__select--year {\n  width: 22.5%;\n}\n.picker__select--month:focus,\n.picker__select--year:focus {\n  border-color: #0089ec;\n}\n/**\n * The month navigation buttons.\n */\n.picker__nav--prev,\n.picker__nav--next {\n  position: absolute;\n  padding: .5em 1.25em;\n  width: 1em;\n  height: 1em;\n  box-sizing: content-box;\n  top: -0.25em;\n}\n@media (min-width: 24.5em) {\n  .picker__nav--prev,\n  .picker__nav--next {\n    top: -0.33em;\n  }\n}\n.picker__nav--prev {\n  left: -1em;\n  padding-right: 1.25em;\n}\n@media (min-width: 24.5em) {\n  .picker__nav--prev {\n    padding-right: 1.5em;\n  }\n}\n.picker__nav--next {\n  right: -1em;\n  padding-left: 1.25em;\n}\n@media (min-width: 24.5em) {\n  .picker__nav--next {\n    padding-left: 1.5em;\n  }\n}\n.picker__nav--prev:before,\n.picker__nav--next:before {\n  content: \" \";\n  border-top: .5em solid transparent;\n  border-bottom: .5em solid transparent;\n  border-right: 0.75em solid #000;\n  width: 0;\n  height: 0;\n  display: block;\n  margin: 0 auto;\n}\n.picker__nav--next:before {\n  border-right: 0;\n  border-left: 0.75em solid #000;\n}\n.picker__nav--prev:hover,\n.picker__nav--next:hover {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n}\n.picker__nav--disabled,\n.picker__nav--disabled:hover,\n.picker__nav--disabled:before,\n.picker__nav--disabled:before:hover {\n  cursor: default;\n  background: none;\n  border-right-color: #f5f5f5;\n  border-left-color: #f5f5f5;\n}\n/**\n * The calendar table of dates\n */\n.picker__table {\n  text-align: center;\n  border-collapse: collapse;\n  border-spacing: 0;\n  table-layout: fixed;\n  font-size: inherit;\n  width: 100%;\n  margin-top: .75em;\n  margin-bottom: .5em;\n}\n@media (min-height: 33.875em) {\n  .picker__table {\n    margin-bottom: .75em;\n  }\n}\n.picker__table td {\n  margin: 0;\n  padding: 0;\n}\n/**\n * The weekday labels\n */\n.picker__weekday {\n  width: 14.285714286%;\n  font-size: .75em;\n  padding-bottom: .25em;\n  color: #999;\n  font-weight: 500;\n  /* Increase the spacing a tad */\n}\n@media (min-height: 33.875em) {\n  .picker__weekday {\n    padding-bottom: .5em;\n  }\n}\n/**\n * The days on the calendar\n */\n.picker__day {\n  padding: .3125em 0;\n  font-weight: 200;\n  border: 1px solid transparent;\n}\n.picker__day--today {\n  position: relative;\n}\n.picker__day--today:before {\n  content: \" \";\n  position: absolute;\n  top: 2px;\n  right: 2px;\n  width: 0;\n  height: 0;\n  border-top: 0.5em solid #0059bc;\n  border-left: .5em solid transparent;\n}\n.picker__day--disabled:before {\n  border-top-color: #aaa;\n}\n.picker__day--outfocus {\n  color: #ddd;\n}\n.picker__day--infocus:hover,\n.picker__day--outfocus:hover {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n}\n.picker__day--highlighted {\n  border-color: #0089ec;\n}\n.picker__day--highlighted:hover,\n.picker--focused .picker__day--highlighted {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n}\n.picker__day--selected,\n.picker__day--selected:hover,\n.picker--focused .picker__day--selected {\n  background: #0089ec;\n  color: #fff;\n}\n.picker__day--disabled,\n.picker__day--disabled:hover,\n.picker--focused .picker__day--disabled {\n  background: #f5f5f5;\n  border-color: #f5f5f5;\n  color: #ddd;\n  cursor: default;\n}\n.picker__day--highlighted.picker__day--disabled,\n.picker__day--highlighted.picker__day--disabled:hover {\n  background: #bbb;\n}\n/**\n * The footer containing the \"today\", \"clear\", and \"close\" buttons.\n */\n.picker__footer {\n  text-align: center;\n}\n.picker__button--today,\n.picker__button--clear,\n.picker__button--close {\n  border: 1px solid #fff;\n  background: #fff;\n  font-size: .8em;\n  padding: .66em 0;\n  font-weight: bold;\n  width: 33%;\n  display: inline-block;\n  vertical-align: bottom;\n}\n.picker__button--today:hover,\n.picker__button--clear:hover,\n.picker__button--close:hover {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n  border-bottom-color: #b1dcfb;\n}\n.picker__button--today:focus,\n.picker__button--clear:focus,\n.picker__button--close:focus {\n  background: #b1dcfb;\n  border-color: #0089ec;\n  outline: none;\n}\n.picker__button--today:before,\n.picker__button--clear:before,\n.picker__button--close:before {\n  position: relative;\n  display: inline-block;\n  height: 0;\n}\n.picker__button--today:before,\n.picker__button--clear:before {\n  content: \" \";\n  margin-right: .45em;\n}\n.picker__button--today:before {\n  top: -0.05em;\n  width: 0;\n  border-top: 0.66em solid #0059bc;\n  border-left: .66em solid transparent;\n}\n.picker__button--clear:before {\n  top: -0.25em;\n  width: .66em;\n  border-top: 3px solid #e20;\n}\n.picker__button--close:before {\n  content: \"\\D7\";\n  top: -0.1em;\n  vertical-align: top;\n  font-size: 1.1em;\n  margin-right: .35em;\n  color: #777;\n}\n.picker__button--today[disabled],\n.picker__button--today[disabled]:hover {\n  background: #f5f5f5;\n  border-color: #f5f5f5;\n  color: #ddd;\n  cursor: default;\n}\n.picker__button--today[disabled]:before {\n  border-top-color: #aaa;\n}\n\n/* ==========================================================================\n   $CLASSIC-DATE-PICKER\n   ========================================================================== */\n"
  },
  {
    "path": "lib/themes/classic.time.css",
    "content": "/* ==========================================================================\n   $BASE-TIME-PICKER\n   ========================================================================== */\n/**\n * The list of times.\n */\n.picker__list {\n  list-style: none;\n  padding: 0.75em 0 4.2em;\n  margin: 0;\n}\n/**\n * The times on the clock.\n */\n.picker__list-item {\n  border-bottom: 1px solid #ddd;\n  border-top: 1px solid #ddd;\n  margin-bottom: -1px;\n  position: relative;\n  background: #fff;\n  padding: .75em 1.25em;\n}\n@media (min-height: 46.75em) {\n  .picker__list-item {\n    padding: .5em 1em;\n  }\n}\n/* Hovered time */\n.picker__list-item:hover {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n  border-color: #0089ec;\n  z-index: 10;\n}\n/* Highlighted and hovered/focused time */\n.picker__list-item--highlighted {\n  border-color: #0089ec;\n  z-index: 10;\n}\n.picker__list-item--highlighted:hover,\n.picker--focused .picker__list-item--highlighted {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n}\n/* Selected and hovered/focused time */\n.picker__list-item--selected,\n.picker__list-item--selected:hover,\n.picker--focused .picker__list-item--selected {\n  background: #0089ec;\n  color: #fff;\n  z-index: 10;\n}\n/* Disabled time */\n.picker__list-item--disabled,\n.picker__list-item--disabled:hover,\n.picker--focused .picker__list-item--disabled {\n  background: #f5f5f5;\n  border-color: #f5f5f5;\n  color: #ddd;\n  cursor: default;\n  border-color: #ddd;\n  z-index: auto;\n}\n/**\n * The clear button\n */\n.picker--time .picker__button--clear {\n  display: block;\n  width: 80%;\n  margin: 1em auto 0;\n  padding: 1em 1.25em;\n  background: none;\n  border: 0;\n  font-weight: 500;\n  font-size: .67em;\n  text-align: center;\n  text-transform: uppercase;\n  color: #666;\n}\n.picker--time .picker__button--clear:hover,\n.picker--time .picker__button--clear:focus {\n  color: #000;\n  background: #b1dcfb;\n  background: #e20;\n  border-color: #e20;\n  cursor: pointer;\n  color: #fff;\n  outline: none;\n}\n.picker--time .picker__button--clear:before {\n  top: -0.25em;\n  color: #666;\n  font-size: 1.25em;\n  font-weight: bold;\n}\n.picker--time .picker__button--clear:hover:before,\n.picker--time .picker__button--clear:focus:before {\n  color: #fff;\n  border-color: #fff;\n}\n\n/* ==========================================================================\n   $CLASSIC-TIME-PICKER\n   ========================================================================== */\n/**\n * Note: the root picker element should __NOT__ be styled\n * more than what’s here. Style the `.picker__holder` instead.\n */\n.picker--time {\n  min-width: 256px;\n  max-width: 320px;\n}\n/**\n * The holder is the base of the picker.\n */\n.picker--time .picker__holder {\n  background: #f2f2f2;\n}\n@media (min-height: 40.125em) {\n  .picker--time .picker__holder {\n    font-size: .875em;\n  }\n}\n/**\n * The box contains the list of times.\n */\n.picker--time .picker__box {\n  padding: 0;\n  position: relative;\n}\n"
  },
  {
    "path": "lib/themes/default.css",
    "content": "/* ==========================================================================\n   $BASE-PICKER\n   ========================================================================== */\n/**\n * Note: the root picker element should *NOT* be styled more than what’s here.\n */\n.picker {\n  font-size: 16px;\n  text-align: left;\n  line-height: 1.2;\n  color: #000;\n  position: absolute;\n  z-index: 10000;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  outline: none;\n}\n/**\n * The picker input element.\n */\n.picker__input {\n  cursor: default;\n}\n/**\n * When the picker is opened, the input element is “activated”.\n */\n.picker__input.picker__input--active {\n  border-color: #0089ec;\n}\n/**\n * The holder is the only “scrollable” top-level container element.\n */\n.picker__holder {\n  width: 100%;\n  overflow-y: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n/*!\n * Default mobile-first, responsive styling for pickadate.js\n * Demo: http://amsul.github.io/pickadate.js\n */\n/**\n * Note: the root picker element should *NOT* be styled more than what’s here.\n */\n/**\n * Make the holder and frame fullscreen.\n */\n.picker__holder,\n.picker__frame {\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  -ms-transform: translateY(100%);\n      transform: translateY(100%);\n}\n/**\n * The holder should overlay the entire screen.\n */\n.picker__holder {\n  position: fixed;\n  transition: background 0.15s ease-out, transform 0s 0.15s;\n  -webkit-backface-visibility: hidden;\n}\n/**\n * The frame that bounds the box contents of the picker.\n */\n.picker__frame {\n  position: absolute;\n  margin: 0 auto;\n  min-width: 256px;\n  max-width: 666px;\n  width: 100%;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  filter: alpha(opacity=0);\n  -moz-opacity: 0;\n  opacity: 0;\n  transition: all 0.15s ease-out;\n}\n@media (min-height: 33.875em) {\n  .picker__frame {\n    overflow: visible;\n    top: auto;\n    bottom: -100%;\n    max-height: 80%;\n  }\n}\n@media (min-height: 40.125em) {\n  .picker__frame {\n    margin-bottom: 7.5%;\n  }\n}\n/**\n * The wrapper sets the stage to vertically align the box contents.\n */\n.picker__wrap {\n  display: table;\n  width: 100%;\n  height: 100%;\n}\n@media (min-height: 33.875em) {\n  .picker__wrap {\n    display: block;\n  }\n}\n/**\n * The box contains all the picker contents.\n */\n.picker__box {\n  background: #fff;\n  display: table-cell;\n  vertical-align: middle;\n}\n@media (min-height: 26.5em) {\n  .picker__box {\n    font-size: 1.25em;\n  }\n}\n@media (min-height: 33.875em) {\n  .picker__box {\n    display: block;\n    font-size: 1.33em;\n    border: 1px solid #777;\n    border-top-color: #898989;\n    border-bottom-width: 0;\n    border-radius: 5px 5px 0 0;\n    box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24);\n  }\n}\n@media (min-height: 40.125em) {\n  .picker__box {\n    font-size: 1.5em;\n    border-bottom-width: 1px;\n    border-radius: 5px;\n  }\n}\n/**\n * When the picker opens...\n */\n.picker--opened .picker__holder {\n  -ms-transform: translateY(0);\n      transform: translateY(0);\n  background: transparent;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#1E000000,endColorstr=#1E000000)\";\n  zoom: 1;\n  background: rgba(0, 0, 0, 0.32);\n  transition: background 0.15s ease-out;\n}\n.picker--opened .picker__frame {\n  -ms-transform: translateY(0);\n      transform: translateY(0);\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)\";\n  filter: alpha(opacity=100);\n  -moz-opacity: 1;\n  opacity: 1;\n}\n@media (min-height: 33.875em) {\n  .picker--opened .picker__frame {\n    top: auto;\n    bottom: 0;\n  }\n}\n"
  },
  {
    "path": "lib/themes/default.date.css",
    "content": "/* ==========================================================================\n   $BASE-DATE-PICKER\n   ========================================================================== */\n/**\n * The picker box.\n */\n.picker__box {\n  padding: 0 1em;\n}\n/**\n * The header containing the month and year stuff.\n */\n.picker__header {\n  text-align: center;\n  position: relative;\n  margin-top: .75em;\n}\n/**\n * The month and year labels.\n */\n.picker__month,\n.picker__year {\n  font-weight: 500;\n  display: inline-block;\n  margin-left: .25em;\n  margin-right: .25em;\n}\n.picker__year {\n  color: #999;\n  font-size: .8em;\n  font-style: italic;\n}\n/**\n * The month and year selectors.\n */\n.picker__select--month,\n.picker__select--year {\n  border: 1px solid #b7b7b7;\n  height: 2em;\n  padding: .5em;\n  margin-left: .25em;\n  margin-right: .25em;\n}\n@media (min-width: 24.5em) {\n  .picker__select--month,\n  .picker__select--year {\n    margin-top: -0.5em;\n  }\n}\n.picker__select--month {\n  width: 35%;\n}\n.picker__select--year {\n  width: 22.5%;\n}\n.picker__select--month:focus,\n.picker__select--year:focus {\n  border-color: #0089ec;\n}\n/**\n * The month navigation buttons.\n */\n.picker__nav--prev,\n.picker__nav--next {\n  position: absolute;\n  padding: .5em 1.25em;\n  width: 1em;\n  height: 1em;\n  box-sizing: content-box;\n  top: -0.25em;\n}\n@media (min-width: 24.5em) {\n  .picker__nav--prev,\n  .picker__nav--next {\n    top: -0.33em;\n  }\n}\n.picker__nav--prev {\n  left: -1em;\n  padding-right: 1.25em;\n}\n@media (min-width: 24.5em) {\n  .picker__nav--prev {\n    padding-right: 1.5em;\n  }\n}\n.picker__nav--next {\n  right: -1em;\n  padding-left: 1.25em;\n}\n@media (min-width: 24.5em) {\n  .picker__nav--next {\n    padding-left: 1.5em;\n  }\n}\n.picker__nav--prev:before,\n.picker__nav--next:before {\n  content: \" \";\n  border-top: .5em solid transparent;\n  border-bottom: .5em solid transparent;\n  border-right: 0.75em solid #000;\n  width: 0;\n  height: 0;\n  display: block;\n  margin: 0 auto;\n}\n.picker__nav--next:before {\n  border-right: 0;\n  border-left: 0.75em solid #000;\n}\n.picker__nav--prev:hover,\n.picker__nav--next:hover {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n}\n.picker__nav--disabled,\n.picker__nav--disabled:hover,\n.picker__nav--disabled:before,\n.picker__nav--disabled:before:hover {\n  cursor: default;\n  background: none;\n  border-right-color: #f5f5f5;\n  border-left-color: #f5f5f5;\n}\n/**\n * The calendar table of dates\n */\n.picker__table {\n  text-align: center;\n  border-collapse: collapse;\n  border-spacing: 0;\n  table-layout: fixed;\n  font-size: inherit;\n  width: 100%;\n  margin-top: .75em;\n  margin-bottom: .5em;\n}\n@media (min-height: 33.875em) {\n  .picker__table {\n    margin-bottom: .75em;\n  }\n}\n.picker__table td {\n  margin: 0;\n  padding: 0;\n}\n/**\n * The weekday labels\n */\n.picker__weekday {\n  width: 14.285714286%;\n  font-size: .75em;\n  padding-bottom: .25em;\n  color: #999;\n  font-weight: 500;\n  /* Increase the spacing a tad */\n}\n@media (min-height: 33.875em) {\n  .picker__weekday {\n    padding-bottom: .5em;\n  }\n}\n/**\n * The days on the calendar\n */\n.picker__day {\n  padding: .3125em 0;\n  font-weight: 200;\n  border: 1px solid transparent;\n}\n.picker__day--today {\n  position: relative;\n}\n.picker__day--today:before {\n  content: \" \";\n  position: absolute;\n  top: 2px;\n  right: 2px;\n  width: 0;\n  height: 0;\n  border-top: 0.5em solid #0059bc;\n  border-left: .5em solid transparent;\n}\n.picker__day--disabled:before {\n  border-top-color: #aaa;\n}\n.picker__day--outfocus {\n  color: #ddd;\n}\n.picker__day--infocus:hover,\n.picker__day--outfocus:hover {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n}\n.picker__day--highlighted {\n  border-color: #0089ec;\n}\n.picker__day--highlighted:hover,\n.picker--focused .picker__day--highlighted {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n}\n.picker__day--selected,\n.picker__day--selected:hover,\n.picker--focused .picker__day--selected {\n  background: #0089ec;\n  color: #fff;\n}\n.picker__day--disabled,\n.picker__day--disabled:hover,\n.picker--focused .picker__day--disabled {\n  background: #f5f5f5;\n  border-color: #f5f5f5;\n  color: #ddd;\n  cursor: default;\n}\n.picker__day--highlighted.picker__day--disabled,\n.picker__day--highlighted.picker__day--disabled:hover {\n  background: #bbb;\n}\n/**\n * The footer containing the \"today\", \"clear\", and \"close\" buttons.\n */\n.picker__footer {\n  text-align: center;\n}\n.picker__button--today,\n.picker__button--clear,\n.picker__button--close {\n  border: 1px solid #fff;\n  background: #fff;\n  font-size: .8em;\n  padding: .66em 0;\n  font-weight: bold;\n  width: 33%;\n  display: inline-block;\n  vertical-align: bottom;\n}\n.picker__button--today:hover,\n.picker__button--clear:hover,\n.picker__button--close:hover {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n  border-bottom-color: #b1dcfb;\n}\n.picker__button--today:focus,\n.picker__button--clear:focus,\n.picker__button--close:focus {\n  background: #b1dcfb;\n  border-color: #0089ec;\n  outline: none;\n}\n.picker__button--today:before,\n.picker__button--clear:before,\n.picker__button--close:before {\n  position: relative;\n  display: inline-block;\n  height: 0;\n}\n.picker__button--today:before,\n.picker__button--clear:before {\n  content: \" \";\n  margin-right: .45em;\n}\n.picker__button--today:before {\n  top: -0.05em;\n  width: 0;\n  border-top: 0.66em solid #0059bc;\n  border-left: .66em solid transparent;\n}\n.picker__button--clear:before {\n  top: -0.25em;\n  width: .66em;\n  border-top: 3px solid #e20;\n}\n.picker__button--close:before {\n  content: \"\\D7\";\n  top: -0.1em;\n  vertical-align: top;\n  font-size: 1.1em;\n  margin-right: .35em;\n  color: #777;\n}\n.picker__button--today[disabled],\n.picker__button--today[disabled]:hover {\n  background: #f5f5f5;\n  border-color: #f5f5f5;\n  color: #ddd;\n  cursor: default;\n}\n.picker__button--today[disabled]:before {\n  border-top-color: #aaa;\n}\n\n/* ==========================================================================\n   $DEFAULT-DATE-PICKER\n   ========================================================================== */\n"
  },
  {
    "path": "lib/themes/default.time.css",
    "content": "/* ==========================================================================\n   $BASE-TIME-PICKER\n   ========================================================================== */\n/**\n * The list of times.\n */\n.picker__list {\n  list-style: none;\n  padding: 0.75em 0 4.2em;\n  margin: 0;\n}\n/**\n * The times on the clock.\n */\n.picker__list-item {\n  border-bottom: 1px solid #ddd;\n  border-top: 1px solid #ddd;\n  margin-bottom: -1px;\n  position: relative;\n  background: #fff;\n  padding: .75em 1.25em;\n}\n@media (min-height: 46.75em) {\n  .picker__list-item {\n    padding: .5em 1em;\n  }\n}\n/* Hovered time */\n.picker__list-item:hover {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n  border-color: #0089ec;\n  z-index: 10;\n}\n/* Highlighted and hovered/focused time */\n.picker__list-item--highlighted {\n  border-color: #0089ec;\n  z-index: 10;\n}\n.picker__list-item--highlighted:hover,\n.picker--focused .picker__list-item--highlighted {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n}\n/* Selected and hovered/focused time */\n.picker__list-item--selected,\n.picker__list-item--selected:hover,\n.picker--focused .picker__list-item--selected {\n  background: #0089ec;\n  color: #fff;\n  z-index: 10;\n}\n/* Disabled time */\n.picker__list-item--disabled,\n.picker__list-item--disabled:hover,\n.picker--focused .picker__list-item--disabled {\n  background: #f5f5f5;\n  border-color: #f5f5f5;\n  color: #ddd;\n  cursor: default;\n  border-color: #ddd;\n  z-index: auto;\n}\n/**\n * The clear button\n */\n.picker--time .picker__button--clear {\n  display: block;\n  width: 80%;\n  margin: 1em auto 0;\n  padding: 1em 1.25em;\n  background: none;\n  border: 0;\n  font-weight: 500;\n  font-size: .67em;\n  text-align: center;\n  text-transform: uppercase;\n  color: #666;\n}\n.picker--time .picker__button--clear:hover,\n.picker--time .picker__button--clear:focus {\n  color: #000;\n  background: #b1dcfb;\n  background: #e20;\n  border-color: #e20;\n  cursor: pointer;\n  color: #fff;\n  outline: none;\n}\n.picker--time .picker__button--clear:before {\n  top: -0.25em;\n  color: #666;\n  font-size: 1.25em;\n  font-weight: bold;\n}\n.picker--time .picker__button--clear:hover:before,\n.picker--time .picker__button--clear:focus:before {\n  color: #fff;\n  border-color: #fff;\n}\n\n/* ==========================================================================\n   $DEFAULT-TIME-PICKER\n   ========================================================================== */\n/**\n * The frame the bounds the time picker.\n */\n.picker--time .picker__frame {\n  min-width: 256px;\n  max-width: 320px;\n}\n/**\n * The picker box.\n */\n.picker--time .picker__box {\n  font-size: 1em;\n  background: #f2f2f2;\n  padding: 0;\n}\n@media (min-height: 40.125em) {\n  .picker--time .picker__box {\n    margin-bottom: 5em;\n  }\n}\n"
  },
  {
    "path": "lib/themes/rtl.css",
    "content": "/*!\n * Styling for RTL (right-to-left) languages using pickadate.js\n */\n/**\n * Switch the direction - only really necessary if\n * it hasn’t already been applied higher up in the DOM.\n */\n.picker {\n  direction: rtl;\n}\n/**\n * Flip around the “next” and “previous” buttons.\n */\n.picker__nav--next {\n  right: auto;\n  left: -1em;\n}\n.picker__nav--prev {\n  left: auto;\n  right: -1em;\n}\n.picker__nav--next:before {\n  border-left: 0;\n  border-right: 0.75em solid #000;\n}\n.picker__nav--prev:before {\n  border-right: 0;\n  border-left: 0.75em solid #000;\n}\n"
  },
  {
    "path": "lib/themes-source/_variables.less",
    "content": "\n// ==========================================================================\n// $VARIABLES\n// ==========================================================================\n\n\n//\n// Base colors\n//\n@blue: #0089ec;\n@blue-hover: #b1dcfb;\n@black: #000;\n@white: #fff;\n\n\n//\n// Backgrounds\n//\n@bg-white: @white;\n@bg-grey-light: #f2f2f2;\n\n\n//\n// Borders\n//\n@border-grey: #777;\n@border-grey-light: #ddd;\n@border-select: darken( @border-grey-light, 15% );\n\n\n//\n// Buttons\n//\n@clear-red: #e20;\n\n\n\n\n\n//\n// Picker base\n//\n\n// Make sure nothing is above the picker.\n@picker-z-index: 10000;\n\n// Animation speeds.\n@speed-animate-in: .15s;\n\n// Focused input border color.\n@input-active-border: @blue;\n\n// Typography.\n@base-font-size: 16px;\n@base-line-height: 1.2;\n\n// Corners.\n@picker-border-radius: 5px;\n\n// Drop shadows.\n@picker-box-shadow: 0 12px 36px 16px rgba(0,0,0,.24);\n@picker-box-shadow-light: 0 6px 18px 1px rgba(0,0,0,.12);\n\n// Height breakpoints.\n@breakpoint-tiny: 26.5em; // 424px @ 16px\n@breakpoint-small: 33.875em; // 542px @ 16px\n@breakpoint-medium: 40.125em; // 642px @ 16px\n@breakpoint-large: 46.75em; // 748px @ 16px\n\n// Width breakpoints.\n@breakpoint-width-tiny: 24.5em; // 392px @ 16px\n\n\n\n\n//\n// Date picker options\n//\n\n// The year and weekday labels.\n@year-weekday-label: #999;\n\n// “Today” tag indicators.\n@blue-tag: #0059bc;\n@disabled-tag: #aaa;\n\n// Disabled things.. such as days, month nav, etc.\n@disabled-things-bg: #f5f5f5;\n@disabled-things-text: #ddd;\n@disabled-highlighted-things-bg: #bbb;\n\n\n\n\n\n//\n// Theme configurations\n//\n\n// The “default” min & max widths.\n@picker-min-width: 256px;\n@picker-max-width: 666px;\n\n// The time picker min & max widths.\n@time-min-width: @picker-min-width;\n@time-max-width: 320px;\n\n// The “classic” theme settings.\n@classic-max-width: @picker-max-width - 200px;\n@classic-min-width: @picker-min-width - 80px;\n@classic-max-height: 25em;\n@classic-box-shadow: 0 6px 18px 1px rgba(0,0,0,.12);\n\n\n\n\n\n\n\n\n// ==========================================================================\n// $MIXINS\n// ==========================================================================\n\n\n//\n// Common picker item states\n//\n\n// Highlighted.\n.picker-item-highlighted () {\n    border-color: @blue;\n}\n\n// Hovered.\n.picker-item-hovered () {\n    cursor: pointer;\n    color: @black;\n    background: @blue-hover;\n}\n\n// Selected.\n.picker-item-selected () {\n    background: @blue;\n    color: @white;\n}\n\n// Disabled.\n.picker-item-disabled () {\n    background: @disabled-things-bg;\n    border-color: @disabled-things-bg;\n    color: @disabled-things-text;\n    cursor: default;\n}\n\n\n\n\n//\n// Opacity\n//\n.opacity( @decimal ) {\n    @percent: @decimal * 100;\n    -ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=@{percent})\";\n    filter: ~\"alpha(opacity=@{percent})\";\n    -moz-opacity: @decimal;\n         opacity: @decimal;\n}\n\n\n\n"
  },
  {
    "path": "lib/themes-source/base.date.less",
    "content": "\n/* ==========================================================================\n   $BASE-DATE-PICKER\n   ========================================================================== */\n\n@import \"_variables.less\";\n\n\n/**\n * The picker box.\n */\n.picker__box {\n    padding: 0 1em;\n}\n\n\n/**\n * The header containing the month and year stuff.\n */\n.picker__header {\n    text-align: center;\n    position: relative;\n    margin-top: .75em;\n}\n\n\n/**\n * The month and year labels.\n */\n.picker__month,\n.picker__year {\n    font-weight: 500;\n    display: inline-block;\n    margin-left: .25em;\n    margin-right: .25em;\n}\n.picker__year {\n    color: @year-weekday-label;\n    font-size: .8em;\n    font-style: italic;\n}\n\n\n/**\n * The month and year selectors.\n */\n.picker__select--month,\n.picker__select--year {\n    border: 1px solid @border-select;\n    height: 2em;\n    padding: .5em; // For firefox\n    margin-left: .25em;\n    margin-right: .25em;\n\n    // For `tiny` width screens, move it up a bit.\n    @media ( min-width: @breakpoint-width-tiny ) {\n        margin-top: -.5em;\n    }\n}\n.picker__select--month {\n    width: 35%;\n}\n.picker__select--year {\n    width: 22.5%;\n}\n.picker__select--month:focus,\n.picker__select--year:focus {\n    border-color: @blue;\n}\n\n\n/**\n * The month navigation buttons.\n */\n.picker__nav--prev,\n.picker__nav--next {\n    position: absolute;\n    padding: .5em 1.25em;\n    width: 1em;\n    height: 1em;\n    box-sizing: content-box;\n    top: -.25em;\n\n    // For `tiny` width screens, move it up a bit.\n    @media ( min-width: @breakpoint-width-tiny ) {\n        top: -.33em;\n    }\n}\n.picker__nav--prev {\n    left: -1em;\n    padding-right: 1.25em;\n\n    // For `tiny` width screens, increase the padding a bit.\n    @media ( min-width: @breakpoint-width-tiny ) {\n        padding-right: 1.5em;\n    }\n}\n.picker__nav--next {\n    right: -1em;\n    padding-left: 1.25em;\n\n    // For `tiny` width screens, increase the padding a bit.\n    @media ( min-width: @breakpoint-width-tiny ) {\n        padding-left: 1.5em;\n    }\n}\n.picker__nav--prev:before,\n.picker__nav--next:before {\n    content: \" \";\n    border-top: .5em solid transparent;\n    border-bottom: .5em solid transparent;\n    border-right: .75em solid @black;\n    width: 0;\n    height: 0;\n    display: block;\n    margin: 0 auto;\n}\n.picker__nav--next:before {\n    border-right: 0;\n    border-left: .75em solid @black;\n}\n\n// Hovered date picker items.\n.picker__nav--prev:hover,\n.picker__nav--next:hover {\n    .picker-item-hovered;\n}\n\n// Disabled month nav.\n.picker__nav--disabled,\n.picker__nav--disabled:hover,\n.picker__nav--disabled:before,\n.picker__nav--disabled:before:hover {\n    cursor: default;\n    background: none;\n    border-right-color: @disabled-things-bg;\n    border-left-color: @disabled-things-bg;\n}\n\n\n\n\n/**\n * The calendar table of dates\n */\n.picker__table {\n    text-align: center;\n    border-collapse: collapse;\n    border-spacing: 0;\n    table-layout: fixed;\n    font-size: inherit;\n    width: 100%;\n    margin-top: .75em;\n    margin-bottom: .5em;\n\n    // For `small` screens, increase the spacing a tad.\n    @media ( min-height: @breakpoint-small ) {\n        margin-bottom: .75em;\n    }\n}\n\n// Remove browser stylings on a table cell.\n.picker__table td {\n    margin: 0;\n    padding: 0;\n}\n\n\n/**\n * The weekday labels\n */\n.picker__weekday {\n    width: 14.285714286%; // 100/7\n    font-size: .75em;\n    padding-bottom: .25em;\n    color: @year-weekday-label;\n    font-weight: 500;\n\n    /* Increase the spacing a tad */\n    @media ( min-height: @breakpoint-small ) {\n        padding-bottom: .5em;\n    }\n}\n\n\n/**\n * The days on the calendar\n */\n.picker__day {\n    padding: .3125em 0;\n    font-weight: 200;\n    border: 1px solid transparent;\n}\n\n// Today.\n.picker__day--today {\n    position: relative;\n}\n.picker__day--today:before {\n    content: \" \";\n    position: absolute;\n    top: 2px;\n    right: 2px;\n    width: 0;\n    height: 0;\n    border-top: .5em solid @blue-tag;\n    border-left: .5em solid transparent;\n}\n\n// Disabled day.\n.picker__day--disabled:before {\n    border-top-color: @disabled-tag;\n}\n\n// Out of focus days.\n.picker__day--outfocus {\n    color: @disabled-things-text;\n}\n\n// Hovered date picker items.\n.picker__day--infocus:hover,\n.picker__day--outfocus:hover {\n    .picker-item-hovered;\n}\n\n// Highlighted and hovered/focused dates.\n.picker__day--highlighted {\n    .picker-item-highlighted;\n}\n.picker__day--highlighted:hover,\n.picker--focused .picker__day--highlighted {\n    .picker-item-hovered;\n}\n\n// Selected and hovered/focused dates.\n.picker__day--selected,\n.picker__day--selected:hover,\n.picker--focused .picker__day--selected {\n    .picker-item-selected;\n}\n\n// Disabled dates.\n.picker__day--disabled,\n.picker__day--disabled:hover,\n.picker--focused .picker__day--disabled {\n    .picker-item-disabled;\n}\n\n// Disabled and highlighted dates.\n.picker__day--highlighted.picker__day--disabled,\n.picker__day--highlighted.picker__day--disabled:hover {\n    background: @disabled-highlighted-things-bg;\n}\n\n\n/**\n * The footer containing the \"today\", \"clear\", and \"close\" buttons.\n */\n.picker__footer {\n    text-align: center;\n}\n\n// Today, clear, and close buttons.\n.picker__button--today,\n.picker__button--clear,\n.picker__button--close {\n    border: 1px solid @white;\n    background: @white;\n    font-size: .8em;\n    padding: .66em 0;\n    font-weight: bold;\n    width: 33%;\n    display: inline-block;\n    vertical-align: bottom;\n}\n.picker__button--today:hover,\n.picker__button--clear:hover,\n.picker__button--close:hover {\n    .picker-item-hovered;\n    border-bottom-color: @blue-hover;\n}\n.picker__button--today:focus,\n.picker__button--clear:focus,\n.picker__button--close:focus {\n    background: @blue-hover;\n    border-color: @blue;\n    outline: none;\n}\n\n// Today, clear, and close “indicators”.\n.picker__button--today:before,\n.picker__button--clear:before,\n.picker__button--close:before {\n    position: relative;\n    display: inline-block;\n    height: 0;\n}\n.picker__button--today:before,\n.picker__button--clear:before {\n    content: \" \";\n    margin-right: .45em;\n}\n.picker__button--today:before {\n    top: -.05em;\n    width: 0;\n    border-top: .66em solid @blue-tag;\n    border-left: .66em solid transparent;\n}\n.picker__button--clear:before {\n    top: -.25em;\n    width: .66em;\n    border-top: 3px solid @clear-red;\n}\n.picker__button--close:before {\n    content: \"\\D7\"; // ×\n    top: -.1em;\n    vertical-align: top;\n    font-size: 1.1em;\n    margin-right: .35em;\n    color: @border-grey;\n}\n\n// Today when “disabled”.\n.picker__button--today[disabled],\n.picker__button--today[disabled]:hover {\n    .picker-item-disabled;\n}\n.picker__button--today[disabled]:before {\n    border-top-color: @disabled-tag;\n}\n\n\n\n"
  },
  {
    "path": "lib/themes-source/base.less",
    "content": "\n/* ==========================================================================\n   $BASE-PICKER\n   ========================================================================== */\n\n@import \"_variables.less\";\n\n\n/**\n * Note: the root picker element should *NOT* be styled more than what’s here.\n */\n.picker {\n\n    // The base font stylings.\n    font-size: @base-font-size;\n    text-align: left;\n    line-height: @base-line-height;\n    color: @black;\n\n    // The picker shouldn’t affect or be affected by elements around it.\n    position: absolute;\n    z-index: @picker-z-index;\n\n    // The picker shouldn’t be selectable.\n    user-select: none;\n    outline: none;\n}\n\n\n/**\n * The picker input element.\n */\n.picker__input {\n    cursor: default;\n}\n\n\n/**\n * When the picker is opened, the input element is “activated”.\n */\n.picker__input.picker__input--active {\n    border-color: @input-active-border;\n}\n\n\n/**\n * The holder is the only “scrollable” top-level container element.\n */\n.picker__holder {\n    width: 100%;\n    overflow-y: auto;\n    -webkit-overflow-scrolling: touch;\n}\n\n\n\n"
  },
  {
    "path": "lib/themes-source/base.time.less",
    "content": "\n/* ==========================================================================\n   $BASE-TIME-PICKER\n   ========================================================================== */\n\n@import \"_variables.less\";\n\n\n/**\n * The list of times.\n */\n.picker__list {\n    list-style: none;\n    padding: 0.75em 0 4.2em;\n    margin: 0;\n}\n\n\n/**\n * The times on the clock.\n */\n.picker__list-item {\n    border-bottom: 1px solid @border-grey-light;\n    border-top: 1px solid @border-grey-light;\n    margin-bottom: -1px; // Prevent border from doubling up.\n    position: relative;\n    background: @bg-white;\n    padding: .75em 1.25em;\n\n    // For `large` screens, reduce the padding to show more in view.\n    @media ( min-height: @breakpoint-large ) {\n        padding: .5em 1em;\n    }\n}\n\n/* Hovered time */\n.picker__list-item:hover {\n    .picker-item-hovered;\n    border-color: @blue;\n    z-index: 10;\n}\n\n/* Highlighted and hovered/focused time */\n.picker__list-item--highlighted {\n    .picker-item-highlighted;\n    z-index: 10;\n}\n.picker__list-item--highlighted:hover,\n.picker--focused .picker__list-item--highlighted {\n    .picker-item-hovered;\n}\n\n/* Selected and hovered/focused time */\n.picker__list-item--selected,\n.picker__list-item--selected:hover,\n.picker--focused .picker__list-item--selected {\n    .picker-item-selected;\n    z-index: 10;\n}\n\n/* Disabled time */\n.picker__list-item--disabled,\n.picker__list-item--disabled:hover,\n.picker--focused .picker__list-item--disabled {\n    .picker-item-disabled;\n    border-color: @border-grey-light;\n    z-index: auto;\n}\n\n\n\n\n/**\n * The clear button\n */\n.picker--time {\n\n    .picker__button--clear {\n        display: block;\n        width: 80%;\n        margin: 1em auto 0;\n        padding: 1em 1.25em;\n\n        background: none;\n        border: 0;\n\n        font-weight: 500;\n        font-size: .67em;\n        text-align: center;\n        text-transform: uppercase;\n        color: #666;\n    }\n\n    .picker__button--clear:hover,\n    .picker__button--clear:focus {\n        .picker-item-hovered;\n        background: @clear-red;\n        border-color: @clear-red;\n        cursor: pointer;\n        color: @white;\n        outline: none;\n    }\n\n    .picker__button--clear:before {\n        top: -.25em;\n        color: #666;\n        font-size: 1.25em;\n        font-weight: bold;\n    }\n\n    .picker__button--clear:hover:before,\n    .picker__button--clear:focus:before {\n        color: @white;\n        border-color: @white;\n    }\n}\n\n\n\n"
  },
  {
    "path": "lib/themes-source/classic.date.less",
    "content": "\n/* ==========================================================================\n   $CLASSIC-DATE-PICKER\n   ========================================================================== */\n\n@import \"_variables.less\";\n\n\n\n"
  },
  {
    "path": "lib/themes-source/classic.less",
    "content": "/*!\n * Classic picker styling for pickadate.js\n * Demo: http://amsul.github.io/pickadate.js\n */\n\n@import \"_variables.less\";\n\n\n/**\n * Note: the root picker element should *NOT* be styled more than what’s here.\n */\n.picker {\n\n    // Make it full-width so that it doesn’t collapse.\n    width: 100%;\n}\n\n\n\n/**\n * The holder is the base of the picker.\n */\n.picker__holder {\n\n    // The base stylings.\n    position: absolute;\n    background: @bg-white;\n\n    // Add a light border - except top & bottom to let it collapse.\n    border: 1px solid lighten( @border-grey, 20% );\n    border-top-width: 0;\n    border-bottom-width: 0;\n\n    // Round the bottom corners.\n    border-radius: 0 0 @picker-border-radius @picker-border-radius;\n\n    // Let’s not go 100% + 2px.\n    box-sizing: border-box;\n\n    // Specify the min & max widths.\n    min-width: @classic-min-width;\n    max-width: @classic-max-width;\n\n    // Hide everything to begin with.\n    max-height: 0;\n    .opacity( 0 );\n\n    // Tilt the picker.\n    transform: translateY( -1em ) perspective( 600px ) rotateX( 10deg );\n\n    // Everything should be smoothly animated – the height & border should wait till the rest is done.\n    transition: transform @speed-animate-in ease-out,\n                opacity @speed-animate-in ease-out,\n                max-height 0s @speed-animate-in,\n                border-width 0s @speed-animate-in;\n}\n\n\n\n/**\n * The frame and wrap work together to ensure that\n * clicks within the picker don’t reach the holder.\n */\n.picker__frame {\n    padding: 1px;\n}\n.picker__wrap {\n    margin: -1px;\n}\n\n\n\n/**\n * When the picker opens...\n */\n.picker--opened {\n\n    .picker__holder {\n\n        // Reveal the content.\n        max-height: @classic-max-height;\n        .opacity( 1 );\n\n        // Expand the top & bottom borders.\n        border-top-width: 1px;\n        border-bottom-width: 1px;\n\n        // Straighten the picker.\n        transform: translateY( 0 ) perspective( 600px ) rotateX( 0 );\n\n        // Everything should be smoothly animated – except the height & border.\n        transition: transform @speed-animate-in ease-out,\n                    opacity @speed-animate-in ease-out,\n                    max-height 0s,\n                    border-width 0s;\n\n        // Add a light shadow.\n        box-shadow: @classic-box-shadow;\n    }\n}\n\n\n\n"
  },
  {
    "path": "lib/themes-source/classic.time.less",
    "content": "\n/* ==========================================================================\n   $CLASSIC-TIME-PICKER\n   ========================================================================== */\n\n@import \"_variables.less\";\n\n\n/**\n * Note: the root picker element should __NOT__ be styled\n * more than what’s here. Style the `.picker__holder` instead.\n */\n.picker--time {\n\n    // Adjust the min & max widths.\n    min-width: @time-min-width;\n    max-width: @time-max-width;\n}\n\n\n/**\n * The holder is the base of the picker.\n */\n.picker--time .picker__holder {\n\n    // Add a slight background color.\n    background: @bg-grey-light;\n\n    // For `medium` screens, reduce the font-size a bit to get more in view.\n    @media ( min-height: @breakpoint-medium ) {\n        font-size: .875em;\n    }\n}\n\n\n/**\n * The box contains the list of times.\n */\n.picker--time .picker__box {\n\n    // Remove any stylings overflowing from the date picker.\n    padding: 0;\n\n    // Make the “viewset” time position relative to the box.\n    position: relative;\n}\n\n\n\n"
  },
  {
    "path": "lib/themes-source/default.date.less",
    "content": "\n/* ==========================================================================\n   $DEFAULT-DATE-PICKER\n   ========================================================================== */\n\n@import \"_variables.less\";\n\n\n\n"
  },
  {
    "path": "lib/themes-source/default.less",
    "content": "/*!\n * Default mobile-first, responsive styling for pickadate.js\n * Demo: http://amsul.github.io/pickadate.js\n */\n\n@import \"_variables.less\";\n\n\n/**\n * Note: the root picker element should *NOT* be styled more than what’s here.\n */\n.picker {}\n\n\n/**\n * Make the holder and frame fullscreen.\n */\n.picker__holder,\n.picker__frame {\n    top: 0;\n    bottom: 0;\n    left: 0;\n    right: 0;\n\n    // Nudge everything off-screen to begin with.\n    transform: translateY(100%);\n}\n\n\n/**\n * The holder should overlay the entire screen.\n */\n.picker__holder {\n\n    // Fill the screen and fix the position.\n    position: fixed;\n\n    // Fade out the background, then immediately shift the holder out of view.\n    transition: background @speed-animate-in ease-out, transform 0s @speed-animate-in;\n\n    // Avoid flickering of the page on webkit browsers\n    -webkit-backface-visibility: hidden;\n}\n\n\n\n/**\n * The frame that bounds the box contents of the picker.\n */\n.picker__frame {\n\n    position: absolute;\n\n    // Specify the min & max widths and center align it.\n    margin: 0 auto;\n    min-width: @picker-min-width;\n    max-width: @picker-max-width;\n    width: 100%; // For IE9 & 10 to keep it centered.\n\n    // Hide it to begin with.\n    .opacity( 0 );\n\n    // Animate the frame in and out of view.\n    transition: all @speed-animate-in ease-out;\n\n    // For `small` screens...\n    @media ( min-height: @breakpoint-small ) {\n\n        // Reveal what’s beyond to allow drop shadows, et al.\n        overflow: visible;\n\n        // Align to the bottom edge instead of top.\n        top: auto;\n        bottom: -100%;\n\n        // Prevent it from overflowing over the top edge.\n        max-height: 80%;\n    }\n\n    // For `medium` screens...\n    @media ( min-height: @breakpoint-medium ) {\n\n        // Move away from the bottom edge.\n        margin-bottom: 7.5%;\n    }\n}\n\n/**\n * The wrapper sets the stage to vertically align the box contents.\n */\n.picker__wrap {\n    display: table;\n    width: 100%;\n    height: 100%;\n\n    // For `small` screens, remove the “middle-aligned” styling\n    @media ( min-height: @breakpoint-small ) {\n        display: block;\n    }\n}\n\n\n\n/**\n * The box contains all the picker contents.\n */\n.picker__box {\n    background: @bg-white;\n\n    // To start with, vertically align to center\n    display: table-cell;\n    vertical-align: middle;\n\n    // For `tiny` screens, increase the font size a bit\n    @media ( min-height: @breakpoint-tiny ) {\n        font-size: 1.25em;\n    }\n\n    // For `small` screens...\n    @media ( min-height: @breakpoint-small ) {\n\n        // Remove the “middle-aligned” styling\n        display: block;\n\n        // Increase the font size a bit more\n        font-size: 1.33em;\n\n        // Add the borders except the bottom one\n        border: 1px solid @border-grey;\n        border-top-color: lighten( @border-grey, 7% );\n        border-bottom-width: 0;\n\n        // Make ‘em rounded at the top corners\n        border-radius: @picker-border-radius @picker-border-radius 0 0;\n\n        // And finally, add a nice shadow\n        box-shadow: @picker-box-shadow;\n    }\n\n    // For `medium` screens...\n    @media ( min-height: @breakpoint-medium ) {\n\n        // Increase the font size.\n        font-size: 1.5em;\n\n        // Reveal all borders and round all corners.\n        border-bottom-width: 1px;\n        border-radius: @picker-border-radius;\n    }\n}\n\n\n/**\n * When the picker opens...\n */\n.picker--opened {\n\n    // Immediately move the holder to the top edge then fade in an overlay\n    .picker__holder {\n\n        // Move it to the top edge\n        transform: translateY(0);\n\n        // Show a translucent black background (order is important for IE)\n        background: transparent;\n        -ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#1E000000,endColorstr=#1E000000)\"; // IE8\n              zoom: 1;\n        background: rgba(0,0,0,.32); // Normal browsers\n\n        // Animate in the background\n        transition: background @speed-animate-in ease-out;\n    }\n\n\n    // Smoothly move the content to the top edge while fading it in\n    .picker__frame {\n\n        // Move to the top edge\n        transform: translateY(0);\n\n        // Ånd then reveal the content\n        .opacity( 1 );\n\n        // For `small` screens, move to the bottom edge instead\n        @media ( min-height: @breakpoint-small ) {\n            top: auto;\n            bottom: 0;\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "lib/themes-source/default.time.less",
    "content": "\n/* ==========================================================================\n   $DEFAULT-TIME-PICKER\n   ========================================================================== */\n\n@import \"_variables.less\";\n\n\n/**\n * The frame the bounds the time picker.\n */\n.picker--time .picker__frame {\n\n    // Adjust the min & max widths.\n    min-width: @time-min-width;\n    max-width: @time-max-width;\n}\n\n\n/**\n * The picker box.\n */\n.picker--time .picker__box {\n\n    // Keep the font-size small to show more in view.\n    font-size: 1em;\n\n    // Add a slight background color.\n    background: @bg-grey-light;\n\n    // Remove the side paddings.\n    padding: 0;\n\n    // For `medium` screens, move it away from the bottom edge of the screen.\n    @media ( min-height: @breakpoint-medium ) {\n        margin-bottom: 5em;\n    }\n}\n\n\n\n"
  },
  {
    "path": "lib/themes-source/rtl.less",
    "content": "/*!\n * Styling for RTL (right-to-left) languages using pickadate.js\n */\n\n@import \"_variables.less\";\n\n\n/**\n * Switch the direction - only really necessary if\n * it hasn’t already been applied higher up in the DOM.\n */\n.picker {\n    direction: rtl;\n}\n\n\n/**\n * Flip around the “next” and “previous” buttons.\n */\n.picker__nav--next {\n    right: auto;\n    left: -1em;\n}\n.picker__nav--prev {\n    left: auto;\n    right: -1em;\n}\n.picker__nav--next:before {\n    border-left: 0;\n    border-right: .75em solid @black;\n}\n.picker__nav--prev:before {\n    border-right: 0;\n    border-left: .75em solid @black;\n}\n\n\n\n"
  },
  {
    "path": "lib/translations/FORMATTING.md",
    "content": "### The following convention is used for choosing a format for the translation files:\n\n1. Google for “Microsoft Style Guide LANGUAGE COUNTRY”.\n2. Check the standard suggestions for Long Date Formats.\n3. Set this as the `format` option using [pickadate’s formatting rules](http://amsul.ca/pickadate.js/date.htm#formatting-rules).\n\nMake sure `formatSubmit` is always `yyyy/mm/dd` to ensure our servers always get the value formatted the same."
  },
  {
    "path": "lib/translations/NAMING.md",
    "content": "### The following convention is used for naming the translation files:\n\n```\nLANGUAGE_COUNTRY.js\n```\n\n#### Where:\n\n```\nLANGUAGE = The lowercase ISO 639-1 language code.\n```\n\n> See http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes\n\n```\nCOUNTRY = The uppercase ISO 3166-1 country code.\n```\n\n> See http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements\n\nWhen there is no `COUNTRY` in the filename, it is assumed the generic language is used in multiple countries.\n"
  },
  {
    "path": "lib/translations/ar.js",
    "content": "// Arabic\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'يناير', 'فبراير', 'مارس', 'ابريل', 'مايو', 'يونيو', 'يوليو', 'اغسطس', 'سبتمبر', 'اكتوبر', 'نوفمبر', 'ديسمبر' ],\n    monthsShort: [ 'يناير', 'فبراير', 'مارس', 'ابريل', 'مايو', 'يونيو', 'يوليو', 'اغسطس', 'سبتمبر', 'اكتوبر', 'نوفمبر', 'ديسمبر' ],\n    weekdaysFull: [ 'الاحد', 'الاثنين', 'الثلاثاء', 'الاربعاء', 'الخميس', 'الجمعة', 'السبت' ],\n    weekdaysShort: [ 'الاحد', 'الاثنين', 'الثلاثاء', 'الاربعاء', 'الخميس', 'الجمعة', 'السبت' ],\n    today: 'اليوم',\n    clear: 'مسح',\n    format: 'yyyy mmmm dd',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'مسح'\n});\n"
  },
  {
    "path": "lib/translations/bg_BG.js",
    "content": "// Bulgarian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'януари','февруари','март','април','май','юни','юли','август','септември','октомври','ноември','декември' ],\n    monthsShort: [ 'янр','фев','мар','апр','май','юни','юли','авг','сеп','окт','ное','дек' ],\n    weekdaysFull: [ 'неделя', 'понеделник', 'вторник', 'сряда', 'четвъртък', 'петък', 'събота' ],\n    weekdaysShort: [ 'нд', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб' ],\n    today: 'днес',\n    clear: 'изтривам',\n    firstDay: 1,\n    format: 'd mmmm yyyy г.',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'изтривам'\n});\n"
  },
  {
    "path": "lib/translations/bs_BA.js",
    "content": "// Bosnian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'januar', 'februar', 'mart', 'april', 'maj', 'juni', 'juli', 'august', 'septembar', 'oktobar', 'novembar', 'decembar' ],\n    monthsShort: [ 'jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec' ],\n    weekdaysFull: [ 'nedjelja', 'ponedjeljak', 'utorak', 'srijeda', 'cetvrtak', 'petak', 'subota' ],\n    weekdaysShort: [ 'ne', 'po', 'ut', 'sr', 'če', 'pe', 'su' ],\n    today: 'danas',\n    clear: 'izbrisati',\n    firstDay: 1,\n    format: 'dd. mmmm yyyy.',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'izbrisati'\n});\n"
  },
  {
    "path": "lib/translations/ca_ES.js",
    "content": "// Catalan\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'Gener', 'Febrer', 'Març', 'Abril', 'Maig', 'juny', 'Juliol', 'Agost', 'Setembre', 'Octubre', 'Novembre', 'Desembre' ],\n    monthsShort: [ 'Gen', 'Feb', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Oct', 'Nov', 'Des' ],\n    weekdaysFull: [ 'diumenge', 'dilluns', 'dimarts', 'dimecres', 'dijous', 'divendres', 'dissabte' ],\n    weekdaysShort: [ 'diu', 'dil', 'dim', 'dmc', 'dij', 'div', 'dis' ],\n    today: 'avui',\n    clear: 'esborra',\n    close: 'tanca',\n    firstDay: 1,\n    format: 'dddd d !de mmmm !de yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'esborra'\n});\n"
  },
  {
    "path": "lib/translations/cs_CZ.js",
    "content": "// Czech\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'leden', 'únor', 'březen', 'duben', 'květen', 'červen', 'červenec', 'srpen', 'září', 'říjen', 'listopad', 'prosinec' ],\n    monthsShort: [ 'led', 'úno', 'bře', 'dub', 'kvě', 'čer', 'čvc', 'srp', 'zář', 'říj', 'lis', 'pro' ],\n    weekdaysFull: [ 'neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota' ],\n    weekdaysShort: [ 'ne', 'po', 'út', 'st', 'čt', 'pá', 'so' ],\n    today: 'dnes',\n    clear: 'vymazat',\n    firstDay: 1,\n    format: 'd. mmmm yyyy',\n    formatSubmit: 'yyyy/mm/dd',\n    close: 'zavřít'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'vymazat'\n});\n"
  },
  {
    "path": "lib/translations/da_DK.js",
    "content": "// Danish\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'januar', 'februar', 'marts', 'april', 'maj', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'december' ],\n    monthsShort: [ 'jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec' ],\n    weekdaysFull: [ 'søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag' ],\n    weekdaysShort: [ 'søn', 'man', 'tir', 'ons', 'tor', 'fre', 'lør' ],\n    today: 'i dag',\n    clear: 'slet',\n    close: 'luk',\n    firstDay: 1,\n    format: 'd. mmmm yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'slet'\n});\n"
  },
  {
    "path": "lib/translations/de_DE.js",
    "content": "// German\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember' ],\n    monthsShort: [ 'Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez' ],\n    weekdaysFull: [ 'Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag' ],\n    weekdaysShort: [ 'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa' ],\n    today: 'Heute',\n    clear: 'Löschen',\n    close: 'Schließen',\n    firstDay: 1,\n    format: 'dddd, dd. mmmm yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'Löschen',\n    format: 'H:i'\n});\n"
  },
  {
    "path": "lib/translations/el_GR.js",
    "content": "// Greek\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'Ιανουάριος', 'Φεβρουάριος', 'Μάρτιος', 'Απρίλιος', 'Μάιος', 'Ιούνιος', 'Ιούλιος', 'Αύγουστος', 'Σεπτέμβριος', 'Οκτώβριος', 'Νοέμβριος', 'Δεκέμβριος' ],\n    monthsShort: [ 'Ιαν', 'Φεβ', 'Μαρ', 'Απρ', 'Μαι', 'Ιουν', 'Ιουλ', 'Αυγ', 'Σεπ', 'Οκτ', 'Νοε', 'Δεκ' ],\n    weekdaysFull: [ 'Κυριακή', 'Δευτέρα', 'Τρίτη', 'Τετάρτη', 'Πέμπτη', 'Παρασκευή', 'Σάββατο' ],\n    weekdaysShort: [ 'Κυρ', 'Δευ', 'Τρι', 'Τετ', 'Πεμ', 'Παρ', 'Σαβ' ],\n    today: 'σήμερα',\n    clear: 'Διαγραφή',\n    firstDay: 1,\n    format: 'd mmmm yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'Διαγραφή'\n});\n"
  },
  {
    "path": "lib/translations/es_ES.js",
    "content": "// Spanish\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre' ],\n    monthsShort: [ 'ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic' ],\n    weekdaysFull: [ 'Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado' ],\n    weekdaysShort: [ 'dom', 'lun', 'mar', 'mié', 'jue', 'vie', 'sáb' ],\n    today: 'Hoy',\n    clear: 'Borrar',\n    close: 'Cerrar',\n    firstDay: 1,\n    format: 'dddd d !de mmmm !de yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'Borrar'\n});\n"
  },
  {
    "path": "lib/translations/et_EE.js",
    "content": "// Estonian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'jaanuar', 'veebruar', 'märts', 'aprill', 'mai', 'juuni', 'juuli', 'august', 'september', 'oktoober', 'november', 'detsember' ],\n    monthsShort: [ 'jaan', 'veebr', 'märts', 'apr', 'mai', 'juuni', 'juuli', 'aug', 'sept', 'okt', 'nov', 'dets' ],\n    weekdaysFull: [ 'pühapäev', 'esmaspäev', 'teisipäev', 'kolmapäev', 'neljapäev', 'reede', 'laupäev' ],\n    weekdaysShort: [ 'püh', 'esm', 'tei', 'kol', 'nel', 'ree', 'lau' ],\n    today: 'täna',\n    clear: 'kustuta',\n    firstDay: 1,\n    format: 'd. mmmm yyyy. a',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'kustuta'\n});\n"
  },
  {
    "path": "lib/translations/eu_ES.js",
    "content": "// Basque\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'urtarrila', 'otsaila', 'martxoa', 'apirila', 'maiatza', 'ekaina', 'uztaila', 'abuztua', 'iraila', 'urria', 'azaroa', 'abendua' ],\n    monthsShort: [ 'urt', 'ots', 'mar', 'api', 'mai', 'eka', 'uzt', 'abu', 'ira', 'urr', 'aza', 'abe' ],\n    weekdaysFull: [ 'igandea', 'astelehena', 'asteartea', 'asteazkena', 'osteguna', 'ostirala', 'larunbata' ],\n    weekdaysShort: [ 'ig.', 'al.', 'ar.', 'az.', 'og.', 'or.', 'lr.' ],\n    today: 'gaur',\n    clear: 'garbitu',\n    firstDay: 1,\n    format: 'dddd, yyyy(e)ko mmmmren da',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'garbitu'\n});\n"
  },
  {
    "path": "lib/translations/fa_IR.js",
    "content": "// Farsi\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'ژانویه', 'فوریه', 'مارس', 'آوریل', 'مه', 'ژوئن', 'ژوئیه', 'اوت', 'سپتامبر', 'اکتبر', 'نوامبر', 'دسامبر'],\n    monthsShort: [ 'ژانویه', 'فوریه', 'مارس', 'آوریل', 'مه', 'ژوئن', 'ژوئیه', 'اوت', 'سپتامبر', 'اکتبر', 'نوامبر', 'دسامبر' ],\n    weekdaysFull: [ 'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه' ],\n    weekdaysShort: [ 'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه' ],\n    today: 'امروز',\n    clear: 'پاک کردن',\n    close: 'بستن',\n    format: 'yyyy mmmm dd',\n    formatSubmit: 'yyyy/mm/dd',\n    labelMonthNext: 'ماه بعدی',\n\tlabelMonthPrev: 'ماه قبلی'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'پاک کردن'\n});\n"
  },
  {
    "path": "lib/translations/fi_FI.js",
    "content": "// Finnish\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'tammikuu', 'helmikuu', 'maaliskuu', 'huhtikuu', 'toukokuu', 'kesäkuu', 'heinäkuu', 'elokuu', 'syyskuu', 'lokakuu', 'marraskuu', 'joulukuu' ],\n    monthsShort: [ 'tammi', 'helmi', 'maalis', 'huhti', 'touko', 'kesä', 'heinä', 'elo', 'syys', 'loka', 'marras', 'joulu' ],\n    weekdaysFull: [ 'sunnuntai', 'maanantai', 'tiistai', 'keskiviikko', 'torstai', 'perjantai', 'lauantai' ],\n    weekdaysShort: [ 'su', 'ma', 'ti', 'ke', 'to', 'pe', 'la' ],\n    today: 'tänään',\n    clear: 'tyhjennä',\n    firstDay: 1,\n    format: 'd.m.yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'tyhjennä'\n});\n"
  },
  {
    "path": "lib/translations/fr_FR.js",
    "content": "// French\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre' ],\n    monthsShort: [ 'Jan', 'Fev', 'Mar', 'Avr', 'Mai', 'Juin', 'Juil', 'Aou', 'Sep', 'Oct', 'Nov', 'Dec' ],\n    weekdaysFull: [ 'Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi' ],\n    weekdaysShort: [ 'Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam' ],\n    today: 'Aujourd\\'hui',\n    clear: 'Effacer',\n    close: 'Fermer',\n    firstDay: 1,\n    format: 'dd mmmm yyyy',\n    formatSubmit: 'yyyy/mm/dd',\n    labelMonthNext:\"Mois suivant\",\n    labelMonthPrev:\"Mois précédent\",\n    labelMonthSelect:\"Sélectionner un mois\",\n    labelYearSelect:\"Sélectionner une année\"\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'Effacer',\n    format: 'H:i'\n});\n"
  },
  {
    "path": "lib/translations/ge_GEO.js",
    "content": "// Georgian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'იანვარი', 'თებერვალი', 'მარტი', 'აპრილი', 'მაისი', 'ივნისი', 'ივლისი', 'აგვისტო', 'სექტემბერი', 'ოქტომბერი', 'ნოემბერი', 'დეკემბერი' ],\n    monthsShort: [ 'იან', 'თებ', 'მარტ', 'აპრ', 'მაი', 'ივნ', 'ივლ', 'აგვ', 'სექტ', 'ოქტ', 'ნოემ', 'დეკ' ],\n    weekdaysFull: [ 'კვირა', 'ორშაბათი', 'სამშაბათი', 'ოთხშაბათი', 'ხუშაბათი', 'პარასკევი', 'შაბათი' ],\n    weekdaysShort: [ 'კვ', 'ორ', 'სამ', 'ოთხ', 'ხუთ', 'პარ', 'შაბ' ],\n    today: 'დღეს',\n    clear: 'გასუფთავება',\n    firstDay: 1,\n    format: 'd mmmm yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'გასუფთავება'\n});\n"
  },
  {
    "path": "lib/translations/gl_ES.js",
    "content": "// Galician\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'Xaneiro', 'Febreiro', 'Marzo', 'Abril', 'Maio', 'Xuño', 'Xullo', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Decembro' ],\n    monthsShort: [ 'xan', 'feb', 'mar', 'abr', 'mai', 'xun', 'xul', 'ago', 'sep', 'out', 'nov', 'dec' ],\n    weekdaysFull: [ 'domingo', 'luns', 'martes', 'mércores', 'xoves', 'venres', 'sábado' ],\n    weekdaysShort: [ 'dom', 'lun', 'mar', 'mér', 'xov', 'ven', 'sab' ],\n    today: 'hoxe',\n    clear: 'borrar',\n    firstDay: 1,\n    format: 'dddd d !de mmmm !de yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'borrar'\n});\n"
  },
  {
    "path": "lib/translations/he_IL.js",
    "content": "// Hebrew\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר' ],\n    monthsShort: [ 'ינו', 'פבר', 'מרץ', 'אפר', 'מאי', 'יונ', 'יול', 'אוג', 'ספט', 'אוק', 'נוב', 'דצמ' ],\n    weekdaysFull: [ 'יום ראשון', 'יום שני', 'יום שלישי', 'יום רביעי', 'יום חמישי', 'יום ששי', 'יום שבת' ],\n    weekdaysShort: [ 'א', 'ב', 'ג', 'ד', 'ה', 'ו', 'ש' ],\n    today: 'היום',\n    clear: 'למחוק',\n    format: 'yyyy mmmmב d dddd',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'למחוק'\n});\n"
  },
  {
    "path": "lib/translations/hi_IN.js",
    "content": "jQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'जनवरी', 'फरवरी', 'मार्च', 'अप्रैल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितम्बर', 'अक्टूबर', 'नवम्बर', 'दिसम्बर' ],\n    monthsShort: [ 'जन', 'फर', 'मार्च', 'अप्रैल', 'मई', 'जून', 'जु', 'अग', 'सित', 'अक्टू', 'नव', 'दिस' ],\n    weekdaysFull: [ 'रविवार', 'सोमवार', 'मंगलवार', 'बुधवार', 'गुरुवार', 'शुक्रवार', 'शनिवार' ],\n    weekdaysShort: [ 'रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र','शनि' ],\n    today: 'आज की तारीख चयन करें',\n    clear: 'चुनी हुई तारीख को मिटाएँ',\n    close: 'विंडो बंद करे',\n    firstDay: 1,\n    format: 'dd/mm/yyyy',\n    formatSubmit: 'yyyy/mm/dd',\n    labelMonthNext: 'अगले माह का चयन करें',\n    labelMonthPrev: 'पिछले माह का चयन करें',\n    labelMonthSelect: 'किसि एक महीने का चयन करें',\n    labelYearSelect: 'किसि एक वर्ष का चयन करें'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'चुनी हुई तारीख को मिटाएँ'\n});\n"
  },
  {
    "path": "lib/translations/hr_HR.js",
    "content": "// Croatian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'siječanj', 'veljača', 'ožujak', 'travanj', 'svibanj', 'lipanj', 'srpanj', 'kolovoz', 'rujan', 'listopad', 'studeni', 'prosinac' ],\n    monthsShort: [ 'sij', 'velj', 'ožu', 'tra', 'svi', 'lip', 'srp', 'kol', 'ruj', 'lis', 'stu', 'pro' ],\n    weekdaysFull: [ 'nedjelja', 'ponedjeljak', 'utorak', 'srijeda', 'četvrtak', 'petak', 'subota' ],\n    weekdaysShort: [ 'ned', 'pon', 'uto', 'sri', 'čet', 'pet', 'sub' ],\n    today: 'Danas',\n    clear: 'Izbriši',\n    close: 'Zatvori',\n    firstDay: 1,\n    format: 'd. mmmm yyyy.',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'Izbriši'\n});\n"
  },
  {
    "path": "lib/translations/hu_HU.js",
    "content": "// Hungarian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'január', 'február', 'március', 'április', 'május', 'június', 'július', 'augusztus', 'szeptember', 'október', 'november', 'december' ],\n    monthsShort: [ 'jan', 'febr', 'márc', 'ápr', 'máj', 'jún', 'júl', 'aug', 'szept', 'okt', 'nov', 'dec' ],\n    weekdaysFull: [ 'vasárnap', 'hétfő', 'kedd', 'szerda', 'csütörtök', 'péntek', 'szombat' ],\n    weekdaysShort: [ 'V', 'H', 'K', 'Sze', 'CS', 'P', 'Szo' ],\n    today: 'Ma',\n    clear: 'Törlés',\n    close: 'Bezárás',\n    firstDay: 1,\n    format: 'yyyy. mmmm dd.',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'Törlés'\n});\n"
  },
  {
    "path": "lib/translations/id_ID.js",
    "content": "// Indonesian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember' ],\n    monthsShort: [ 'Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Agu', 'Sep', 'Okt', 'Nov', 'Des' ],\n    weekdaysFull: [ 'Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu' ],\n    weekdaysShort: [ 'Min', 'Sen', 'Sel', 'Rab', 'Kam', 'Jum', 'Sab' ],\n    today: 'hari ini',\n    clear: 'menghapus',\n    firstDay: 1,\n    format: 'd mmmm yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'menghapus'\n});\n"
  },
  {
    "path": "lib/translations/is_IS.js",
    "content": "// Icelandic\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'janúar', 'febrúar', 'mars', 'apríl', 'maí', 'júní', 'júlí', 'ágúst', 'september', 'október', 'nóvember', 'desember' ],\n    monthsShort: [ 'jan', 'feb', 'mar', 'apr', 'maí', 'jún', 'júl', 'ágú', 'sep', 'okt', 'nóv', 'des' ],\n    weekdaysFull: [ 'sunnudagur', 'mánudagur', 'þriðjudagur', 'miðvikudagur', 'fimmtudagur', 'föstudagur', 'laugardagur' ],\n    weekdaysShort: [ 'sun', 'mán', 'þri', 'mið', 'fim', 'fös', 'lau' ],\n    today: 'Í dag',\n    clear: 'Hreinsa',\n    firstDay: 1,\n    format: 'dd. mmmm yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'Hreinsa'\n});\n"
  },
  {
    "path": "lib/translations/it_IT.js",
    "content": "// Italian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'gennaio', 'febbraio', 'marzo', 'aprile', 'maggio', 'giugno', 'luglio', 'agosto', 'settembre', 'ottobre', 'novembre', 'dicembre' ],\n    monthsShort: [ 'gen', 'feb', 'mar', 'apr', 'mag', 'giu', 'lug', 'ago', 'set', 'ott', 'nov', 'dic' ],\n    weekdaysFull: [ 'domenica', 'lunedì', 'martedì', 'mercoledì', 'giovedì', 'venerdì', 'sabato' ],\n    weekdaysShort: [ 'dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab' ],\n    today: 'Oggi',\n    clear: 'Cancella',\n    close: 'Chiudi',\n    firstDay: 1,\n    format: 'dddd d mmmm yyyy',\n    formatSubmit: 'yyyy/mm/dd',\n    labelMonthNext: 'Mese successivo',\n    labelMonthPrev: 'Mese precedente',\n    labelMonthSelect: 'Seleziona un mese',\n    labelYearSelect: 'Seleziona un anno'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'Cancella',\n    format: 'HH:i',\n    formatSubmit: 'HH:i'\n});\n"
  },
  {
    "path": "lib/translations/ja_JP.js",
    "content": "// Japanese\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ '1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月' ],\n    monthsShort: [ '1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月' ],\n    weekdaysFull: [ '日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日' ],\n    weekdaysShort: [ '日', '月', '火', '水', '木', '金', '土' ],\n    today: '今日',\n    clear: '消去',\n    close: '閉じる',\n    firstDay: 1,\n    format: 'yyyy年mm月dd日',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: '消去'\n});\n"
  },
  {
    "path": "lib/translations/km_KH.js",
    "content": "// Khmer\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'មករា', 'កុម្ភៈ', 'មីនា', 'មេសា', 'ឧសភា', 'មិថុនា', 'កក្កដា', 'សីហា', 'កញ្ញា', 'តុលា', 'វិច្ឆិកា', 'ធ្នូ' ],\n    monthsShort: [ 'មក.', 'កុ.', 'មី.', 'មេ.', 'ឧស.', 'មិថុ.', 'កក្ក.', 'សី.', 'កញ.', 'តុ.', 'វិច្ឆ.', 'ធ.' ],\n    weekdaysFull: [ 'អាទិត្យ', 'ចន្ទ', 'អង្គារ', 'ពុធ', 'ព្រហស្បតិ៍', 'សុក្រ', 'សៅរ៍' ],\n    weekdaysShort: [ 'អា.', 'ច.', 'អ.', 'ព.', 'ព្រ.', 'សុ.', 'ស.' ],\n    today: 'ថ្ងៃនេះ',\n    clear: 'លុប',\n    close: 'បិទ',\n    labelMonthNext: 'ខែបន្ទាប់',\n    labelMonthPrev: 'ខែមុន',\n    labelMonthSelect: 'ជ្រើសរើសខែ',\n    labelYearSelect: 'ជ្រើសរើសឆ្នាំ',\n    firstDay: 1,\n    showMonthsShort: false,\n    showWeekdaysFull: true,\n    format: 'ថ្ងៃទី d ខែmmmm ឆ្នាំ yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'លុប'\n});\n"
  },
  {
    "path": "lib/translations/ko_KR.js",
    "content": "// Korean\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ '1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월' ],\n    monthsShort: [ '1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월' ],\n    weekdaysFull: [ '일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일' ],\n    weekdaysShort: [ '일', '월', '화', '수', '목', '금', '토' ],\n    today: '오늘',\n    clear: '취소',\n    firstDay: 1,\n    format: 'yyyy 년 mm 월 dd 일',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: '취소'\n});\n"
  },
  {
    "path": "lib/translations/lt_LT.js",
    "content": "// Lietuviškai\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    labelMonthNext: 'Sekantis mėnuo',\n    labelMonthPrev: 'Ankstesnis mėnuo',\n    labelMonthSelect: 'Pasirinkite mėnesį',\n    labelYearSelect: 'Pasirinkite metus',\n    monthsFull: ['Sausis', 'Vasaris', 'Kovas', 'Balandis', 'Gegužė', 'Birželis', 'Liepa', 'Rugpjūtis', 'Rugsėjis', 'Spalis', 'Lapkritis', 'Gruodis'],\n    monthsShort: ['Sau', 'Vas', 'Kov', 'Bal', 'Geg', 'Bir', 'Lie', 'Rgp', 'Rgs', 'Spa', 'Lap', 'Grd'],\n    weekdaysFull: ['Sekmadienis', 'Pirmadienis', 'Antradienis', 'Trečiadienis', 'Ketvirtadienis', 'Penktadienis', 'Šeštadienis'],\n    weekdaysShort: ['Sk', 'Pr', 'An', 'Tr', 'Kt', 'Pn', 'Št'],\n    today: 'Šiandien',\n    clear: 'Išvalyti',\n    close: 'Uždaryti',\n    firstDay: 1,\n    //format: 'yyyy !m. mmmm d !d.', // need to have diffrent case of full months name\n    format: 'yyyy-mm-dd',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'Išvalyti',\n    format: 'HH:i'\n});\n"
  },
  {
    "path": "lib/translations/lv_LV.js",
    "content": "// Latvian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'Janvāris', 'Februāris', 'Marts', 'Aprīlis', 'Maijs', 'Jūnijs', 'Jūlijs', 'Augusts', 'Septembris', 'Oktobris', 'Novembris', 'Decembris' ],\n    monthsShort: [ 'Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jūn', 'Jūl', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec' ],\n    weekdaysFull: [ 'Svētdiena', 'Pirmdiena', 'Otrdiena', 'Trešdiena', 'Ceturtdiena', 'Piektdiena', 'Sestdiena' ],\n    weekdaysShort: [ 'Sv', 'P', 'O', 'T', 'C', 'Pk', 'S' ],\n    today: 'Šodiena',\n    clear: 'Dzēst',\n    close: 'Aizvērt',\n    firstDay: 1,\n    format: 'yyyy.mm.dd. dddd',\n    formatSubmit: 'yyyy/mm/dd',\n    labelMonthNext: 'Nākamais mēnesis',\n    labelMonthPrev: 'Iepriekšējais mēnesis',\n    labelMonthSelect: 'Izvēlēties mēnesi',\n    labelYearSelect: 'Izvēlēties gadu'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'Dzēst'\n});\n"
  },
  {
    "path": "lib/translations/nb_NO.js",
    "content": "// Norwegian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember' ],\n    monthsShort: [ 'jan', 'feb', 'mar', 'apr', 'mai', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'des' ],\n    weekdaysFull: [ 'søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag' ],\n    weekdaysShort: [ 'søn','man','tir', 'ons', 'tor', 'fre', 'lør' ],\n    today: 'i dag',\n    clear: 'nullstill',\n    close: 'lukk',\n    firstDay: 1,\n    format: 'dd. mmm. yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'nullstill'\n});\n"
  },
  {
    "path": "lib/translations/ne_NP.js",
    "content": "// Nepali\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'जनवरी', 'फेब्रुअरी', 'मार्च', 'अप्रिल', 'मे', 'जुन', 'जुलाई', 'अगस्त', 'सेप्टेम्बर', 'अक्टोबर', 'नोवेम्बर', 'डिसेम्बर' ],\n    monthsShort: [ 'जन', 'फेब्रु', 'मार्च', 'अप्रिल', 'मे', 'जुन', 'जुल', 'अग', 'सेप्टे', 'अक्टो', 'नोभे', 'डिसे' ],\n    weekdaysFull: [ 'सोमबार', 'मङ्लबार', 'बुधबार', 'बिहीबार', 'शुक्रबार', 'शनिबार', 'आईतबार' ],\n    weekdaysShort: [ 'सोम', 'मंगल्', 'बुध', 'बिही', 'शुक्र', 'शनि', 'आईत' ],\n    numbers: [ '०', '१', '२', '३', '४', '५', '६', '७', '८', '९' ],\n    today: 'आज',\n    clear: 'मेटाउनुहोस्',\n    format: 'dddd, dd mmmm, yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'मेटाउनुहोस्'\n});\n"
  },
  {
    "path": "lib/translations/nl_NL.js",
    "content": "// Dutch\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december' ],\n    monthsShort: [ 'jan', 'feb', 'mrt', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec' ],\n    weekdaysFull: [ 'zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag' ],\n    weekdaysShort: [ 'zo', 'ma', 'di', 'wo', 'do', 'vr', 'za' ],\n    today: 'vandaag',\n    clear: 'wissen',\n    close: 'sluiten',\n    firstDay: 1,\n    format: 'dddd d mmmm yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'wissen'\n});\n"
  },
  {
    "path": "lib/translations/pl_PL.js",
    "content": "// Polish\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'styczeń', 'luty', 'marzec', 'kwiecień', 'maj', 'czerwiec', 'lipiec', 'sierpień', 'wrzesień', 'październik', 'listopad', 'grudzień' ],\n    monthsShort: [ 'sty', 'lut', 'mar', 'kwi', 'maj', 'cze', 'lip', 'sie', 'wrz', 'paź', 'lis', 'gru' ],\n    weekdaysFull: [ 'niedziela', 'poniedziałek', 'wtorek', 'środa', 'czwartek', 'piątek', 'sobota' ],\n    weekdaysShort: [ 'niedz.', 'pn.', 'wt.', 'śr.', 'cz.', 'pt.', 'sob.' ],\n    today: 'Dzisiaj',\n    clear: 'Usuń',\n    close: 'Zamknij',\n    firstDay: 1,\n    format: 'd mmmm yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'usunąć'\n});\n"
  },
  {
    "path": "lib/translations/pt_BR.js",
    "content": "// Brazilian Portuguese\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro' ],\n    monthsShort: [ 'jan', 'fev', 'mar', 'abr', 'mai', 'jun', 'jul', 'ago', 'set', 'out', 'nov', 'dez' ],\n    weekdaysFull: [ 'domingo', 'segunda-feira', 'terça-feira', 'quarta-feira', 'quinta-feira', 'sexta-feira', 'sábado' ],\n    weekdaysShort: [ 'dom', 'seg', 'ter', 'qua', 'qui', 'sex', 'sab' ],\n    today: 'hoje',\n    clear: 'limpar',\n    close: 'fechar',\n    format: 'dddd, d !de mmmm !de yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'limpar'\n});\n"
  },
  {
    "path": "lib/translations/pt_PT.js",
    "content": "// Portuguese\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro' ],\n    monthsShort: [ 'jan', 'fev', 'mar', 'abr', 'mai', 'jun', 'jul', 'ago', 'set', 'out', 'nov', 'dez' ],\n    weekdaysFull: [ 'Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado' ],\n    weekdaysShort: [ 'dom', 'seg', 'ter', 'qua', 'qui', 'sex', 'sab' ],\n    today: 'Hoje',\n    clear: 'Limpar',\n    close: 'Fechar',\n    format: 'd !de mmmm !de yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'Limpar'\n});\n"
  },
  {
    "path": "lib/translations/ro_RO.js",
    "content": "// Romanian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'ianuarie', 'februarie', 'martie', 'aprilie', 'mai', 'iunie', 'iulie', 'august', 'septembrie', 'octombrie', 'noiembrie', 'decembrie' ],\n    monthsShort: [ 'ian', 'feb', 'mar', 'apr', 'mai', 'iun', 'iul', 'aug', 'sep', 'oct', 'noi', 'dec' ],\n    weekdaysFull: [ 'duminică', 'luni', 'marţi', 'miercuri', 'joi', 'vineri', 'sâmbătă' ],\n    weekdaysShort: [ 'D', 'L', 'Ma', 'Mi', 'J', 'V', 'S' ],\n    today: 'azi',\n    clear: 'șterge',\n    firstDay: 1,\n    format: 'dd mmmm yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'șterge'\n});\n"
  },
  {
    "path": "lib/translations/ru_RU.js",
    "content": "// Russian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря' ],\n    monthsShort: [ 'янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек' ],\n    weekdaysFull: [ 'воскресенье', 'понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота' ],\n    weekdaysShort: [ 'вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб' ],\n    today: 'сегодня',\n    clear: 'удалить',\n    close: 'закрыть',\n    firstDay: 1,\n    format: 'd mmmm yyyy г.',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'удалить'\n});\n"
  },
  {
    "path": "lib/translations/sk_SK.js",
    "content": "// Slovak\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'január', 'február', 'marec', 'apríl', 'máj', 'jún', 'júl', 'august', 'september', 'október', 'november', 'december' ],\n    monthsShort: [ 'jan', 'feb', 'mar', 'apr', 'máj', 'jún', 'júl', 'aug', 'sep', 'okt', 'nov', 'dec' ],\n    weekdaysFull: [ 'nedeľa', 'pondelok', 'utorok', 'streda', 'štvrtok', 'piatok', 'sobota' ],\n    weekdaysShort: [ 'Ne', 'Po', 'Ut', 'St', 'Št', 'Pi', 'So' ],\n    today: 'dnes',\n    clear: 'vymazať',\n    close: 'zavrieť',\n    firstDay: 1,\n    format: 'd. mmmm yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'vymazať'\n});\n"
  },
  {
    "path": "lib/translations/sl_SI.js",
    "content": "// Slovenian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'januar', 'februar', 'marec', 'april', 'maj', 'junij', 'julij', 'avgust', 'september', 'oktober', 'november', 'december' ],\n    monthsShort: [ 'jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'avg', 'sep', 'okt', 'nov', 'dec' ],\n    weekdaysFull: [ 'nedelja', 'ponedeljek', 'torek', 'sreda', 'četrtek', 'petek', 'sobota' ],\n    weekdaysShort: [ 'ned', 'pon', 'tor', 'sre', 'čet', 'pet', 'sob' ],\n    today: 'danes',\n    clear: 'izbriši',\n    close: 'zapri',\n    firstDay: 1,\n    format: 'd. mmmm yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'izbriši'\n});\n"
  },
  {
    "path": "lib/translations/sr_RS_cy.js",
    "content": "// Serbian (Cyrillic)\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'јануар','фебруар','март','април','мај','јун','јул','август','септембар','октобар','новембар','децембар' ],\n    monthsShort: [ 'јан.','феб.','март','апр.','мај','јун','јул','авг.','септ.','окт.','нов.','дец.' ],\n    weekdaysFull: [ 'недеља', 'понедељак', 'уторак', 'среда', 'четвртак', 'петак', 'субота' ],\n    weekdaysShort: [ 'нед.', 'пон.', 'ут.', 'ср.', 'чет.', 'пет.', 'суб.' ],\n    today: 'данас',\n    clear: 'избриши',\n\tclose: 'затвори',\n    firstDay: 1,\n    format: 'd. MMMM yyyy.',\n    formatSubmit: 'yyyy/mm/dd',\n\tlabelMonthNext:\"Следећи месец\",\n    labelMonthPrev:\"Претходни месец\",\n    labelMonthSelect:\"Изаберите месец\",\n    labelYearSelect:\"Изаберите годину\"\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'избриши'\n});\n"
  },
  {
    "path": "lib/translations/sr_RS_lt.js",
    "content": "// Serbian (Latin)\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'januar', 'februar', 'mart', 'april', 'maj', 'jun', 'juli', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar' ],\n    monthsShort: [ 'jan.', 'feb.', 'mart', 'apr.', 'maj', 'jun', 'jul', 'avg.', 'sept.', 'okt.', 'nov.', 'dec.' ],\n    weekdaysFull: [ 'nedelja', 'ponedeljak', 'utorak', 'sreda', 'četvrtak', 'petak', 'subota' ],\n    weekdaysShort: [ 'ned.', 'pon.', 'ut.', 'sr.', 'čet.', 'pet.', 'sub.' ],\n    today: 'danas',\n    clear: 'izbriši',\n\tclose: 'zatvori',\n    firstDay: 1,\n    format: 'd. MMMM yyyy.',\n    formatSubmit: 'yyyy/mm/dd',\n\tlabelMonthNext:\"Sledeći mesec\",\n    labelMonthPrev:\"Prethodni mesec\",\n    labelMonthSelect:\"Izaberite mesec\",\n    labelYearSelect:\"Izaberite godinu\"\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'izbriši'\n});\n"
  },
  {
    "path": "lib/translations/sv_SE.js",
    "content": "// Swedish\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'januari', 'februari', 'mars', 'april', 'maj', 'juni', 'juli', 'augusti', 'september', 'oktober', 'november', 'december' ],\n    monthsShort: [ 'jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec' ],\n    weekdaysFull: [ 'söndag', 'måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag' ],\n    weekdaysShort: [ 'sön', 'mån', 'tis', 'ons', 'tor', 'fre', 'lör' ],\n    today: 'Idag',\n    clear: 'Rensa',\n    close: 'Stäng',\n    firstDay: 1,\n    format: 'yyyy-mm-dd',\n    formatSubmit: 'yyyy/mm/dd',\n    labelMonthNext: 'Nästa månad',\n    labelMonthPrev: 'Föregående månad',\n    labelMonthSelect: 'Välj månad',\n    labelYearSelect: 'Välj år'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'Rensa'\n});\n"
  },
  {
    "path": "lib/translations/th_TH.js",
    "content": "// Thai\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม' ],\n    monthsShort: [ 'ม.ค.', 'ก.พ.', 'มี.ค.', 'เม.ย.', 'พ.ค.', 'มิ.ย.', 'ก.ค.', 'ส.ค.', 'ก.ย.', 'ต.ค.', 'พ.ย.', 'ธ.ค.' ],\n    weekdaysFull: [ 'อาทิตย์', 'จันทร์', 'อังคาร', 'พุธ', 'พฤหัสบดี', 'ศุกร์', 'เสาร์' ],\n    weekdaysShort: [ 'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.' ],\n    today: 'วันนี้',\n    clear: 'ลบ',\n    format: 'd mmmm yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'ลบ'\n});\n"
  },
  {
    "path": "lib/translations/tr_TR.js",
    "content": "// Turkish\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık' ],\n    monthsShort: [ 'Oca', 'Şub', 'Mar', 'Nis', 'May', 'Haz', 'Tem', 'Ağu', 'Eyl', 'Eki', 'Kas', 'Ara' ],\n    weekdaysFull: [ 'Pazar', 'Pazartesi', 'Salı', 'Çarşamba', 'Perşembe', 'Cuma', 'Cumartesi' ],\n    weekdaysShort: [ 'Pzr', 'Pzt', 'Sal', 'Çrş', 'Prş', 'Cum', 'Cmt' ],\n    today: 'Bugün',\n    clear: 'Sil',\n    close: 'Kapat',\n    firstDay: 1,\n    format: 'dd mmmm yyyy dddd',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'sil'\n});\n"
  },
  {
    "path": "lib/translations/uk_UA.js",
    "content": "// Ukrainian\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'січень', 'лютий', 'березень', 'квітень', 'травень', 'червень', 'липень', 'серпень', 'вересень', 'жовтень', 'листопад', 'грудень' ],\n    monthsShort: [ 'січ', 'лют', 'бер', 'кві', 'тра', 'чер', 'лип', 'сер', 'вер', 'жов', 'лис', 'гру' ],\n    weekdaysFull: [ 'неділя', 'понеділок', 'вівторок', 'середа', 'четвер', 'п‘ятниця', 'субота' ],\n    weekdaysShort: [ 'нд', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб' ],\n    today: 'сьогодні',\n    clear: 'викреслити',\n    firstDay: 1,\n    format: 'dd mmmm yyyy p.',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'викреслити'\n});\n"
  },
  {
    "path": "lib/translations/vi_VN.js",
    "content": "// Vietnamese\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ 'Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu', 'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai' ],\n    monthsShort: [ 'Một', 'Hai', 'Ba', 'Tư', 'Năm', 'Sáu', 'Bảy', 'Tám', 'Chín', 'Mười', 'Mười Một', 'Mười Hai' ],\n    weekdaysFull: [ 'Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy' ],\n    weekdaysShort: [ 'C.Nhật', 'T.Hai', 'T.Ba', 'T.Tư', 'T.Năm', 'T.Sáu', 'T.Bảy' ],\n    today: 'Hôm Nay',\n    clear: 'Xoá',\n    close: 'Đóng',\n    firstDay: 1,\n    format: 'Bạn chọn: dddd, dd mmmm, yyyy',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: 'Xoá'\n});\n"
  },
  {
    "path": "lib/translations/zh_CN.js",
    "content": "// Simplified Chinese\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月' ],\n    monthsShort: [ '一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二' ],\n    weekdaysFull: [ '星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六' ],\n    weekdaysShort: [ '日', '一', '二', '三', '四', '五', '六' ],\n    today: '今天',\n    clear: '清除',\n    close: '关闭',\n    firstDay: 1,\n    format: 'yyyy 年 mm 月 dd 日',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: '清除'\n});\n"
  },
  {
    "path": "lib/translations/zh_TW.js",
    "content": "// Traditional Chinese\n\njQuery.extend( jQuery.fn.pickadate.defaults, {\n    monthsFull: [ '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月' ],\n    monthsShort: [ '一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二' ],\n    weekdaysFull: [ '星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六' ],\n    weekdaysShort: [ '日', '一', '二', '三', '四', '五', '六' ],\n    today: '今天',\n    clear: '清除',\n    close: '關閉',\n    firstDay: 1,\n    format: 'yyyy 年 mm 月 dd 日',\n    formatSubmit: 'yyyy/mm/dd'\n});\n\njQuery.extend( jQuery.fn.pickatime.defaults, {\n    clear: '清除'\n});\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"pickadate\",\n  \"version\": \"3.6.4\",\n  \"title\": \"pickadate.js\",\n  \"description\": \"The mobile-friendly, responsive, and lightweight jQuery date & time input picker.\",\n  \"keywords\": [\n    \"date\",\n    \"time\",\n    \"picker\",\n    \"input\",\n    \"responsive\"\n  ],\n  \"homepage\": \"http://amsul.ca/pickadate.js\",\n  \"bugs\": \"https://github.com/amsul/pickadate.js/issues\",\n  \"license\": \"MIT\",\n  \"author\": {\n    \"name\": \"Amsul\",\n    \"email\": \"reach@amsul.ca\",\n    \"url\": \"http://amsul.ca\"\n  },\n  \"files\": [\n    \"lib\",\n    \"tests\",\n    \"README.md\",\n    \"Gruntfile.js\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/amsul/pickadate.js.git\"\n  },\n  \"scripts\": {\n    \"prebump\": \"npm test\",\n    \"bump\": \"node ./version-bump.js\",\n    \"postbump\": \"npx grunt package && node ./version-commit.js\",\n    \"push\": \"git push && git push origin --tags && npm publish\",\n    \"test\": \"npx grunt test --verbose\"\n  },\n  \"dependencies\": {\n    \"jquery\": \">=1.7\"\n  },\n  \"devDependencies\": {\n    \"commander\": \"^2.8.0\",\n    \"glob\": \"^5.0.5\",\n    \"grunt\": \"^0.4.5\",\n    \"grunt-autoprefixer\": \"^3.0.0\",\n    \"grunt-contrib-copy\": \"^0.8.0\",\n    \"grunt-contrib-cssmin\": \"^0.12.2\",\n    \"grunt-contrib-jshint\": \"^0.11.2\",\n    \"grunt-contrib-less\": \"^1.0.1\",\n    \"grunt-contrib-qunit\": \"^2.0.0\",\n    \"grunt-contrib-uglify\": \"^0.9.1\",\n    \"grunt-contrib-watch\": \"^0.6.1\",\n    \"qunitjs\": \"1.x\",\n    \"semver\": \"^4.3.3\",\n    \"shelljs\": \"^0.4.0\",\n    \"zlib-browserify\": \"0.0.3\"\n  }\n}"
  },
  {
    "path": "tests/dev/date.htm",
    "content": "<!doctype html>\n<html>\n<meta charset=\"utf-8\">\n\n<meta name=\"author\" content=\"Amsul - http://amsul.ca\">\n<meta name=\"viewport\" content=\"width=device-width,user-scalable=no\">\n<meta http-equiv=\"cache-control\" content=\"no-cache\">\n<meta http-equiv=\"pragma\" content=\"no-cache\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\">\n\n<title>Pickadate.js</title>\n\n<link rel=\"stylesheet\" href=\"../../lib/themes/default.css\">\n<link rel=\"stylesheet\" href=\"../../lib/themes/default.date.css\">\n\n<!--[if lt IE 9]>\n    <script>document.createElement('section')</script>\n    <style type=\"text/css\">\n        .holder {\n            position: relative;\n            z-index: 10000;\n        }\n        .datepicker {\n            display: block;\n        }\n    </style>\n<![endif]-->\n\n\n<body>\n\n    <section class=\"section\">\n\n        <form>\n            <fieldset>\n                <h3><label for=\"input_01\">Pick a date. Go ahead...</label></h3>\n\n                <input\n                    id=\"input_01\"\n                    class=\"datepicker\"\n                    name=\"date\"\n                    type=\"text\"\n                    autofocus\n                    value=\"14 August, 2014\"\n                    data-value=\"2014-08-08\">\n\n                <br><br><br><br><br>\n                <!-- <button type=\"button\">Disable all dates</button>\n                <input class=\"button\" type=\"submit\" value=\"open\"> -->\n            </fieldset>\n        </form>\n\n        <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>\n        <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>\n        <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>\n\n        <div id=\"container\"></div>\n\n\n    </section>\n\n\n    <script src=\"../../node_modules/jquery/dist/jquery.js\"></script>\n    <script src=\"../../lib/picker.js\"></script>\n    <script src=\"../../lib/picker.date.js\"></script>\n    <script src=\"../../lib/legacy.js\"></script>\n\n    <script type=\"text/javascript\">\n        var today = new Date();\n        var dd = today.getDate();\n        var mm = today.getMonth()+1; //January is 0!\n        var yyyy = today.getFullYear();\n        if(dd<10) {\n            dd='0'+dd;\n        } \n        if(mm<10) {\n            mm='0'+mm;\n        } \n        today = dd+'/'+mm+'/'+yyyy;\n        \n        var $input = $( '.datepicker' ).pickadate({\n            formatSubmit: 'yyyy/mm/dd',\n            // min: [2015, 7, 14],\n            container: '#container',\n            // editable: true,\n            closeOnSelect: false,\n            closeOnClear: false,\n        })\n\n        var picker = $input.pickadate('picker')\n        // picker.set('select', '14 October, 2014')\n        // picker.open()\n\n        // $('button').on('click', function() {\n        //     picker.set('disable', true);\n        // });\n\n    </script>\n\n\n</body>\n</html>\n\n\n"
  },
  {
    "path": "tests/dev/time.htm",
    "content": "<!doctype html>\n<html>\n<meta charset=\"utf-8\">\n\n<meta name=\"author\" content=\"Amsul - http://amsul.ca\">\n<meta name=\"viewport\" content=\"width=device-width\">\n<meta http-equiv=\"cache-control\" content=\"no-cache\">\n<meta http-equiv=\"pragma\" content=\"no-cache\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\">\n\n<title>Pickadate.js</title>\n\n<link rel=\"stylesheet\" href=\"../../lib/themes/default.css\">\n<link rel=\"stylesheet\" href=\"../../lib/themes/default.time.css\">\n\n<!--[if lt IE 9]>\n    <script>document.createElement('section')</script>\n    <style type=\"text/css\">\n        .holder {\n            position: relative;\n            z-index: 10000;\n        }\n        .datepicker {\n            display: block;\n        }\n    </style>\n<![endif]-->\n\n\n<body>\n\n    <section class=\"section\">\n\n        <form>\n            <fieldset>\n                <h3><label for=\"input_01\">Pick a time. Go ahead...</label></h3>\n                <input\n                    id=\"input_from\"\n                    class=\"datepicker\"\n                    type=\"time\"\n                    name=\"time\"\n                    autofocus>\n                    <!-- valuee=\"2:30 AM\"\n                    data-value=\"0:00\" -->\n            </fieldset>\n        </form>\n\n        <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>\n\n    </section>\n\n\n    <script src=\"../../node_modules/jquery/dist/jquery.js\"></script>\n    <script src=\"../../lib/picker.js\"></script>\n    <script src=\"../../lib/picker.time.js\"></script>\n    <script src=\"../../lib/legacy.js\"></script>\n\n    <script type=\"text/javascript\">\n\n        var $input = $( '.datepicker' ).pickatime({\n        })\n        var picker = $input.pickatime('picker')\n        picker.open()\n\n    </script>\n\n\n</body>\n</html>\n\n\n"
  },
  {
    "path": "tests/units/all.htm",
    "content": "<!doctype html>\n\n<meta charset=\"utf-8\">\n<title>pickadate.js &#8226; QUnit testing</title>\n<link rel=\"stylesheet\" href=\"../../node_modules/qunitjs/qunit/qunit.css\">\n\n<body>\n\n    <div id=\"qunit\"></div>\n    <div id=\"qunit-fixture\"></div>\n\n    <script src=\"../../node_modules/jquery/dist/jquery.js\"></script>\n    <script src=\"../../lib/picker.js\"></script>\n    <script src=\"../../lib/picker.date.js\"></script>\n    <script src=\"../../lib/picker.time.js\"></script>\n    <script src=\"../../node_modules/qunitjs/qunit/qunit.js\"></script>\n    <script src=\"base.js\"></script>\n    <script src=\"date.js\"></script>\n    <script src=\"time.js\"></script>\n\n</body>"
  },
  {
    "path": "tests/units/base.js",
    "content": "\n/*jshint\n    debug: true,\n    devel: true,\n    browser: true,\n    asi: true,\n    unused: true,\n    eqnull: true,\n    eqeqeq: true\n */\n\n\nvar $DOM = $( '#qunit-fixture' ),\n    $INPUT = $( '<input type=password>' ),\n    isInteger = function( value ) {\n        return {}.toString.call( value ).indexOf( 'Number' ) > -1 && value % 1 === 0\n    }\n\n\n\n/* ==========================================================================\n   Base picker tests\n   ========================================================================== */\n\n\nmodule( 'Base setup', {\n    setup: function() {\n        $DOM.append( $INPUT.clone() )\n        this.$input = $DOM.find( 'input' ).pickadate()\n        this.picker = this.$input.pickadate( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( 'Input stage and attributes', function() {\n\n    var input = this.picker.$node[ 0 ]\n\n    ok( input.type === 'text', 'Type updated' )\n    ok( input.readOnly === true, 'Readonly set' )\n    ok( input.value === '', 'No value' )\n    ok( this.picker.$root.length, 'Root holder exists' )\n    ok( !this.picker._hidden, 'Hidden input doesn’t exist' )\n})\n\ntest( 'Picker states', function() {\n\n    var picker = this.picker\n\n    ok( picker.get( 'start' ) === true, 'Started' )\n    ok( picker.get( 'open' ) === false, 'Closed to start with' )\n\n    picker.open()\n    ok( picker.get( 'open' ) === true, 'Opened with trigger' )\n\n    picker.$root.find( 'button' )[0].focus()\n    ok( picker.get( 'open' ) === true, 'Remains open with focus within' )\n\n    picker.$root.find( 'div' ).eq(3).click()\n    ok( picker.get( 'open' ) === true, 'Remains open with click within' )\n\n    picker.close()\n    ok( picker.get( 'open' ) === false, 'Closed with trigger' )\n\n    picker.stop()\n    ok( picker.get( 'start' ) === false, 'Stopped with trigger' )\n\n    picker.start()\n    ok( picker.get( 'start' ) === true, 'Started with trigger' )\n})\n\ntest( 'Picker properties', function() {\n\n    var picker = this.picker\n\n    strictEqual( picker.get( 'type' ), 'password', 'Original type is saved' )\n    notStrictEqual( picker.get( 'min' ).pick, null, 'Has “min”' )\n    notStrictEqual( picker.get( 'max' ).pick, null, 'Has “max”' )\n    strictEqual( picker.get( 'select' ), null, 'Has no “select”' )\n    ok( isInteger( picker.get( 'highlight' ).pick ), 'Has “highlight”' )\n    ok( isInteger( picker.get( 'view' ).pick ), 'Has “view”' )\n    ok( isInteger( picker.get( 'now' ).pick ), 'Has “now”' )\n    deepEqual( picker.get( 'disable' ), [], 'Default “disable” collection is empty' )\n})\n\ntest( 'Picker alternate API', function() {\n\n    var $input = this.$input\n    var picker = this.picker\n\n    strictEqual( $input.pickadate( 'get', 'start' ), picker.get( 'start' ), 'Methods are passed forward' )\n    strictEqual( $input.pickadate( 'component' ), picker.component, 'Objects are passed forward' )\n})\n\n\n\n\n\nmodule( 'Formatting setup', {\n    setup: function() {\n        $DOM.append( $INPUT.clone().attr( 'name', 'picker' ) )\n        var $input = $DOM.find( 'input' ).pickadate({\n            formatSubmit: 'yyyy/mm/dd'\n        })\n        this.picker = $input.pickadate( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( 'Default hidden prefix & suffix', function() {\n    var picker = this.picker\n    strictEqual( picker.$node[0].name + '_submit', picker._hidden.name, 'Correct hidden element `name`' )\n})\n\nmodule( 'Formatting setup', {\n    setup: function() {\n        $DOM.append( $INPUT.clone().attr( 'name', 'picker' ) )\n        var $input = $DOM.find( 'input' ).pickadate({\n            formatSubmit: 'yyyy/mm/dd',\n            hiddenPrefix: 'prefixed__',\n            hiddenSuffix: '__suffixed'\n        })\n        this.picker = $input.pickadate( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( 'Custom hidden prefix & suffix', function() {\n    var picker = this.picker\n    strictEqual( 'prefixed__' + picker.$node[0].name + '__suffixed', picker._hidden.name, 'Correct hidden element `name`' )\n})\n\nmodule( 'Formatting setup', {\n    setup: function() {\n        $DOM.append( $INPUT.clone().attr( 'name', 'picker' ) )\n        var $input = $DOM.find( 'input' ).pickadate({\n            formatSubmit: 'yyyy/mm/dd',\n            hiddenPrefix: '',\n            hiddenSuffix: ''\n        })\n        this.picker = $input.pickadate( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( 'No hidden prefix & suffix', function() {\n    var picker = this.picker\n    strictEqual( picker.$node[0].name, picker._hidden.name, 'Correct hidden element `name`' )\n})\n\nmodule( 'Formatting setup', {\n    setup: function() {\n        $DOM.append( $INPUT.clone().attr( 'name', 'picker' ) )\n        var $input = $DOM.find( 'input' ).pickadate({\n            formatSubmit: 'yyyy/mm/dd',\n            hiddenName: true\n        })\n        this.picker = $input.pickadate( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( 'Hidden name replaces visible name', function() {\n    var picker = this.picker\n    strictEqual( picker.$node[0].name, '', 'Visible element has no `name`')\n    strictEqual(picker._hidden.name, 'picker', 'Correct hidden element `name`' )\n})\n\n\n\n\n\nmodule( 'Container setup', {\n    setup: function() {\n        $DOM.append( $INPUT.clone().attr( 'name', 'picker' ), $( '<div id=\"outlet\"/>' ) )\n        var $input = $DOM.find( 'input' ).pickadate({\n            formatSubmit: 'yyyy/mm/dd',\n            container: '#outlet'\n        })\n        this.picker = $input.pickadate( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( 'Picker root outlet', function() {\n    var picker = this.picker\n    strictEqual( picker.$root[0].parentNode.id, 'outlet', 'Correct root outlet' )\n})\n\n\n\n\n\n\nmodule( 'Base events', {\n    setup: function() {\n        $DOM.append( $INPUT.clone() )\n        var thisModule = this,\n            $input = $DOM.find( 'input' ).pickadate({\n                onStart: function() {\n                    thisModule.started = true\n                    thisModule.restarted = true\n                    thisModule.inputType = this.$node[ 0 ].type\n                },\n                onRender: function() {\n                    thisModule.rendered = true\n                },\n                onOpen: function() {\n                    thisModule.opened = true\n                },\n                onClose: function() {\n                    thisModule.closed = true\n                },\n                onStop: function() {\n                    thisModule.stopped = true\n                    thisModule.inputType = this.$node[ 0 ].type\n                },\n                onSet: function( thing ) {\n                    thisModule.selected = thing\n                }\n            })\n        this.picker = $input.pickadate( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( 'As options', function() {\n\n    var thisModule = this,\n        picker = thisModule.picker\n\n    strictEqual( thisModule.started, picker.get( 'start' ) === true, 'Fired: `onStart`' )\n    strictEqual( thisModule.inputType, 'text', 'Updated input type' )\n    strictEqual( thisModule.rendered, picker.get( 'start' ) === true, 'Fired: `onRender`' )\n\n    picker.open()\n    strictEqual( thisModule.opened, picker.get( 'open' ) === true, 'Fired: `onOpen`' )\n\n    picker.close()\n    strictEqual( thisModule.closed, picker.get( 'open' ) === false, 'Fired: `onClose`' )\n\n    picker.stop()\n    strictEqual( thisModule.stopped, picker.get( 'start' ) === false, 'Fired: `onStop`' )\n    strictEqual( thisModule.inputType, $INPUT[ 0 ].type, 'Restored input type' )\n\n    picker.start()\n    strictEqual( thisModule.restarted, picker.get( 'start' ) === true, 'Restarted: `onStart`' )\n\n    picker.set()\n    deepEqual( thisModule.selected, {}, 'Fired: `onSet`' )\n})\n\ntest( 'As individual methods', 6, function() {\n\n    var picker = this.picker\n\n    // Register the events\n    picker.\n        on( 'open', function() {\n            ok( true, 'Opened' )\n        }).\n        on( 'close', function() {\n            ok( true, 'Closed' )\n        }).\n        on( 'render', function() {\n            ok( true, 'Rendered' )\n        }).\n        on( 'set', function() {\n            ok( true, 'Set' )\n        }).\n        on( 'stop', function() {\n            ok( true, 'Stopped' )\n        }).\n        on( 'start', function() {\n            ok( true, 'Started' )\n        })\n\n    picker.\n        trigger( 'start' ).\n        trigger( 'open' ).\n        trigger( 'render' ).\n        trigger( 'set' ).\n        trigger( 'close' )\n})\n\ntest( 'As multiple methods', 6, function() {\n\n    var picker = this.picker\n\n    // Register the events\n    picker.on({\n        open: function() {\n            ok( true, 'Opened' )\n        },\n        close: function() {\n            ok( true, 'Closed' )\n        },\n        render: function() {\n            ok( true, 'Rendered' )\n        },\n        set: function() {\n            ok( true, 'Set' )\n        },\n        stop: function() {\n            ok( true, 'Stopped' )\n        },\n        start: function() {\n            ok( true, 'Started' )\n        }\n    })\n\n    picker.\n        trigger( 'start' ).\n        trigger( 'open' ).\n        trigger( 'render' ).\n        trigger( 'set' ).\n        trigger( 'close' )\n})\n\ntest( 'As muted methods', 1, function() {\n\n    var picker = this.picker\n\n    // Bind the callback.\n    picker.on('set', function() {\n        ok( true, 'An outspoken method' )\n    })\n\n    // Do the selections.\n    picker.set('select', new Date())\n    picker.set('select', new Date(), { muted: true })\n    picker.set({ select: new Date() }, { muted: true })\n})\n\ntest( 'Clear as muted', function() {\n\n    var picker = this.picker\n    var called = false\n\n    // Bind the callback.\n    picker.on('set', function() {\n        called = true\n    })\n\n    picker.clear({ muted: true })\n\n    ok( !called, 'Callback not called' )\n})\n\ntest( 'Open with alternate focus', function() {\n\n    var picker = this.picker,\n        klasses = Picker.klasses()\n\n    stop()\n    picker.open( false )\n    setTimeout( function() {\n        ok( !picker.get( 'open' ) && picker.$node[0].className === klasses.input + ' ' + klasses.active && picker.$root[0].className === klasses.picker + ' ' + klasses.opened && document.activeElement !== picker.$node[0], 'Opened without focus' )\n        start()\n    }, 0 )\n})\n\ntest( 'Close with alternate focus', function() {\n\n    var picker = this.picker\n\n    stop()\n    picker.close( true )\n    setTimeout( function() {\n        var isClosed = !picker.get( 'open' )\n        var hasCorrectActiveElement = document.activeElement === picker.$holder[0]\n        ok( isClosed && hasCorrectActiveElement, 'Closed with focus' )\n        start()\n    }, 0 )\n})\n\ntest( 'Switch off', function() {\n\n    var truthy = true,\n        picker = this.picker\n\n    picker.on('open', function() {\n        truthy = false\n    })\n    picker.off('open')\n\n    strictEqual( truthy, true, 'Method turned off' )\n})\n\n\n\n\n\n\nmodule( 'Base mouse events', {\n    setup: function() {\n        $DOM.append( $INPUT.clone() )\n        var $input = $DOM.find( 'input' ).pickadate()\n        this.picker = $input.pickadate( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( 'Open and close', function() {\n\n    var picker = this.picker\n\n    picker.$node.click()\n    ok( picker.get( 'open' ) === true, 'Opened with click in' )\n\n    $( 'body' ).click()\n    ok( picker.get( 'open' ) === false, 'Closed with click out' )\n })\n\ntest( 'Open and close', function() {\n\n    var picker = this.picker\n\n    picker.$node.click()\n    strictEqual( picker.get( 'open' ), true, 'Opened with click in' )\n\n    picker.$root.find( '.' + $.fn.pickadate.defaults.klass.buttonClose ).click();\n    strictEqual( picker.get( 'open' ), false, 'Closed by clicking “close”' )\n})\n\nasyncTest( 'Open with a slower click', function() {\n    // This test ensures that behaviour in chrome as described in PR 1145\n    // https://github.com/amsul/pickadate.js/pull/1145\n    // is handled correctly\n\n    var picker = this.picker\n\n    // The sequence of events fired by chrome are:\n    //  - focus on the input\n    //  - mousedown on the input\n    //  - mouseup on the input\n    //  - click on the common ancestor (in this case $DOM)\n    picker.$node.focus()\n    setTimeout(function () {\n        ok(picker.get('open') === true, 'Opened due to focus change')\n        picker.$node.trigger({\n            type: 'mousedown'\n        })\n        setTimeout(function () {\n            ok(picker.get('open') === true, 'Still open after mousedown')\n            // The mouseup and the click happen one after the other with no pause\n            picker.$node.trigger({\n                type: 'mouseup'\n            })\n            $DOM.trigger({\n                type: 'click'\n            })\n            setTimeout(function () {\n                ok(picker.get('open') === true, 'Still open after final click event')\n                QUnit.start();\n            }, 200)\n        }, 200)\n    }, 200)\n})\n\n\n\n\nmodule( 'Base keyboard events', {\n    setup: function() {\n        $DOM.append( $INPUT.clone() )\n        var $input = $DOM.find( 'input' ).pickadate()\n        this.picker = $input.pickadate( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( 'Open and close', function() {\n\n    var picker = this.picker\n\n    picker.$node.focus()\n    ok(picker.get('open') === true, 'Opened with key in')\n    picker.$node.blur()\n    $DOM.focusin()\n    ok(picker.get('open') === false, 'Closed with key out')\n    picker.$node.trigger({\n        type: 'keydown',\n        keyCode: 40\n    })\n    ok(picker.get('open') === true, 'Opened after arrow “down”')\n    picker.$node.trigger({\n        type: 'keydown',\n        keyCode: 27\n    })\n    ok(picker.get('open') === false, 'Closed after “escape”')\n    picker.$node.trigger({\n        type: 'keydown',\n        keyCode: 38\n    })\n    ok(picker.get('open') === true, 'Opened after arrow “up”')\n    picker.$node.trigger({\n        type: 'keydown',\n        keyCode: 8\n    })\n    ok(picker.get('open') === false, 'Closed after “backspace”')\n    picker.$node.trigger({\n        type: 'keydown',\n        keyCode: 37\n    })\n    ok(picker.get('open') === true, 'Opened after arrow “left”')\n    picker.$node.trigger({\n        type: 'keydown',\n        keyCode: 46\n    })\n    ok(picker.get('open') === false, 'Closed after “alt. backspace”')\n    picker.$node.trigger({\n        type: 'keydown',\n        keyCode: 39\n    })\n    ok(picker.get('open') === true, 'Opened after arrow “right”')\n})\n\ntest( 'Set and clear', function() {\n\n    var picker = this.picker\n\n    picker.open()\n    picker.$node.trigger({ type: 'keydown', keyCode: 13 })\n    strictEqual( picker.get( 'value' ), picker.get( 'select', $.fn.pickadate.defaults.format ), 'Set value as default selection after “enter”' )\n\n    picker.$node.trigger({ type: 'keydown', keyCode: 8 })\n    strictEqual( picker.get( 'value' ), '', 'Clear input value after “backspace”' )\n})\n\n\n\n\n"
  },
  {
    "path": "tests/units/date.js",
    "content": "\n/*jshint\n    debug: true,\n    devel: true,\n    browser: true,\n    asi: true,\n    unused: true,\n    eqnull: true,\n    eqeqeq: true\n */\n\n\nvar $DOM = $( '#qunit-fixture' ),\n    $INPUT = $( '<input type=password>' )\n\n\n\n/* ==========================================================================\n   Date picker tests\n   ========================================================================== */\n\n\nmodule( 'Date picker setup', {\n    setup: function() {\n        $DOM.append( $INPUT.clone() )\n        var $input = $DOM.find( 'input' ).pickadate()\n        this.picker = $input.pickadate( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( 'Calendar stage', function() {\n    strictEqual( this.picker.$root.find( '.' + $.fn.pickadate.defaults.klass.table + ' [data-pick]' ).length, 42, '42 selectables dates' )\n})\n\ntest( 'Properties', function() {\n\n    var picker = this.picker,\n        today = new Date()\n\n    today.setHours( 0, 0, 0, 0 )\n\n    strictEqual( picker.get( 'min' ).pick, -Infinity, 'Default “min” is -Infinity' )\n    strictEqual( picker.get( 'max' ).pick, Infinity, 'Default “max’ is +Infinity' )\n    strictEqual( picker.get( 'now' ).pick, today.getTime(), 'Default “now” is ' + picker.get( 'now', 'yyyy/mm/dd' ) )\n    deepEqual( picker.get( 'select' ), null, 'Default “select” is `null`' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), 'Default “highlight” is “now”' )\n    strictEqual( picker.get( 'view' ).pick, today.setDate( 1 ), 'Default “view” is ' + picker.get( 'view', 'yyyy/mm/dd' ) )\n})\n\ntest( 'First weekday', function() {\n\n    var picker = this.picker,\n        $input = picker.$node\n\n    strictEqual( picker.$root.find( '.' + $.fn.pickadate.defaults.klass.weekdays ).first().text(), $.fn.pickadate.defaults.weekdaysShort[0], 'Sunday is first day' )\n\n    picker.stop().$node.pickadate({ firstDay: 1 })\n    strictEqual( $input.pickadate( 'picker' ).$root.find( '.' + $.fn.pickadate.defaults.klass.weekdays ).first().text(), $.fn.pickadate.defaults.weekdaysShort[1], 'Monday is first day' )\n\n    picker.set( 'select', [ 2013, 8, 14 ] )\n    strictEqual( picker.$root.find( 'td' ).first().text(), '1', 'Months starting on Sunday shift back a week' )\n})\n\ntest( 'Formats', function() {\n\n    var picker = this.picker,\n        today = new Date(),\n        leadZero = function( number ) {\n            return ( number < 10 ? '0' : '' ) + number\n        },\n        formats = {\n            d: function() {\n                return '' + today.getDate()\n            },\n            dd: function() {\n                return leadZero( today.getDate() )\n            },\n            ddd: function() {\n                return $.fn.pickadate.defaults.weekdaysShort[ today.getDay() ]\n            },\n            dddd: function() {\n                return $.fn.pickadate.defaults.weekdaysFull[ today.getDay() ]\n            },\n            m: function() {\n                return '' + ( today.getMonth() + 1 )\n            },\n            mm: function() {\n                return leadZero( ( today.getMonth() + 1 ) )\n            },\n            mmm: function() {\n                return $.fn.pickadate.defaults.monthsShort[ today.getMonth() ]\n            },\n            mmmm: function() {\n                return $.fn.pickadate.defaults.monthsFull[ today.getMonth() ]\n            },\n            yy: function() {\n                return ( '' + today.getFullYear() ).slice(2)\n            },\n            yyyy: function() {\n                return '' + today.getFullYear()\n            }\n        }\n\n    today.setHours(0,0,0,0)\n\n    ;([ 'd', 'dd', 'ddd', 'dddd', 'm', 'mm', 'mmm', 'mmmm', 'yy', 'yyyy' ]).forEach( function( format ) {\n        var expect = formats[ format ]()\n        deepEqual( picker.get( 'now', format ), expect, '`' + format + '`: ' + expect )\n    })\n})\n\nmodule( 'Date picker setup', {\n    teardown: function() {\n        $DOM.empty()\n    }\n})\n\ntest( 'Editable', function() {\n\n    $DOM.append( $INPUT.clone() ).append( $INPUT.clone() )\n\n    var $input1 = $DOM.find( 'input' ).eq(0).pickadate()\n    var $input2 = $DOM.find( 'input' ).eq(1).pickadate({\n        editable: true\n    })\n\n    strictEqual( $input1[0].readOnly, true, 'Editable: false' )\n    strictEqual( $input2[0].readOnly, false, 'Editable: true' )\n})\n\ntest( 'Disable today with `min` as `true`', function() {\n\n    $DOM.append( $INPUT.clone() )\n\n    var today = new Date()\n    var $input = $DOM.find( 'input' ).pickadate({\n        min: true,\n        disable: [ today ]\n    })\n    var picker = $input.pickadate('picker')\n    var highlighted = picker.get('highlight')\n\n    var playdate = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1)\n    deepEqual(\n        [playdate.getFullYear(), playdate.getMonth(), playdate.getDate()],\n        [highlighted.year, highlighted.month, highlighted.date],\n        'Able to disable today'\n    )\n})\n\ntest( 'Disable today with `max` as `true`', function() {\n\n    $DOM.append( $INPUT.clone() )\n\n    var today = new Date()\n    var $input = $DOM.find( 'input' ).pickadate({\n        max: true,\n        disable: [ today ]\n    })\n    var picker = $input.pickadate('picker')\n    var highlighted = picker.get('highlight')\n\n    var playdate = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 1)\n    deepEqual(\n        [playdate.getFullYear(), playdate.getMonth(), playdate.getDate()],\n        [highlighted.year, highlighted.month, highlighted.date],\n        'Able to disable today'\n    )\n})\n\n\n\n\nmodule( 'Date picker `set`', {\n    setup: function() {\n        $DOM.append( $INPUT.clone() )\n        var $input = $DOM.find( 'input' ).pickadate()\n        this.picker = $input.pickadate( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( '`clear`', function() {\n\n    var picker = this.picker\n\n    strictEqual( picker.get('select'), null, 'Starts off without a selection' )\n\n    picker.set('select', new Date())\n    notStrictEqual( picker.get('select'), null, 'A selection has been added' )\n\n    picker.clear()\n    strictEqual( picker.get('select'), null, 'Clears out selection' )\n})\n\ntest( '`select`', function() {\n\n    var picker = this.picker,\n        today = new Date(),\n        playdate = new Date( today.getFullYear(), today.getMonth(), today.getDate() + 40 )\n\n    today.setHours(0,0,0,0)\n\n    // Using numbers\n    picker.set( 'select', playdate.getTime() )\n    deepEqual( picker.get( 'select' ).obj, playdate, '`select` using a number: ' + playdate )\n    strictEqual( picker.get( 'value' ), picker.get( 'select', $.fn.pickadate.defaults.format ), '`value` matches' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'select' ), '`highlight` updated' )\n    strictEqual( picker.get( 'view', 'yyyy/mm/dd' ), picker.get( 'highlight', 'yyyy/mm/01' ), '`view` updated' )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )\n    deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )\n\n    // Using arrays\n    playdate.setDate( playdate.getDate() + 40 )\n    picker.set( 'select', [playdate.getFullYear(),playdate.getMonth(),playdate.getDate()] )\n    deepEqual( picker.get( 'select' ).obj, playdate, '`select` using an array: ' + playdate )\n    strictEqual( picker.get( 'value' ), picker.get( 'select', $.fn.pickadate.defaults.format ), '`value` matches' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'select' ), '`highlight` updated' )\n    strictEqual( picker.get( 'view', 'yyyy/mm/dd' ), picker.get( 'highlight', 'yyyy/mm/01' ), '`view` updated' )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )\n    deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )\n\n    // Using JavaScript date objects\n    playdate.setDate( playdate.getDate() + 40 )\n    picker.set( 'select', playdate )\n    deepEqual( picker.get( 'select' ).obj, playdate, '`select` using a JS date object: ' + playdate )\n    strictEqual( picker.get( 'value' ), picker.get( 'select', $.fn.pickadate.defaults.format ), '`value` matches' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'select' ), '`highlight` updated' )\n    strictEqual( picker.get( 'view', 'yyyy/mm/dd' ), picker.get( 'highlight', 'yyyy/mm/01' ), '`view` updated' )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )\n    deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )\n})\n\ntest( '`highlight`', function() {\n\n    var picker = this.picker,\n        today = new Date(),\n        playdate = new Date( today.getFullYear(), today.getMonth(), today.getDate() + 40 )\n\n    today.setHours(0,0,0,0)\n\n    // Using numbers\n    picker.set( 'highlight', playdate.getTime() )\n    deepEqual( picker.get( 'highlight' ).obj, playdate, '`highlight` using a number: ' + playdate )\n    strictEqual( picker.get( 'view', 'yyyy/mm/dd' ), picker.get( 'highlight', 'yyyy/mm/01' ), '`view` updated: ' + picker.get( 'view', 'yyyy/mm/dd' ) )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    strictEqual( picker.get( 'value' ), '', '`value` unaffected' )\n    deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )\n    deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )\n\n    // Using arrays\n    playdate.setDate( playdate.getDate() + 40 )\n    picker.set( 'highlight', [playdate.getFullYear(),playdate.getMonth(),playdate.getDate()] )\n    deepEqual( picker.get( 'highlight' ).obj, playdate, '`highlight` using an array: ' + playdate )\n    strictEqual( picker.get( 'view', 'yyyy/mm/dd' ), picker.get( 'highlight', 'yyyy/mm/01' ), '`view` updated: ' + picker.get( 'view', 'yyyy/mm/dd' ) )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    strictEqual( picker.get( 'value' ), '', '`value` unaffected' )\n    deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )\n    deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )\n\n    // Using JavaScript date objects\n    playdate.setDate( playdate.getDate() + 40 )\n    picker.set( 'highlight', playdate )\n    deepEqual( picker.get( 'highlight' ).obj, playdate, '`highlight` using a JS date object: ' + playdate )\n    strictEqual( picker.get( 'view', 'yyyy/mm/dd' ), picker.get( 'highlight', 'yyyy/mm/01' ), '`view` updated: ' + picker.get( 'view', 'yyyy/mm/dd' ) )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    strictEqual( picker.get( 'value' ), '', '`value` unaffected' )\n    deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )\n    deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )\n})\n\ntest( '`view`', function() {\n\n    var picker = this.picker,\n        today = new Date(),\n        playdate = new Date( today.getFullYear(), today.getMonth(), today.getDate() + 40 )\n\n    today.setHours(0,0,0,0)\n\n    // Using numbers\n    picker.set( 'view', playdate.getTime() )\n    playdate.setDate( 1 )\n    deepEqual( picker.get( 'view' ).obj, playdate, '`view` using a number: ' + playdate )\n    deepEqual( picker.get( 'highlight' ).obj, today, '`highlight` unaffected' )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    strictEqual( picker.get( 'value' ), '', '`value` unaffected' )\n    deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )\n    deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )\n\n    // Using arrays\n    playdate.setDate( playdate.getDate() + 40 )\n    picker.set( 'view', [playdate.getFullYear(),playdate.getMonth(),playdate.getDate()] )\n    playdate.setDate( 1 )\n    deepEqual( picker.get( 'view' ).obj, playdate, '`view` using a number: ' + playdate )\n    deepEqual( picker.get( 'highlight' ).obj, today, '`highlight` unaffected' )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    strictEqual( picker.get( 'value' ), '', '`value` unaffected' )\n    deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )\n    deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )\n\n\n    // Using JavaScript date objects\n    playdate.setDate( playdate.getDate() + 40 )\n    picker.set( 'view', playdate )\n    playdate.setDate( 1 )\n    deepEqual( picker.get( 'view' ).obj, playdate, '`view` using a JS date object: ' + playdate )\n    deepEqual( picker.get( 'highlight' ).obj, today, '`highlight` unaffected' )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    strictEqual( picker.get( 'value' ), '', '`value` unaffected' )\n    deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )\n    deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )\n})\n\ntest( '`min`', function() {\n\n    var picker = this.picker,\n        today = new Date(),\n        playdate = new Date( today.getFullYear(), today.getMonth(), today.getDate() - 40 )\n\n    today.setHours(0,0,0,0)\n\n    // Using negative numbers\n    picker.set( 'min', -40 )\n    deepEqual( picker.get( 'min' ).obj, playdate, '`min` using a negative number: ' + playdate )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), '`highlight` unaffected' )\n\n    playdate.setDate( 1 )\n    playdate.setMonth( today.getMonth() )\n    playdate.setFullYear( today.getFullYear() )\n    deepEqual( picker.get( 'view' ).obj, playdate, '`view` unaffected' )\n    strictEqual( picker.get( 'value' ), '', '`value` unaffected' )\n    deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )\n\n    // Using positive numbers\n    picker.set( 'min', 40 )\n    playdate.setDate( today.getDate() + 40 )\n    deepEqual( picker.get( 'min' ).obj, playdate, '`min` using a positive number: ' + playdate )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'min' ), '`highlight` updated' )\n\n    playdate.setDate( 1 )\n    deepEqual( picker.get( 'view' ).obj, playdate, '`view` updated' )\n    strictEqual( picker.get( 'value' ), '', '`value` unaffected' )\n    deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )\n\n    // Using arrays\n    playdate.setDate( playdate.getDate() + 40 )\n    picker.set( 'min', [playdate.getFullYear(),playdate.getMonth(),playdate.getDate()] )\n    deepEqual( picker.get( 'min' ).obj, playdate, '`min` using an array: ' + playdate )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'min' ), '`highlight` updated' )\n    strictEqual( picker.get( 'value' ), '', '`value` unaffected' )\n\n    playdate.setDate( 1 )\n    deepEqual( picker.get( 'view' ).obj, playdate, '`view` updated' )\n    deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )\n\n    // Using JavaScript date objects\n    playdate.setDate( playdate.getDate() + 40 )\n    picker.set( 'min', playdate )\n    deepEqual( picker.get( 'min' ).obj, playdate, '`min` using a JS date object: ' + playdate )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'min' ), '`highlight` updated' )\n    strictEqual( picker.get( 'value' ), '', '`value` unaffected' )\n\n    playdate.setDate( 1 )\n    deepEqual( picker.get( 'view' ).obj, playdate, '`view` updated' )\n    deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )\n})\n\ntest( '`min` using booleans', function() {\n\n    var picker = this.picker,\n        today = new Date(),\n        playdate = new Date( today.getFullYear(), today.getMonth(), 1 )\n\n    today.setHours(0,0,0,0)\n\n    // Using `true`\n    picker.set( 'min', true )\n    deepEqual( picker.get( 'min' ).obj, today, '`min` using `true`: ' + today )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), '`highlight` unaffected' )\n    deepEqual( picker.get( 'view' ).obj, playdate, '`view` unaffected' )\n    strictEqual( picker.get( 'value' ), '', '`value` unaffected' )\n    deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )\n\n    // Using `false`\n    picker.set( 'min', false )\n    deepEqual( picker.get( 'min' ).obj, -Infinity, '`min` using `false`: ' + -Infinity )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), '`highlight` unaffected' )\n    deepEqual( picker.get( 'view' ).obj, playdate, '`view` unaffected' )\n    strictEqual( picker.get( 'value' ), '', '`value` unaffected' )\n    deepEqual( picker.get( 'max' ).pick, Infinity, '`max` unaffected' )\n})\n\ntest( '`min` using strings', function() {\n\n    var picker = this.picker\n\n    var min = picker.get('min')\n    strictEqual( min.pick, -Infinity, 'No `min` date' )\n\n    picker.set( 'min', '8 January, 2013' )\n\n    min = picker.get('min')\n    deepEqual( [min.year, min.month, min.date], [2013, 0, 8], '`min` updated' )\n})\n\ntest( '`max`', function() {\n\n    var picker = this.picker,\n        today = new Date(),\n        playdate = new Date( today.getFullYear(), today.getMonth(), today.getDate() + 40 )\n\n    today.setHours(0,0,0,0)\n\n    // Using positive numbers\n    picker.set( 'max', 40 )\n    deepEqual( picker.get( 'max' ).obj, playdate, '`max` using a positive number: ' + playdate )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), '`highlight` unaffected' )\n\n    playdate.setYear( today.getFullYear() )\n    playdate.setMonth( today.getMonth(), 1 )\n    playdate.setDate( 1 )\n    deepEqual( picker.get( 'view' ).obj, playdate, '`view` unaffected' )\n    strictEqual( picker.get( 'value' ), '', '`value` unaffected' )\n    deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )\n\n    // Using negative numbers\n    picker.set( 'max', -40 )\n    playdate.setDate( today.getDate() - 40 )\n    deepEqual( picker.get( 'max' ).obj, playdate, '`max` using a negative number: ' + playdate )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'max' ), '`highlight` updated' )\n\n    playdate.setDate( 1 )\n    deepEqual( picker.get( 'view' ).obj, playdate, '`view` unaffected' )\n    strictEqual( picker.get( 'value' ), '', '`value` unaffected' )\n    deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )\n\n    // Using arrays\n    playdate.setDate( playdate.getDate() - 40 )\n    picker.set( 'max', [playdate.getFullYear(),playdate.getMonth(),playdate.getDate()] )\n    deepEqual( picker.get( 'max' ).obj, playdate, '`max` using an array: ' + playdate )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'max' ), '`highlight` updated' )\n    strictEqual( picker.get( 'value' ), '', '`value` unaffected' )\n\n    playdate.setDate( 1 )\n    deepEqual( picker.get( 'view' ).obj, playdate, '`view` updated' )\n    deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )\n\n    // Using JavaScript date objects\n    playdate.setDate( playdate.getDate() - 40 )\n    picker.set( 'max', playdate )\n    deepEqual( picker.get( 'max' ).obj, playdate, '`max` using a JS date object: ' + playdate )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'max' ), '`highlight` updated' )\n    strictEqual( picker.get( 'value' ), '', '`value` unaffected' )\n\n    playdate.setDate( 1 )\n    deepEqual( picker.get( 'view' ).obj, playdate, '`view` updated' )\n    deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )\n})\n\ntest( '`max` using booleans', function() {\n\n    var picker = this.picker,\n        today = new Date(),\n        playdate = new Date( today.getFullYear(), today.getMonth(), 1 )\n\n    today.setHours(0,0,0,0)\n\n    // Using `true`\n    picker.set( 'max', true )\n    deepEqual( picker.get( 'max' ).obj, today, '`max` using `true`: ' + today )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), '`highlight` unaffected' )\n    deepEqual( picker.get( 'view' ).obj, playdate, '`view` unaffected' )\n    strictEqual( picker.get( 'value' ), '', '`value` unaffected' )\n    deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )\n\n    // Using `false`\n    picker.set( 'max', false )\n    deepEqual( picker.get( 'max' ).obj, Infinity, '`max` using `false`: ' + Infinity )\n    deepEqual( picker.get( 'now' ).obj, today, '`now` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), '`highlight` unaffected' )\n    deepEqual( picker.get( 'view' ).obj, playdate, '`view` unaffected' )\n    strictEqual( picker.get( 'value' ), '', '`value` unaffected' )\n    deepEqual( picker.get( 'min' ).pick, -Infinity, '`min` unaffected' )\n})\n\ntest( '`max` using strings', function() {\n\n    var picker = this.picker\n\n    var max = picker.get('max')\n    strictEqual( max.pick, Infinity, 'No `max` date' )\n\n    picker.set( 'max', '8 January, 2013' )\n\n    max = picker.get('max')\n    deepEqual( [max.year, max.month, max.date], [2013, 0, 8], '`max` updated' )\n})\n\ntest( '`disable` and `enable` using integers', function() {\n\n    var today = new Date(),\n        disableCollection = [1,4,7],\n        picker = this.picker,\n        $root = picker.$root\n\n    today.setHours(0,0,0,0)\n\n    picker.set( 'disable', disableCollection )\n\n    if ( disableCollection.indexOf( today.getDay() + 1 ) > -1 ) {\n        notDeepEqual( picker.get( 'highlight' ), picker.get( 'now' ), 'Shifted disabled `highlight`: ' + picker.get( 'highlight' ).obj )\n    }\n\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled dates added to collection' )\n\n    $root.find( 'tr' ).each( function( indexRow, tableRow ) {\n        $( tableRow ).find( '[data-pick]' ).each( function( indexCell, tableCell ) {\n            if ( disableCollection.indexOf( indexCell + 1 ) > -1 ) {\n                ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Disabled as day of week: ' + ( indexCell + 1 ) + '. Date: ' + tableCell.innerHTML )\n            }\n            else {\n                ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Enabled as day of week: ' + ( indexCell + 1 ) + '. Date: ' + tableCell.innerHTML )\n            }\n        })\n    })\n\n    picker.set( 'enable', [1] )\n    deepEqual( picker.get( 'disable' ), [4,7], 'Disabled date removed from collection' )\n\n    $root.find( 'tr' ).each( function( indexRow, tableRow ) {\n        $( tableRow ).find( '[data-pick]' ).each( function( indexCell, tableCell ) {\n            if ( [4,7].indexOf( indexCell + 1 ) > -1 ) {\n                ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Disabled as day of week: ' + ( indexCell + 1 ) + '. Date: ' + tableCell.innerHTML )\n            }\n            else {\n                ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Enabled as day of week: ' + ( indexCell + 1 ) + '. Date: ' + tableCell.innerHTML )\n            }\n        })\n    })\n\n    picker.set( 'enable', 'flip' )\n    deepEqual( picker.get( 'disable' ), [4,7], 'Disabled collection `enable` flipped' )\n    strictEqual( picker.get( 'enable' ), -1, 'Inverted `enable`')\n\n    $root.find( 'tr' ).each( function( indexRow, tableRow ) {\n        $( tableRow ).find( '[data-pick]' ).each( function( indexCell, tableCell ) {\n            if ( [4,7].indexOf( indexCell + 1 ) < 0 ) {\n                ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Disabled as day of week: ' + ( indexCell + 1 ) + '. Date: ' + tableCell.innerHTML )\n            }\n            else {\n                ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Enabled as day of week: ' + ( indexCell + 1 ) + '. Date: ' + tableCell.innerHTML )\n            }\n        })\n    })\n\n    picker.set( 'disable', 'flip' )\n    deepEqual( picker.get( 'disable' ), [4,7], 'Disabled collection `disable` flipped' )\n    strictEqual( picker.get( 'enable' ), 1, 'Inverted back `enable`')\n\n    $root.find( 'tr' ).each( function( indexRow, tableRow ) {\n        $( tableRow ).find( '[data-pick]' ).each( function( indexCell, tableCell ) {\n            if ( [4,7].indexOf( indexCell + 1 ) > -1 ) {\n                ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Disabled as day of week: ' + ( indexCell + 1 ) + '. Date: ' + tableCell.innerHTML )\n            }\n            else {\n                ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Enabled as day of week: ' + ( indexCell + 1 ) + '. Date: ' + tableCell.innerHTML )\n            }\n        })\n    })\n})\n\ntest( '`disable` and `enable` using arrays', function() {\n\n    var today = new Date(),\n        nowYear = today.getFullYear(),\n        nowMonth = today.getMonth(),\n        disableCollection = [ [nowYear,nowMonth,1],[nowYear,nowMonth,25],[nowYear,nowMonth,17] ],\n        picker = this.picker,\n        viewday = picker.get( 'view' ).day,\n        $root = picker.$root\n\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled dates added to collection' )\n\n    $root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {\n        var index = indexCell - viewday + 1\n        if ( index === 1 || index === 17 || index === 25 ) {\n            ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )\n        }\n        else {\n            ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )\n        }\n    })\n\n    picker.set( 'enable', [ [nowYear,nowMonth,17] ] )\n    disableCollection = [ [nowYear,nowMonth,1],[nowYear,nowMonth,25] ]\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled date removed from collection' )\n\n    $root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {\n        var index = indexCell - viewday + 1\n        if ( index === 1 || index === 25 ) {\n            ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )\n        }\n        else {\n            ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )\n        }\n    })\n\n\n    picker.set( 'enable', 'flip' )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled collection `enable` flipped' )\n    deepEqual( picker.get( 'enable' ), -1, 'Base state disabled' )\n\n    $root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {\n        var index = indexCell - viewday + 1\n        if ( index !== 1 && index !== 25 ) {\n            ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )\n        }\n        else {\n            ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )\n        }\n    })\n\n\n    picker.set( 'disable', 'flip' )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled collection `disable` flipped' )\n    deepEqual( picker.get( 'enable' ), 1, 'Base state enabled' )\n\n    $root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {\n        var index = indexCell - viewday + 1\n        if ( index === 1 || index === 25 ) {\n            ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )\n        }\n        else {\n            ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )\n        }\n    })\n})\n\ntest( '`disable` and `enable` using JS dates', function() {\n\n    var now = new Date(),\n        nowYear = now.getFullYear(),\n        nowMonth = now.getMonth(),\n        disableCollection = [ new Date(nowYear,nowMonth,1), new Date(nowYear,nowMonth,17), new Date(nowYear,nowMonth,25) ],\n        picker = this.picker,\n        viewday = picker.get( 'view' ).day,\n        $root = picker.$root\n\n\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled dates added to collection' )\n\n    $root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {\n        var index = indexCell - viewday + 1\n        if ( index === 1 || index === 17 || index === 25 ) {\n            ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )\n        }\n        else {\n            ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )\n        }\n    })\n\n\n    picker.set( 'enable', [ new Date(nowYear,nowMonth,17) ] )\n    deepEqual( picker.get( 'disable' ), [ new Date(nowYear,nowMonth,1), new Date(nowYear,nowMonth,25) ], 'Disabled date removed from collection' )\n\n    $root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {\n        var index = indexCell - viewday + 1\n        if ( index === 1 || index === 25 ) {\n            ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )\n        }\n        else {\n            ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )\n        }\n    })\n\n\n    picker.set( 'enable', 'flip' )\n    deepEqual( picker.get( 'disable' ), [ new Date(nowYear,nowMonth,1), new Date(nowYear,nowMonth,25) ], 'Disabled collection `enable` flipped' )\n\n    $root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {\n        var index = indexCell - viewday + 1\n        if ( index !== 1 && index !== 25 ) {\n            ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )\n        }\n        else {\n            ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )\n        }\n    })\n\n\n    picker.set( 'disable', 'flip' )\n    deepEqual( picker.get( 'disable' ), [ new Date(nowYear,nowMonth,1), new Date(nowYear,nowMonth,25) ], 'Disabled collection `disable` flipped' )\n\n    $root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {\n        var index = indexCell - viewday + 1\n        if ( index === 1 || index === 25 ) {\n            ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )\n        }\n        else {\n            ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )\n        }\n    })\n})\n\ntest( '`disable` and `enable` using booleans', function() {\n\n    var now = new Date(),\n        nowYear = now.getFullYear(),\n        nowMonth = now.getMonth(),\n        disableCollection = [ [nowYear,nowMonth,1],[nowYear,nowMonth,17],[nowYear,nowMonth,25] ],\n        picker = this.picker,\n        $root = picker.$root\n\n\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled dates added to collection' )\n\n    picker.set('disable', false)\n    deepEqual( picker.get('disable'), [], 'Disabled collection reset' )\n    strictEqual( $root.find( '.' + $.fn.pickadate.defaults.klass.disabled ).length, 0, 'No dates disabled' )\n\n\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled dates added to collection' )\n\n    picker.set('disable', true)\n    deepEqual( picker.get('disable'), [], 'Disabled collection reset' )\n    deepEqual( picker.get('enable'), -1, 'Disabled collection `enable` flipped' )\n    strictEqual( $root.find( '.' + $.fn.pickadate.defaults.klass.disabled ).length, 42, 'All dates disabled' )\n\n\n    picker.set( 'enable', 'flip' )\n    deepEqual( picker.get('enable'), 1, 'Disabled collection `enable` flipped' )\n\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get('disable'), disableCollection, 'Disabled dates added to collection' )\n\n\n    picker.set('enable', true)\n    deepEqual( picker.get('disable'), [], 'Disabled collection reset' )\n    strictEqual( $root.find( '.' + $.fn.pickadate.defaults.klass.disabled ).length, 0, 'No dates disabled' )\n\n\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get('disable'), disableCollection, 'Disabled dates added to collection' )\n\n\n    picker.set('enable', false)\n    deepEqual( picker.get('disable'), [], 'Disabled collection reset' )\n    deepEqual( picker.get('enable'), -1, 'Disabled collection `enable` flipped' )\n    strictEqual( $root.find( '.' + $.fn.pickadate.defaults.klass.disabled ).length, 42, 'All dates disabled' )\n})\n\ntest( '`disable` and `enable` using ranges', function() {\n\n    var picker = this.picker,\n        $root = picker.$root,\n        disableCollection, viewday\n\n    picker.set( 'view', [2014,2,1] )\n    viewday = picker.get( 'view' ).day + 1\n\n    disableCollection = [ { from: [2014,2,4], to: [2014,2,14] } ]\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled range' )\n\n    $root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {\n        var index = indexCell - viewday\n        if ( index >= 2 && index <= 12 ) {\n            ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )\n        }\n        else {\n            ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )\n        }\n    })\n\n    picker.set( 'enable', disableCollection )\n    deepEqual( picker.get( 'disable' ), [], 'Cleared disabled range' )\n    strictEqual( $root.find( '.' + $.fn.pickadate.defaults.klass.disabled ).length, 0, 'No dates disabled' )\n\n\n    disableCollection = [ { from: new Date(2014,2,7), to: new Date(2014,2,17) } ]\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled range updated' )\n\n    $root.find( 'td [data-pick]' ).each( function( indexCell, tableCell ) {\n        var index = indexCell - viewday\n        if ( index >= 5 && index <= 15 ) {\n            ok( $( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is disabled: ' + tableCell.innerHTML )\n        }\n        else {\n            ok( !$( tableCell ).hasClass( $.fn.pickadate.defaults.klass.disabled ), 'Date is enabled: ' + tableCell.innerHTML )\n        }\n    })\n\n    picker.set( 'enable', disableCollection )\n    deepEqual( picker.get( 'disable' ), [], 'Cleared disabled range' )\n    strictEqual( $root.find( '.' + $.fn.pickadate.defaults.klass.disabled ).length, 0, 'No dates disabled' )\n})\n\n// test( '`disable` and `enable` using relative ranges', function() {\n//\n//     var picker = this.picker,\n//         $root = picker.$root,\n//         today = picker.get( 'now' ).obj,\n//         yearToday = today.getFullYear(),\n//         monthToday = today.getMonth(),\n//         dateToday = today.getDate(),\n//         backDay = [ yearToday, monthToday, dateToday - 10 ],\n//         forwardDay = new Date( yearToday, monthToday, dateToday + 10 ),\n//         disableCollection, index, $dates, disabledDate, previousMonth\n//\n//     disableCollection = [ { from: true, to: forwardDay } ]\n//     picker.set( 'disable', disableCollection )\n//     deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled range relative to today with date object' )\n//\n//     $dates = $root.find('.' + $.fn.pickadate.defaults.klass.disabled)\n//     for ( index = 0, datesCount = $dates.length; index < datesCount; index += 1 ) {\n//         disabledDate = +$dates[index].innerHTML\n//         disabledDate = new Date(yearToday, monthToday, disabledDate)\n//         ok( disabledDate >= today &&\n//             disabledDate <= new Date(yearToday, monthToday, dateToday + 10),\n//             'Date is disabled: ' + disabledDate\n//         );\n//     }\n//\n//     picker.set( 'enable', disableCollection )\n//     deepEqual( picker.get( 'disable' ), [], 'Cleared disabled range' )\n//     ok( !$root.find( '.' + $.fn.pickadate.defaults.klass.disabled ).length, 'No dates disabled' )\n//\n//     disableCollection = [ { from: backDay, to: true } ]\n//     picker.set( 'disable', disableCollection )\n//     deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled range relative to today with array' )\n//\n//     $dates = $root.find('.' + $.fn.pickadate.defaults.klass.disabled)\n//     for ( index = 0, datesCount = $dates.length; index < datesCount; index += 1 ) {\n//         disabledDate = +$dates[index].innerHTML\n//         previousMonth = disabledDate > dateToday ? 1 : 0\n//         disabledDate = new Date(yearToday, monthToday - previousMonth, disabledDate)\n//         ok( disabledDate <= today &&\n//             disabledDate >= new Date(yearToday, monthToday, dateToday - 10),\n//             'Date is disabled: ' + disabledDate\n//         );\n//     }\n//\n//     picker.set( 'enable', disableCollection )\n//     deepEqual( picker.get( 'disable' ), [], 'Cleared disabled range' )\n//     ok( !$root.find( '.' + $.fn.pickadate.defaults.klass.disabled ).length, 'No dates disabled' )\n//\n//     disableCollection = [ { from: true, to: 10 } ]\n//     picker.set( 'disable', disableCollection )\n//     deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled range relative to today with positive integer' )\n//\n//     $dates = $root.find('.' + $.fn.pickadate.defaults.klass.disabled)\n//     for ( index = 0, datesCount = $dates.length; index < datesCount; index += 1 ) {\n//         disabledDate = +$dates[index].innerHTML\n//         disabledDate = new Date(yearToday, monthToday, disabledDate)\n//         ok( disabledDate >= today &&\n//             disabledDate <= new Date(yearToday, monthToday, dateToday + 10),\n//             'Date is disabled: ' + disabledDate\n//         );\n//     }\n//\n//     picker.set( 'enable', disableCollection )\n//     deepEqual( picker.get( 'disable' ), [], 'Cleared disabled range' )\n//     ok( !$root.find( '.' + $.fn.pickadate.defaults.klass.disabled ).length, 'No dates disabled' )\n//\n//     disableCollection = [ { from: -10, to: true } ]\n//     picker.set( 'disable', disableCollection )\n//     deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled range relative to today with negative integer' )\n//\n//     $dates = $root.find('.' + $.fn.pickadate.defaults.klass.disabled)\n//     for ( index = 0, datesCount = $dates.length; index < datesCount; index += 1 ) {\n//         disabledDate = +$dates[index].innerHTML\n//         previousMonth = disabledDate > dateToday ? 1 : 0\n//         disabledDate = new Date(yearToday, monthToday - previousMonth, disabledDate)\n//         ok( disabledDate <= today &&\n//             disabledDate >= new Date(yearToday, monthToday, dateToday - 10),\n//             'Date is disabled: ' + disabledDate\n//         );\n//     }\n// });\n\ntest( '`disable` and `enable` using overlapping ranges', function() {\n\n    var picker = this.picker,\n        $root = picker.$root,\n        disableCollection\n\n    picker.set( 'view', [2014,2,1] )\n\n    picker.set( 'disable', [\n        { from: [2014,2,4], to: [2014,2,28] }\n    ])\n    picker.set( 'enable', [\n        { from: [2014,2,14], to: [2014,2,18] }\n    ])\n\n    disableCollection = [\n        { from: [2014,2,4], to: [2014,2,28] },\n        { from: [2014,2,14], to: [2014,2,18], inverted: true }\n    ]\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Inverted range within disabled range' )\n\n    $dates = $root.find('.' + $.fn.pickadate.defaults.klass.disabled)\n    for ( index = 0, datesCount = $dates.length; index < datesCount; index += 1 ) {\n        disabledDate = +$dates[index].innerHTML\n        ok( disabledDate >= 4 && disabledDate < 14 ||\n            disabledDate > 18 && disabledDate <= 28,\n            'Date is disabled: ' + disabledDate\n        );\n    }\n\n    picker.set( 'disable', false )\n    picker.set( 'disable', [\n        { from: [2014,2,4], to: [2014,2,28] }\n    ])\n    picker.set( 'enable', [\n        { from: [2014,2,1], to: [2014,2,14] }\n    ])\n\n    disableCollection = [\n        { from: [2014,2,4], to: [2014,2,28] },\n        { from: [2014,2,1], to: [2014,2,14], inverted: true }\n    ]\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Inverted range before and within disabled range' )\n\n    $dates = $root.find('.' + $.fn.pickadate.defaults.klass.disabled)\n    for ( index = 0, datesCount = $dates.length; index < datesCount; index += 1 ) {\n        disabledDate = +$dates[index].innerHTML\n        ok( disabledDate >= 14 && disabledDate <= 28,\n            'Date is disabled: ' + disabledDate\n        );\n    }\n\n    picker.set( 'disable', false )\n    picker.set( 'disable', [\n        { from: [2014,2,4], to: [2014,2,20] }\n    ])\n    picker.set( 'enable', [\n        { from: [2014,2,16], to: [2014,2,24] }\n    ])\n\n    disableCollection = [\n        { from: [2014,2,4], to: [2014,2,20] },\n        { from: [2014,2,16], to: [2014,2,24], inverted: true }\n    ]\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Inverted range after and within disabled range' )\n\n    $dates = $root.find('.' + $.fn.pickadate.defaults.klass.disabled)\n    for ( index = 0, datesCount = $dates.length; index < datesCount; index += 1 ) {\n        disabledDate = +$dates[index].innerHTML\n        ok( disabledDate >= 4 && disabledDate < 16,\n            'Date is disabled: ' + disabledDate\n        );\n    }\n})\n\ntest( '`disable` and `enable` repeatedly', function() {\n\n    var now = new Date(2014,3,6),\n        nowYear = now.getFullYear(),\n        nowMonth = now.getMonth(),\n        nowDate = now.getDate(),\n        picker = this.picker,\n        disabledCollection = [\n            [nowYear,nowMonth,1],\n            [nowYear,nowMonth,17],\n            new Date(nowYear,nowMonth,25),\n            1,\n            { from: [nowYear,nowMonth,4], to: [nowYear,nowMonth,10] },\n            { from: [nowYear,nowMonth,8], to: [nowYear,nowMonth,12] }\n        ],\n        collectionToEnable\n\n    picker.set( 'disable', disabledCollection )\n    picker.set( 'disable', disabledCollection )\n    deepEqual( picker.get( 'disable' ), disabledCollection, 'Collection without duplicates' )\n\n    collectionToEnable = [\n        [nowYear,nowMonth,17],\n        [nowYear,nowMonth,25],\n        now,\n        { from: [nowYear,nowMonth,8], to: [nowYear,nowMonth,12] }\n    ]\n    picker.set( 'enable', collectionToEnable )\n    disabledCollection = [\n        [nowYear,nowMonth,1],\n        1,\n        { from: [nowYear,nowMonth,4], to: [nowYear,nowMonth,10] },\n        [nowYear,nowMonth,nowDate,'inverted'],\n        { from: [nowYear,nowMonth,8], to: [nowYear,nowMonth,12], inverted: true }\n    ]\n    deepEqual( picker.get( 'disable' ), disabledCollection, 'Collection enabled various values' )\n\n    picker.set( 'enable', collectionToEnable )\n    deepEqual( picker.get( 'disable' ), disabledCollection, 'Collection without duplicates' )\n\n    collectionToEnable = disabledCollection\n    picker.set( 'enable', collectionToEnable )\n    deepEqual( picker.get( 'disable' ), [], 'Collection cleared - including inverted range overlaps' )\n\n    picker.set( 'enable', collectionToEnable )\n    deepEqual( picker.get( 'disable' ), [], 'Collection kept clear' )\n})\n\n\n\n\nmodule( 'Date picker `set` beyond limits', {\n    setup: function() {\n        $DOM.append( $INPUT.clone() )\n        var $input = $DOM.find( 'input' ).pickadate({\n            min: -40,\n            max: 40\n        })\n        this.picker = $input.pickadate( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( '`select`', function() {\n\n    var picker = this.picker,\n        today = new Date()\n\n    today.setHours(0,0,0,0)\n\n    picker.set( 'select', new Date( today.getFullYear(), today.getMonth(), today.getDate() - 60 ) )\n    deepEqual( picker.get( 'select' ), picker.get( 'min' ), 'Able to not `select` beyond lower limit' )\n\n    picker.set( 'select', new Date( today.getFullYear(), today.getMonth(), today.getDate() + 60 ) )\n    deepEqual( picker.get( 'select' ), picker.get( 'max' ), 'Able to not `select` beyond upper limit' )\n})\n\ntest( '`highlight`', function() {\n\n    var picker = this.picker,\n        today = new Date()\n\n    today.setHours(0,0,0,0)\n\n    picker.set( 'highlight', new Date( today.getFullYear(), today.getMonth(), today.getDate() - 60 ) )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'min' ), 'Able to not `highlight` beyond lower limit' )\n\n    picker.set( 'highlight', new Date( today.getFullYear(), today.getMonth(), today.getDate() + 60 ) )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'max' ), 'Able to not `highlight` beyond upper limit' )\n})\n\ntest( '`view`', function() {\n\n    var picker = this.picker,\n        today = new Date(),\n        viewset,\n        min = picker.get( 'min' ),\n        max = picker.get( 'max' )\n\n    today.setHours(0,0,0,0)\n\n    picker.set( 'view', new Date( today.getFullYear(), today.getMonth(), today.getDate() - 60 ) )\n    viewset = picker.get( 'view' )\n    deepEqual( [viewset.year,viewset.month,viewset.date], [min.year,min.month,1], 'Able to not `view` beyond lower limit' )\n\n    picker.set( 'view', new Date( today.getFullYear(), today.getMonth(), today.getDate() + 60 ) )\n    viewset = picker.get( 'view' )\n    deepEqual( [viewset.year,viewset.month,viewset.date], [max.year,max.month,1], 'Able to not `view` beyond upper limit' )\n})\n\n\n\n\nmodule( 'Date picker mouse events', {\n    setup: function() {\n        $DOM.append( $INPUT.clone() )\n        var $input = $DOM.find( 'input' ).pickadate()\n        this.picker = $input.pickadate( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( 'Select', function() {\n\n    var picker = this.picker,\n        $root = picker.$root,\n        viewsetObject = picker.get( 'view' ),\n        monthStartDay = viewsetObject.day,\n        monthEndDate = new Date( viewsetObject.year, viewsetObject.month + 1, 0 ).getDate()\n\n    for ( var i = monthStartDay; i < monthStartDay + monthEndDate; i += 1 ) {\n        $root.find( '.' + $.fn.pickadate.defaults.klass.day ).eq( i ).click()\n        strictEqual( picker.get( 'select' ).pick, new Date( viewsetObject.year, viewsetObject.month, viewsetObject.date + i - monthStartDay ).getTime(), 'Selected ' + picker.get( 'select', 'yyyy/mm/dd' ) )\n        strictEqual( picker.get( 'value' ), picker.get( 'select', $.fn.pickadate.defaults.format ), 'Input value updated to ' + picker.get( 'value' ) )\n    }\n})\n\ntest( 'Highlight', function() {\n\n    var picker = this.picker,\n        $root = picker.$root,\n        today = new Date(),\n        playdate = new Date()\n\n    today.setHours(0,0,0,0)\n    playdate.setHours(0,0,0,0)\n\n    $root.find( '.' + $.fn.pickadate.defaults.klass.navPrev ).click()\n    playdate.setMonth( playdate.getMonth() - 1 )\n    if ( playdate.getMonth() === today.getMonth() ) {\n        playdate.setDate( 0 )\n    }\n    deepEqual( picker.get( 'highlight' ).obj, playdate, 'Previous month: ' + playdate )\n    deepEqual( picker.get( 'select' ), null, 'Select unaffected' )\n\n    var day = playdate.getDate()\n    playdate.setDate( 1 )\n    deepEqual( picker.get( 'view' ).obj, playdate, 'View updated' )\n\n    $root.find( '.' + $.fn.pickadate.defaults.klass.navNext ).click()\n    $root.find( '.' + $.fn.pickadate.defaults.klass.navNext ).click()\n    playdate.setMonth( today.getMonth() + 1 )\n\n    playdate = new Date(today.getFullYear(), today.getMonth() + 1, day)\n    if ( playdate.getDate() < day ) {\n        playdate.setDate( 0 )\n    }\n    deepEqual( picker.get( 'highlight' ).obj, playdate, 'Next month: ' + playdate )\n    deepEqual( picker.get( 'select' ), null, 'Select unaffected' )\n\n    playdate.setDate( 1 )\n    deepEqual( picker.get( 'view' ).obj, playdate, 'View updated' )\n})\n\ntest( 'Today', function() {\n\n    var picker = this.picker\n\n    picker.open()\n\n    picker.$root.find( '.' + $.fn.pickadate.defaults.klass.buttonToday ).click()\n    strictEqual( picker.get( 'value' ), picker.get( 'select', $.fn.pickadate.defaults.format ), 'Value set to today' )\n})\n\ntest( 'Clear', function() {\n\n    var picker = this.picker\n\n    picker.open()\n\n    picker.set( 'select', new Date() )\n    strictEqual( picker.get( 'value' ), picker.get( 'select', $.fn.pickadate.defaults.format ), 'Value updated' )\n\n    picker.$root.find( '.' + $.fn.pickadate.defaults.klass.buttonClear ).click()\n    strictEqual( picker.get( 'value' ), '', 'Value cleared' )\n})\n\ntest( 'Closes upon selection', function() {\n\n    var picker = this.picker\n\n    picker.open()\n\n    ok( picker.get('open'), 'Opened to start off' )\n\n    picker.$holder.find('[data-pick]').click()\n\n    ok( !picker.get('open'), 'Closed after selection' )\n\n})\n\ntest( 'Closes upon clearing', function() {\n\n    var picker = this.picker\n\n    picker.open()\n\n    ok( picker.get('open'), 'Opened to start off' )\n\n    picker.$holder.find('[data-clear]').click()\n\n    ok( !picker.get('open'), 'Closed after clearing' )\n\n})\n\nmodule( 'Date picker mouse events', {\n    setup: function() {\n        $DOM.append( $INPUT.clone() )\n        var $input = $DOM.find( 'input' ).pickadate({\n            closeOnSelect: false,\n            closeOnClear: false\n        })\n        this.picker = $input.pickadate( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( 'Remains open upon selection with option', function() {\n\n    var picker = this.picker\n\n    picker.open()\n\n    ok( picker.get('open'), 'Opened to start off' )\n\n    picker.$holder.find('[data-pick]').click()\n\n    ok( picker.get('open'), 'Remains open after selection' )\n\n})\n\ntest( 'Closes upon clearing', function() {\n\n    var picker = this.picker\n\n    picker.open()\n\n    ok( picker.get('open'), 'Opened to start off' )\n\n    picker.$holder.find('[data-clear]').click()\n\n    ok( picker.get('open'), 'Remains open after clearing' )\n\n})\n\n\n\n\nmodule( 'Date picker keyboard events', {\n    setup: function() {\n        $DOM.append( $INPUT.clone() )\n        var $input = $DOM.find( 'input' ).pickadate()\n        this.picker = $input.pickadate( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( 'Select', function() {\n\n    var picker = this.picker,\n        $input = picker.$holder,\n        playdate = new Date()\n\n    playdate.setHours(0,0,0,0)\n\n    for ( var i = 0; i < 10; i += 1 ) {\n\n        // Open the picker.\n        picker.open()\n\n        // Update the playdate.\n        playdate.setDate( playdate.getDate() + 10 )\n\n        // Set the highlight.\n        picker.set( 'highlight', playdate )\n\n        // Keydown to select the highlighted item.\n        $input.trigger({ type: 'keydown', keyCode: 13 })\n\n        // Check if the select is the same as the highlight.\n        deepEqual( picker.get( 'select' ), picker.get( 'highlight' ), 'Select updated to: ' + picker.get( 'select' ).obj )\n    }\n})\n\ntest( 'Highlight', function() {\n\n    var picker = this.picker,\n        $input = picker.$holder,\n        playdate = new Date()\n\n    // Open the picker\n    picker.open()\n\n    // Down\n    for ( var i = 0; i < 10; i += 1 ) {\n\n        $input.trigger({ type: 'keydown', keyCode: 40 })\n        playdate.setDate( playdate.getDate() + 7 )\n        strictEqual( picker.get( 'highlight' ).date, playdate.getDate(), 'Keyed \"down\" to: ' + picker.get( 'highlight', 'yyyy/mm/dd' ) )\n        strictEqual( picker.get( 'view' ).month, picker.get( 'highlight' ).month, 'Updated \"view\" to: ' + picker.get( 'view', 'yyyy/mm/dd' ) )\n    }\n\n    // Up\n    for ( var j = 0; j < 10; j += 1 ) {\n\n        $input.trigger({ type: 'keydown', keyCode: 38 })\n        playdate.setDate( playdate.getDate() - 7 )\n        strictEqual( picker.get( 'highlight' ).date, playdate.getDate(), 'Keyed \"up\" to: ' + picker.get( 'highlight', 'yyyy/mm/dd' ) )\n        strictEqual( picker.get( 'view' ).month, picker.get( 'highlight' ).month, 'Updated \"view\" to: ' + picker.get( 'view', 'yyyy/mm/dd' ) )\n    }\n\n    // Left\n    for ( var k = 0; k < 10; k += 1 ) {\n\n        $input.trigger({ type: 'keydown', keyCode: 37 })\n        playdate.setDate( playdate.getDate() - 1 )\n        ok( picker.get( 'highlight' ).date === playdate.getDate() && picker.get( 'highlight' ).day === playdate.getDay(), 'Keyed \"left\" to: ' + picker.get( 'highlight', 'yyyy/mm/dd' ) )\n        strictEqual( picker.get( 'view' ).month, picker.get( 'highlight' ).month, 'Updated \"view\" to: ' + picker.get( 'view', 'yyyy/mm/dd' ) )\n    }\n\n    // Right\n    for ( var l = 0; l < 10; l += 1 ) {\n\n        $input.trigger({ type: 'keydown', keyCode: 39 })\n        playdate.setDate( playdate.getDate() + 1 )\n        ok( picker.get( 'highlight' ).date === playdate.getDate() && picker.get( 'highlight' ).day === playdate.getDay(), 'Keyed \"right\" to: ' + picker.get( 'highlight', 'yyyy/mm/dd' ) )\n        strictEqual( picker.get( 'view' ).month, picker.get( 'highlight' ).month, 'Updated \"view\" to: ' + picker.get( 'view', 'yyyy/mm/dd' ) )\n    }\n})\n\ntest( 'Closes upon selection', function() {\n\n    var picker = this.picker\n\n    picker.open()\n\n    ok( picker.get('open'), 'Opened to start off' )\n\n    picker.$holder.find('[data-pick]').focus()\n    picker.$holder.trigger({ type: 'keydown', keyCode: 13 })\n\n    ok( !picker.get('open'), 'Closed after selection' )\n\n})\n\ntest( 'Closes upon clearing', function() {\n\n    var picker = this.picker\n\n    picker.open()\n\n    ok( picker.get('open'), 'Opened to start off' )\n\n    picker.$holder.find('[data-clear]').focus()\n    picker.$holder.trigger({ type: 'keydown', keyCode: 13 })\n\n    ok( !picker.get('open'), 'Closed after clearing' )\n\n})\n\nmodule( 'Date picker keyboard events', {\n    setup: function() {\n        $DOM.append( $INPUT.clone() )\n        var $input = $DOM.find( 'input' ).pickadate({\n            closeOnSelect: false,\n            closeOnClear: false\n        })\n        this.picker = $input.pickadate( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( 'Remains open upon selection with option', function() {\n\n    var picker = this.picker\n\n    picker.open()\n\n    ok( picker.get('open'), 'Opened to start off' )\n\n    picker.$holder.find('[data-pick]').focus()\n    picker.$holder.trigger({ type: 'keydown', keyCode: 13 })\n\n    ok( picker.get('open'), 'Remains open after selection' )\n\n})\n\ntest( 'Closes upon clearing', function() {\n\n    var picker = this.picker\n\n    picker.open()\n\n    ok( picker.get('open'), 'Opened to start off' )\n\n    picker.$holder.find('[data-clear]').focus()\n    picker.$holder.trigger({ type: 'keydown', keyCode: 13 })\n\n    ok( picker.get('open'), 'Remains open after clearing' )\n\n})\n\n\n\nmodule( 'Date picker with a visible value', {\n    setup: function() {\n        $DOM.append( $INPUT.clone().val( '14 August, 1988' ) )\n        var $input = $DOM.find( 'input' ).pickadate()\n        this.picker = $input.pickadate( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( '`value` to select, highlight, and view', function() {\n    var picker = this.picker\n    ok( !picker._hidden, 'No hidden input' )\n    deepEqual( picker.get( 'select' ).obj, new Date(1988,7,14), 'Selects date' )\n    deepEqual( picker.get( 'highlight' ).obj, new Date(1988,7,14), 'Highlights date' )\n    deepEqual( picker.get( 'view' ).obj, new Date(1988,7,1), 'Viewsets date' )\n})\n\n\nmodule( 'Date picker with a simple format', {\n    setup: function() {\n        $DOM.append( $INPUT.clone().val( '1988-08-14' ) )\n        var $input = $DOM.find( 'input' ).pickadate({\n            format: 'yyyy-mm-dd'\n        })\n        this.picker = $input.pickadate( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( '`value` to select, highlight, and view', function() {\n    var picker = this.picker\n    ok( !picker._hidden, 'No hidden input' )\n    deepEqual( picker.get( 'select' ).obj, new Date(1988,7,14), 'Selects date' )\n    deepEqual( picker.get( 'highlight' ).obj, new Date(1988,7,14), 'Highlights date' )\n    deepEqual( picker.get( 'view' ).obj, new Date(1988,7,1), 'Viewsets date' )\n})\n\n\n\n\nmodule( 'Date picker with a hidden value', {\n    teardown: function() {\n        $DOM.empty()\n    }\n})\n\ntest( '`value` to select, highlight, and view', function() {\n\n    $DOM.append( $INPUT.clone().val( '14 August, 1988' ) )\n    var $input = $DOM.find( 'input' ).pickadate({\n        formatSubmit: 'yyyy/mm/dd'\n    })\n    var picker = $input.pickadate( 'picker' )\n\n    ok( picker._hidden, 'Has hidden input' )\n    strictEqual( picker._hidden.value, '1988/08/14', 'Hidden input value' )\n    deepEqual( picker.get( 'select' ).obj, new Date(1988,7,14), 'Selects date' )\n    deepEqual( picker.get( 'highlight' ).obj, new Date(1988,7,14), 'Highlights date' )\n    deepEqual( picker.get( 'view' ).obj, new Date(1988,7,1), 'Viewsets date' )\n})\n\ntest( '`data-value` to select, highlight, and view', function() {\n\n    $DOM.append( $INPUT.clone().data( 'value', '1988/08/14' ) )\n    var $input = $DOM.find( 'input' ).pickadate({\n        formatSubmit: 'yyyy/mm/dd'\n    })\n    var picker = $input.pickadate( 'picker' )\n\n    ok( picker._hidden, 'Has hidden input' )\n    strictEqual( picker._hidden.value, '1988/08/14', 'Hidden input value' )\n    deepEqual( picker.get( 'select' ).obj, new Date(1988,7,14), 'Selects date' )\n    deepEqual( picker.get( 'highlight' ).obj, new Date(1988,7,14), 'Highlights date' )\n    deepEqual( picker.get( 'view' ).obj, new Date(1988,7,1), 'Viewsets date' )\n})\n\ntest( 'the pre-filled `value` selected is no longer \"active\"', function() {\n\n    var $input = $( '<input type=\"text\" value=\"14 August, 2014\">' ).pickadate({\n        formatSubmit: 'yyyy/mm/dd',\n        min: [2015, 7, 14]\n    })\n    var picker = $input.pickadate( 'picker' )\n\n    strictEqual( picker.get( 'value' ), '14 August, 2014', 'Sets the default value' )\n    strictEqual( picker.get( 'valueSubmit' ), '2014/08/14', 'Sets the default value to submit' )\n\n    var select = picker.get('select')\n    deepEqual( [select.year, select.month, select.date], [2014, 7, 14], 'Sets the default select' )\n\n})\n"
  },
  {
    "path": "tests/units/time.js",
    "content": "\n/*jshint\n    debug: true,\n    devel: true,\n    browser: true,\n    asi: true,\n    unused: true,\n    eqnull: true,\n    eqeqeq: true\n */\n\n\nvar $DOM = $( '#qunit-fixture' ),\n    $INPUT = $( '<input type=password>' )\n\n\n\n/* ==========================================================================\n   Time picker tests\n   ========================================================================== */\n\n\nmodule( 'Time picker setup', {\n    setup: function() {\n        $DOM.append( $INPUT.clone() )\n        var $input = $DOM.find( 'input' ).pickatime()\n        this.picker = $input.pickatime( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( 'Clock stage', function() {\n    strictEqual( this.picker.$root.find( '[data-pick]' ).length, 48, '48 selectable times' )\n})\n\ntest( 'Properties', function() {\n\n    var picker = this.picker,\n        today = new Date(),\n        interval = picker.get( 'interval' ),\n        nowMinutes = today.getHours() * 60 + today.getMinutes()\n\n    strictEqual( interval, 30, 'Default interval is 30' )\n\n    strictEqual( picker.get( 'min' ).pick, 0, 'Default “min” is midnight' )\n    strictEqual( picker.get( 'max' ).pick, 1410, 'Default “max” is 23:30' )\n    strictEqual( picker.get( 'now' ).pick, (interval + nowMinutes - ( nowMinutes % interval )) % 1440, 'Default “now” is: ' + picker.get( 'now', 'HH:i' ) )\n    deepEqual( picker.get( 'select' ), null, 'Default “select” is `null`' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), 'Default “highlight” is “now”' )\n    deepEqual( picker.get( 'view' ), picker.get( 'highlight' ), 'Default “view” is “highlight”' )\n})\n\ntest( 'Formats', function() {\n\n    var picker = this.picker,\n        interval = $.fn.pickatime.defaults.interval,\n        today = new Date(),\n        minutes = today.getHours() * 60 + today.getMinutes(),\n        leadZero = function( number ) {\n            return ( number < 10 ? '0' : '' ) + number\n        },\n        toHours = function( mins ) {\n            var hours = ~~( mins/60 ) % 12\n            return hours ? hours : 12\n        },\n        formats = {\n            h: function() {\n                return '' + toHours( minutes )\n            },\n            hh: function() {\n                return leadZero( toHours( minutes ) )\n            },\n            H: function() {\n                return '' + ( ~~( minutes/60 ) % 24 )\n            },\n            HH: function() {\n                return leadZero( ~~( minutes/60 ) % 24 )\n            },\n            i: function() {\n                return leadZero( minutes%60 )\n            },\n            a: function() {\n                return ~~( minutes/60 ) % 24 >= 12 ? 'p.m.' : 'a.m.'\n            },\n            A: function() {\n                return ~~( minutes/60 ) % 24 >= 12 ? 'PM' : 'AM'\n            }\n        }\n\n    minutes = interval + minutes - minutes % interval\n\n    ;([ 'h', 'hh', 'H', 'HH', 'i', 'a', 'A' ]).forEach( function( format ) {\n        var expect = formats[ format ]()\n        deepEqual( picker.get( 'now', format ), expect, '`' + format + '`: ' + expect )\n    })\n\n})\n\nmodule( 'Time picker setup', {\n    teardown: function() {\n        $DOM.empty()\n    }\n})\n\ntest( 'Editable', function() {\n\n    $DOM.append( $INPUT.clone()).append( $INPUT.clone() )\n\n    var $input1 = $DOM.find( 'input' ).eq(0).pickatime()\n    var $input2 = $DOM.find( 'input' ).eq(1).pickatime({\n        editable: true\n    })\n\n    strictEqual( $input1[0].readOnly, true, 'Editable: false' )\n    strictEqual( $input2[0].readOnly, false, 'Editable: true' )\n})\n\n\n\n\nmodule( 'Time picker `set`', {\n    setup: function() {\n        $DOM.append( $INPUT.clone() )\n        var $input = $DOM.find( 'input' ).pickatime()\n        this.picker = $input.pickatime( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( '`interval`', function() {\n\n    var picker = this.picker,\n        $root = picker.$root\n\n    picker.set( 'interval', 120 )\n    strictEqual( picker.get( 'interval' ), 120, '`interval` updated' )\n    strictEqual( picker.get( 'min' ).pick % 120, 0, '`min` updated' )\n    strictEqual( picker.get( 'max' ).pick % 120, 0, '`max` updated' )\n    strictEqual( $root.find( '.' + $.fn.pickatime.defaults.klass.listItem ).length, 12, '12 selectable times' )\n\n    picker.set( 'interval', 'lol' )\n    strictEqual( picker.get( 'interval' ), 120, 'Interval unaffected by non-integer' )\n})\n\ntest( '`clear`', function() {\n\n    var picker = this.picker\n\n    strictEqual( picker.get('select'), null, 'Starts off without a selection' )\n\n    picker.set('select', new Date())\n    notStrictEqual( picker.get('select'), null, 'A selection has been added' )\n\n    picker.clear()\n    strictEqual( picker.get('select'), null, 'Clears out selection' )\n})\n\ntest( '`select`', function() {\n\n    var picker = this.picker\n\n    // Using numbers\n    picker.set( 'select', 180 )\n    strictEqual( picker.get( 'select' ).pick, 180, '`select` using a number: ' + picker.get( 'select', 'HH:i' ) )\n    strictEqual( picker.get( 'highlight' ).pick, 180, '`highlight` updated' )\n    strictEqual( picker.get( 'view' ).pick, 180, '`view` updated' )\n    strictEqual( picker.get( 'min' ).pick, 0, '`min` unaffected' )\n    strictEqual( picker.get( 'max' ).pick, 1410, '`max` unaffected' )\n\n    // Using JavaScript date objects\n    var dateObject = new Date()\n    dateObject.setHours(4,20)\n    picker.set( 'select', dateObject )\n    strictEqual( picker.get('select').pick, 270, '`select` using a JS date object: ' + picker.get( 'select', 'HH:i' ) )\n    strictEqual( picker.get( 'highlight' ).pick, 270, '`highlight` updated' )\n    strictEqual( picker.get( 'view' ).pick, 270, '`view` updated' )\n    strictEqual( picker.get( 'min' ).pick, 0, '`min` unaffected' )\n    strictEqual( picker.get( 'max' ).pick, 1410, '`max` unaffected' )\n\n    // Using arrays\n    picker.set( 'select', [9,0] )\n    strictEqual( picker.get( 'select' ).pick, 540, '`select` using an array: ' + picker.get( 'select', 'HH:i' ) )\n    strictEqual( picker.get( 'highlight' ).pick, 540, '`highlight` updated' )\n    strictEqual( picker.get( 'view' ).pick, 540, '`view` updated' )\n    strictEqual( picker.get( 'min' ).pick, 0, '`min` unaffected' )\n    strictEqual( picker.get( 'max' ).pick, 1410, '`max` unaffected' )\n})\n\ntest( '`highlight`', function() {\n\n    var picker = this.picker\n\n    // Using numbers\n    picker.set( 'highlight', 180 )\n    strictEqual( picker.get( 'highlight' ).pick, 180, '`highlight` using a number: ' + picker.get( 'highlight', 'HH:i' ) )\n    deepEqual( picker.get( 'view' ), picker.get( 'highlight' ), '`view` updated' )\n    strictEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    strictEqual( picker.get( 'min' ).pick, 0, '`min` unaffected' )\n    strictEqual( picker.get( 'max' ).pick, 1410, '`max` unaffected' )\n\n    // Using JavaScript date objects\n    var dateObject = new Date()\n    dateObject.setHours(4,20)\n    picker.set( 'highlight', dateObject )\n    strictEqual( picker.get('highlight').pick, 270, '`highlight` using a JS date object: ' + picker.get( 'highlight', 'HH:i' ) )\n    deepEqual( picker.get( 'view' ), picker.get( 'highlight' ), '`view` updated' )\n    strictEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    strictEqual( picker.get( 'min' ).pick, 0, '`min` unaffected' )\n    strictEqual( picker.get( 'max' ).pick, 1410, '`max` unaffected' )\n\n    // Using arrays\n    picker.set( 'highlight', [9,0] )\n    strictEqual( picker.get( 'highlight' ).pick, 540, '`highlight` using an array: ' + picker.get( 'highlight', 'HH:i' ) )\n    deepEqual( picker.get( 'view' ), picker.get( 'highlight' ), '`view` updated' )\n    strictEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    strictEqual( picker.get( 'min' ).pick, 0, '`min` unaffected' )\n    strictEqual( picker.get( 'max' ).pick, 1410, '`max` unaffected' )\n})\n\ntest( '`view`', function() {\n\n    var picker = this.picker\n\n    // Using numbers\n    picker.set( 'view', 180 )\n    strictEqual( picker.get( 'view' ).pick, 180, '`view` using a number: ' + picker.get( 'view', 'HH:i' ) )\n    strictEqual( picker.get( 'highlight' ).pick, picker.get( 'now' ).pick, '`highlight` unaffected' )\n    strictEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    strictEqual( picker.get( 'min' ).pick, 0, '`min` unaffected' )\n    strictEqual( picker.get( 'max' ).pick, 1410, '`max` unaffected' )\n\n    // Using JavaScript date objects\n    var dateObject = new Date()\n    dateObject.setHours(4,20)\n    picker.set( 'view', dateObject )\n    strictEqual( picker.get('view').pick, 270, '`view` using a JS date object: ' + picker.get( 'view', 'HH:i' ) )\n    strictEqual( picker.get( 'highlight' ).pick, picker.get( 'now' ).pick, '`highlight` unaffected' )\n    strictEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    strictEqual( picker.get( 'min' ).pick, 0, '`min` unaffected' )\n    strictEqual( picker.get( 'max' ).pick, 1410, '`max` unaffected' )\n\n    // Using arrays\n    picker.set( 'view', [9,0] )\n    strictEqual( picker.get( 'view' ).pick, 540, '`view` using an array: ' + picker.get( 'view', 'HH:i' ) )\n    strictEqual( picker.get( 'highlight' ).pick, picker.get( 'now' ).pick, '`highlight` unaffected' )\n    strictEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    strictEqual( picker.get( 'min' ).pick, 0, '`min` unaffected' )\n    strictEqual( picker.get( 'max' ).pick, 1410, '`max` unaffected' )\n})\n\ntest( '`min` using integers', function() {\n\n    var picker = this.picker,\n        interval = 30\n\n    // Using negative numbers\n    picker.set( 'min', -3 )\n    strictEqual( (picker.get( 'min' ).pick + ( interval * 3 )) % 1440, picker.get( 'now' ).pick , '`min` using a negative number: ' + picker.get( 'min', 'HH:i' ) )\n\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    if ( picker.get( 'min' ).pick > picker.get( 'now' ).pick ) {\n        deepEqual( picker.get( 'highlight' ), picker.get( 'min' ), '`highlight` updated' )\n        deepEqual( picker.get( 'view' ), picker.get( 'min' ), '`view` updated' )\n    }\n    else {\n        strictEqual( picker.get( 'highlight' ).pick, picker.get( 'now' ).pick, '`highlight` unaffected' )\n        strictEqual( picker.get( 'view' ).pick, picker.get( 'now' ).pick, '`view` unaffected' )\n    }\n    strictEqual( picker.get( 'max' ).pick, 1410, '`max` unaffected' )\n\n\n    var previousHighlight = picker.get( 'highlight' )\n    var previousView = picker.get( 'view' )\n\n\n    // Using positive numbers\n    picker.set( 'min', 3 )\n    strictEqual( picker.get( 'min' ).pick, (picker.get( 'now' ).pick + ( interval * 3 )) % 1440, '`min` using a positive number: ' + picker.get( 'min', 'HH:i' ) )\n\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    strictEqual( picker.get( 'max' ).pick, 1410, '`max` unaffected' )\n    if ( picker.get( 'highlight' ).pick !== previousHighlight.pick ) {\n        deepEqual( picker.get( 'highlight' ).pick, picker.get( 'min' ).pick, '`highlight` updated' )\n        deepEqual( picker.get( 'view' ).pick, picker.get( 'min' ).pick, '`view` updated' )\n    }\n    else {\n        deepEqual( picker.get( 'highlight' ).pick, previousHighlight.pick, '`highlight` unaffected' )\n        deepEqual( picker.get( 'view' ).pick, previousView.pick, '`view` unaffected' )\n    }\n})\n\ntest( '`min` using booleans', function() {\n\n    var picker = this.picker\n\n    // Boolean true\n    picker.set( 'min', true )\n    deepEqual( picker.get( 'min' ), picker.get( 'now' ), '`min` using `true`: ' + picker.get( 'min', 'HH:i' ) )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'min' ), '`highlight` updated' )\n    deepEqual( picker.get( 'view' ), picker.get( 'min' ), '`view` updated' )\n    deepEqual( picker.get( 'max' ).time, 1410, '`max` unaffected' )\n\n    // Boolean false\n    picker.set( 'min', false )\n    strictEqual( picker.get( 'min' ).time, 0, '`min` using `false`: ' + picker.get( 'min', 'HH:i' ) )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), '`highlight` unaffected' )\n    deepEqual( picker.get( 'view' ), picker.get( 'now' ), '`view` unaffected' )\n    deepEqual( picker.get( 'max' ).time, 1410, '`max` unaffected' )\n})\n\ntest( '`min` using arrays', function() {\n\n    var picker = this.picker\n\n    // Using arrays\n    picker.set( 'min', [2,0] )\n    strictEqual( picker.get( 'min' ).pick, 120, '`min` using an array: ' + picker.get( 'min', 'HH:i' ) )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    if ( picker.get( 'min' ).pick > picker.get( 'now' ).pick ) {\n        deepEqual( picker.get( 'highlight' ), picker.get( 'min' ), '`highlight` updated' )\n        deepEqual( picker.get( 'view' ), picker.get( 'min' ), '`view` updated' )\n    }\n    else {\n        deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), '`highlight` unaffected' )\n        deepEqual( picker.get( 'view' ), picker.get( 'highlight' ), '`view` updated' )\n    }\n    deepEqual( picker.get( 'max' ).pick, 1410, '`max` unaffected' )\n})\n\ntest( '`min` using JS dates', function() {\n\n    var picker = this.picker\n\n    // Using JavaScript date objects\n    var dateObject = new Date()\n    dateObject.setHours(4,30)\n    picker.set( 'min', dateObject )\n    strictEqual( picker.get( 'min' ).pick, 270, '`min` using a JS date: ' + picker.get( 'min', 'HH:i' ) )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    if ( picker.get( 'min' ).pick > picker.get( 'now' ).pick ) {\n        deepEqual( picker.get( 'highlight' ), picker.get( 'min' ), '`highlight` updated' )\n        deepEqual( picker.get( 'view' ), picker.get( 'min' ), '`view` updated' )\n    }\n    else {\n        deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), '`highlight` unaffected' )\n        deepEqual( picker.get( 'view' ), picker.get( 'highlight' ), '`view` updated' )\n    }\n    deepEqual( picker.get( 'max' ).pick, 1410, '`max` updated' )\n})\n\ntest( '`min` using strings', function() {\n\n    var picker = this.picker\n\n    var min = picker.get('min')\n    strictEqual( min.pick, 0, 'No `min` time' )\n\n    picker.set( 'min', '3:30 PM' )\n\n    min = picker.get('min')\n    deepEqual( [min.hour, min.mins], [15, 30], '`min` updated' )\n})\n\ntest( '`max` using integers', function() {\n\n    var picker = this.picker,\n        interval = 30\n\n    // Using positive numbers\n    picker.set( 'max', 3 )\n    strictEqual( picker.get( 'max' ).pick, (picker.get( 'now' ).pick + ( interval * 3 )) % 1440, '`max` using a positive number: ' + picker.get( 'max', 'HH:i' ) )\n\n    strictEqual( picker.get( 'min' ).pick, 0, '`min` unaffected' )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n\n    if ( picker.get( 'max' ).pick < picker.get( 'now' ).pick ) {\n        deepEqual( picker.get( 'highlight' ), picker.get( 'max' ), '`highlight` updated' )\n        deepEqual( picker.get( 'view' ), picker.get( 'max' ), '`view` updated' )\n    }\n    else {\n        deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), '`highlight` unaffected' )\n        deepEqual( picker.get( 'view' ), picker.get( 'now' ), '`view` unaffected' )\n    }\n\n\n    var previousHighlight = picker.get( 'highlight' )\n\n    // Using negative numbers\n    picker.set( 'max', -3 )\n\n    var maxPickTime = picker.get( 'now' ).pick + ( interval * -3 )\n    // If it's less than `min` time, add a day.\n    maxPickTime += maxPickTime < 0 ? 1440 : 0\n    strictEqual( picker.get( 'max' ).pick, maxPickTime, '`max` using a negative number: ' + picker.get( 'max', 'HH:i' ) )\n\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    strictEqual( picker.get( 'min' ).pick, 0, '`min` unaffected' )\n    if ( picker.get( 'highlight' ).pick === maxPickTime ) {\n        deepEqual( picker.get( 'highlight' ), picker.get( 'max' ), '`highlight` updated' )\n        deepEqual( picker.get( 'view' ), picker.get( 'max' ), '`view` updated' )\n    }\n    else {\n        deepEqual( picker.get( 'highlight' ), previousHighlight, '`highlight` unaffected' )\n        deepEqual( picker.get( 'view' ), previousHighlight, '`view` unaffected' )\n    }\n})\n\ntest( '`max` using booleans', function() {\n\n    var picker = this.picker\n\n    // Boolean true\n    picker.set( 'max', true )\n    deepEqual( picker.get( 'max' ), picker.get( 'now' ), '`max` using `true`: ' + picker.get( 'max', 'HH:i' ) )\n    strictEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    strictEqual( picker.get( 'highlight' ).pick, picker.get( 'now' ).pick, '`highlight` unaffected' )\n    deepEqual( picker.get( 'view' ), picker.get( 'highlight' ), '`view` unaffected' )\n    strictEqual( picker.get( 'min' ).pick, 0, '`min` unaffected' )\n\n    // Boolean false\n    picker.set( 'max', false )\n    deepEqual( picker.get( 'max' ).pick, 1410, '`max` using `false`: ' + picker.get( 'max', 'HH:i' ) )\n    strictEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    strictEqual( picker.get( 'highlight' ).pick, picker.get( 'now' ).pick, '`highlight` unaffected' )\n    deepEqual( picker.get( 'view' ), picker.get( 'highlight' ), '`view` unaffected' )\n    strictEqual( picker.get( 'min' ).pick, 0, '`min` unaffected' )\n})\n\ntest( '`max` using arrays', function() {\n\n    var picker = this.picker\n\n    // Using arrays\n    picker.set( 'max', [14,30] )\n    strictEqual( picker.get( 'max' ).pick, 870, '`max` using an array: ' + picker.get( 'max', 'HH:i' ) )\n    strictEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    if ( picker.get( 'max' ).pick < picker.get( 'now' ).pick ) {\n        deepEqual( picker.get( 'highlight' ), picker.get( 'max' ), '`highlight` updated' )\n        deepEqual( picker.get( 'view' ), picker.get( 'highlight' ), '`view` updated' )\n    }\n    else {\n        deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), '`highlight` unaffected' )\n        deepEqual( picker.get( 'view' ), picker.get( 'highlight' ), '`view` unaffected' )\n    }\n    strictEqual( picker.get( 'min' ).pick, 0, '`min` unaffected' )\n})\n\ntest( '`max` using JS dates', function() {\n\n    var picker = this.picker\n\n    // Using JavaScript date objects\n    var dateObject = new Date()\n    dateObject.setHours(16,20)\n    picker.set( 'max', dateObject )\n    strictEqual( picker.get( 'max' ).pick, 960, '`max` using a JS date: ' + picker.get( 'max', 'HH:i' ) )\n    deepEqual( picker.get( 'select' ), null, '`select` unaffected' )\n    if ( picker.get( 'max' ).pick < picker.get( 'now' ).pick ) {\n        deepEqual( picker.get( 'highlight' ), picker.get( 'max' ), '`highlight` updated' )\n        deepEqual( picker.get( 'view' ), picker.get( 'highlight' ), '`view` updated' )\n    }\n    else {\n        deepEqual( picker.get( 'highlight' ), picker.get( 'now' ), '`highlight` unaffected' )\n        deepEqual( picker.get( 'view' ), picker.get( 'highlight' ), '`view` unaffected' )\n    }\n    deepEqual( picker.get( 'min' ).pick, 0, '`min` unaffected' )\n})\n\ntest( '`max` using strings', function() {\n\n    var picker = this.picker\n\n    var max = picker.get('max')\n    strictEqual( max.pick, 1410, 'No `max` time' )\n\n    picker.set( 'max', '3:30 PM' )\n\n    max = picker.get('max')\n    deepEqual( [max.hour, max.mins], [15, 30], '`max` updated' )\n})\n\ntest( '`disable` and `enable` using integers', function() {\n\n    var disableCollection = [1,4,7],\n        picker = this.picker,\n        $root = picker.$root\n\n    picker.set( 'disable', disableCollection )\n\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled times added' )\n\n    $root.find( '[data-pick]' ).each( function() {\n        var $this = $( this ),\n            hour = ~~( $this.data('pick')/60 )\n        if ( disableCollection.indexOf( hour ) > -1 ) {\n            ok( $this.hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Disabled time: ' + $this.html() )\n        }\n        else {\n            ok( !$this.hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Enabled time: ' + $this.html() )\n        }\n    })\n\n    picker.set( 'enable', [1] )\n    deepEqual( picker.get( 'disable' ), [4,7], 'Disabled time removed' )\n\n    $root.find( '[data-pick]' ).each( function() {\n        var $this = $( this ),\n            hour = ~~( $this.data('pick')/60 )\n        if ( [4,7].indexOf( hour ) > -1 ) {\n            ok( $this.hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Disabled time: ' + $this.html() )\n        }\n        else {\n            ok( !$this.hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Enabled time: ' + $this.html() )\n        }\n    })\n\n    picker.set( 'enable', 'flip' )\n    deepEqual( picker.get( 'disable' ), [4,7], 'Disabled collection `enable` flipped' )\n\n    $root.find( '[data-pick]' ).each( function() {\n        var $this = $( this ),\n            hour = ~~( $this.data('pick')/60 )\n        if ( [4,7].indexOf( hour ) < 0 ) {\n            ok( $this.hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Disabled time: ' + $this.html() )\n        }\n        else {\n            ok( !$this.hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Enabled time: ' + $this.html() )\n        }\n    })\n\n    picker.set( 'disable', 'flip' )\n    deepEqual( picker.get( 'disable' ), [4,7], 'Disabled collection `disable` flipped' )\n\n    $root.find( '[data-pick]' ).each( function() {\n        var $this = $( this ),\n            hour = ~~( $this.data('pick')/60 )\n        if ( [4,7].indexOf( hour ) > -1 ) {\n            ok( $this.hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Disabled time: ' + $this.html() )\n        }\n        else {\n            ok( !$this.hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Enabled time: ' + $this.html() )\n        }\n    })\n})\n\ntest( '`disable` and `enable` using arrays', function() {\n\n    var picker = this.picker,\n        $root = picker.$root,\n        disableCollection = [ [1,0],[18,0],[23,30],[4,30] ]\n\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled times added' )\n\n    $root.find( '.' + $.fn.pickatime.defaults.klass.listItem ).each( function( index, item ) {\n        if ( index === 2 || index === 9 || index === 36 || index === 47 ) {\n            ok( $( item ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is disabled: ' + item.innerHTML )\n        }\n        else {\n            ok( !$( item ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is enabled: ' + item.innerHTML )\n        }\n    })\n\n    disableCollection.pop()\n    picker.set( 'enable', [ [4,30] ] )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled time removed' )\n\n    $root.find( '.' + $.fn.pickatime.defaults.klass.listItem ).each( function( index, item ) {\n        if ( index === 2 || index === 36 || index === 47 ) {\n            ok( $( item ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is disabled: ' + item.innerHTML )\n        }\n        else {\n            ok( !$( item ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is enabled: ' + item.innerHTML )\n        }\n    })\n\n    picker.set( 'enable', 'flip' )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled collection `enable` flipped' )\n    deepEqual( picker.get( 'enable' ), -1, 'Base state disabled' )\n\n    $root.find( '[data-pick]' ).each( function( index, item ) {\n        if ( index !== 2 && index !== 36 && index !== 47 ) {\n            ok( $( item ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is disabled: ' + item.innerHTML )\n        }\n        else {\n            ok( !$( item ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is enabled: ' + item.innerHTML )\n        }\n    })\n\n    picker.set( 'disable', 'flip' )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled collection `disable` flipped' )\n    deepEqual( picker.get( 'enable' ), 1, 'Base state enabled' )\n\n    $root.find( '[data-pick]' ).each( function( index, item ) {\n        if ( index === 2 || index === 36 || index === 47 ) {\n            ok( $( item ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is disabled: ' + item.innerHTML )\n        }\n        else {\n            ok( !$( item ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is enabled: ' + item.innerHTML )\n        }\n    })\n\n\n    picker.set( 'disable', [1] )\n    var disabledTimeArray = [ 1, 30 ]\n    picker.set( 'enable', [ disabledTimeArray ] )\n    disabledTimeArray.push( 'inverted' )\n    disableCollection = disableCollection.concat([ 1, disabledTimeArray ])\n    deepEqual( picker.get('disable'), disableCollection, 'Disabled collection with specified time inverted' )\n})\n\ntest( '`disable` and `enable` using JS times', function() {\n\n    var disableCollection = [ new Date(2014,2,2,1), new Date(2014,2,2,17,30), new Date(2014,2,2,3) ],\n        picker = this.picker,\n        $root = picker.$root\n\n\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled times added' )\n\n    $root.find( '.' + $.fn.pickatime.defaults.klass.listItem ).each( function( index, item ) {\n        if ( index === 2 || index === 6 || index === 35 ) {\n            ok( $( item ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is disabled: ' + item.innerHTML )\n        }\n        else {\n            ok( !$( item ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is enabled: ' + item.innerHTML )\n        }\n    })\n\n\n    picker.set( 'enable', [ new Date(2014,2,2,17,30) ] )\n    deepEqual( picker.get( 'disable' ), [ new Date(2014,2,2,1), new Date(2014,2,2,3) ], 'Disabled time removed' )\n\n    $root.find( '.' + $.fn.pickatime.defaults.klass.listItem ).each( function( index, item ) {\n        if ( index === 2 || index === 6 ) {\n            ok( $( item ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is disabled: ' + item.innerHTML )\n        }\n        else {\n            ok( !$( item ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is enabled: ' + item.innerHTML )\n        }\n    })\n\n\n    picker.set( 'enable', 'flip' )\n    deepEqual( picker.get( 'disable' ), [ new Date(2014,2,2,1), new Date(2014,2,2,3) ], 'Disabled collection `enable` flipped' )\n\n    $root.find( '[data-pick]' ).each( function( index, item ) {\n        if ( index !== 2 && index !== 6 ) {\n            ok( $( item ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is disabled: ' + item.innerHTML )\n        }\n        else {\n            ok( !$( item ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is enabled: ' + item.innerHTML )\n        }\n    })\n\n\n    picker.set( 'disable', 'flip' )\n    deepEqual( picker.get( 'disable' ), [ new Date(2014,2,2,1), new Date(2014,2,2,3) ], 'Disabled collection `disable` flipped' )\n\n    $root.find( '[data-pick]' ).each( function( index, item ) {\n        if ( index === 2 || index === 6 ) {\n            ok( $( item ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is disabled: ' + item.innerHTML )\n        }\n        else {\n            ok( !$( item ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is enabled: ' + item.innerHTML )\n        }\n    })\n})\n\ntest( '`disable` and `enable` using booleans', function() {\n\n    var picker = this.picker,\n        $root = picker.$root,\n        disableCollection = [ [1,0],[4,30],[18,0],[23,30] ]\n\n\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled times added to collection' )\n\n    picker.set('disable', false)\n    deepEqual( picker.get('disable'), [], 'Disabled collection reset' )\n    strictEqual( $root.find( '.' + $.fn.pickatime.defaults.klass.disabled ).length, 0, 'No times disabled' )\n\n\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled times added to collection' )\n\n    picker.set('disable', true)\n    deepEqual( picker.get('disable'), [], 'Disabled collection reset' )\n    deepEqual( picker.get('enable'), -1, 'Disabled collection `enable` flipped' )\n    strictEqual( $root.find( '.' + $.fn.pickatime.defaults.klass.disabled ).length, 48, 'All times disabled' )\n\n\n    picker.set( 'enable', 'flip' )\n    deepEqual( picker.get('enable'), 1, 'Disabled collection `enable` flipped' )\n\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get('disable'), disableCollection, 'Disabled times added to collection' )\n\n\n    picker.set('enable', true)\n    deepEqual( picker.get('disable'), [], 'Disabled collection reset' )\n    strictEqual( $root.find( '.' + $.fn.pickatime.defaults.klass.disabled ).length, 0, 'No times disabled' )\n\n\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get('disable'), disableCollection, 'Disabled times added to collection' )\n\n\n    picker.set('enable', false)\n    deepEqual( picker.get('disable'), [], 'Disabled collection reset' )\n    deepEqual( picker.get('enable'), -1, 'Disabled collection `enable` flipped' )\n    strictEqual( $root.find( '.' + $.fn.pickatime.defaults.klass.disabled ).length, 48, 'All times disabled' )\n})\n\ntest( '`disable` and `enable` using ranges', function() {\n\n    var picker = this.picker,\n        $root = picker.$root,\n        disableCollection\n\n    disableCollection = [ { from: [2,0], to: [14,30] } ]\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled range' )\n\n    $root.find( '[data-pick]' ).each( function( indexCell, tableCell ) {\n        if ( indexCell >= 4 && indexCell <= 29 ) {\n            ok( $( tableCell ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is disabled: ' + tableCell.innerHTML )\n        }\n        else {\n            ok( !$( tableCell ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is enabled: ' + tableCell.innerHTML )\n        }\n    })\n\n    picker.set( 'enable', disableCollection )\n    deepEqual( picker.get( 'disable' ), [], 'Cleared disabled range' )\n    strictEqual( $root.find( '.' + $.fn.pickatime.defaults.klass.disabled ).length, 0, 'No times disabled' )\n\n\n    disableCollection = [ { from: new Date(2014,2,7,5,30), to: new Date(2014,2,7,19) } ]\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled range updated' )\n\n    $root.find( '[data-pick]' ).each( function( indexCell, tableCell ) {\n        if ( indexCell >= 11 && indexCell <= 38 ) {\n            ok( $( tableCell ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is disabled: ' + tableCell.innerHTML )\n        }\n        else {\n            ok( !$( tableCell ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is enabled: ' + tableCell.innerHTML )\n        }\n    })\n\n    picker.set( 'enable', disableCollection )\n    deepEqual( picker.get( 'disable' ), [], 'Cleared disabled range' )\n    strictEqual( $root.find( '.' + $.fn.pickatime.defaults.klass.disabled ).length, 0, 'No times disabled' )\n})\n\ntest( '`disable` and `enable` using relative ranges', function() {\n\n    var picker = this.picker,\n        $root = picker.$root,\n        now = picker.get( 'now' ),\n        interval = picker.get( 'interval' ),\n        backTime = [ now.hour, now.mins - (10*interval) ],\n        forwardTime = [ now.hour, now.mins + (10*interval) ],\n        disableCollection\n\n    disableCollection = [ { from: true, to: forwardTime } ]\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled range relative to now with date object' )\n\n    picker.set( 'enable', disableCollection )\n    deepEqual( picker.get( 'disable' ), [], 'Cleared disabled range' )\n    strictEqual( $root.find( '.' + $.fn.pickatime.defaults.klass.disabled ).length, 0, 'No times disabled' )\n\n    disableCollection = [ { from: backTime, to: true } ]\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled range relative to now with array' )\n\n    picker.set( 'enable', disableCollection )\n    deepEqual( picker.get( 'disable' ), [], 'Cleared disabled range' )\n    strictEqual( $root.find( '.' + $.fn.pickatime.defaults.klass.disabled ).length, 0, 'No times disabled' )\n\n    disableCollection = [ { from: true, to: 10 } ]\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled range relative to now with positive integer' )\n\n    picker.set( 'enable', disableCollection )\n    deepEqual( picker.get( 'disable' ), [], 'Cleared disabled range' )\n    strictEqual( $root.find( '.' + $.fn.pickatime.defaults.klass.disabled ).length, 0, 'No times disabled' )\n\n    disableCollection = [ { from: -10, to: true } ]\n    picker.set( 'disable', disableCollection )\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Disabled range relative to now with negative integer' )\n})\n\ntest( '`disable` and `enable` using overlapping ranges', function() {\n\n    var picker = this.picker,\n        $root = picker.$root\n\n    picker.set( 'disable', [\n        { from: [2,0], to: [10,30] }\n    ])\n    picker.set( 'enable', [\n        { from: [5,30], to: [7,30] }\n    ])\n\n    disableCollection = [\n        { from: [2,0], to: [10,30] },\n        { from: [5,30], to: [7,30], inverted: true }\n    ]\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Inverted range within disabled range' )\n\n    $root.find( '[data-pick]' ).each( function( indexCell, tableCell ) {\n        if ( indexCell >= 4 && indexCell < 11 || indexCell > 15 && indexCell <= 21 ) {\n            ok( $( tableCell ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is disabled: ' + tableCell.innerHTML )\n        }\n        else {\n            ok( !$( tableCell ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is enabled: ' + tableCell.innerHTML )\n        }\n    })\n\n    picker.set( 'disable', false )\n    picker.set( 'disable', [\n        { from: [2,0], to: [10,30] }\n    ])\n    picker.set( 'enable', [\n        { from: [0,30], to: [7,30] }\n    ])\n\n    disableCollection = [\n        { from: [2,0], to: [10,30] },\n        { from: [0,30], to: [7,30], inverted: true }\n    ]\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Inverted range before and within disabled range' )\n\n    $root.find( '[data-pick]' ).each( function( indexCell, tableCell ) {\n        if ( indexCell > 15 && indexCell <= 21 ) {\n            ok( $( tableCell ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is disabled: ' + tableCell.innerHTML )\n        }\n        else {\n            ok( !$( tableCell ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is enabled: ' + tableCell.innerHTML )\n        }\n    })\n\n    picker.set( 'disable', false )\n    picker.set( 'disable', [\n        { from: [2,0], to: [10,30] }\n    ])\n    picker.set( 'enable', [\n        { from: [7,30], to: [14,0] }\n    ])\n\n    disableCollection = [\n        { from: [2,0], to: [10,30] },\n        { from: [7,30], to: [14,0], inverted: true }\n    ]\n    deepEqual( picker.get( 'disable' ), disableCollection, 'Inverted range after and within disabled range' )\n\n    $root.find( '[data-pick]' ).each( function( indexCell, tableCell ) {\n        if ( indexCell >= 4 && indexCell < 15 ) {\n            ok( $( tableCell ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is disabled: ' + tableCell.innerHTML )\n        }\n        else {\n            ok( !$( tableCell ).hasClass( $.fn.pickatime.defaults.klass.disabled ), 'Time is enabled: ' + tableCell.innerHTML )\n        }\n    })\n})\n\ntest( '`disable` and `enable` repeatedly', function() {\n\n    var now = new Date(2014,3,20,4,30),\n        picker = this.picker,\n        disabledCollection = [\n            [14,0],\n            [16,30],\n            new Date(2014,3,20,22),\n            1,\n            { from: [3,0], to: [7,30] },\n            { from: [6,0], to: [11,30] }\n        ],\n        collectionToEnable\n\n    picker.set( 'disable', disabledCollection )\n    picker.set( 'disable', disabledCollection )\n    deepEqual( picker.get( 'disable' ), disabledCollection, 'Collection without duplicates' )\n\n    collectionToEnable = [\n        [16,30],\n        [22,0],\n        now,\n        [1,30],\n        { from: [6,0], to: [11,30] }\n    ]\n    picker.set( 'enable', collectionToEnable )\n    disabledCollection = [\n        [14,0],\n        1,\n        { from: [3,0], to: [7,30] },\n        [1,30,'inverted'],\n        { from: [6,0], to: [11,30], inverted: true }\n    ]\n    deepEqual( picker.get( 'disable' ), disabledCollection, 'Collection enabled various values' )\n\n    picker.set( 'enable', collectionToEnable )\n    deepEqual( picker.get( 'disable' ), disabledCollection, 'Collection without duplicates' )\n\n    collectionToEnable = disabledCollection\n    picker.set( 'enable', collectionToEnable )\n    deepEqual( picker.get( 'disable' ), [], 'Collection cleared - including inverted range overlaps' )\n\n    picker.set( 'enable', collectionToEnable )\n    deepEqual( picker.get( 'disable' ), [], 'Collection kept clear' )\n})\n\n\n\n\nmodule( 'Time picker `set` beyond limits', {\n    setup: function() {\n        $DOM.append( $INPUT.clone() )\n        var $input = $DOM.find( 'input' ).val( '5:30 a.m.' ).pickatime({\n            min: [2,30],\n            max: [17,0]\n        })\n        this.picker = $input.pickatime( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( '`select`', function() {\n\n    var picker = this.picker\n\n    picker.set( 'select', [1,0] )\n    deepEqual( picker.get( 'select' ), picker.get( 'min' ), 'Able to not `select` beyond lower limit' )\n\n    picker.set( 'select', [19,0] )\n    deepEqual( picker.get( 'select' ), picker.get( 'max' ), 'Able to not `select` beyond upper limit' )\n})\n\ntest( '`highlight`', function() {\n\n    var picker = this.picker\n\n    picker.set( 'highlight', [1,0] )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'min' ), 'Able to not `highlight` beyond lower limit' )\n\n    picker.set( 'highlight', [19,0] )\n    deepEqual( picker.get( 'highlight' ), picker.get( 'max' ), 'Able to not `highlight` beyond upper limit' )\n})\n\ntest( '`view`', function() {\n\n    var picker = this.picker\n\n    picker.set( 'view', [1,0] )\n    deepEqual( picker.get( 'view' ), picker.get( 'min' ), 'Able to not `view` beyond lower limit' )\n\n    picker.set( 'view', [19,0] )\n    deepEqual( picker.get( 'view' ), picker.get( 'max' ), 'Able to not `view` beyond upper limit' )\n})\n\n\n\n\nmodule( 'Time picker `set` outsite interval scope', {\n    setup: function() {\n        $DOM.append( $INPUT.clone() )\n        var $input = $DOM.find( 'input' ).pickatime()\n        this.picker = $input.pickatime( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( '`select`', function() {\n\n    var picker = this.picker\n\n    picker.set( 'select', [1,10] )\n    var selected = picker.get('select')\n    deepEqual( [selected.hour, selected.mins], [1,30], 'Scoped `select` into interval range' )\n\n    picker.set( 'select', [19,49] )\n    selected = picker.get('select')\n    deepEqual( [selected.hour, selected.mins], [20,0], 'Scoped `select` into interval range' )\n})\n\ntest( '`highlight`', function() {\n\n    var picker = this.picker\n\n    picker.set( 'highlight', [1,10] )\n    var highlighted = picker.get('highlight')\n    deepEqual( [highlighted.hour, highlighted.mins], [1,30], 'Scoped `highlight` into interval range' )\n\n    picker.set( 'highlight', [19,49] )\n    highlighted = picker.get('highlight')\n    deepEqual( [highlighted.hour, highlighted.mins], [20,0], 'Scoped `highlight` into interval range' )\n})\n\ntest( '`view`', function() {\n\n    var picker = this.picker\n\n    picker.set( 'view', [1,10] )\n    var viewset = picker.get('view')\n    deepEqual( [viewset.hour, viewset.mins], [1,30], 'Scoped `view` into interval range' )\n\n    picker.set( 'view', [19,49] )\n    viewset = picker.get('view')\n    deepEqual( [viewset.hour, viewset.mins], [20,0], 'Scoped `view` into interval range' )\n})\n\n\n\n\nmodule( 'Time picker mouse events', {\n    setup: function() {\n        $DOM.append( $INPUT.clone() )\n        var $input = $DOM.find( 'input' ).pickatime()\n        this.picker = $input.pickatime( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( 'Select', function() {\n\n    var picker = this.picker,\n        $root = picker.$root,\n        interval = picker.get( 'interval' )\n\n    for ( var i = 0; i < 48; i += 1 ) {\n        $root.find( '.' + $.fn.pickatime.defaults.klass.listItem ).eq( i ).click()\n        strictEqual( picker.get( 'select' ).pick, i * interval, 'Selected ' + picker.get( 'select', 'h:i A' ) )\n        strictEqual( picker.get( 'value' ), picker.get( 'select', 'h:i A' ), 'Input value updated to ' + picker.get( 'value' ) )\n    }\n})\n\ntest( 'Clear', function() {\n\n    var picker = this.picker\n\n    picker.set( 'select', [2,0] )\n    strictEqual( picker.get( 'value' ), picker.get( 'select', $.fn.pickatime.defaults.format ), 'Value updated' )\n\n    picker.open()\n    picker.$root.find( '.' + $.fn.pickatime.defaults.klass.buttonClear ).click()\n    strictEqual( picker.get( 'value' ), '', 'Value cleared' )\n})\n\n\n\n\nmodule( 'Time picker keyboard events', {\n    setup: function() {\n        $DOM.append( $INPUT.clone() )\n        var $input = $DOM.find( 'input' ).pickatime()\n        this.picker = $input.pickatime( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( 'Select', function() {\n\n    var picker = this.picker,\n        $input = picker.$holder\n\n    for ( var i = 0; i < 48; i += 1 ) {\n\n        // Open the picker.\n        picker.open()\n\n        // Set the highlight.\n        picker.set( 'highlight', i * 30 )\n\n        // Keydown to select the highlighted item.\n        $input.trigger({ type: 'keydown', keyCode: 13 })\n\n        // Check if the select is the same as the highlight.\n        deepEqual( picker.get( 'select' ), picker.get( 'highlight' ), 'Select updated to: ' + picker.get( 'select', 'HH:i' ) )\n    }\n})\n\ntest( 'Highlight', function() {\n\n    var picker = this.picker,\n        $input = picker.$holder\n\n    // Open the picker\n    picker.open()\n\n    // Set the highlight to the start.\n    picker.set('highlight', 0)\n\n    // Down\n    for ( var i = 1; i < 48; i += 1 ) {\n        $input.trigger({ type: 'keydown', keyCode: 40 })\n        strictEqual( picker.get( 'highlight' ).pick, 30 * i, 'Key “down” to `highlight`: ' + picker.get( 'highlight', 'h:i A' ) )\n        deepEqual( picker.get( 'view' ), picker.get( 'highlight' ), 'Updated `view`' )\n    }\n\n    // Up\n    for ( var j = 2; j < 49; j += 1 ) {\n        $input.trigger({ type: 'keydown', keyCode: 38 })\n        strictEqual( picker.get( 'highlight' ).pick, 1440 - 30 * j, 'Key “up” to `highlight`: ' + picker.get( 'highlight', 'h:i A' ) )\n        deepEqual( picker.get( 'view' ), picker.get( 'highlight' ), 'Updated `view`' )\n    }\n\n    // Right\n    for ( var k = 1; k < 48; k += 1 ) {\n        $input.trigger({ type: 'keydown', keyCode: 39 })\n        strictEqual( picker.get( 'highlight' ).pick, 30 * k, 'Key “right” to `highlight`: ' + picker.get( 'highlight', 'h:i A' ) )\n        deepEqual( picker.get( 'view' ), picker.get( 'highlight' ), 'Updated `view`' )\n    }\n\n    // Left\n    for ( var l = 2; l < 49; l += 1 ) {\n        $input.trigger({ type: 'keydown', keyCode: 37 })\n        strictEqual( picker.get( 'highlight' ).pick, 1440 - 30 * l, 'Key “up” to `highlight`: ' + picker.get( 'highlight', 'h:i A' ) )\n        deepEqual( picker.get( 'view' ), picker.get( 'highlight' ), 'Updated `view`' )\n    }\n})\n\n\n\n\nmodule( 'Time picker with a visible value', {\n    setup: function() {\n        $DOM.append( $INPUT.clone().val( '2:00 p.m.' ) )\n        var $input = $DOM.find( 'input' ).pickatime()\n        this.picker = $input.pickatime( 'picker' )\n    },\n    teardown: function() {\n        this.picker.stop()\n        $DOM.empty()\n    }\n})\n\ntest( '`value` to select, highlight, and view', function() {\n    var picker = this.picker\n    ok( !picker._hidden, 'No hidden input' )\n    strictEqual( picker.get( 'select' ).pick, 840, 'Selects time' )\n    strictEqual( picker.get( 'highlight' ).pick, 840, 'Highlights time' )\n    strictEqual( picker.get( 'view' ).pick, 840, 'Viewsets time' )\n})\n\n\n\n\nmodule( 'Time picker with a hidden value', {\n    teardown: function() {\n        $DOM.empty()\n    }\n})\n\ntest( '`value` to select, highlight, and view', function() {\n\n    $DOM.append( $INPUT.clone().val( '2:00 p.m.' ) )\n    var $input = $DOM.find( 'input' ).pickatime({\n        formatSubmit: 'HH:i'\n    })\n    var picker = $input.pickatime( 'picker' )\n\n    ok( picker._hidden, 'Has hidden input' )\n    strictEqual( picker._hidden.value, '14:00', 'Hidden input value' )\n    strictEqual( picker.get( 'select' ).pick, 840, 'Selects time' )\n    strictEqual( picker.get( 'highlight' ).pick, 840, 'Highlights time' )\n    strictEqual( picker.get( 'view' ).pick, 840, 'Viewsets time' )\n})\n\ntest( '`data-value` to select, highlight, and view', function() {\n\n    $DOM.append( $INPUT.clone().data( 'value', '14:00' ) )\n    var $input = $DOM.find( 'input' ).pickatime({\n        formatSubmit: 'HH:i'\n    })\n    var picker = $input.pickatime( 'picker' )\n\n    ok( picker._hidden, 'Has hidden input' )\n    strictEqual( picker._hidden.value, '14:00', 'Hidden input value' )\n    strictEqual( picker.get( 'select' ).pick, 840, 'Selects time' )\n    strictEqual( picker.get( 'highlight' ).pick, 840, 'Highlights time' )\n    strictEqual( picker.get( 'view' ).pick, 840, 'Viewsets time' )\n})\n\n\n\n"
  },
  {
    "path": "version-bump.js",
    "content": "/*jshint node: true*/\n\nvar program = require('commander')\nvar semver = require('semver')\nvar grunt = require('grunt')\nvar glob = require('glob').sync\n\n\nprogram\n  .option('-p, --patch', 'set the version as the next patch')\n  .option('-m, --minor', 'set the version as the next minor')\n  .option('-M, --major', 'set the version as the next major')\n  .parse(process.argv)\n\n\nif (program.patch) {\n  bumpVersion('patch')\n  return\n}\n\nif (program.minor) {\n  bumpVersion('minor')\n  return\n}\n\nif (program.major) {\n  bumpVersion('major')\n  return\n}\n\ngrunt.fail.fatal('No release type specified')\nreturn\n\n\nfunction bumpVersion(release) {\n  grunt.log.writeln('Bumping package version by a ' + release)\n  var version = readPackageVersion()\n  grunt.log.writeln('Current package version: ' + version)\n  version = semver.inc(version, release)\n  grunt.log.writeln('Updated package version: ' + version)\n  writePackageVersion(version)\n  grunt.log.writeln('Done updating the package version')\n  updateLibraryFiles(version)\n  grunt.log.writeln('Done updating the library files')\n}\n\n\nfunction readPackageVersion() {\n  var pkg = require('./package')\n  return pkg.version\n}\n\n\nfunction writePackageVersion(version) {\n  var pkg = require('./package')\n  pkg.version = version\n  grunt.file.write('./package.json', JSON.stringify(pkg, null, '  '))\n}\n\n\nfunction updateLibraryFiles(version) {\n\n  var versionRegex = /^(\\s*\\/\\*![^\\/]+?v)(\\d+\\.\\d+\\.\\d+)(([^\\n]+?)(\\d+\\/\\d+\\/\\d+))?/\n  var today = grunt.template.today('yyyy/mm/dd')\n  var files = glob('lib/*.js')\n\n  files.forEach(updateLibraryFile)\n\n  function updateLibraryFile(filePath) {\n    var content = grunt.file.read(filePath)\n    if (versionRegex.test(content)) {\n      content = content.split(versionRegex)\n      content = content[1] + version + (content[4] || '') + (content[5] ? today : '') + (content[6] || '')\n    }\n    grunt.file.write(filePath, content)\n  }\n\n}"
  },
  {
    "path": "version-commit.js",
    "content": "/*jshint node: true*/\n\nvar grunt = require('grunt')\nvar exec = require('shelljs').exec\n\nvar pkg = require('./package')\n\n\nvar isSuccessful = commitAndTag(pkg.version)\nif (!isSuccessful) {\n  grunt.fail.fatal('Unable to commit and tag version')\n}\n\nreturn\n\n\nfunction commitAndTag(version) {\n  var code = exec([\n    'git add .',\n    'git commit -m \"Release v' + version + '\"',\n    'git tag ' + version,\n  ].join(' && ')).code\n  return !code\n}"
  }
]