(function ($) { $.ui.timepicker = $.ui.timepicker || {}; if ($.ui.timepicker.version) { return } $.extend($.ui, {timepicker: {version: "1.1.1"}}); function Timepicker() { 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", timezoneText: "Time Zone", isRTL: false}; this._defaults = {showButtonPanel: true, timeOnly: false, showHour: true, showMinute: true, showSecond: false, showMillisec: false, showTimezone: false, showTime: true, stepHour: 1, stepMinute: 1, stepSecond: 1, stepMillisec: 1, hour: 0, minute: 0, second: 0, millisec: 0, timezone: null, useLocalTimezone: false, defaultTimezone: "+0000", hourMin: 0, minuteMin: 0, secondMin: 0, millisecMin: 0, hourMax: 23, minuteMax: 59, secondMax: 59, millisecMax: 999, minDateTime: null, maxDateTime: null, onSelect: null, hourGrid: 0, minuteGrid: 0, secondGrid: 0, millisecGrid: 0, alwaysSetTime: true, separator: " ", altFieldTimeOnly: true, altTimeFormat: null, altSeparator: null, altTimeSuffix: null, pickerTimeFormat: null, pickerTimeSuffix: null, showTimepicker: true, timezoneIso8601: false, timezoneList: null, addSliderAccess: false, sliderAccessArgs: null, controlType: "slider", defaultValue: null, parse: "strict"}; $.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, timezone_select: null, hour: 0, minute: 0, second: 0, millisec: 0, timezone: null, defaultTimezone: "+0000", hourMinOriginal: null, minuteMinOriginal: null, secondMinOriginal: null, millisecMinOriginal: null, hourMaxOriginal: null, minuteMaxOriginal: null, secondMaxOriginal: null, millisecMaxOriginal: null, ampm: "", formattedDate: "", formattedTime: "", formattedDateTime: "", timezoneList: null, units: ["hour", "minute", "second", "millisec"], control: null, setDefaults: function (settings) { extendRemove(this._defaults, settings || {}); return this }, _newInst: function ($input, o) { 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 (input, dp_inst) { if ($.isFunction(tp_inst._defaults.evnts.beforeShow)) { return tp_inst._defaults.evnts.beforeShow.call($input[0], input, dp_inst, tp_inst) } }, onChangeMonthYear: function (year, month, dp_inst) { tp_inst._updateDateTime(dp_inst); if ($.isFunction(tp_inst._defaults.evnts.onChangeMonthYear)) { tp_inst._defaults.evnts.onChangeMonthYear.call($input[0], year, month, dp_inst, tp_inst) } }, onClose: function (dateText, dp_inst) { if (tp_inst.timeDefined === true && $input.val() !== "") { tp_inst._updateDateTime(dp_inst) } if ($.isFunction(tp_inst._defaults.evnts.onClose)) { tp_inst._defaults.evnts.onClose.call($input[0], dateText, dp_inst, tp_inst) } }}; for (i in overrides) { if (overrides.hasOwnProperty(i)) { fns[i] = o[i] || null } } tp_inst._defaults = $.extend({}, this._defaults, inlineSettings, o, overrides, {evnts: fns, timepicker: tp_inst}); tp_inst.amNames = $.map(tp_inst._defaults.amNames, function (val) { return val.toUpperCase() }); tp_inst.pmNames = $.map(tp_inst._defaults.pmNames, function (val) { return val.toUpperCase() }); if (typeof(tp_inst._defaults.controlType) === "string") { if ($.fn[tp_inst._defaults.controlType] === undefined) { tp_inst._defaults.controlType = "select" } tp_inst.control = tp_inst._controls[tp_inst._defaults.controlType] } else { tp_inst.control = tp_inst._defaults.controlType } if (tp_inst._defaults.timezoneList === null) { var timezoneList = ["-1200", "-1100", "-1000", "-0930", "-0900", "-0800", "-0700", "-0600", "-0500", "-0430", "-0400", "-0330", "-0300", "-0200", "-0100", "+0000", "+0100", "+0200", "+0300", "+0330", "+0400", "+0430", "+0500", "+0530", "+0545", "+0600", "+0630", "+0700", "+0800", "+0845", "+0900", "+0930", "+1000", "+1030", "+1100", "+1130", "+1200", "+1245", "+1300", "+1400"]; if (tp_inst._defaults.timezoneIso8601) { timezoneList = $.map(timezoneList, function (val) { return val == "+0000" ? "Z" : (val.substring(0, 3) + ":" + val.substring(3)) }) } tp_inst._defaults.timezoneList = timezoneList } tp_inst.timezone = tp_inst._defaults.timezone; tp_inst.hour = tp_inst._defaults.hour; tp_inst.minute = tp_inst._defaults.minute; tp_inst.second = tp_inst._defaults.second; tp_inst.millisec = tp_inst._defaults.millisec; tp_inst.ampm = ""; tp_inst.$input = $input; if (o.altField) { tp_inst.$altInput = $(o.altField).css({cursor: "pointer"}).focus(function () { $input.trigger("focus") }) } if (tp_inst._defaults.minDate === 0 || tp_inst._defaults.minDateTime === 0) { tp_inst._defaults.minDate = new Date() } if (tp_inst._defaults.maxDate === 0 || tp_inst._defaults.maxDateTime === 0) { tp_inst._defaults.maxDate = new Date() } if (tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date) { tp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime()) } if (tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date) { tp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime()) } if (tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date) { tp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime()) } if (tp_inst._defaults.maxDateTime !== undefined && 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() }); return tp_inst }, _addTimePicker: function (dp_inst) { var currDT = (this.$altInput && this._defaults.altFieldTimeOnly) ? this.$input.val() + " " + this.$altInput.val() : this.$input.val(); this.timeDefined = this._parseTime(currDT); this._limitMinMaxDateTime(dp_inst, false); this._injectTimePicker() }, _parseTime: function (timeString, withDate) { if (!this.inst) { this.inst = $.datepicker._getInst(this.$input[0]) } if (withDate || !this._defaults.timeOnly) { var dp_dateFormat = $.datepicker._get(this.inst, "dateFormat"); try { var parseRes = parseDateTimeInternal(dp_dateFormat, this._defaults.timeFormat, timeString, $.datepicker._getFormatConfig(this.inst), this._defaults); if (!parseRes.timeObj) { return false } $.extend(this, parseRes.timeObj) } catch (err) { $.datepicker.log("Error parsing the date/time string: " + err + "\ndate/time string = " + timeString + "\ntimeFormat = " + this._defaults.timeFormat + "\ndateFormat = " + dp_dateFormat); return false } return true } else { var timeObj = $.datepicker.parseTime(this._defaults.timeFormat, timeString, this._defaults); if (!timeObj) { return false } $.extend(this, timeObj); return true } }, _injectTimePicker: function () { var $dp = this.inst.dpDiv, o = this.inst.settings, tp_inst = this, litem = "", uitem = "", max = {}, gridSize = {}, size = null; if ($dp.find("div.ui-timepicker-div").length === 0 && o.showTimepicker) { var noDisplay = ' style="display:none;"', html = '
" + o.timeText + '
"; for (var i = 0, l = this.units.length; i < l; i++) { litem = this.units[i]; uitem = litem.substr(0, 1).toUpperCase() + litem.substr(1); max[litem] = parseInt((o[litem + "Max"] - ((o[litem + "Max"] - o[litem + "Min"]) % o["step" + uitem])), 10); gridSize[litem] = 0; html += '
" + o[litem + "Text"] + '
"; if (o["show" + uitem] && o[litem + "Grid"] > 0) { html += '
'; if (litem == "hour") { for (var h = o[litem + "Min"]; h <= max[litem]; h += parseInt(o[litem + "Grid"], 10)) { gridSize[litem]++; var tmph = $.datepicker.formatTime(useAmpm(o.pickerTimeFormat || o.timeFormat) ? "hht" : "HH", {hour: h}, o); html += '" } } else { for (var m = o[litem + "Min"]; m <= max[litem]; m += parseInt(o[litem + "Grid"], 10)) { gridSize[litem]++; html += '" } } html += "
' + tmph + "' + ((m < 10) ? "0" : "") + m + "
" } html += "
" } html += '
" + o.timezoneText + "
"; html += '
"; html += "
"; var $tp = $(html); if (o.timeOnly === true) { $tp.prepend('
' + o.timeOnlyTitle + "
"); $dp.find(".ui-datepicker-header, .ui-datepicker-calendar").hide() } for (var i = 0, l = tp_inst.units.length; i < l; i++) { litem = tp_inst.units[i]; uitem = litem.substr(0, 1).toUpperCase() + litem.substr(1); tp_inst[litem + "_slider"] = tp_inst.control.create(tp_inst, $tp.find(".ui_tpicker_" + litem + "_slider"), litem, tp_inst[litem], o[litem + "Min"], max[litem], o["step" + uitem]); if (o["show" + uitem] && o[litem + "Grid"] > 0) { size = 100 * gridSize[litem] * o[litem + "Grid"] / (max[litem] - o[litem + "Min"]); $tp.find(".ui_tpicker_" + litem + " table").css({width: size + "%", marginLeft: o.isRTL ? "0" : ((size / (-2 * gridSize[litem])) + "%"), marginRight: o.isRTL ? ((size / (-2 * gridSize[litem])) + "%") : "0", borderCollapse: "collapse"}).find("td").click(function (e) { var $t = $(this), h = $t.html(), n = parseInt(h.replace(/[^0-9]/g), 10), ap = h.replace(/[^apm]/ig), f = $t.data("for"); if (f == "hour") { if (ap.indexOf("p") !== -1 && n < 12) { n += 12 } else { if (ap.indexOf("a") !== -1 && n === 12) { n = 0 } } } tp_inst.control.value(tp_inst, tp_inst[f + "_slider"], litem, n); tp_inst._onTimeChange(); tp_inst._onSelectHandler() }).css({cursor: "pointer", width: (100 / gridSize[litem]) + "%", textAlign: "center", overflow: "hidden"}) } } this.timezone_select = $tp.find(".ui_tpicker_timezone").append("").find("select"); $.fn.append.apply(this.timezone_select, $.map(o.timezoneList, function (val, idx) { return $("