/*! jQuery Timepicker Addon - v1.6.3 - 2016-04-20 * http://trentrichardson.com/examples/timepicker * Copyright (c) 2016 Trent Richardson; Licensed MIT */ !function (a) { "function" == typeof define && define.amd ? define(["jquery", "jquery-ui"], a) : a(jQuery) }(function ($) { if ($.ui.timepicker = $.ui.timepicker || {}, !$.ui.timepicker.version) { $.extend($.ui, { timepicker: { version: "1.6.3" } }); var Timepicker = function () { this.regional = [], this.regional[""] = { currentText: "Now", closeText: "Done", amNames: ["AM", "A"], pmNames: ["PM", "P"], timeFormat: "HH:mm", timeSuffix: "", timeOnlyTitle: "Choose Time", timeText: "Time", hourText: "Hour", minuteText: "Minute", secondText: "Second", millisecText: "Millisecond", microsecText: "Microsecond", timezoneText: "Time Zone", isRTL: !1 }, this._defaults = { showButtonPanel: !0, timeOnly: !1, timeOnlyShowDate: !1, showHour: null, showMinute: null, showSecond: null, showMillisec: null, showMicrosec: null, showTimezone: null, showTime: !0, stepHour: 1, stepMinute: 1, stepSecond: 1, stepMillisec: 1, stepMicrosec: 1, hour: 0, minute: 0, second: 0, millisec: 0, microsec: 0, timezone: null, hourMin: 0, minuteMin: 0, secondMin: 0, millisecMin: 0, microsecMin: 0, hourMax: 23, minuteMax: 59, secondMax: 59, millisecMax: 999, microsecMax: 999, minDateTime: null, maxDateTime: null, maxTime: null, minTime: null, onSelect: null, hourGrid: 0, minuteGrid: 0, secondGrid: 0, millisecGrid: 0, microsecGrid: 0, alwaysSetTime: !0, separator: " ", altFieldTimeOnly: !0, altTimeFormat: null, altSeparator: null, altTimeSuffix: null, altRedirectFocus: !0, pickerTimeFormat: null, pickerTimeSuffix: null, showTimepicker: !0, timezoneList: null, addSliderAccess: !1, sliderAccessArgs: null, controlType: "slider", oneLine: !1, defaultValue: null, parse: "strict", afterInject: null }, $.extend(this._defaults, this.regional[""]) }; $.extend(Timepicker.prototype, { $input: null, $altInput: null, $timeObj: null, inst: null, hour_slider: null, minute_slider: null, second_slider: null, millisec_slider: null, microsec_slider: null, timezone_select: null, maxTime: null, minTime: null, hour: 0, minute: 0, second: 0, millisec: 0, microsec: 0, timezone: null, hourMinOriginal: null, minuteMinOriginal: null, secondMinOriginal: null, millisecMinOriginal: null, microsecMinOriginal: null, hourMaxOriginal: null, minuteMaxOriginal: null, secondMaxOriginal: null, millisecMaxOriginal: null, microsecMaxOriginal: null, ampm: "", formattedDate: "", formattedTime: "", formattedDateTime: "", timezoneList: null, units: ["hour", "minute", "second", "millisec", "microsec"], support: {}, control: null, setDefaults: function (a) { return extendRemove(this._defaults, a || {}), this }, _newInst: function ($input, opts) { var tp_inst = new Timepicker, inlineSettings = {}, fns = {}, overrides, i; for (var attrName in this._defaults) if (this._defaults.hasOwnProperty(attrName)) { var attrValue = $input.attr("time:" + attrName); if (attrValue) try { inlineSettings[attrName] = eval(attrValue) } catch (err) { inlineSettings[attrName] = attrValue } } overrides = { beforeShow: function (a, b) { return $.isFunction(tp_inst._defaults.evnts.beforeShow) ? tp_inst._defaults.evnts.beforeShow.call($input[0], a, b, tp_inst) : void 0 }, onChangeMonthYear: function (a, b, c) { $.isFunction(tp_inst._defaults.evnts.onChangeMonthYear) && tp_inst._defaults.evnts.onChangeMonthYear.call($input[0], a, b, c, tp_inst) }, onClose: function (a, b) { tp_inst.timeDefined === !0 && "" !== $input.val() && tp_inst._updateDateTime(b), $.isFunction(tp_inst._defaults.evnts.onClose) && tp_inst._defaults.evnts.onClose.call($input[0], a, b, tp_inst) } }; for (i in overrides) overrides.hasOwnProperty(i) && (fns[i] = opts[i] || this._defaults[i] || null); tp_inst._defaults = $.extend({}, this._defaults, inlineSettings, opts, overrides, { evnts: fns, timepicker: tp_inst }), tp_inst.amNames = $.map(tp_inst._defaults.amNames, function (a) { return a.toUpperCase() }), tp_inst.pmNames = $.map(tp_inst._defaults.pmNames, function (a) { return a.toUpperCase() }), tp_inst.support = detectSupport(tp_inst._defaults.timeFormat + (tp_inst._defaults.pickerTimeFormat ? tp_inst._defaults.pickerTimeFormat : "") + (tp_inst._defaults.altTimeFormat ? tp_inst._defaults.altTimeFormat : "")), "string" == typeof tp_inst._defaults.controlType ? ("slider" === tp_inst._defaults.controlType && "undefined" == typeof $.ui.slider && (tp_inst._defaults.controlType = "select"), tp_inst.control = tp_inst._controls[tp_inst._defaults.controlType]) : tp_inst.control = tp_inst._defaults.controlType; var timezoneList = [-720, -660, -600, -570, -540, -480, -420, -360, -300, -270, -240, -210, -180, -120, -60, 0, 60, 120, 180, 210, 240, 270, 300, 330, 345, 360, 390, 420, 480, 525, 540, 570, 600, 630, 660, 690, 720, 765, 780, 840]; null !== tp_inst._defaults.timezoneList && (timezoneList = tp_inst._defaults.timezoneList); var tzl = timezoneList.length, tzi = 0, tzv = null; if (tzl > 0 && "object" != typeof timezoneList[0]) for (; tzl > tzi; tzi++)tzv = timezoneList[tzi], timezoneList[tzi] = { value: tzv, label: $.timepicker.timezoneOffsetString(tzv, tp_inst.support.iso8601) }; return tp_inst._defaults.timezoneList = timezoneList, tp_inst.timezone = null !== tp_inst._defaults.timezone ? $.timepicker.timezoneOffsetNumber(tp_inst._defaults.timezone) : -1 * (new Date).getTimezoneOffset(), tp_inst.hour = tp_inst._defaults.hour < tp_inst._defaults.hourMin ? tp_inst._defaults.hourMin : tp_inst._defaults.hour > tp_inst._defaults.hourMax ? tp_inst._defaults.hourMax : tp_inst._defaults.hour, tp_inst.minute = tp_inst._defaults.minute < tp_inst._defaults.minuteMin ? tp_inst._defaults.minuteMin : tp_inst._defaults.minute > tp_inst._defaults.minuteMax ? tp_inst._defaults.minuteMax : tp_inst._defaults.minute, tp_inst.second = tp_inst._defaults.second < tp_inst._defaults.secondMin ? tp_inst._defaults.secondMin : tp_inst._defaults.second > tp_inst._defaults.secondMax ? tp_inst._defaults.secondMax : tp_inst._defaults.second, tp_inst.millisec = tp_inst._defaults.millisec < tp_inst._defaults.millisecMin ? tp_inst._defaults.millisecMin : tp_inst._defaults.millisec > tp_inst._defaults.millisecMax ? tp_inst._defaults.millisecMax : tp_inst._defaults.millisec, tp_inst.microsec = tp_inst._defaults.microsec < tp_inst._defaults.microsecMin ? tp_inst._defaults.microsecMin : tp_inst._defaults.microsec > tp_inst._defaults.microsecMax ? tp_inst._defaults.microsecMax : tp_inst._defaults.microsec, tp_inst.ampm = "", tp_inst.$input = $input, tp_inst._defaults.altField && (tp_inst.$altInput = $(tp_inst._defaults.altField), tp_inst._defaults.altRedirectFocus === !0 && tp_inst.$altInput.css({ cursor: "pointer" }).focus(function () { $input.trigger("focus") })), (0 === tp_inst._defaults.minDate || 0 === tp_inst._defaults.minDateTime) && (tp_inst._defaults.minDate = new Date), (0 === tp_inst._defaults.maxDate || 0 === tp_inst._defaults.maxDateTime) && (tp_inst._defaults.maxDate = new Date), void 0 !== tp_inst._defaults.minDate && tp_inst._defaults.minDate instanceof Date && (tp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime())), void 0 !== tp_inst._defaults.minDateTime && tp_inst._defaults.minDateTime instanceof Date && (tp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime())), void 0 !== tp_inst._defaults.maxDate && tp_inst._defaults.maxDate instanceof Date && (tp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime())), void 0 !== tp_inst._defaults.maxDateTime && tp_inst._defaults.maxDateTime instanceof Date && (tp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime())), tp_inst.$input.bind("focus", function () { tp_inst._onFocus() }), tp_inst }, _addTimePicker: function (a) { var b = $.trim(this.$altInput && this._defaults.altFieldTimeOnly ? this.$input.val() + " " + this.$altInput.val() : this.$input.val()); this.timeDefined = this._parseTime(b), this._limitMinMaxDateTime(a, !1), this._injectTimePicker(), this._afterInject() }, _parseTime: function (a, b) { if (this.inst || (this.inst = $.datepicker._getInst(this.$input[0])), b || !this._defaults.timeOnly) { var c = $.datepicker._get(this.inst, "dateFormat"); try { var d = parseDateTimeInternal(c, this._defaults.timeFormat, a, $.datepicker._getFormatConfig(this.inst), this._defaults); if (!d.timeObj) return !1; $.extend(this, d.timeObj) } catch (e) { return $.timepicker.log("Error parsing the date/time string: " + e + "\ndate/time string = " + a + "\ntimeFormat = " + this._defaults.timeFormat + "\ndateFormat = " + c), !1 } return !0 } var f = $.datepicker.parseTime(this._defaults.timeFormat, a, this._defaults); return f ? ($.extend(this, f), !0) : !1 }, _afterInject: function () { var a = this.inst.settings; $.isFunction(a.afterInject) && a.afterInject.call(this) }, _injectTimePicker: function () { var a = this.inst.dpDiv, b = this.inst.settings, c = this, d = "", e = "", f = null, g = {}, h = {}, i = null, j = 0, k = 0; if (0 === a.find("div.ui-timepicker-div").length && b.showTimepicker) { var l = " ui_tpicker_unit_hide", m = '
' + b.timeText + '
"; for (j = 0, k = this.units.length; k > j; j++) { if (d = this.units[j], e = d.substr(0, 1).toUpperCase() + d.substr(1), f = null !== b["show" + e] ? b["show" + e] : this.support[d], g[d] = parseInt(b[d + "Max"] - (b[d + "Max"] - b[d + "Min"]) % b["step" + e], 10), h[d] = 0, m += '
' + b[d + "Text"] + '
', f && b[d + "Grid"] > 0) { if (m += '
', "hour" === d) for (var n = b[d + "Min"]; n <= g[d]; n += parseInt(b[d + "Grid"], 10)) { h[d]++; var o = $.datepicker.formatTime(this.support.ampm ? "hht" : "HH", { hour: n }, b); m += '" } else for (var p = b[d + "Min"]; p <= g[d]; p += parseInt(b[d + "Grid"], 10))h[d]++, m += '"; m += "
' + o + "' + (10 > p ? "0" : "") + p + "
" } m += "
" } var q = null !== b.showTimezone ? b.showTimezone : this.support.timezone; m += '
' + b.timezoneText + "
", m += '
', m += "
"; var r = $(m); for (b.timeOnly === !0 && (r.prepend('
' + b.timeOnlyTitle + "
"), a.find(".ui-datepicker-header, .ui-datepicker-calendar").hide()), j = 0, k = c.units.length; k > j; j++)d = c.units[j], e = d.substr(0, 1).toUpperCase() + d.substr(1), f = null !== b["show" + e] ? b["show" + e] : this.support[d], c[d + "_slider"] = c.control.create(c, r.find(".ui_tpicker_" + d + "_slider"), d, c[d], b[d + "Min"], g[d], b["step" + e]), f && b[d + "Grid"] > 0 && (i = 100 * h[d] * b[d + "Grid"] / (g[d] - b[d + "Min"]), r.find(".ui_tpicker_" + d + " table").css({ width: i + "%", marginLeft: b.isRTL ? "0" : i / (-2 * h[d]) + "%", marginRight: b.isRTL ? i / (-2 * h[d]) + "%" : "0", borderCollapse: "collapse" }).find("td").click(function (a) { var b = $(this), e = b.html(), f = parseInt(e.replace(/[^0-9]/g), 10), g = e.replace(/[^apm]/gi), h = b.data("for"); "hour" === h && (-1 !== g.indexOf("p") && 12 > f ? f += 12 : -1 !== g.indexOf("a") && 12 === f && (f = 0)), c.control.value(c, c[h + "_slider"], d, f), c._onTimeChange(), c._onSelectHandler() }).css({ cursor: "pointer", width: 100 / h[d] + "%", textAlign: "center", overflow: "hidden" })); if (this.timezone_select = r.find(".ui_tpicker_timezone").append("").find("select"), $.fn.append.apply(this.timezone_select, $.map(b.timezoneList, function (a, b) { return $("