/* =========================================================
 * bootstrap-datetimepicker.js
 * =========================================================
 * Copyright 2012 Stefan Petre
 *
 * Improvements by Andrew Rowls
 * Improvements by S�bastien Malot
 * Improvements by Yun Lai
 * Improvements by Kenneth Henderick
 * Improvements by CuGBabyBeaR
 * Improvements by Christian Vaas <auspex@auspex.eu>
 *
 * Project URL : http://www.malot.fr/bootstrap-datetimepicker
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ========================================================= */
(function (a) { if (typeof define === "function" && define.amd) { define(["jquery"], a) } else { if (typeof exports === "object") { a(require("jquery")) } else { a(jQuery) } } }(function (f, c) { if (!("indexOf" in Array.prototype)) { Array.prototype.indexOf = function (k, j) { if (j === c) { j = 0 } if (j < 0) { j += this.length } if (j < 0) { j = 0 } for (var l = this.length; j < l; j++) { if (j in this && this[j] === k) { return j } } return -1 } } function e(l) { var k = f(l); var j = k.add(k.parents()); var m = false; j.each(function () { if (f(this).css("position") === "fixed") { m = true; return false } }); return m } function h() { return new Date(Date.UTC.apply(Date, arguments)) } function d() { var j = new Date(); return h(j.getUTCFullYear(), j.getUTCMonth(), j.getUTCDate(), j.getUTCHours(), j.getUTCMinutes(), j.getUTCSeconds(), 0) } var i = function (l, k) { var n = this; this.element = f(l); this.container = k.container || "body"; this.language = k.language || this.element.data("date-language") || "en"; this.language = this.language in a ? this.language : this.language.split("-")[0]; this.language = this.language in a ? this.language : "en"; this.isRTL = a[this.language].rtl || false; this.formatType = k.formatType || this.element.data("format-type") || "standard"; this.format = g.parseFormat(k.format || this.element.data("date-format") || a[this.language].format || g.getDefaultFormat(this.formatType, "input"), this.formatType); this.isInline = false; this.isVisible = false; this.isInput = this.element.is("input"); this.fontAwesome = k.fontAwesome || this.element.data("font-awesome") || false; this.bootcssVer = k.bootcssVer || (this.isInput ? (this.element.is(".form-control") ? 3 : 2) : (this.bootcssVer = this.element.is(".input-group") ? 3 : 2)); this.component = this.element.is(".date") ? (this.bootcssVer == 3 ? this.element.find(".input-group-addon .glyphicon-th, .input-group-addon .glyphicon-time, .input-group-addon .glyphicon-remove, .input-group-addon .glyphicon-calendar, .input-group-addon .fa-calendar, .input-group-addon .fa-clock-o").parent() : this.element.find(".add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar, .add-on .fa-calendar, .add-on .fa-clock-o").parent()) : false; this.componentReset = this.element.is(".date") ? (this.bootcssVer == 3 ? this.element.find(".input-group-addon .glyphicon-remove, .input-group-addon .fa-times").parent() : this.element.find(".add-on .icon-remove, .add-on .fa-times").parent()) : false; this.hasInput = this.component && this.element.find("input").length; if (this.component && this.component.length === 0) { this.component = false } this.linkField = k.linkField || this.element.data("link-field") || false; this.linkFormat = g.parseFormat(k.linkFormat || this.element.data("link-format") || g.getDefaultFormat(this.formatType, "link"), this.formatType); this.minuteStep = k.minuteStep || this.element.data("minute-step") || 5; this.pickerPosition = k.pickerPosition || this.element.data("picker-position") || "bottom-right"; this.showMeridian = k.showMeridian || this.element.data("show-meridian") || false; this.initialDate = k.initialDate || new Date(); this.zIndex = k.zIndex || this.element.data("z-index") || c; this.title = typeof k.title === "undefined" ? false : k.title; this.defaultTimeZone = (new Date).toString().split("(")[1].slice(0, -1); this.timezone = k.timezone || this.defaultTimeZone; this.icons = { leftArrow: this.fontAwesome ? "fa-arrow-left" : (this.bootcssVer === 3 ? "glyphicon-arrow-left" : "icon-arrow-left"), rightArrow: this.fontAwesome ? "fa-arrow-right" : (this.bootcssVer === 3 ? "glyphicon-arrow-right" : "icon-arrow-right") }; this.icontype = this.fontAwesome ? "fa" : "glyphicon"; this._attachEvents(); this.clickedOutside = function (o) { if (f(o.target).closest(".datetimepicker").length === 0) { n.hide() } }; this.formatViewType = "datetime"; if ("formatViewType" in k) { this.formatViewType = k.formatViewType } else { if ("formatViewType" in this.element.data()) { this.formatViewType = this.element.data("formatViewType") } } this.minView = 0; if ("minView" in k) { this.minView = k.minView } else { if ("minView" in this.element.data()) { this.minView = this.element.data("min-view") } } this.minView = g.convertViewMode(this.minView); this.maxView = g.modes.length - 1; if ("maxView" in k) { this.maxView = k.maxView } else { if ("maxView" in this.element.data()) { this.maxView = this.element.data("max-view") } } this.maxView = g.convertViewMode(this.maxView); this.wheelViewModeNavigation = false; if ("wheelViewModeNavigation" in k) { this.wheelViewModeNavigation = k.wheelViewModeNavigation } else { if ("wheelViewModeNavigation" in this.element.data()) { this.wheelViewModeNavigation = this.element.data("view-mode-wheel-navigation") } } this.wheelViewModeNavigationInverseDirection = false; if ("wheelViewModeNavigationInverseDirection" in k) { this.wheelViewModeNavigationInverseDirection = k.wheelViewModeNavigationInverseDirection } else { if ("wheelViewModeNavigationInverseDirection" in this.element.data()) { this.wheelViewModeNavigationInverseDirection = this.element.data("view-mode-wheel-navigation-inverse-dir") } } this.wheelViewModeNavigationDelay = 100; if ("wheelViewModeNavigationDelay" in k) { this.wheelViewModeNavigationDelay = k.wheelViewModeNavigationDelay } else { if ("wheelViewModeNavigationDelay" in this.element.data()) { this.wheelViewModeNavigationDelay = this.element.data("view-mode-wheel-navigation-delay") } } this.startViewMode = 2; if ("startView" in k) { this.startViewMode = k.startView } else { if ("startView" in this.element.data()) { this.startViewMode = this.element.data("start-view") } } this.startViewMode = g.convertViewMode(this.startViewMode); this.viewMode = this.startViewMode; this.viewSelect = this.minView; if ("viewSelect" in k) { this.viewSelect = k.viewSelect } else { if ("viewSelect" in this.element.data()) { this.viewSelect = this.element.data("view-select") } } this.viewSelect = g.convertViewMode(this.viewSelect); this.forceParse = true; if ("forceParse" in k) { this.forceParse = k.forceParse } else { if ("dateForceParse" in this.element.data()) { this.forceParse = this.element.data("date-force-parse") } } var m = this.bootcssVer === 3 ? g.templateV3 : g.template; while (m.indexOf("{iconType}") !== -1) { m = m.replace("{iconType}", this.icontype) } while (m.indexOf("{leftArrow}") !== -1) { m = m.replace("{leftArrow}", this.icons.leftArrow) } while (m.indexOf("{rightArrow}") !== -1) { m = m.replace("{rightArrow}", this.icons.rightArrow) } this.picker = f(m).appendTo(this.isInline ? this.element : this.container).on({ click: f.proxy(this.click, this), mousedown: f.proxy(this.mousedown, this) }); if (this.wheelViewModeNavigation) { if (f.fn.mousewheel) { this.picker.on({ mousewheel: f.proxy(this.mousewheel, this) }) } else { console.log("Mouse Wheel event is not supported. Please include the jQuery Mouse Wheel plugin before enabling this option") } } if (this.isInline) { this.picker.addClass("datetimepicker-inline") } else { this.picker.addClass("datetimepicker-dropdown-" + this.pickerPosition + " dropdown-menu") } if (this.isRTL) { this.picker.addClass("datetimepicker-rtl"); var j = this.bootcssVer === 3 ? ".prev span, .next span" : ".prev i, .next i"; this.picker.find(j).toggleClass(this.icons.leftArrow + " " + this.icons.rightArrow) } f(document).on("mousedown", this.clickedOutside); this.autoclose = false; if ("autoclose" in k) { this.autoclose = k.autoclose } else { if ("dateAutoclose" in this.element.data()) { this.autoclose = this.element.data("date-autoclose") } } this.keyboardNavigation = true; if ("keyboardNavigation" in k) { this.keyboardNavigation = k.keyboardNavigation } else { if ("dateKeyboardNavigation" in this.element.data()) { this.keyboardNavigation = this.element.data("date-keyboard-navigation") } } this.todayBtn = (k.todayBtn || this.element.data("date-today-btn") || false); this.clearBtn = (k.clearBtn || this.element.data("date-clear-btn") || false); this.todayHighlight = (k.todayHighlight || this.element.data("date-today-highlight") || false); this.weekStart = ((k.weekStart || this.element.data("date-weekstart") || a[this.language].weekStart || 0) % 7); this.weekEnd = ((this.weekStart + 6) % 7); this.startDate = -Infinity; this.endDate = Infinity; this.datesDisabled = []; this.daysOfWeekDisabled = []; this.setStartDate(k.startDate || this.element.data("date-startdate")); this.setEndDate(k.endDate || this.element.data("date-enddate")); this.setDatesDisabled(k.datesDisabled || this.element.data("date-dates-disabled")); this.setDaysOfWeekDisabled(k.daysOfWeekDisabled || this.element.data("date-days-of-week-disabled")); this.setMinutesDisabled(k.minutesDisabled || this.element.data("date-minute-disabled")); this.setHoursDisabled(k.hoursDisabled || this.element.data("date-hour-disabled")); this.fillDow(); this.fillMonths(); this.update(); this.showMode(); if (this.isInline) { this.show() } }; i.prototype = { constructor: i, _events: [], _attachEvents: function () { this._detachEvents(); if (this.isInput) { this._events = [[this.element, { focus: f.proxy(this.show, this), keyup: f.proxy(this.update, this), keydown: f.proxy(this.keydown, this) }]] } else { if (this.component && this.hasInput) { this._events = [[this.element.find("input"), { focus: f.proxy(this.show, this), keyup: f.proxy(this.update, this), keydown: f.proxy(this.keydown, this) }], [this.component, { click: f.proxy(this.show, this) }]]; if (this.componentReset) { this._events.push([this.componentReset, { click: f.proxy(this.reset, this) }]) } } else { if (this.element.is("div")) { this.isInline = true } else { this._events = [[this.element, { click: f.proxy(this.show, this) }]] } } } for (var j = 0, k, l; j < this._events.length; j++) { k = this._events[j][0]; l = this._events[j][1]; k.on(l) } }, _detachEvents: function () { for (var j = 0, k, l; j < this._events.length; j++) { k = this._events[j][0]; l = this._events[j][1]; k.off(l) } this._events = [] }, show: function (j) { this.picker.show(); this.height = this.component ? this.component.outerHeight() : this.element.outerHeight(); if (this.forceParse) { this.update() } this.place(); f(window).on("resize", f.proxy(this.place, this)); if (j) { j.stopPropagation(); j.preventDefault() } this.isVisible = true; this.element.trigger({ type: "show", date: this.date }) }, hide: function (j) { if (!this.isVisible) { return } if (this.isInline) { return } this.picker.hide(); f(window).off("resize", this.place); this.viewMode = this.startViewMode; this.showMode(); if (!this.isInput) { f(document).off("mousedown", this.hide) } if (this.forceParse && (this.isInput && this.element.val() || this.hasInput && this.element.find("input").val())) { this.setValue() } this.isVisible = false; this.element.trigger({ type: "hide", date: this.date }) }, remove: function () { this._detachEvents(); f(document).off("mousedown", this.clickedOutside); this.picker.remove(); delete this.picker; delete this.element.data().datetimepicker }, getDate: function () { var j = this.getUTCDate(); return new Date(j.getTime() + (j.getTimezoneOffset() * 60000)) }, getUTCDate: function () { return this.date }, getInitialDate: function () { return this.initialDate }, setInitialDate: function (j) { this.initialDate = j }, setDate: function (j) { this.setUTCDate(new Date(j.getTime() - (j.getTimezoneOffset() * 60000))) }, setUTCDate: function (j) { if (j >= this.startDate && j <= this.endDate) { this.date = j; this.setValue(); this.viewDate = this.date; this.fill() } else { this.element.trigger({ type: "outOfRange", date: j, startDate: this.startDate, endDate: this.endDate }) } }, setFormat: function (k) { this.format = g.parseFormat(k, this.formatType); var j; if (this.isInput) { j = this.element } else { if (this.component) { j = this.element.find("input") } } if (j && j.val()) { this.setValue() } }, setValue: function () { var j = this.getFormattedDate(); if (!this.isInput) { if (this.component) { this.element.find("input").val(j) } this.element.data("date", j) } else { this.element.val(j) } if (this.linkField) { f("#" + this.linkField).val(this.getFormattedDate(this.linkFormat)) } }, getFormattedDate: function (j) { if (j == c) { j = this.format } return g.formatDate(this.date, j, this.language, this.formatType, this.timezone) }, setStartDate: function (j) { this.startDate = j || -Infinity; if (this.startDate !== -Infinity) { this.startDate = g.parseDate(this.startDate, this.format, this.language, this.formatType, this.timezone) } this.update(); this.updateNavArrows() }, setEndDate: function (j) { this.endDate = j || Infinity; if (this.endDate !== Infinity) { this.endDate = g.parseDate(this.endDate, this.format, this.language, this.formatType, this.timezone) } this.update(); this.updateNavArrows() }, setDatesDisabled: function (j) { this.datesDisabled = j || []; if (!f.isArray(this.datesDisabled)) { this.datesDisabled = this.datesDisabled.split(/,\s*/) } this.datesDisabled = f.map(this.datesDisabled, function (k) { return g.parseDate(k, this.format, this.language, this.formatType, this.timezone).toDateString() }); this.update(); this.updateNavArrows() }, setTitle: function (j, k) { return this.picker.find(j).find("th:eq(1)").text(this.title === false ? k : this.title) }, setDaysOfWeekDisabled: function (j) { this.daysOfWeekDisabled = j || []; if (!f.isArray(this.daysOfWeekDisabled)) { this.daysOfWeekDisabled = this.daysOfWeekDisabled.split(/,\s*/) } this.daysOfWeekDisabled = f.map(this.daysOfWeekDisabled, function (k) { return parseInt(k, 10) }); this.update(); this.updateNavArrows() }, setMinutesDisabled: function (j) { this.minutesDisabled = j || []; if (!f.isArray(this.minutesDisabled)) { this.minutesDisabled = this.minutesDisabled.split(/,\s*/) } this.minutesDisabled = f.map(this.minutesDisabled, function (k) { return parseInt(k, 10) }); this.update(); this.updateNavArrows() }, setHoursDisabled: function (j) { this.hoursDisabled = j || []; if (!f.isArray(this.hoursDisabled)) { this.hoursDisabled = this.hoursDisabled.split(/,\s*/) } this.hoursDisabled = f.map(this.hoursDisabled, function (k) { return parseInt(k, 10) }); this.update(); this.updateNavArrows() }, place: function () { if (this.isInline) { return } if (!this.zIndex) { var k = 0; f("div").each(function () { var p = parseInt(f(this).css("zIndex"), 10); if (p > k) { k = p } }); this.zIndex = k + 10 } var o, n, m, l; if (this.container instanceof f) { l = this.container.offset() } else { l = f(this.container).offset() } if (this.component) { o = this.component.offset(); m = o.left; if (this.pickerPosition == "bottom-left" || this.pickerPosition == "top-left") { m += this.component.outerWidth() - this.picker.outerWidth() } } else { o = this.element.offset(); m = o.left; if (this.pickerPosition == "bottom-left" || this.pickerPosition == "top-left") { m += this.element.outerWidth() - this.picker.outerWidth() } } var j = document.body.clientWidth || window.innerWidth; if (m + 220 > j) { m = j - 220 } if (this.pickerPosition == "top-left" || this.pickerPosition == "top-right") { n = o.top - this.picker.outerHeight() } else { n = o.top + this.height } n = n - l.top; m = m - l.left; this.picker.css({ top: n, left: m, zIndex: this.zIndex }) }, update: function () { var j, k = false; if (arguments && arguments.length && (typeof arguments[0] === "string" || arguments[0] instanceof Date)) { j = arguments[0]; k = true } else { j = (this.isInput ? this.element.val() : this.element.find("input").val()) || this.element.data("date") || this.initialDate; if (typeof j == "string" || j instanceof String) { j = j.replace(/^\s+|\s+$/g, "") } } if (!j) { j = new Date(); k = false } this.date = g.parseDate(j, this.format, this.language, this.formatType, this.timezone); if (k) { this.setValue() } if (this.date < this.startDate) { this.viewDate = new Date(this.startDate) } else { if (this.date > this.endDate) { this.viewDate = new Date(this.endDate) } else { this.viewDate = new Date(this.date) } } this.fill() }, fillDow: function () { var j = this.weekStart, k = "<tr>"; while (j < this.weekStart + 7) { k += '<th class="dow">' + a[this.language].daysMin[(j++) % 7] + "</th>" } k += "</tr>"; this.picker.find(".datetimepicker-days thead").append(k) }, fillMonths: function () { var k = "", j = 0; while (j < 12) { k += '<span class="month">' + a[this.language].monthsShort[j++] + "</span>" } this.picker.find(".datetimepicker-months td").html(k) }, fill: function () { if (this.date == null || this.viewDate == null) { return } var H = new Date(this.viewDate), u = H.getUTCFullYear(), I = H.getUTCMonth(), n = H.getUTCDate(), D = H.getUTCHours(), y = H.getUTCMinutes(), z = this.startDate !== -Infinity ? this.startDate.getUTCFullYear() : -Infinity, E = this.startDate !== -Infinity ? this.startDate.getUTCMonth() : -Infinity, q = this.endDate !== Infinity ? this.endDate.getUTCFullYear() : Infinity, A = this.endDate !== Infinity ? this.endDate.getUTCMonth() + 1 : Infinity, r = (new h(this.date.getUTCFullYear(), this.date.getUTCMonth(), this.date.getUTCDate())).valueOf(), G = new Date(); this.setTitle(".datetimepicker-days", a[this.language].months[I] + " " + u); if (this.formatViewType == "time") { var k = this.getFormattedDate(); this.setTitle(".datetimepicker-hours", k); this.setTitle(".datetimepicker-minutes", k) } else { this.setTitle(".datetimepicker-hours", n + " " + a[this.language].months[I] + " " + u); this.setTitle(".datetimepicker-minutes", n + " " + a[this.language].months[I] + " " + u) } this.picker.find("tfoot th.today").text(a[this.language].today || a.en.today).toggle(this.todayBtn !== false); this.picker.find("tfoot th.clear").text(a[this.language].clear || a.en.clear).toggle(this.clearBtn !== false); this.updateNavArrows(); this.fillMonths(); var K = h(u, I - 1, 28, 0, 0, 0, 0), C = g.getDaysInMonth(K.getUTCFullYear(), K.getUTCMonth()); K.setUTCDate(C); K.setUTCDate(C - (K.getUTCDay() - this.weekStart + 7) % 7); var j = new Date(K); j.setUTCDate(j.getUTCDate() + 42); j = j.valueOf(); var s = []; var v; while (K.valueOf() < j) { if (K.getUTCDay() == this.weekStart) { s.push("<tr>") } v = ""; if (K.getUTCFullYear() < u || (K.getUTCFullYear() == u && K.getUTCMonth() < I)) { v += " old" } else { if (K.getUTCFullYear() > u || (K.getUTCFullYear() == u && K.getUTCMonth() > I)) { v += " new" } } if (this.todayHighlight && K.getUTCFullYear() == G.getFullYear() && K.getUTCMonth() == G.getMonth() && K.getUTCDate() == G.getDate()) { v += " today" } if (K.valueOf() == r) { v += " active" } if ((K.valueOf() + 86400000) <= this.startDate || K.valueOf() > this.endDate || f.inArray(K.getUTCDay(), this.daysOfWeekDisabled) !== -1 || f.inArray(K.toDateString(), this.datesDisabled) !== -1) { v += " disabled" } s.push('<td class="day' + v + '">' + K.getUTCDate() + "</td>"); if (K.getUTCDay() == this.weekEnd) { s.push("</tr>") } K.setUTCDate(K.getUTCDate() + 1) } this.picker.find(".datetimepicker-days tbody").empty().append(s.join("")); s = []; var w = "", F = "", t = ""; var l = this.hoursDisabled || []; for (var B = 0; B < 24; B++) { if (l.indexOf(B) !== -1) { continue } var x = h(u, I, n, B); v = ""; if ((x.valueOf() + 3600000) <= this.startDate || x.valueOf() > this.endDate) { v += " disabled" } else { if (D == B) { v += " active" } } if (this.showMeridian && a[this.language].meridiem.length == 2) { F = (B < 12 ? a[this.language].meridiem[0] : a[this.language].meridiem[1]); if (F != t) { if (t != "") { s.push("</fieldset>") } s.push('<fieldset class="hour"><legend>' + F.toUpperCase() + "</legend>") } t = F; w = (B % 12 ? B % 12 : 12); s.push('<span class="hour' + v + " hour_" + (B < 12 ? "am" : "pm") + '">' + w + "</span>"); if (B == 23) { s.push("</fieldset>") } } else { w = B + ":00"; s.push('<span class="hour' + v + '">' + w + "</span>") } } this.picker.find(".datetimepicker-hours td").html(s.join("")); s = []; w = "", F = "", t = ""; var m = this.minutesDisabled || []; for (var B = 0; B < 60; B += this.minuteStep) { if (m.indexOf(B) !== -1) { continue } var x = h(u, I, n, D, B, 0); v = ""; if (x.valueOf() < this.startDate || x.valueOf() > this.endDate) { v += " disabled" } else { if (Math.floor(y / this.minuteStep) == Math.floor(B / this.minuteStep)) { v += " active" } } if (this.showMeridian && a[this.language].meridiem.length == 2) { F = (D < 12 ? a[this.language].meridiem[0] : a[this.language].meridiem[1]); if (F != t) { if (t != "") { s.push("</fieldset>") } s.push('<fieldset class="minute"><legend>' + F.toUpperCase() + "</legend>") } t = F; w = (D % 12 ? D % 12 : 12); s.push('<span class="minute' + v + '">' + w + ":" + (B < 10 ? "0" + B : B) + "</span>"); if (B == 59) { s.push("</fieldset>") } } else { w = B + ":00"; s.push('<span class="minute' + v + '">' + D + ":" + (B < 10 ? "0" + B : B) + "</span>") } } this.picker.find(".datetimepicker-minutes td").html(s.join("")); var L = this.date.getUTCFullYear(); var p = this.setTitle(".datetimepicker-months", u).end().find("span").removeClass("active"); if (L == u) { var o = p.length - 12; p.eq(this.date.getUTCMonth() + o).addClass("active") } if (u < z || u > q) { p.addClass("disabled") } if (u == z) { p.slice(0, E).addClass("disabled") } if (u == q) { p.slice(A).addClass("disabled") } s = ""; u = parseInt(u / 10, 10) * 10; var J = this.setTitle(".datetimepicker-years", u + "-" + (u + 9)).end().find("td"); u -= 1; for (var B = -1; B < 11; B++) { s += '<span class="year' + (B == -1 || B == 10 ? " old" : "") + (L == u ? " active" : "") + (u < z || u > q ? " disabled" : "") + '">' + u + "</span>"; u += 1 } J.html(s); this.place() }, updateNavArrows: function () { var n = new Date(this.viewDate), l = n.getUTCFullYear(), m = n.getUTCMonth(), k = n.getUTCDate(), j = n.getUTCHours(); switch (this.viewMode) { case 0: if (this.startDate !== -Infinity && l <= this.startDate.getUTCFullYear() && m <= this.startDate.getUTCMonth() && k <= this.startDate.getUTCDate() && j <= this.startDate.getUTCHours()) { this.picker.find(".prev").css({ visibility: "hidden" }) } else { this.picker.find(".prev").css({ visibility: "visible" }) } if (this.endDate !== Infinity && l >= this.endDate.getUTCFullYear() && m >= this.endDate.getUTCMonth() && k >= this.endDate.getUTCDate() && j >= this.endDate.getUTCHours()) { this.picker.find(".next").css({ visibility: "hidden" }) } else { this.picker.find(".next").css({ visibility: "visible" }) } break; case 1: if (this.startDate !== -Infinity && l <= this.startDate.getUTCFullYear() && m <= this.startDate.getUTCMonth() && k <= this.startDate.getUTCDate()) { this.picker.find(".prev").css({ visibility: "hidden" }) } else { this.picker.find(".prev").css({ visibility: "visible" }) } if (this.endDate !== Infinity && l >= this.endDate.getUTCFullYear() && m >= this.endDate.getUTCMonth() && k >= this.endDate.getUTCDate()) { this.picker.find(".next").css({ visibility: "hidden" }) } else { this.picker.find(".next").css({ visibility: "visible" }) } break; case 2: if (this.startDate !== -Infinity && l <= this.startDate.getUTCFullYear() && m <= this.startDate.getUTCMonth()) { this.picker.find(".prev").css({ visibility: "hidden" }) } else { this.picker.find(".prev").css({ visibility: "visible" }) } if (this.endDate !== Infinity && l >= this.endDate.getUTCFullYear() && m >= this.endDate.getUTCMonth()) { this.picker.find(".next").css({ visibility: "hidden" }) } else { this.picker.find(".next").css({ visibility: "visible" }) } break; case 3: case 4: if (this.startDate !== -Infinity && l <= this.startDate.getUTCFullYear()) { this.picker.find(".prev").css({ visibility: "hidden" }) } else { this.picker.find(".prev").css({ visibility: "visible" }) } if (this.endDate !== Infinity && l >= this.endDate.getUTCFullYear()) { this.picker.find(".next").css({ visibility: "hidden" }) } else { this.picker.find(".next").css({ visibility: "visible" }) } break } }, mousewheel: function (k) { k.preventDefault(); k.stopPropagation(); if (this.wheelPause) { return } this.wheelPause = true; var j = k.originalEvent; var m = j.wheelDelta; var l = m > 0 ? 1 : (m === 0) ? 0 : -1; if (this.wheelViewModeNavigationInverseDirection) { l = -l } this.showMode(l); setTimeout(f.proxy(function () { this.wheelPause = false }, this), this.wheelViewModeNavigationDelay) }, click: function (n) { n.stopPropagation(); n.preventDefault(); var o = f(n.target).closest("span, td, th, legend"); if (o.is("." + this.icontype)) { o = f(o).parent().closest("span, td, th, legend") } if (o.length == 1) { if (o.is(".disabled")) { this.element.trigger({ type: "outOfRange", date: this.viewDate, startDate: this.startDate, endDate: this.endDate }); return } switch (o[0].nodeName.toLowerCase()) { case "th": switch (o[0].className) { case "switch": this.showMode(1); break; case "prev": case "next": var j = g.modes[this.viewMode].navStep * (o[0].className == "prev" ? -1 : 1); switch (this.viewMode) { case 0: this.viewDate = this.moveHour(this.viewDate, j); break; case 1: this.viewDate = this.moveDate(this.viewDate, j); break; case 2: this.viewDate = this.moveMonth(this.viewDate, j); break; case 3: case 4: this.viewDate = this.moveYear(this.viewDate, j); break } this.fill(); this.element.trigger({ type: o[0].className + ":" + this.convertViewModeText(this.viewMode), date: this.viewDate, startDate: this.startDate, endDate: this.endDate }); break; case "clear": this.reset(); if (this.autoclose) { this.hide() } break; case "today": var k = new Date(); k = h(k.getFullYear(), k.getMonth(), k.getDate(), k.getHours(), k.getMinutes(), k.getSeconds(), 0); if (k < this.startDate) { k = this.startDate } else { if (k > this.endDate) { k = this.endDate } } this.viewMode = this.startViewMode; this.showMode(0); this._setDate(k); this.fill(); if (this.autoclose) { this.hide() } break } break; case "span": if (!o.is(".disabled")) { var q = this.viewDate.getUTCFullYear(), p = this.viewDate.getUTCMonth(), r = this.viewDate.getUTCDate(), s = this.viewDate.getUTCHours(), l = this.viewDate.getUTCMinutes(), t = this.viewDate.getUTCSeconds(); if (o.is(".month")) { this.viewDate.setUTCDate(1); p = o.parent().find("span").index(o); r = this.viewDate.getUTCDate(); this.viewDate.setUTCMonth(p); this.element.trigger({ type: "changeMonth", date: this.viewDate }); if (this.viewSelect >= 3) { this._setDate(h(q, p, r, s, l, t, 0)) } } else { if (o.is(".year")) { this.viewDate.setUTCDate(1); q = parseInt(o.text(), 10) || 0; this.viewDate.setUTCFullYear(q); this.element.trigger({ type: "changeYear", date: this.viewDate }); if (this.viewSelect >= 4) { this._setDate(h(q, p, r, s, l, t, 0)) } } else { if (o.is(".hour")) { s = parseInt(o.text(), 10) || 0; if (o.hasClass("hour_am") || o.hasClass("hour_pm")) { if (s == 12 && o.hasClass("hour_am")) { s = 0 } else { if (s != 12 && o.hasClass("hour_pm")) { s += 12 } } } this.viewDate.setUTCHours(s); this.element.trigger({ type: "changeHour", date: this.viewDate }); if (this.viewSelect >= 1) { this._setDate(h(q, p, r, s, l, t, 0)) } } else { if (o.is(".minute")) { l = parseInt(o.text().substr(o.text().indexOf(":") + 1), 10) || 0; this.viewDate.setUTCMinutes(l); this.element.trigger({ type: "changeMinute", date: this.viewDate }); if (this.viewSelect >= 0) { this._setDate(h(q, p, r, s, l, t, 0)) } } } } } if (this.viewMode != 0) { var m = this.viewMode; this.showMode(-1); this.fill(); if (m == this.viewMode && this.autoclose) { this.hide() } } else { this.fill(); if (this.autoclose) { this.hide() } } } break; case "td": if (o.is(".day") && !o.is(".disabled")) { var r = parseInt(o.text(), 10) || 1; var q = this.viewDate.getUTCFullYear(), p = this.viewDate.getUTCMonth(), s = this.viewDate.getUTCHours(), l = this.viewDate.getUTCMinutes(), t = this.viewDate.getUTCSeconds(); if (o.is(".old")) { if (p === 0) { p = 11; q -= 1 } else { p -= 1 } } else { if (o.is(".new")) { if (p == 11) { p = 0; q += 1 } else { p += 1 } } } this.viewDate.setUTCFullYear(q); this.viewDate.setUTCMonth(p, r); this.element.trigger({ type: "changeDay", date: this.viewDate }); if (this.viewSelect >= 2) { this._setDate(h(q, p, r, s, l, t, 0)) } } var m = this.viewMode; this.showMode(-1); this.fill(); if (m == this.viewMode && this.autoclose) { this.hide() } break } } }, _setDate: function (j, l) { if (!l || l == "date") { this.date = j } if (!l || l == "view") { this.viewDate = j } this.fill(); this.setValue(); var k; if (this.isInput) { k = this.element } else { if (this.component) { k = this.element.find("input") } } if (k) { k.change(); if (this.autoclose && (!l || l == "date")) { } } this.element.trigger({ type: "changeDate", date: this.getDate() }); if (j == null) { this.date = this.viewDate } }, moveMinute: function (k, j) { if (!j) { return k } var l = new Date(k.valueOf()); l.setUTCMinutes(l.getUTCMinutes() + (j * this.minuteStep)); return l }, moveHour: function (k, j) { if (!j) { return k } var l = new Date(k.valueOf()); l.setUTCHours(l.getUTCHours() + j); return l }, moveDate: function (k, j) { if (!j) { return k } var l = new Date(k.valueOf()); l.setUTCDate(l.getUTCDate() + j); return l }, moveMonth: function (j, k) { if (!k) { return j } var n = new Date(j.valueOf()), r = n.getUTCDate(), o = n.getUTCMonth(), m = Math.abs(k), q, p; k = k > 0 ? 1 : -1; if (m == 1) { p = k == -1 ? function () { return n.getUTCMonth() == o } : function () { return n.getUTCMonth() != q }; q = o + k; n.setUTCMonth(q); if (q < 0 || q > 11) { q = (q + 12) % 12 } } else { for (var l = 0; l < m; l++) { n = this.moveMonth(n, k) } q = n.getUTCMonth(); n.setUTCDate(r); p = function () { return q != n.getUTCMonth() } } while (p()) { n.setUTCDate(--r); n.setUTCMonth(q) } return n }, moveYear: function (k, j) { return this.moveMonth(k, j * 12) }, dateWithinRange: function (j) { return j >= this.startDate && j <= this.endDate }, keydown: function (n) { if (this.picker.is(":not(:visible)")) { if (n.keyCode == 27) { this.show() } return } var p = false, k, q, o, r, j; switch (n.keyCode) { case 27: this.hide(); n.preventDefault(); break; case 37: case 39: if (!this.keyboardNavigation) { break } k = n.keyCode == 37 ? -1 : 1; viewMode = this.viewMode; if (n.ctrlKey) { viewMode += 2 } else { if (n.shiftKey) { viewMode += 1 } } if (viewMode == 4) { r = this.moveYear(this.date, k); j = this.moveYear(this.viewDate, k) } else { if (viewMode == 3) { r = this.moveMonth(this.date, k); j = this.moveMonth(this.viewDate, k) } else { if (viewMode == 2) { r = this.moveDate(this.date, k); j = this.moveDate(this.viewDate, k) } else { if (viewMode == 1) { r = this.moveHour(this.date, k); j = this.moveHour(this.viewDate, k) } else { if (viewMode == 0) { r = this.moveMinute(this.date, k); j = this.moveMinute(this.viewDate, k) } } } } } if (this.dateWithinRange(r)) { this.date = r; this.viewDate = j; this.setValue(); this.update(); n.preventDefault(); p = true } break; case 38: case 40: if (!this.keyboardNavigation) { break } k = n.keyCode == 38 ? -1 : 1; viewMode = this.viewMode; if (n.ctrlKey) { viewMode += 2 } else { if (n.shiftKey) { viewMode += 1 } } if (viewMode == 4) { r = this.moveYear(this.date, k); j = this.moveYear(this.viewDate, k) } else { if (viewMode == 3) { r = this.moveMonth(this.date, k); j = this.moveMonth(this.viewDate, k) } else { if (viewMode == 2) { r = this.moveDate(this.date, k * 7); j = this.moveDate(this.viewDate, k * 7) } else { if (viewMode == 1) { if (this.showMeridian) { r = this.moveHour(this.date, k * 6); j = this.moveHour(this.viewDate, k * 6) } else { r = this.moveHour(this.date, k * 4); j = this.moveHour(this.viewDate, k * 4) } } else { if (viewMode == 0) { r = this.moveMinute(this.date, k * 4); j = this.moveMinute(this.viewDate, k * 4) } } } } } if (this.dateWithinRange(r)) { this.date = r; this.viewDate = j; this.setValue(); this.update(); n.preventDefault(); p = true } break; case 13: if (this.viewMode != 0) { var m = this.viewMode; this.showMode(-1); this.fill(); if (m == this.viewMode && this.autoclose) { this.hide() } } else { this.fill(); if (this.autoclose) { this.hide() } } n.preventDefault(); break; case 9: this.hide(); break } if (p) { var l; if (this.isInput) { l = this.element } else { if (this.component) { l = this.element.find("input") } } if (l) { l.change() } this.element.trigger({ type: "changeDate", date: this.getDate() }) } }, showMode: function (j) { if (j) { var k = Math.max(0, Math.min(g.modes.length - 1, this.viewMode + j)); if (k >= this.minView && k <= this.maxView) { this.element.trigger({ type: "changeMode", date: this.viewDate, oldViewMode: this.viewMode, newViewMode: k }); this.viewMode = k } } this.picker.find(">div").hide().filter(".datetimepicker-" + g.modes[this.viewMode].clsName).css("display", "block"); this.updateNavArrows() }, reset: function (j) { this._setDate(null, "date") }, convertViewModeText: function (j) { switch (j) { case 4: return "decade"; case 3: return "year"; case 2: return "month"; case 1: return "day"; case 0: return "hour" } } }; var b = f.fn.datetimepicker; f.fn.datetimepicker = function (l) { var j = Array.apply(null, arguments); j.shift(); var k; this.each(function () { var o = f(this), n = o.data("datetimepicker"), m = typeof l == "object" && l; if (!n) { o.data("datetimepicker", (n = new i(this, f.extend({}, f.fn.datetimepicker.defaults, m)))) } if (typeof l == "string" && typeof n[l] == "function") { k = n[l].apply(n, j); if (k !== c) { return false } } }); if (k !== c) { return k } else { return this } }; f.fn.datetimepicker.defaults = {}; f.fn.datetimepicker.Constructor = i; var a = f.fn.datetimepicker.dates = { en: { days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"], months: ["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"], meridiem: ["am", "pm"], suffix: ["st", "nd", "rd", "th"], today: "Today", clear: "Clear" } }; var g = { modes: [{ clsName: "minutes", navFnc: "Hours", navStep: 1 }, { clsName: "hours", navFnc: "Date", navStep: 1 }, { clsName: "days", navFnc: "Month", navStep: 1 }, { clsName: "months", navFnc: "FullYear", navStep: 1 }, { clsName: "years", navFnc: "FullYear", navStep: 10 }], isLeapYear: function (j) { return (((j % 4 === 0) && (j % 100 !== 0)) || (j % 400 === 0)) }, getDaysInMonth: function (j, k) { return [31, (g.isLeapYear(j) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][k] }, getDefaultFormat: function (j, k) { if (j == "standard") { if (k == "input") { return "yyyy-mm-dd hh:ii" } else { return "yyyy-mm-dd hh:ii:ss" } } else { if (j == "php") { if (k == "input") { return "Y-m-d H:i" } else { return "Y-m-d H:i:s" } } else { throw new Error("Invalid format type.") } } }, validParts: function (j) { if (j == "standard") { return /t|hh?|HH?|p|P|z|Z|ii?|ss?|dd?|DD?|mm?|MM?|yy(?:yy)?/g } else { if (j == "php") { return /[dDjlNwzFmMnStyYaABgGhHis]/g } else { throw new Error("Invalid format type.") } } }, nonpunctuation: /[^ -\/:-@\[-`{-~\t\n\rTZ]+/g, parseFormat: function (m, k) { var j = m.replace(this.validParts(k), "\0").split("\0"), l = m.match(this.validParts(k)); if (!j || !j.length || !l || l.length == 0) { throw new Error("Invalid date format.") } return { separators: j, parts: l } }, parseDate: function (A, y, v, j, r) { if (A instanceof Date) { var u = new Date(A.valueOf() - A.getTimezoneOffset() * 60000); u.setMilliseconds(0); return u } if (/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(A)) { y = this.parseFormat("yyyy-mm-dd", j) } if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}$/.test(A)) { y = this.parseFormat("yyyy-mm-dd hh:ii", j) } if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}\:\d{1,2}[Z]{0,1}$/.test(A)) { y = this.parseFormat("yyyy-mm-dd hh:ii:ss", j) } if (/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(A)) { var l = /([-+]\d+)([dmwy])/, q = A.match(/([-+]\d+)([dmwy])/g), t, p; A = new Date(); for (var x = 0; x < q.length; x++) { t = l.exec(q[x]); p = parseInt(t[1]); switch (t[2]) { case "d": A.setUTCDate(A.getUTCDate() + p); break; case "m": A = i.prototype.moveMonth.call(i.prototype, A, p); break; case "w": A.setUTCDate(A.getUTCDate() + p * 7); break; case "y": A = i.prototype.moveYear.call(i.prototype, A, p); break } } return h(A.getUTCFullYear(), A.getUTCMonth(), A.getUTCDate(), A.getUTCHours(), A.getUTCMinutes(), A.getUTCSeconds(), 0) } var q = A && A.toString().match(this.nonpunctuation) || [], A = new Date(0, 0, 0, 0, 0, 0, 0), m = {}, z = ["hh", "h", "ii", "i", "ss", "s", "yyyy", "yy", "M", "MM", "m", "mm", "D", "DD", "d", "dd", "H", "HH", "p", "P", "z", "Z"], o = { hh: function (C, s) { return C.setUTCHours(s) }, h: function (C, s) { return C.setUTCHours(s) }, HH: function (C, s) { return C.setUTCHours(s == 12 ? 0 : s) }, H: function (C, s) { return C.setUTCHours(s == 12 ? 0 : s) }, ii: function (C, s) { return C.setUTCMinutes(s) }, i: function (C, s) { return C.setUTCMinutes(s) }, ss: function (C, s) { return C.setUTCSeconds(s) }, s: function (C, s) { return C.setUTCSeconds(s) }, yyyy: function (C, s) { return C.setUTCFullYear(s) }, yy: function (C, s) { return C.setUTCFullYear(2000 + s) }, m: function (C, s) { s -= 1; while (s < 0) { s += 12 } s %= 12; C.setUTCMonth(s); while (C.getUTCMonth() != s) { if (isNaN(C.getUTCMonth())) { return C } else { C.setUTCDate(C.getUTCDate() - 1) } } return C }, d: function (C, s) { return C.setUTCDate(s) }, p: function (C, s) { return C.setUTCHours(s == 1 ? C.getUTCHours() + 12 : C.getUTCHours()) }, z: function () { return r } }, B, k, t; o.M = o.MM = o.mm = o.m; o.dd = o.d; o.P = o.p; o.Z = o.z; A = h(A.getFullYear(), A.getMonth(), A.getDate(), A.getHours(), A.getMinutes(), A.getSeconds()); if (q.length == y.parts.length) { for (var x = 0, w = y.parts.length; x < w; x++) { B = parseInt(q[x], 10); t = y.parts[x]; if (isNaN(B)) { switch (t) { case "MM": k = f(a[v].months).filter(function () { var s = this.slice(0, q[x].length), C = q[x].slice(0, s.length); return s == C }); B = f.inArray(k[0], a[v].months) + 1; break; case "M": k = f(a[v].monthsShort).filter(function () { var s = this.slice(0, q[x].length), C = q[x].slice(0, s.length); return s.toLowerCase() == C.toLowerCase() }); B = f.inArray(k[0], a[v].monthsShort) + 1; break; case "p": case "P": B = f.inArray(q[x].toLowerCase(), a[v].meridiem); break; case "z": case "Z": r; break } } m[t] = B } for (var x = 0, n; x < z.length; x++) { n = z[x]; if (n in m && !isNaN(m[n])) { o[n](A, m[n]) } } } return A }, formatDate: function (l, q, m, p, o) { if (l == null) { return "" } var k; if (p == "standard") { k = { t: l.getTime(), yy: l.getUTCFullYear().toString().substring(2), yyyy: l.getUTCFullYear(), m: l.getUTCMonth() + 1, M: a[m].monthsShort[l.getUTCMonth()], MM: a[m].months[l.getUTCMonth()], d: l.getUTCDate(), D: a[m].daysShort[l.getUTCDay()], DD: a[m].days[l.getUTCDay()], p: (a[m].meridiem.length == 2 ? a[m].meridiem[l.getUTCHours() < 12 ? 0 : 1] : ""), h: l.getUTCHours(), i: l.getUTCMinutes(), s: l.getUTCSeconds(), z: o }; if (a[m].meridiem.length == 2) { k.H = (k.h % 12 == 0 ? 12 : k.h % 12) } else { k.H = k.h } k.HH = (k.H < 10 ? "0" : "") + k.H; k.P = k.p.toUpperCase(); k.Z = k.z; k.hh = (k.h < 10 ? "0" : "") + k.h; k.ii = (k.i < 10 ? "0" : "") + k.i; k.ss = (k.s < 10 ? "0" : "") + k.s; k.dd = (k.d < 10 ? "0" : "") + k.d; k.mm = (k.m < 10 ? "0" : "") + k.m } else { if (p == "php") { k = { y: l.getUTCFullYear().toString().substring(2), Y: l.getUTCFullYear(), F: a[m].months[l.getUTCMonth()], M: a[m].monthsShort[l.getUTCMonth()], n: l.getUTCMonth() + 1, t: g.getDaysInMonth(l.getUTCFullYear(), l.getUTCMonth()), j: l.getUTCDate(), l: a[m].days[l.getUTCDay()], D: a[m].daysShort[l.getUTCDay()], w: l.getUTCDay(), N: (l.getUTCDay() == 0 ? 7 : l.getUTCDay()), S: (l.getUTCDate() % 10 <= a[m].suffix.length ? a[m].suffix[l.getUTCDate() % 10 - 1] : ""), a: (a[m].meridiem.length == 2 ? a[m].meridiem[l.getUTCHours() < 12 ? 0 : 1] : ""), g: (l.getUTCHours() % 12 == 0 ? 12 : l.getUTCHours() % 12), G: l.getUTCHours(), i: l.getUTCMinutes(), s: l.getUTCSeconds() }; k.m = (k.n < 10 ? "0" : "") + k.n; k.d = (k.j < 10 ? "0" : "") + k.j; k.A = k.a.toString().toUpperCase(); k.h = (k.g < 10 ? "0" : "") + k.g; k.H = (k.G < 10 ? "0" : "") + k.G; k.i = (k.i < 10 ? "0" : "") + k.i; k.s = (k.s < 10 ? "0" : "") + k.s } else { throw new Error("Invalid format type.") } } var l = [], r = f.extend([], q.separators); for (var n = 0, j = q.parts.length; n < j; n++) { if (r.length) { l.push(r.shift()) } l.push(k[q.parts[n]]) } if (r.length) { l.push(r.shift()) } return l.join("") }, convertViewMode: function (j) { switch (j) { case 4: case "decade": j = 4; break; case 3: case "year": j = 3; break; case 2: case "month": j = 2; break; case 1: case "day": j = 1; break; case 0: case "hour": j = 0; break } return j }, headTemplate: '<thead><tr><th class="prev"><i class="{iconType} {leftArrow}"/></th><th colspan="5" class="switch"></th><th class="next"><i class="{iconType} {rightArrow}"/></th></tr></thead>', headTemplateV3: '<thead><tr><th class="prev"><span class="{iconType} {leftArrow}"></span> </th><th colspan="5" class="switch"></th><th class="next"><span class="{iconType} {rightArrow}"></span> </th></tr></thead>', contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>', footTemplate: '<tfoot><tr><th colspan="7" class="today"></th></tr><tr><th colspan="7" class="clear"></th></tr></tfoot>' }; g.template = '<div class="datetimepicker"><div class="datetimepicker-minutes"><table class=" table-condensed">' + g.headTemplate + g.contTemplate + g.footTemplate + '</table></div><div class="datetimepicker-hours"><table class=" table-condensed">' + g.headTemplate + g.contTemplate + g.footTemplate + '</table></div><div class="datetimepicker-days"><table class=" table-condensed">' + g.headTemplate + "<tbody></tbody>" + g.footTemplate + '</table></div><div class="datetimepicker-months"><table class="table-condensed">' + g.headTemplate + g.contTemplate + g.footTemplate + '</table></div><div class="datetimepicker-years"><table class="table-condensed">' + g.headTemplate + g.contTemplate + g.footTemplate + "</table></div></div>"; g.templateV3 = '<div class="datetimepicker"><div class="datetimepicker-minutes"><table class=" table-condensed">' + g.headTemplateV3 + g.contTemplate + g.footTemplate + '</table></div><div class="datetimepicker-hours"><table class=" table-condensed">' + g.headTemplateV3 + g.contTemplate + g.footTemplate + '</table></div><div class="datetimepicker-days"><table class=" table-condensed">' + g.headTemplateV3 + "<tbody></tbody>" + g.footTemplate + '</table></div><div class="datetimepicker-months"><table class="table-condensed">' + g.headTemplateV3 + g.contTemplate + g.footTemplate + '</table></div><div class="datetimepicker-years"><table class="table-condensed">' + g.headTemplateV3 + g.contTemplate + g.footTemplate + "</table></div></div>"; f.fn.datetimepicker.DPGlobal = g; f.fn.datetimepicker.noConflict = function () { f.fn.datetimepicker = b; return this }; f(document).on("focus.datetimepicker.data-api click.datetimepicker.data-api", '[data-provide="datetimepicker"]', function (k) { var j = f(this); if (j.data("datetimepicker")) { return } k.preventDefault(); j.datetimepicker("show") }); f(function () { f('[data-provide="datetimepicker-inline"]').datetimepicker() }) }));
