Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
{"version":3,"file":"datepicker.min.js","sources":["../src/datepicker.js"],"sourcesContent":["/*!\n * Datepicker2 for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker2)\n *\n * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)\n */\n\n(function(factory){\n    if (typeof define === 'function' && define.amd) {\n        define(['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        factory(require('jquery'));\n    } else {\n        factory(jQuery);\n    }\n}(function($, undefined){\n    function UTCDate(){\n        return new Date(Date.UTC.apply(Date, arguments));\n    }\n    function UTCToday(){\n        var today = new Date();\n        return UTCDate(today.getFullYear(), today.getMonth(), today.getDate());\n    }\n    function isUTCEquals(date1, date2) {\n        return (\n            date1.getUTCFullYear() === date2.getUTCFullYear() &&\n            date1.getUTCMonth() === date2.getUTCMonth() &&\n            date1.getUTCDate() === date2.getUTCDate()\n        );\n    }\n    function alias(method, deprecationMsg){\n        return function(){\n            if (deprecationMsg !== undefined) {\n                $.fn.datepicker2.deprecated(deprecationMsg);\n            }\n\n            return this[method].apply(this, arguments);\n        };\n    }\n    function isValidDate(d) {\n        return d && !isNaN(d.getTime());\n    }\n\n    var DateArray = (function(){\n        var extras = {\n            get: function(i){\n                return this.slice(i)[0];\n            },\n            contains: function(d){\n                // Array.indexOf is not cross-browser;\n                // $.inArray doesn't work with Dates\n                var val = d && d.valueOf();\n                for (var i=0, l=this.length; i < l; i++)\n                    // Use date arithmetic to allow dates with different times to match\n                    if (0 <= this[i].valueOf() - val && this[i].valueOf() - val < 1000*60*60*24)\n                        return i;\n                return -1;\n            },\n            remove: function(i){\n                this.splice(i,1);\n            },\n            replace: function(new_array){\n                if (!new_array)\n                    return;\n                if (!$.isArray(new_array))\n                    new_array = [new_array];\n                this.clear();\n                this.push.apply(this, new_array);\n            },\n            clear: function(){\n                this.length = 0;\n            },\n            copy: function(){\n                var a = new DateArray();\n                a.replace(this);\n                return a;\n            }\n        };\n\n        return function(){\n            var a = [];\n            a.push.apply(a, arguments);\n            $.extend(a, extras);\n            return a;\n        };\n    })();\n\n\n    // Picker object\n\n    var Datepicker2 = function(element, options){\n        $.data(element, 'datepicker2', this);\n\n        this._events = [];\n        this._secondaryEvents = [];\n\n        this._process_options(options);\n\n        this.dates = new DateArray();\n        this.viewDate = this.o.defaultViewDate;\n        this.focusDate = null;\n\n        this.element = $(element);\n        this.isInput = this.element.is('input');\n        this.inputField = this.isInput ? this.element : this.element.find('input');\n        this.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .input-group-append, .input-group-prepend, .btn') : false;\n        if (this.component && this.component.length === 0)\n            this.component = false;\n        this.isInline = !this.component && this.element.is('div');\n\n        this.picker = $(DPGlobal.template);\n\n        // Checking templates and inserting\n        if (this._check_template(this.o.templates.leftArrow)) {\n            this.picker.find('.prev').html(this.o.templates.leftArrow);\n        }\n\n        if (this._check_template(this.o.templates.rightArrow)) {\n            this.picker.find('.next').html(this.o.templates.rightArrow);\n        }\n\n        this._buildEvents();\n        this._attachEvents();\n\n        if (this.isInline){\n            this.picker.addClass('datepicker2-inline').appendTo(this.element);\n        }\n        else {\n            this.picker.addClass('datepicker2-dropdown dropdown-menu');\n        }\n\n        if (this.o.rtl){\n            this.picker.addClass('datepicker2-rtl');\n        }\n\n        if (this.o.calendarWeeks) {\n            this.picker.find('.datepicker2-days .datepicker2-switch, thead .datepicker2-title, tfoot .today, tfoot .clear')\n                .attr('colspan', function(i, val){\n                    return Number(val) + 1;\n                });\n        }\n\n        this._process_options({\n            startDate: this._o.startDate,\n            endDate: this._o.endDate,\n            daysOfWeekDisabled: this.o.daysOfWeekDisabled,\n            daysOfWeekHighlighted: this.o.daysOfWeekHighlighted,\n            datesDisabled: this.o.datesDisabled\n        });\n\n        this._allow_update = false;\n        this.setViewMode(this.o.startView);\n        this._allow_update = true;\n\n        this.fillDow();\n        this.fillMonths();\n\n        this.update();\n\n        if (this.isInline){\n            this.show();\n        }\n    };\n\n    Datepicker2.prototype = {\n        constructor: Datepicker2,\n\n        _resolveViewName: function(view){\n            $.each(DPGlobal.viewModes, function(i, viewMode){\n                if (view === i || $.inArray(view, viewMode.names) !== -1){\n                    view = i;\n                    return false;\n                }\n            });\n\n            return view;\n        },\n\n        _resolveDaysOfWeek: function(daysOfWeek){\n            if (!$.isArray(daysOfWeek))\n                daysOfWeek = daysOfWeek.split(/[,\\s]*/);\n            return $.map(daysOfWeek, Number);\n        },\n\n        _check_template: function(tmp){\n            try {\n                // If empty\n                if (tmp === undefined || tmp === \"\") {\n                    return false;\n                }\n                // If no html, everything ok\n                if ((tmp.match(/[<>]/g) || []).length <= 0) {\n                    return true;\n                }\n                // Checking if html is fine\n                var jDom = $(tmp);\n                return jDom.length > 0;\n            }\n            catch (ex) {\n                return false;\n            }\n        },\n\n        _process_options: function(opts){\n            // Store raw options for reference\n            this._o = $.extend({}, this._o, opts);\n            // Processed options\n            var o = this.o = $.extend({}, this._o);\n\n            // Check if \"de-DE\" style date is available, if not language should\n            // fallback to 2 letter code eg \"de\"\n            var lang = o.language;\n            if (!dates[lang]){\n                lang = lang.split('-')[0];\n                if (!dates[lang])\n                    lang = defaults.language;\n            }\n            o.language = lang;\n\n            // Retrieve view index from any aliases\n            o.startView = this._resolveViewName(o.startView);\n            o.minViewMode = this._resolveViewName(o.minViewMode);\n            o.maxViewMode = this._resolveViewName(o.maxViewMode);\n\n            // Check view is between min and max\n            o.startView = Math.max(this.o.minViewMode, Math.min(this.o.maxViewMode, o.startView));\n\n            // true, false, or Number > 0\n            if (o.multidate !== true){\n                o.multidate = Number(o.multidate) || false;\n                if (o.multidate !== false)\n                    o.multidate = Math.max(0, o.multidate);\n            }\n            o.multidateSeparator = String(o.multidateSeparator);\n\n            o.weekStart %= 7;\n            o.weekEnd = (o.weekStart + 6) % 7;\n\n            var format = DPGlobal.parseFormat(o.format);\n            if (o.startDate !== -Infinity){\n                if (!!o.startDate){\n                    if (o.startDate instanceof Date)\n                        o.startDate = this._local_to_utc(this._zero_time(o.startDate));\n                    else\n                        o.startDate = DPGlobal.parseDate(o.startDate, format, o.language, o.assumeNearbyYear);\n                }\n                else {\n                    o.startDate = -Infinity;\n                }\n            }\n            if (o.endDate !== Infinity){\n                if (!!o.endDate){\n                    if (o.endDate instanceof Date)\n                        o.endDate = this._local_to_utc(this._zero_time(o.endDate));\n                    else\n                        o.endDate = DPGlobal.parseDate(o.endDate, format, o.language, o.assumeNearbyYear);\n                }\n                else {\n                    o.endDate = Infinity;\n                }\n            }\n\n            o.daysOfWeekDisabled = this._resolveDaysOfWeek(o.daysOfWeekDisabled||[]);\n            o.daysOfWeekHighlighted = this._resolveDaysOfWeek(o.daysOfWeekHighlighted||[]);\n\n            o.datesDisabled = o.datesDisabled||[];\n            if (!$.isArray(o.datesDisabled)) {\n                o.datesDisabled = o.datesDisabled.split(',');\n            }\n            o.datesDisabled = $.map(o.datesDisabled, function(d){\n                return DPGlobal.parseDate(d, format, o.language, o.assumeNearbyYear);\n            });\n\n            var plc = String(o.orientation).toLowerCase().split(/\\s+/g),\n                _plc = o.orientation.toLowerCase();\n            plc = $.grep(plc, function(word){\n                return /^auto|left|right|top|bottom$/.test(word);\n            });\n            o.orientation = {x: 'auto', y: 'auto'};\n            if (!_plc || _plc === 'auto')\n                ; // no action\n            else if (plc.length === 1){\n                switch (plc[0]){\n                    case 'top':\n                    case 'bottom':\n                        o.orientation.y = plc[0];\n                        break;\n                    case 'left':\n                    case 'right':\n                        o.orientation.x = plc[0];\n                        break;\n                }\n            }\n            else {\n                _plc = $.grep(plc, function(word){\n                    return /^left|right$/.test(word);\n                });\n                o.orientation.x = _plc[0] || 'auto';\n\n                _plc = $.grep(plc, function(word){\n                    return /^top|bottom$/.test(word);\n                });\n                o.orientation.y = _plc[0] || 'auto';\n            }\n            if (o.defaultViewDate instanceof Date || typeof o.defaultViewDate === 'string') {\n                o.defaultViewDate = DPGlobal.parseDate(o.defaultViewDate, format, o.language, o.assumeNearbyYear);\n            } else if (o.defaultViewDate) {\n                var year = o.defaultViewDate.year || new Date().getFullYear();\n                var month = o.defaultViewDate.month || 0;\n                var day = o.defaultViewDate.day || 1;\n                o.defaultViewDate = UTCDate(year, month, day);\n            } else {\n                o.defaultViewDate = UTCToday();\n            }\n        },\n        _applyEvents: function(evs){\n            for (var i=0, el, ch, ev; i < evs.length; i++){\n                el = evs[i][0];\n                if (evs[i].length === 2){\n                    ch = undefined;\n                    ev = evs[i][1];\n                } else if (evs[i].length === 3){\n                    ch = evs[i][1];\n                    ev = evs[i][2];\n                }\n                el.on(ev, ch);\n            }\n        },\n        _unapplyEvents: function(evs){\n            for (var i=0, el, ev, ch; i < evs.length; i++){\n                el = evs[i][0];\n                if (evs[i].length === 2){\n                    ch = undefined;\n                    ev = evs[i][1];\n                } else if (evs[i].length === 3){\n                    ch = evs[i][1];\n                    ev = evs[i][2];\n                }\n                el.off(ev, ch);\n            }\n        },\n        _buildEvents: function(){\n            var events = {\n                keyup: $.proxy(function(e){\n                    if ($.inArray(e.keyCode, [27, 37, 39, 38, 40, 32, 13, 9]) === -1)\n                        this.update();\n                }, this),\n                keydown: $.proxy(this.keydown, this),\n                paste: $.proxy(this.paste, this)\n            };\n\n            if (this.o.showOnFocus === true) {\n                events.focus = $.proxy(this.show, this);\n            }\n\n            if (this.isInput) { // single input\n                this._events = [\n                    [this.element, events]\n                ];\n            }\n            // component: input + button\n            else if (this.component && this.inputField.length) {\n                this._events = [\n                    // For components that are not readonly, allow keyboard nav\n                    [this.inputField, events],\n                    [this.component, {\n                        click: $.proxy(this.show, this)\n                    }]\n                ];\n            }\n            else {\n                this._events = [\n                    [this.element, {\n                        click: $.proxy(this.show, this),\n                        keydown: $.proxy(this.keydown, this)\n                    }]\n                ];\n            }\n            this._events.push(\n                // Component: listen for blur on element descendants\n                [this.element, '*', {\n                    blur: $.proxy(function(e){\n                        this._focused_from = e.target;\n                    }, this)\n                }],\n                // Input: listen for blur on element\n                [this.element, {\n                    blur: $.proxy(function(e){\n                        this._focused_from = e.target;\n                    }, this)\n                }]\n            );\n\n            if (this.o.immediateUpdates) {\n                // Trigger input updates immediately on changed year/month\n                this._events.push([this.element, {\n                    'changeYear changeMonth': $.proxy(function(e){\n                        this.update(e.date);\n                    }, this)\n                }]);\n            }\n\n            this._secondaryEvents = [\n                [this.picker, {\n                    click: $.proxy(this.click, this)\n                }],\n                [this.picker, '.prev, .next', {\n                    click: $.proxy(this.navArrowsClick, this)\n                }],\n                [this.picker, '.day:not(.disabled)', {\n                    click: $.proxy(this.dayCellClick, this)\n                }],\n                [$(window), {\n                    resize: $.proxy(this.place, this)\n                }],\n                [$(document), {\n                    'mousedown touchstart': $.proxy(function(e){\n                        // Clicked outside the datepicker2, hide it\n                        if (!(\n                            this.element.is(e.target) ||\n                            this.element.find(e.target).length ||\n                            this.picker.is(e.target) ||\n                            this.picker.find(e.target).length ||\n                            this.isInline\n                        )){\n                            this.hide();\n                        }\n                    }, this)\n                }]\n            ];\n        },\n        _attachEvents: function(){\n            this._detachEvents();\n            this._applyEvents(this._events);\n        },\n        _detachEvents: function(){\n            this._unapplyEvents(this._events);\n        },\n        _attachSecondaryEvents: function(){\n            this._detachSecondaryEvents();\n            this._applyEvents(this._secondaryEvents);\n        },\n        _detachSecondaryEvents: function(){\n            this._unapplyEvents(this._secondaryEvents);\n        },\n        _trigger: function(event, altdate){\n            var date = altdate || this.dates.get(-1),\n                local_date = this._utc_to_local(date);\n\n            this.element.trigger({\n                type: event,\n                date: local_date,\n                viewMode: this.viewMode,\n                dates: $.map(this.dates, this._utc_to_local),\n                format: $.proxy(function(ix, format){\n                    if (arguments.length === 0){\n                        ix = this.dates.length - 1;\n                        format = this.o.format;\n                    } else if (typeof ix === 'string'){\n                        format = ix;\n                        ix = this.dates.length - 1;\n                    }\n                    format = format || this.o.format;\n                    var date = this.dates.get(ix);\n                    return DPGlobal.formatDate(date, format, this.o.language);\n                }, this)\n            });\n        },\n\n        show: function(){\n            if (this.inputField.is(':disabled') || (this.inputField.prop('readonly') && this.o.enableOnReadonly === false))\n                return;\n            if (!this.isInline)\n                this.picker.appendTo(this.o.container);\n            this.place();\n            this.picker.show();\n            this._attachSecondaryEvents();\n            this._trigger('show');\n            if ((window.navigator.msMaxTouchPoints || 'ontouchstart' in document) && this.o.disableTouchKeyboard) {\n                $(this.element).blur();\n            }\n            return this;\n        },\n\n        hide: function(){\n            if (this.isInline || !this.picker.is(':visible'))\n                return this;\n            this.focusDate = null;\n            this.picker.hide().detach();\n            this._detachSecondaryEvents();\n            this.setViewMode(this.o.startView);\n\n            if (this.o.forceParse && this.inputField.val())\n                this.setValue();\n            this._trigger('hide');\n            return this;\n        },\n\n        destroy: function(){\n            this.hide();\n            this._detachEvents();\n            this._detachSecondaryEvents();\n            this.picker.remove();\n            delete this.element.data().datepicker2;\n            if (!this.isInput){\n                delete this.element.data().date;\n            }\n            return this;\n        },\n\n        paste: function(e){\n            var dateString;\n            if (e.originalEvent.clipboardData && e.originalEvent.clipboardData.types\n                && $.inArray('text/plain', e.originalEvent.clipboardData.types) !== -1) {\n                dateString = e.originalEvent.clipboardData.getData('text/plain');\n            } else if (window.clipboardData) {\n                dateString = window.clipboardData.getData('Text');\n            } else {\n                return;\n            }\n            this.setDate(dateString);\n            this.update();\n            e.preventDefault();\n        },\n\n        _utc_to_local: function(utc){\n            if (!utc) {\n                return utc;\n            }\n\n            var local = new Date(utc.getTime() + (utc.getTimezoneOffset() * 60000));\n\n            if (local.getTimezoneOffset() !== utc.getTimezoneOffset()) {\n                local = new Date(utc.getTime() + (local.getTimezoneOffset() * 60000));\n            }\n\n            return local;\n        },\n        _local_to_utc: function(local){\n            return local && new Date(local.getTime() - (local.getTimezoneOffset()*60000));\n        },\n        _zero_time: function(local){\n            return local && new Date(local.getFullYear(), local.getMonth(), local.getDate());\n        },\n        _zero_utc_time: function(utc){\n            return utc && UTCDate(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate());\n        },\n\n        getDates: function(){\n            return $.map(this.dates, this._utc_to_local);\n        },\n\n        getUTCDates: function(){\n            return $.map(this.dates, function(d){\n                return new Date(d);\n            });\n        },\n\n        getDate: function(){\n            return this._utc_to_local(this.getUTCDate());\n        },\n\n        getUTCDate: function(){\n            var selected_date = this.dates.get(-1);\n            if (selected_date !== undefined) {\n                return new Date(selected_date);\n            } else {\n                return null;\n            }\n        },\n\n        clearDates: function(){\n            this.inputField.val('');\n            this.update();\n            this._trigger('changeDate');\n\n            if (this.o.autoclose) {\n                this.hide();\n            }\n        },\n\n        setDates: function(){\n            var args = $.isArray(arguments[0]) ? arguments[0] : arguments;\n            this.update.apply(this, args);\n            this._trigger('changeDate');\n            this.setValue();\n            return this;\n        },\n\n        setUTCDates: function(){\n            var args = $.isArray(arguments[0]) ? arguments[0] : arguments;\n            this.setDates.apply(this, $.map(args, this._utc_to_local));\n            return this;\n        },\n\n        setDate: alias('setDates'),\n        setUTCDate: alias('setUTCDates'),\n        remove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead'),\n\n        setValue: function(){\n            var formatted = this.getFormattedDate();\n            this.inputField.val(formatted);\n            return this;\n        },\n\n        getFormattedDate: function(format){\n            if (format === undefined)\n                format = this.o.format;\n\n            var lang = this.o.language;\n            return $.map(this.dates, function(d){\n                return DPGlobal.formatDate(d, format, lang);\n            }).join(this.o.multidateSeparator);\n        },\n\n        getStartDate: function(){\n            return this.o.startDate;\n        },\n\n        setStartDate: function(startDate){\n            this._process_options({startDate: startDate});\n            this.update();\n            this.updateNavArrows();\n            return this;\n        },\n\n        getEndDate: function(){\n            return this.o.endDate;\n        },\n\n        setEndDate: function(endDate){\n            this._process_options({endDate: endDate});\n            this.update();\n            this.updateNavArrows();\n            return this;\n        },\n\n        setDaysOfWeekDisabled: function(daysOfWeekDisabled){\n            this._process_options({daysOfWeekDisabled: daysOfWeekDisabled});\n            this.update();\n            return this;\n        },\n\n        setDaysOfWeekHighlighted: function(daysOfWeekHighlighted){\n            this._process_options({daysOfWeekHighlighted: daysOfWeekHighlighted});\n            this.update();\n            return this;\n        },\n\n        setDatesDisabled: function(datesDisabled){\n            this._process_options({datesDisabled: datesDisabled});\n            this.update();\n            return this;\n        },\n\n        place: function(){\n            if (this.isInline)\n                return this;\n            var calendarWidth = this.picker.outerWidth(),\n                calendarHeight = this.picker.outerHeight(),\n                visualPadding = 10,\n                container = $(this.o.container),\n                windowWidth = container.width(),\n                scrollTop = this.o.container === 'body' ? $(document).scrollTop() : container.scrollTop(),\n                appendOffset = container.offset();\n\n            var parentsZindex = [0];\n            this.element.parents().each(function(){\n                var itemZIndex = $(this).css('z-index');\n                if (itemZIndex !== 'auto' && Number(itemZIndex) !== 0) parentsZindex.push(Number(itemZIndex));\n            });\n            var zIndex = Math.max.apply(Math, parentsZindex) + this.o.zIndexOffset;\n            var offset = this.component ? this.component.parent().offset() : this.element.offset();\n            var height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);\n            var width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);\n            var left = offset.left - appendOffset.left;\n            var top = offset.top - appendOffset.top;\n\n            if (this.o.container !== 'body') {\n                top += scrollTop;\n            }\n\n            this.picker.removeClass(\n                'datepicker2-orient-top datepicker2-orient-bottom '+\n                'datepicker2-orient-right datepicker2-orient-left'\n            );\n\n            if (this.o.orientation.x !== 'auto'){\n                this.picker.addClass('datepicker2-orient-' + this.o.orientation.x);\n                if (this.o.orientation.x === 'right')\n                    left -= calendarWidth - width;\n            }\n            // auto x orientation is best-placement: if it crosses a window\n            // edge, fudge it sideways\n            else {\n                if (offset.left < 0) {\n                    // component is outside the window on the left side. Move it into visible range\n                    this.picker.addClass('datepicker2-orient-left');\n                    left -= offset.left - visualPadding;\n                } else if (left + calendarWidth > windowWidth) {\n                    // the calendar passes the widow right edge. Align it to component right side\n                    this.picker.addClass('datepicker2-orient-right');\n                    left += width - calendarWidth;\n                } else {\n                    if (this.o.rtl) {\n                        // Default to right\n                        this.picker.addClass('datepicker2-orient-right');\n                    } else {\n                        // Default to left\n                        this.picker.addClass('datepicker2-orient-left');\n                    }\n                }\n            }\n\n            // auto y orientation is best-situation: top or bottom, no fudging,\n            // decision based on which shows more of the calendar\n            var yorient = this.o.orientation.y,\n                top_overflow;\n            if (yorient === 'auto'){\n                top_overflow = -scrollTop + top - calendarHeight;\n                yorient = top_overflow < 0 ? 'bottom' : 'top';\n            }\n\n            this.picker.addClass('datepicker2-orient-' + yorient);\n            if (yorient === 'top')\n                top -= calendarHeight + parseInt(this.picker.css('padding-top'));\n            else\n                top += height;\n\n            if (this.o.rtl) {\n                var right = windowWidth - (left + width);\n                this.picker.css({\n                    top: top,\n                    right: right,\n                    zIndex: zIndex\n                });\n            } else {\n                this.picker.css({\n                    top: top,\n                    left: left,\n                    zIndex: zIndex\n                });\n            }\n            return this;\n        },\n\n        _allow_update: true,\n        update: function(){\n            if (!this._allow_update)\n                return this;\n\n            var oldDates = this.dates.copy(),\n                dates = [],\n                fromArgs = false;\n            if (arguments.length){\n                $.each(arguments, $.proxy(function(i, date){\n                    if (date instanceof Date)\n                        date = this._local_to_utc(date);\n                    dates.push(date);\n                }, this));\n                fromArgs = true;\n            } else {\n                dates = this.isInput\n                    ? this.element.val()\n                    : this.element.data('date') || this.inputField.val();\n                if (dates && this.o.multidate)\n                    dates = dates.split(this.o.multidateSeparator);\n                else\n                    dates = [dates];\n                delete this.element.data().date;\n            }\n\n            dates = $.map(dates, $.proxy(function(date){\n                return DPGlobal.parseDate(date, this.o.format, this.o.language, this.o.assumeNearbyYear);\n            }, this));\n            dates = $.grep(dates, $.proxy(function(date){\n                return (\n                    !this.dateWithinRange(date) ||\n                    !date\n                );\n            }, this), true);\n            this.dates.replace(dates);\n\n            if (this.o.updateViewDate) {\n                if (this.dates.length)\n                    this.viewDate = new Date(this.dates.get(-1));\n                else if (this.viewDate < this.o.startDate)\n                    this.viewDate = new Date(this.o.startDate);\n                else if (this.viewDate > this.o.endDate)\n                    this.viewDate = new Date(this.o.endDate);\n                else\n                    this.viewDate = this.o.defaultViewDate;\n            }\n\n            if (fromArgs){\n                // setting date by clicking\n                this.setValue();\n                this.element.change();\n            }\n            else if (this.dates.length){\n                // setting date by typing\n                if (String(oldDates) !== String(this.dates) && fromArgs) {\n                    this._trigger('changeDate');\n                    this.element.change();\n                }\n            }\n            if (!this.dates.length && oldDates.length) {\n                this._trigger('clearDate');\n                this.element.change();\n            }\n\n            this.fill();\n            return this;\n        },\n\n        fillDow: function(){\n            if (this.o.showWeekDays) {\n                var dowCnt = this.o.weekStart,\n                    html = '<tr>';\n                if (this.o.calendarWeeks){\n                    html += '<th class=\"cw\">&#160;</th>';\n                }\n                while (dowCnt < this.o.weekStart + 7){\n                    html += '<th class=\"dow';\n                    if ($.inArray(dowCnt, this.o.daysOfWeekDisabled) !== -1)\n                        html += ' disabled';\n                    html += '\">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>';\n                }\n                html += '</tr>';\n                this.picker.find('.datepicker2-days thead').append(html);\n            }\n        },\n\n        fillMonths: function(){\n            var localDate = this._utc_to_local(this.viewDate);\n            var html = '';\n            var focused;\n            for (var i = 0; i < 12; i++){\n                focused = localDate && localDate.getMonth() === i ? ' focused' : '';\n                html += '<span class=\"month' + focused + '\">' + dates[this.o.language].monthsShort[i] + '</span>';\n            }\n            this.picker.find('.datepicker2-months td').html(html);\n        },\n\n        setRange: function(range){\n            if (!range || !range.length)\n                delete this.range;\n            else\n                this.range = $.map(range, function(d){\n                    return d.valueOf();\n                });\n            this.fill();\n        },\n\n        getClassNames: function(date){\n            var cls = [],\n                year = this.viewDate.getUTCFullYear(),\n                month = this.viewDate.getUTCMonth(),\n                today = UTCToday();\n            if (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){\n                cls.push('old');\n            } else if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){\n                cls.push('new');\n            }\n            if (this.focusDate && date.valueOf() === this.focusDate.valueOf())\n                cls.push('focused');\n            // Compare internal UTC date with UTC today, not local today\n            if (this.o.todayHighlight && isUTCEquals(date, today)) {\n                cls.push('today');\n            }\n            if (this.dates.contains(date) !== -1)\n                cls.push('active');\n            if (!this.dateWithinRange(date)){\n                cls.push('disabled');\n            }\n            if (this.dateIsDisabled(date)){\n                cls.push('disabled', 'disabled-date');\n            }\n            if ($.inArray(date.getUTCDay(), this.o.daysOfWeekHighlighted) !== -1){\n                cls.push('highlighted');\n            }\n\n            if (this.range){\n                if (date > this.range[0] && date < this.range[this.range.length-1]){\n                    cls.push('range');\n                }\n                if ($.inArray(date.valueOf(), this.range) !== -1){\n                    cls.push('selected');\n                }\n                if (date.valueOf() === this.range[0]){\n                    cls.push('range-start');\n                }\n                if (date.valueOf() === this.range[this.range.length-1]){\n                    cls.push('range-end');\n                }\n            }\n            return cls;\n        },\n\n        _fill_yearsView: function(selector, cssClass, factor, year, startYear, endYear, beforeFn){\n            var html = '';\n            var step = factor / 10;\n            var view = this.picker.find(selector);\n            var startVal = Math.floor(year / factor) * factor;\n            var endVal = startVal + step * 9;\n            var focusedVal = Math.floor(this.viewDate.getFullYear() / step) * step;\n            var selected = $.map(this.dates, function(d){\n                return Math.floor(d.getUTCFullYear() / step) * step;\n            });\n\n            var classes, tooltip, before;\n            for (var currVal = startVal - step; currVal <= endVal + step; currVal += step) {\n                classes = [cssClass];\n                tooltip = null;\n\n                if (currVal === startVal - step) {\n                    classes.push('old');\n                } else if (currVal === endVal + step) {\n                    classes.push('new');\n                }\n                if ($.inArray(currVal, selected) !== -1) {\n                    classes.push('active');\n                }\n                if (currVal < startYear || currVal > endYear) {\n                    classes.push('disabled');\n                }\n                if (currVal === focusedVal) {\n                    classes.push('focused');\n                }\n\n                if (beforeFn !== $.noop) {\n                    before = beforeFn(new Date(currVal, 0, 1));\n                    if (before === undefined) {\n                        before = {};\n                    } else if (typeof before === 'boolean') {\n                        before = {enabled: before};\n                    } else if (typeof before === 'string') {\n                        before = {classes: before};\n                    }\n                    if (before.enabled === false) {\n                        classes.push('disabled');\n                    }\n                    if (before.classes) {\n                        classes = classes.concat(before.classes.split(/\\s+/));\n                    }\n                    if (before.tooltip) {\n                        tooltip = before.tooltip;\n                    }\n                }\n\n                html += '<span class=\"' + classes.join(' ') + '\"' + (tooltip ? ' title=\"' + tooltip + '\"' : '') + '>' + currVal + '</span>';\n            }\n\n            view.find('.datepicker2-switch').text(startVal + '-' + endVal);\n            view.find('td').html(html);\n        },\n\n        fill: function(){\n            var d = new Date(this.viewDate),\n                year = d.getUTCFullYear(),\n                month = d.getUTCMonth(),\n                startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n                startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n                endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n                endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n                todaytxt = dates[this.o.language].today || dates['en'].today || '',\n                cleartxt = dates[this.o.language].clear || dates['en'].clear || '',\n                titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat,\n                todayDate = UTCToday(),\n                titleBtnVisible = (this.o.todayBtn === true || this.o.todayBtn === 'linked') && todayDate >= this.o.startDate && todayDate <= this.o.endDate && !this.weekOfDateIsDisabled(todayDate),\n                tooltip,\n                before;\n            if (isNaN(year) || isNaN(month))\n                return;\n            this.picker.find('.datepicker2-days .datepicker2-switch')\n                .text(DPGlobal.formatDate(d, titleFormat, this.o.language));\n            this.picker.find('tfoot .today')\n                .text(todaytxt)\n                .css('display', titleBtnVisible ? 'table-cell' : 'none');\n            this.picker.find('tfoot .clear')\n                .text(cleartxt)\n                .css('display', this.o.clearBtn === true ? 'table-cell' : 'none');\n            this.picker.find('thead .datepicker2-title')\n                .text(this.o.title)\n                .css('display', typeof this.o.title === 'string' && this.o.title !== '' ? 'table-cell' : 'none');\n            this.updateNavArrows();\n            this.fillMonths();\n            var prevMonth = UTCDate(year, month, 0),\n                day = prevMonth.getUTCDate();\n            prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);\n            var nextMonth = new Date(prevMonth);\n            if (prevMonth.getUTCFullYear() < 100){\n                nextMonth.setUTCFullYear(prevMonth.getUTCFullYear());\n            }\n            nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\n            nextMonth = nextMonth.valueOf();\n            var html = [];\n            var weekDay, clsName;\n            while (prevMonth.valueOf() < nextMonth){\n                weekDay = prevMonth.getUTCDay();\n                if (weekDay === this.o.weekStart){\n                    html.push('<tr>');\n                    if (this.o.calendarWeeks){\n                        // ISO 8601: First week contains first thursday.\n                        // ISO also states week starts on Monday, but we can be more abstract here.\n                        var\n                            // Start of current week: based on weekstart/current date\n                            ws = new Date(+prevMonth + (this.o.weekStart - weekDay - 7) % 7 * 864e5),\n                            // Thursday of this week\n                            th = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),\n                            // First Thursday of year, year from thursday\n                            yth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay()) % 7 * 864e5),\n                            // Calendar week: ms between thursdays, div ms per day, div 7 days\n                            calWeek = (th - yth) / 864e5 / 7 + 1;\n                        html.push('<td class=\"cw\">'+ calWeek +'</td>');\n                    }\n                }\n                clsName = this.getClassNames(prevMonth);\n                clsName.push('day');\n\n                var content = prevMonth.getUTCDate();\n\n                if (this.o.beforeShowDay !== $.noop){\n                    before = this.o.beforeShowDay(this._utc_to_local(prevMonth));\n                    if (before === undefined)\n                        before = {};\n                    else if (typeof before === 'boolean')\n                        before = {enabled: before};\n                    else if (typeof before === 'string')\n                        before = {classes: before};\n                    if (before.enabled === false)\n                        clsName.push('disabled');\n                    if (before.classes)\n                        clsName = clsName.concat(before.classes.split(/\\s+/));\n                    if (before.tooltip)\n                        tooltip = before.tooltip;\n                    if (before.content)\n                        content = before.content;\n                }\n\n                //Check if uniqueSort exists (supported by jquery >=1.12 and >=2.2)\n                //Fallback to unique function for older jquery versions\n                if ($.isFunction($.uniqueSort)) {\n                    clsName = $.uniqueSort(clsName);\n                } else {\n                    clsName = $.unique(clsName);\n                }\n\n                html.push('<td class=\"'+clsName.join(' ')+'\"' + (tooltip ? ' title=\"'+tooltip+'\"' : '') + ' data-date=\"' + prevMonth.getTime().toString() + '\">' + content + '</td>');\n                tooltip = null;\n                if (weekDay === this.o.weekEnd){\n                    html.push('</tr>');\n                }\n                prevMonth.setUTCDate(prevMonth.getUTCDate() + 1);\n            }\n            this.picker.find('.datepicker2-days tbody').html(html.join(''));\n\n            var monthsTitle = dates[this.o.language].monthsTitle || dates['en'].monthsTitle || 'Months';\n            var months = this.picker.find('.datepicker2-months')\n                .find('.datepicker2-switch')\n                .text(this.o.maxViewMode < 2 ? monthsTitle : year)\n                .end()\n                .find('tbody span').removeClass('active');\n\n            $.each(this.dates, function(i, d){\n                if (d.getUTCFullYear() === year)\n                    months.eq(d.getUTCMonth()).addClass('active');\n            });\n\n            if (year < startYear || year > endYear){\n                months.addClass('disabled');\n            }\n            if (year === startYear){\n                months.slice(0, startMonth).addClass('disabled');\n            }\n            if (year === endYear){\n                months.slice(endMonth+1).addClass('disabled');\n            }\n\n            if (this.o.beforeShowMonth !== $.noop){\n                var that = this;\n                $.each(months, function(i, month){\n                    var moDate = new Date(year, i, 1);\n                    var before = that.o.beforeShowMonth(moDate);\n                    if (before === undefined)\n                        before = {};\n                    else if (typeof before === 'boolean')\n                        before = {enabled: before};\n                    else if (typeof before === 'string')\n                        before = {classes: before};\n                    if (before.enabled === false && !$(month).hasClass('disabled'))\n                        $(month).addClass('disabled');\n                    if (before.classes)\n                        $(month).addClass(before.classes);\n                    if (before.tooltip)\n                        $(month).prop('title', before.tooltip);\n                });\n            }\n\n            // Generating decade/years picker\n            this._fill_yearsView(\n                '.datepicker2-years',\n                'year',\n                10,\n                year,\n                startYear,\n                endYear,\n                this.o.beforeShowYear\n            );\n\n            // Generating century/decades picker\n            this._fill_yearsView(\n                '.datepicker2-decades',\n                'decade',\n                100,\n                year,\n                startYear,\n                endYear,\n                this.o.beforeShowDecade\n            );\n\n            // Generating millennium/centuries picker\n            this._fill_yearsView(\n                '.datepicker2-centuries',\n                'century',\n                1000,\n                year,\n                startYear,\n                endYear,\n                this.o.beforeShowCentury\n            );\n        },\n\n        updateNavArrows: function(){\n            if (!this._allow_update)\n                return;\n\n            var d = new Date(this.viewDate),\n                year = d.getUTCFullYear(),\n                month = d.getUTCMonth(),\n                startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n                startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n                endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n                endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n                prevIsDisabled,\n                nextIsDisabled,\n                factor = 1;\n            switch (this.viewMode){\n                case 4:\n                    factor *= 10;\n                /* falls through */\n                case 3:\n                    factor *= 10;\n                /* falls through */\n                case 2:\n                    factor *= 10;\n                /* falls through */\n                case 1:\n                    prevIsDisabled = Math.floor(year / factor) * factor <= startYear;\n                    nextIsDisabled = Math.floor(year / factor) * factor + factor > endYear;\n                    break;\n                case 0:\n                    prevIsDisabled = year <= startYear && month <= startMonth;\n                    nextIsDisabled = year >= endYear && month >= endMonth;\n                    break;\n            }\n\n            this.picker.find('.prev').toggleClass('disabled', prevIsDisabled);\n            this.picker.find('.next').toggleClass('disabled', nextIsDisabled);\n        },\n\n        click: function(e){\n            e.preventDefault();\n            e.stopPropagation();\n\n            var target, dir, day, year, month;\n            target = $(e.target);\n\n            // Clicked on the switch\n            if (target.hasClass('datepicker2-switch') && this.viewMode !== this.o.maxViewMode){\n                this.setViewMode(this.viewMode + 1);\n            }\n\n            // Clicked on today button\n            if (target.hasClass('today') && !target.hasClass('day')){\n                this.setViewMode(0);\n                this._setDate(UTCToday(), this.o.todayBtn === 'linked' ? null : 'view');\n            }\n\n            // Clicked on clear button\n            if (target.hasClass('clear')){\n                this.clearDates();\n            }\n\n            if (!target.hasClass('disabled')){\n                // Clicked on a month, year, decade, century\n                if (target.hasClass('month')\n                    || target.hasClass('year')\n                    || target.hasClass('decade')\n                    || target.hasClass('century')) {\n                    this.viewDate.setUTCDate(1);\n\n                    day = 1;\n                    if (this.viewMode === 1){\n                        month = target.parent().find('span').index(target);\n                        year = this.viewDate.getUTCFullYear();\n                        this.viewDate.setUTCMonth(month);\n                    } else {\n                        month = 0;\n                        year = Number(target.text());\n                        this.viewDate.setUTCFullYear(year);\n                    }\n\n                    this._trigger(DPGlobal.viewModes[this.viewMode - 1].e, this.viewDate);\n\n                    if (this.viewMode === this.o.minViewMode){\n                        this._setDate(UTCDate(year, month, day));\n                    } else {\n                        this.setViewMode(this.viewMode - 1);\n                        this.fill();\n                    }\n                }\n            }\n\n            if (this.picker.is(':visible') && this._focused_from){\n                this._focused_from.focus();\n            }\n            delete this._focused_from;\n        },\n\n        dayCellClick: function(e){\n            var $target = $(e.currentTarget);\n            var timestamp = $target.data('date');\n            var date = new Date(timestamp);\n\n            if (this.o.updateViewDate) {\n                if (date.getUTCFullYear() !== this.viewDate.getUTCFullYear()) {\n                    this._trigger('changeYear', this.viewDate);\n                }\n\n                if (date.getUTCMonth() !== this.viewDate.getUTCMonth()) {\n                    this._trigger('changeMonth', this.viewDate);\n                }\n            }\n            this._setDate(date);\n        },\n\n        // Clicked on prev or next\n        navArrowsClick: function(e){\n            var $target = $(e.currentTarget);\n            var dir = $target.hasClass('prev') ? -1 : 1;\n            if (this.viewMode !== 0){\n                dir *= DPGlobal.viewModes[this.viewMode].navStep * 12;\n            }\n            this.viewDate = this.moveMonth(this.viewDate, dir);\n            this._trigger(DPGlobal.viewModes[this.viewMode].e, this.viewDate);\n            this.fill();\n        },\n\n        _toggle_multidate: function(date){\n            var ix = this.dates.contains(date);\n            if (!date){\n                this.dates.clear();\n            }\n\n            if (ix !== -1){\n                if (this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive){\n                    this.dates.remove(ix);\n                }\n            } else if (this.o.multidate === false) {\n                this.dates.clear();\n                this.dates.push(date);\n            }\n            else {\n                this.dates.push(date);\n            }\n\n            if (typeof this.o.multidate === 'number')\n                while (this.dates.length > this.o.multidate)\n                    this.dates.remove(0);\n        },\n\n        _setDate: function(date, which){\n            if (!which || which === 'date')\n                this._toggle_multidate(date && new Date(date));\n            if ((!which && this.o.updateViewDate) || which === 'view')\n                this.viewDate = date && new Date(date);\n\n            this.fill();\n            this.setValue();\n            if (!which || which !== 'view') {\n                this._trigger('changeDate');\n            }\n            this.inputField.trigger('change');\n            if (this.o.autoclose && (!which || which === 'date')){\n                this.hide();\n            }\n        },\n\n        moveDay: function(date, dir){\n            var newDate = new Date(date);\n            newDate.setUTCDate(date.getUTCDate() + dir);\n\n            return newDate;\n        },\n\n        moveWeek: function(date, dir){\n            return this.moveDay(date, dir * 7);\n        },\n\n        moveMonth: function(date, dir){\n            if (!isValidDate(date))\n                return this.o.defaultViewDate;\n            if (!dir)\n                return date;\n            var new_date = new Date(date.valueOf()),\n                day = new_date.getUTCDate(),\n                month = new_date.getUTCMonth(),\n                mag = Math.abs(dir),\n                new_month, test;\n            dir = dir > 0 ? 1 : -1;\n            if (mag === 1){\n                test = dir === -1\n                    // If going back one month, make sure month is not current month\n                    // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)\n                    ? function(){\n                        return new_date.getUTCMonth() === month;\n                    }\n                    // If going forward one month, make sure month is as expected\n                    // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)\n                    : function(){\n                        return new_date.getUTCMonth() !== new_month;\n                    };\n                new_month = month + dir;\n                new_date.setUTCMonth(new_month);\n                // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\n                new_month = (new_month + 12) % 12;\n            }\n            else {\n                // For magnitudes >1, move one month at a time...\n                for (var i=0; i < mag; i++)\n                    // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\n                    new_date = this.moveMonth(new_date, dir);\n                // ...then reset the day, keeping it in the new month\n                new_month = new_date.getUTCMonth();\n                new_date.setUTCDate(day);\n                test = function(){\n                    return new_month !== new_date.getUTCMonth();\n                };\n            }\n            // Common date-resetting loop -- if date is beyond end of month, make it\n            // end of month\n            while (test()){\n                new_date.setUTCDate(--day);\n                new_date.setUTCMonth(new_month);\n            }\n            return new_date;\n        },\n\n        moveYear: function(date, dir){\n            return this.moveMonth(date, dir*12);\n        },\n\n        moveAvailableDate: function(date, dir, fn){\n            do {\n                date = this[fn](date, dir);\n\n                if (!this.dateWithinRange(date))\n                    return false;\n\n                fn = 'moveDay';\n            }\n            while (this.dateIsDisabled(date));\n\n            return date;\n        },\n\n        weekOfDateIsDisabled: function(date){\n            return $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1;\n        },\n\n        dateIsDisabled: function(date){\n            return (\n                this.weekOfDateIsDisabled(date) ||\n                $.grep(this.o.datesDisabled, function(d){\n                    return isUTCEquals(date, d);\n                }).length > 0\n            );\n        },\n\n        dateWithinRange: function(date){\n            return date >= this.o.startDate && date <= this.o.endDate;\n        },\n\n        keydown: function(e){\n            if (!this.picker.is(':visible')){\n                if (e.keyCode === 40 || e.keyCode === 27) { // allow down to re-show picker\n                    this.show();\n                    e.stopPropagation();\n                }\n                return;\n            }\n            var dateChanged = false,\n                dir, newViewDate,\n                focusDate = this.focusDate || this.viewDate;\n            switch (e.keyCode){\n                case 27: // escape\n                    if (this.focusDate){\n                        this.focusDate = null;\n                        this.viewDate = this.dates.get(-1) || this.viewDate;\n                        this.fill();\n                    }\n                    else\n                        this.hide();\n                    e.preventDefault();\n                    e.stopPropagation();\n                    break;\n                case 37: // left\n                case 38: // up\n                case 39: // right\n                case 40: // down\n                    if (!this.o.keyboardNavigation || this.o.daysOfWeekDisabled.length === 7)\n                        break;\n                    dir = e.keyCode === 37 || e.keyCode === 38 ? -1 : 1;\n                    if (this.viewMode === 0) {\n                        if (e.ctrlKey){\n                            newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n\n                            if (newViewDate)\n                                this._trigger('changeYear', this.viewDate);\n                        } else if (e.shiftKey){\n                            newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n\n                            if (newViewDate)\n                                this._trigger('changeMonth', this.viewDate);\n                        } else if (e.keyCode === 37 || e.keyCode === 39){\n                            newViewDate = this.moveAvailableDate(focusDate, dir, 'moveDay');\n                        } else if (!this.weekOfDateIsDisabled(focusDate)){\n                            newViewDate = this.moveAvailableDate(focusDate, dir, 'moveWeek');\n                        }\n                    } else if (this.viewMode === 1) {\n                        if (e.keyCode === 38 || e.keyCode === 40) {\n                            dir = dir * 4;\n                        }\n                        newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n                    } else if (this.viewMode === 2) {\n                        if (e.keyCode === 38 || e.keyCode === 40) {\n                            dir = dir * 4;\n                        }\n                        newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n                    }\n                    if (newViewDate){\n                        this.focusDate = this.viewDate = newViewDate;\n                        this.setValue();\n                        this.fill();\n                        e.preventDefault();\n                    }\n                    break;\n                case 13: // enter\n                    if (!this.o.forceParse)\n                        break;\n                    focusDate = this.focusDate || this.dates.get(-1) || this.viewDate;\n                    if (this.o.keyboardNavigation) {\n                        this._toggle_multidate(focusDate);\n                        dateChanged = true;\n                    }\n                    this.focusDate = null;\n                    this.viewDate = this.dates.get(-1) || this.viewDate;\n                    this.setValue();\n                    this.fill();\n                    if (this.picker.is(':visible')){\n                        e.preventDefault();\n                        e.stopPropagation();\n                        if (this.o.autoclose)\n                            this.hide();\n                    }\n                    break;\n                case 9: // tab\n                    this.focusDate = null;\n                    this.viewDate = this.dates.get(-1) || this.viewDate;\n                    this.fill();\n                    this.hide();\n                    break;\n            }\n            if (dateChanged){\n                if (this.dates.length)\n                    this._trigger('changeDate');\n                else\n                    this._trigger('clearDate');\n                this.inputField.trigger('change');\n            }\n        },\n\n        setViewMode: function(viewMode){\n            this.viewMode = viewMode;\n            this.picker\n                .children('div')\n                .hide()\n                .filter('.datepicker2-' + DPGlobal.viewModes[this.viewMode].clsName)\n                .show();\n            this.updateNavArrows();\n            this._trigger('changeViewMode', new Date(this.viewDate));\n        }\n    };\n\n    var DateRangePicker = function(element, options){\n        $.data(element, 'datepicker2', this);\n        this.element = $(element);\n        this.inputs = $.map(options.inputs, function(i){\n            return i.jquery ? i[0] : i;\n        });\n        delete options.inputs;\n\n        this.keepEmptyValues = options.keepEmptyValues;\n        delete options.keepEmptyValues;\n\n        datepicker2Plugin.call($(this.inputs), options)\n            .on('changeDate', $.proxy(this.dateUpdated, this));\n\n        this.pickers = $.map(this.inputs, function(i){\n            return $.data(i, 'datepicker2');\n        });\n        this.updateDates();\n    };\n    DateRangePicker.prototype = {\n        updateDates: function(){\n            this.dates = $.map(this.pickers, function(i){\n                return i.getUTCDate();\n            });\n            this.updateRanges();\n        },\n        updateRanges: function(){\n            var range = $.map(this.dates, function(d){\n                return d.valueOf();\n            });\n            $.each(this.pickers, function(i, p){\n                p.setRange(range);\n            });\n        },\n        clearDates: function(){\n            $.each(this.pickers, function(i, p){\n                p.clearDates();\n            });\n        },\n        dateUpdated: function(e){\n            // `this.updating` is a workaround for preventing infinite recursion\n            // between `changeDate` triggering and `setUTCDate` calling.  Until\n            // there is a better mechanism.\n            if (this.updating)\n                return;\n            this.updating = true;\n\n            var dp = $.data(e.target, 'datepicker2');\n\n            if (dp === undefined) {\n                return;\n            }\n\n            var new_date = dp.getUTCDate(),\n                keep_empty_values = this.keepEmptyValues,\n                i = $.inArray(e.target, this.inputs),\n                j = i - 1,\n                k = i + 1,\n                l = this.inputs.length;\n            if (i === -1)\n                return;\n\n            $.each(this.pickers, function(i, p){\n                if (!p.getUTCDate() && (p === dp || !keep_empty_values))\n                    p.setUTCDate(new_date);\n            });\n\n            if (new_date < this.dates[j]){\n                // Date being moved earlier/left\n                while (j >= 0 && new_date < this.dates[j]){\n                    this.pickers[j--].setUTCDate(new_date);\n                }\n            } else if (new_date > this.dates[k]){\n                // Date being moved later/right\n                while (k < l && new_date > this.dates[k]){\n                    this.pickers[k++].setUTCDate(new_date);\n                }\n            }\n            this.updateDates();\n\n            delete this.updating;\n        },\n        destroy: function(){\n            $.map(this.pickers, function(p){ p.destroy(); });\n            $(this.inputs).off('changeDate', this.dateUpdated);\n            delete this.element.data().datepicker2;\n        },\n        remove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead')\n    };\n\n    function opts_from_el(el, prefix){\n        // Derive options from element data-attrs\n        var data = $(el).data(),\n            out = {}, inkey,\n            replace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');\n        prefix = new RegExp('^' + prefix.toLowerCase());\n        function re_lower(_,a){\n            return a.toLowerCase();\n        }\n        for (var key in data)\n            if (prefix.test(key)){\n                inkey = key.replace(replace, re_lower);\n                out[inkey] = data[key];\n            }\n        return out;\n    }\n\n    function opts_from_locale(lang){\n        // Derive options from locale plugins\n        var out = {};\n        // Check if \"de-DE\" style date is available, if not language should\n        // fallback to 2 letter code eg \"de\"\n        if (!dates[lang]){\n            lang = lang.split('-')[0];\n            if (!dates[lang])\n                return;\n        }\n        var d = dates[lang];\n        $.each(locale_opts, function(i,k){\n            if (k in d)\n                out[k] = d[k];\n        });\n        return out;\n    }\n\n    var old = $.fn.datepicker2;\n    var datepicker2Plugin = function(option){\n        var args = Array.apply(null, arguments);\n        args.shift();\n        var internal_return;\n        this.each(function(){\n            var $this = $(this),\n                data = $this.data('datepicker2'),\n                options = typeof option === 'object' && option;\n            if (!data){\n                var elopts = opts_from_el(this, 'date'),\n                    // Preliminary otions\n                    xopts = $.extend({}, defaults, elopts, options),\n                    locopts = opts_from_locale(xopts.language),\n                    // Options priority: js args, data-attrs, locales, defaults\n                    opts = $.extend({}, defaults, locopts, elopts, options);\n                if ($this.hasClass('input-daterange') || opts.inputs){\n                    $.extend(opts, {\n                        inputs: opts.inputs || $this.find('input').toArray()\n                    });\n                    data = new DateRangePicker(this, opts);\n                }\n                else {\n                    data = new Datepicker2(this, opts);\n                }\n                $this.data('datepicker2', data);\n            }\n            if (typeof option === 'string' && typeof data[option] === 'function'){\n                internal_return = data[option].apply(data, args);\n            }\n        });\n\n        if (\n            internal_return === undefined ||\n            internal_return instanceof Datepicker2 ||\n            internal_return instanceof DateRangePicker\n        )\n            return this;\n\n        if (this.length > 1)\n            throw new Error('Using only allowed for the collection of a single element (' + option + ' function)');\n        else\n            return internal_return;\n    };\n    $.fn.datepicker2 = datepicker2Plugin;\n\n    var defaults = $.fn.datepicker2.defaults = {\n        assumeNearbyYear: false,\n        autoclose: false,\n        beforeShowDay: $.noop,\n        beforeShowMonth: $.noop,\n        beforeShowYear: $.noop,\n        beforeShowDecade: $.noop,\n        beforeShowCentury: $.noop,\n        calendarWeeks: false,\n        clearBtn: false,\n        toggleActive: false,\n        daysOfWeekDisabled: [],\n        daysOfWeekHighlighted: [],\n        datesDisabled: [],\n        endDate: Infinity,\n        forceParse: true,\n        format: 'mm/dd/yyyy',\n        keepEmptyValues: false,\n        keyboardNavigation: true,\n        language: 'en',\n        minViewMode: 0,\n        maxViewMode: 4,\n        multidate: false,\n        multidateSeparator: ',',\n        orientation: \"auto\",\n        rtl: false,\n        startDate: -Infinity,\n        startView: 0,\n        todayBtn: false,\n        todayHighlight: false,\n        updateViewDate: true,\n        weekStart: 0,\n        disableTouchKeyboard: false,\n        enableOnReadonly: true,\n        showOnFocus: true,\n        zIndexOffset: 10,\n        container: 'body',\n        immediateUpdates: false,\n        title: '',\n        templates: {\n            leftArrow: '&#x00AB;',\n            rightArrow: '&#x00BB;'\n        },\n        showWeekDays: true\n    };\n    var locale_opts = $.fn.datepicker2.locale_opts = [\n        'format',\n        'rtl',\n        'weekStart'\n    ];\n    $.fn.datepicker2.Constructor = Datepicker2;\n    var dates = $.fn.datepicker2.dates = {\n        en: {\n            days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n            daysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n            daysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n            months: [\"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            today: \"Today\",\n            clear: \"Clear\",\n            titleFormat: \"MM yyyy\"\n        }\n    };\n\n    var DPGlobal = {\n        viewModes: [\n            {\n                names: ['days', 'month'],\n                clsName: 'days',\n                e: 'changeMonth'\n            },\n            {\n                names: ['months', 'year'],\n                clsName: 'months',\n                e: 'changeYear',\n                navStep: 1\n            },\n            {\n                names: ['years', 'decade'],\n                clsName: 'years',\n                e: 'changeDecade',\n                navStep: 10\n            },\n            {\n                names: ['decades', 'century'],\n                clsName: 'decades',\n                e: 'changeCentury',\n                navStep: 100\n            },\n            {\n                names: ['centuries', 'millennium'],\n                clsName: 'centuries',\n                e: 'changeMillennium',\n                navStep: 1000\n            }\n        ],\n        validParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,\n        nonpunctuation: /[^ -\\/:-@\\u5e74\\u6708\\u65e5\\[-`{-~\\t\\n\\r]+/g,\n        parseFormat: function(format){\n            if (typeof format.toValue === 'function' && typeof format.toDisplay === 'function')\n                return format;\n            // IE treats \\0 as a string end in inputs (truncating the value),\n            // so it's a bad format delimiter, anyway\n            var separators = format.replace(this.validParts, '\\0').split('\\0'),\n                parts = format.match(this.validParts);\n            if (!separators || !separators.length || !parts || parts.length === 0){\n                throw new Error(\"Invalid date format.\");\n            }\n            return {separators: separators, parts: parts};\n        },\n        parseDate: function(date, format, language, assumeNearby){\n            if (!date)\n                return undefined;\n            if (date instanceof Date)\n                return date;\n            if (typeof format === 'string')\n                format = DPGlobal.parseFormat(format);\n            if (format.toValue)\n                return format.toValue(date, format, language);\n            var fn_map = {\n                    d: 'moveDay',\n                    m: 'moveMonth',\n                    w: 'moveWeek',\n                    y: 'moveYear'\n                },\n                dateAliases = {\n                    yesterday: '-1d',\n                    today: '+0d',\n                    tomorrow: '+1d'\n                },\n                parts, part, dir, i, fn;\n            if (date in dateAliases){\n                date = dateAliases[date];\n            }\n            if (/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/i.test(date)){\n                parts = date.match(/([\\-+]\\d+)([dmwy])/gi);\n                date = new Date();\n                for (i=0; i < parts.length; i++){\n                    part = parts[i].match(/([\\-+]\\d+)([dmwy])/i);\n                    dir = Number(part[1]);\n                    fn = fn_map[part[2].toLowerCase()];\n                    date = Datepicker2.prototype[fn](date, dir);\n                }\n                return Datepicker2.prototype._zero_utc_time(date);\n            }\n\n            parts = date && date.match(this.nonpunctuation) || [];\n\n            function applyNearbyYear(year, threshold){\n                if (threshold === true)\n                    threshold = 10;\n\n                // if year is 2 digits or less, than the user most likely is trying to get a recent century\n                if (year < 100){\n                    year += 2000;\n                    // if the new year is more than threshold years in advance, use last century\n                    if (year > ((new Date()).getFullYear()+threshold)){\n                        year -= 100;\n                    }\n                }\n\n                return year;\n            }\n\n            var parsed = {},\n                setters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],\n                setters_map = {\n                    yyyy: function(d,v){\n                        return d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v);\n                    },\n                    m: function(d,v){\n                        if (isNaN(d))\n                            return d;\n                        v -= 1;\n                        while (v < 0) v += 12;\n                        v %= 12;\n                        d.setUTCMonth(v);\n                        while (d.getUTCMonth() !== v)\n                            d.setUTCDate(d.getUTCDate()-1);\n                        return d;\n                    },\n                    d: function(d,v){\n                        return d.setUTCDate(v);\n                    }\n                },\n                val, filtered;\n            setters_map['yy'] = setters_map['yyyy'];\n            setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\n            setters_map['dd'] = setters_map['d'];\n            date = UTCToday();\n            var fparts = format.parts.slice();\n            // Remove noop parts\n            if (parts.length !== fparts.length){\n                fparts = $(fparts).filter(function(i,p){\n                    return $.inArray(p, setters_order) !== -1;\n                }).toArray();\n            }\n            // Process remainder\n            function match_part(){\n                var m = this.slice(0, parts[i].length),\n                    p = parts[i].slice(0, m.length);\n                return m.toLowerCase() === p.toLowerCase();\n            }\n            if (parts.length === fparts.length){\n                var cnt;\n                for (i=0, cnt = fparts.length; i < cnt; i++){\n                    val = parseInt(parts[i], 10);\n                    part = fparts[i];\n                    if (isNaN(val)){\n                        switch (part){\n                            case 'MM':\n                                filtered = $(dates[language].months).filter(match_part);\n                                val = $.inArray(filtered[0], dates[language].months) + 1;\n                                break;\n                            case 'M':\n                                filtered = $(dates[language].monthsShort).filter(match_part);\n                                val = $.inArray(filtered[0], dates[language].monthsShort) + 1;\n                                break;\n                        }\n                    }\n                    parsed[part] = val;\n                }\n                var _date, s;\n                for (i=0; i < setters_order.length; i++){\n                    s = setters_order[i];\n                    if (s in parsed && !isNaN(parsed[s])){\n                        _date = new Date(date);\n                        setters_map[s](_date, parsed[s]);\n                        if (!isNaN(_date))\n                            date = _date;\n                    }\n                }\n            }\n            return date;\n        },\n        formatDate: function(date, format, language){\n            if (!date)\n                return '';\n            if (typeof format === 'string')\n                format = DPGlobal.parseFormat(format);\n            if (format.toDisplay)\n                return format.toDisplay(date, format, language);\n            var val = {\n                d: date.getUTCDate(),\n                D: dates[language].daysShort[date.getUTCDay()],\n                DD: dates[language].days[date.getUTCDay()],\n                m: date.getUTCMonth() + 1,\n                M: dates[language].monthsShort[date.getUTCMonth()],\n                MM: dates[language].months[date.getUTCMonth()],\n                yy: date.getUTCFullYear().toString().substring(2),\n                yyyy: date.getUTCFullYear()\n            };\n            val.dd = (val.d < 10 ? '0' : '') + val.d;\n            val.mm = (val.m < 10 ? '0' : '') + val.m;\n            date = [];\n            var seps = $.extend([], format.separators);\n            for (var i=0, cnt = format.parts.length; i <= cnt; i++){\n                if (seps.length)\n                    date.push(seps.shift());\n                date.push(val[format.parts[i]]);\n            }\n            return date.join('');\n        },\n        headTemplate: '<thead>'+\n            '<tr>'+\n            '<th colspan=\"7\" class=\"datepicker2-title\"></th>'+\n            '</tr>'+\n            '<tr>'+\n            '<th class=\"prev\">'+defaults.templates.leftArrow+'</th>'+\n            '<th colspan=\"5\" class=\"datepicker2-switch\"></th>'+\n            '<th class=\"next\">'+defaults.templates.rightArrow+'</th>'+\n            '</tr>'+\n            '</thead>',\n        contTemplate: '<tbody><tr><td colspan=\"7\"></td></tr></tbody>',\n        footTemplate: '<tfoot>'+\n            '<tr>'+\n            '<th colspan=\"7\" class=\"today\"></th>'+\n            '</tr>'+\n            '<tr>'+\n            '<th colspan=\"7\" class=\"clear\"></th>'+\n            '</tr>'+\n            '</tfoot>'\n    };\n    DPGlobal.template = '<div class=\"datepicker2\">'+\n        '<div class=\"datepicker2-days\">'+\n        '<table class=\"table-condensed\">'+\n        DPGlobal.headTemplate+\n        '<tbody></tbody>'+\n        DPGlobal.footTemplate+\n        '</table>'+\n        '</div>'+\n        '<div class=\"datepicker2-months\">'+\n        '<table class=\"table-condensed\">'+\n        DPGlobal.headTemplate+\n        DPGlobal.contTemplate+\n        DPGlobal.footTemplate+\n        '</table>'+\n        '</div>'+\n        '<div class=\"datepicker2-years\">'+\n        '<table class=\"table-condensed\">'+\n        DPGlobal.headTemplate+\n        DPGlobal.contTemplate+\n        DPGlobal.footTemplate+\n        '</table>'+\n        '</div>'+\n        '<div class=\"datepicker2-decades\">'+\n        '<table class=\"table-condensed\">'+\n        DPGlobal.headTemplate+\n        DPGlobal.contTemplate+\n        DPGlobal.footTemplate+\n        '</table>'+\n        '</div>'+\n        '<div class=\"datepicker2-centuries\">'+\n        '<table class=\"table-condensed\">'+\n        DPGlobal.headTemplate+\n        DPGlobal.contTemplate+\n        DPGlobal.footTemplate+\n        '</table>'+\n        '</div>'+\n        '</div>';\n\n    $.fn.datepicker2.DPGlobal = DPGlobal;\n\n\n    /* DATEPICKER NO CONFLICT\n    * =================== */\n\n    $.fn.datepicker2.noConflict = function(){\n        $.fn.datepicker2 = old;\n        return this;\n    };\n\n    /* DATEPICKER VERSION\n     * =================== */\n    $.fn.datepicker2.version = '1.9.0';\n\n    $.fn.datepicker2.deprecated = function(msg){\n        var console = window.console;\n        if (console && console.warn) {\n            console.warn('DEPRECATED: ' + msg);\n        }\n    };\n\n\n    /* DATEPICKER DATA-API\n    * ================== */\n\n    $(document).on(\n        'focus.datepicker2.data-api click.datepicker2.data-api',\n        '[data-provide=\"datepicker2\"]',\n        function(e){\n            var $this = $(this);\n            if ($this.data('datepicker2'))\n                return;\n            e.preventDefault();\n            // component click requires us to explicitly show it\n            datepicker2Plugin.call($this, 'show');\n        }\n    );\n    $(function(){\n        datepicker2Plugin.call($('[data-provide=\"datepicker2-inline\"]'));\n    });\n\n}));\n"],"names":["factory","$","undefined","UTCDate","Date","UTC","apply","arguments","UTCToday","today","getFullYear","getMonth","getDate","isUTCEquals","date1","date2","getUTCFullYear","getUTCMonth","getUTCDate","alias","method","deprecationMsg","fn","datepicker2","deprecated","this","extras","DateArray","get","i","slice","contains","d","val","valueOf","l","length","remove","splice","replace","new_array","isArray","clear","push","copy","a","extend","Datepicker2","element","options","data","_events","_secondaryEvents","_process_options","dates","viewDate","o","defaultViewDate","focusDate","isInput","is","inputField","find","component","hasClass","isInline","picker","DPGlobal","template","_check_template","templates","leftArrow","html","rightArrow","_buildEvents","_attachEvents","addClass","appendTo","rtl","calendarWeeks","attr","Number","startDate","_o","endDate","daysOfWeekDisabled","daysOfWeekHighlighted","datesDisabled","_allow_update","setViewMode","startView","fillDow","fillMonths","update","show","prototype","constructor","_resolveViewName","view","each","viewModes","viewMode","inArray","names","_resolveDaysOfWeek","daysOfWeek","split","map","tmp","match","ex","opts","lang","language","defaults","minViewMode","maxViewMode","Math","max","min","multidate","multidateSeparator","String","weekStart","weekEnd","format","parseFormat","_local_to_utc","_zero_time","parseDate","assumeNearbyYear","Infinity","plc","orientation","toLowerCase","_plc","grep","word","test","x","y","year","month","day","_applyEvents","evs","el","ch","ev","on","_unapplyEvents","off","events","keyup","proxy","e","keyCode","keydown","paste","showOnFocus","focus","click","blur","_focused_from","target","immediateUpdates","date","navArrowsClick","dayCellClick","window","resize","place","document","hide","_detachEvents","_attachSecondaryEvents","_detachSecondaryEvents","_trigger","event","altdate","local_date","_utc_to_local","trigger","type","ix","formatDate","prop","enableOnReadonly","container","navigator","msMaxTouchPoints","disableTouchKeyboard","detach","forceParse","setValue","destroy","dateString","originalEvent","clipboardData","types","getData","setDate","preventDefault","utc","local","getTime","getTimezoneOffset","_zero_utc_time","getDates","getUTCDates","selected_date","clearDates","autoclose","setDates","args","setUTCDates","setUTCDate","formatted","getFormattedDate","join","getStartDate","setStartDate","updateNavArrows","getEndDate","setEndDate","setDaysOfWeekDisabled","setDaysOfWeekHighlighted","setDatesDisabled","calendarWidth","outerWidth","calendarHeight","outerHeight","windowWidth","width","scrollTop","appendOffset","offset","parentsZindex","parents","itemZIndex","css","zIndex","zIndexOffset","parent","height","left","top","removeClass","yorient","parseInt","right","oldDates","fromArgs","dateWithinRange","updateViewDate","change","fill","showWeekDays","dowCnt","daysMin","append","localDate","monthsShort","setRange","range","getClassNames","cls","todayHighlight","dateIsDisabled","getUTCDay","_fill_yearsView","selector","cssClass","factor","startYear","endYear","beforeFn","classes","tooltip","before","step","startVal","floor","endVal","focusedVal","selected","currVal","noop","enabled","concat","text","startMonth","endMonth","todaytxt","cleartxt","titleFormat","todayDate","titleBtnVisible","todayBtn","weekOfDateIsDisabled","isNaN","clearBtn","title","prevMonth","nextMonth","setUTCFullYear","weekDay","clsName","ws","th","yth","calWeek","content","beforeShowDay","isFunction","uniqueSort","unique","toString","monthsTitle","months","end","eq","beforeShowMonth","that","moDate","beforeShowYear","beforeShowDecade","beforeShowCentury","prevIsDisabled","nextIsDisabled","toggleClass","stopPropagation","_setDate","index","setUTCMonth","timestamp","currentTarget","dir","navStep","moveMonth","_toggle_multidate","toggleActive","which","moveDay","newDate","moveWeek","new_month","new_date","mag","abs","moveYear","moveAvailableDate","newViewDate","dateChanged","keyboardNavigation","ctrlKey","shiftKey","children","filter","DateRangePicker","inputs","jquery","keepEmptyValues","datepicker2Plugin","call","dateUpdated","pickers","updateDates","opts_from_el","prefix","out","RegExp","re_lower","_","key","opts_from_locale","locale_opts","k","updateRanges","p","updating","dp","keep_empty_values","j","old","option","internal_return","Array","shift","$this","elopts","locopts","toArray","Error","Constructor","en","days","daysShort","validParts","nonpunctuation","toValue","toDisplay","separators","parts","assumeNearby","part","fn_map","m","w","dateAliases","yesterday","tomorrow","filtered","parsed","setters_order","setters_map","yyyy","v","threshold","fparts","match_part","cnt","_date","s","D","DD","M","MM","yy","substring","dd","mm","seps","headTemplate","contTemplate","footTemplate","noConflict","version","msg","console","warn","define","amd","exports","require","jQuery"],"mappings":"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"}