(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 += '| ' + tmph + " | "
}
} else {
for (var m = o[litem + "Min"]; m <= max[litem]; m += parseInt(o[litem + "Grid"], 10)) {
gridSize[litem]++;
html += '' + ((m < 10) ? "0" : "") + m + " | "
}
}
html += "
"
}
html += " "
}
html += '- " + o.timezoneText + "
";
html += '";
html += "
";
var $tp = $(html);
if (o.timeOnly === true) {
$tp.prepend('");
$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 $("").val(typeof val == "object" ? val.value : val).text(typeof val == "object" ? val.label : val)
}));
if (typeof(this.timezone) != "undefined" && this.timezone !== null && this.timezone !== "") {
var local_date = new Date(this.inst.selectedYear, this.inst.selectedMonth, this.inst.selectedDay, 12);
var local_timezone = $.timepicker.timeZoneOffsetString(local_date);
if (local_timezone == this.timezone) {
selectLocalTimeZone(tp_inst)
} else {
this.timezone_select.val(this.timezone)
}
} else {
if (typeof(this.hour) != "undefined" && this.hour !== null && this.hour !== "") {
this.timezone_select.val(o.defaultTimezone)
} else {
selectLocalTimeZone(tp_inst)
}
}
this.timezone_select.change(function () {
tp_inst._defaults.useLocalTimezone = false;
tp_inst._onTimeChange()
});
var $buttonPanel = $dp.find(".ui-datepicker-buttonpane");
if ($buttonPanel.length) {
$buttonPanel.before($tp)
} else {
$dp.append($tp)
}
this.$timeObj = $tp.find(".ui_tpicker_time");
if (this.inst !== null) {
var timeDefined = this.timeDefined;
this._onTimeChange();
this.timeDefined = timeDefined
}
if (this._defaults.addSliderAccess) {
var sliderAccessArgs = this._defaults.sliderAccessArgs, rtl = this._defaults.isRTL;
sliderAccessArgs.isRTL = rtl;
setTimeout(function () {
if ($tp.find(".ui-slider-access").length === 0) {
$tp.find(".ui-slider:visible").sliderAccess(sliderAccessArgs);
var sliderAccessWidth = $tp.find(".ui-slider-access:eq(0)").outerWidth(true);
if (sliderAccessWidth) {
$tp.find("table:visible").each(function () {
var $g = $(this), oldWidth = $g.outerWidth(), oldMarginLeft = $g.css(rtl ? "marginRight" : "marginLeft").toString().replace("%", ""), newWidth = oldWidth - sliderAccessWidth, newMarginLeft = ((oldMarginLeft * newWidth) / oldWidth) + "%", css = {width: newWidth, marginRight: 0, marginLeft: 0};
css[rtl ? "marginRight" : "marginLeft"] = newMarginLeft;
$g.css(css)
})
}
}
}, 10)
}
}
}, _limitMinMaxDateTime: function (dp_inst, adjustSliders) {
var o = this._defaults, dp_date = new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay);
if (!this._defaults.showTimepicker) {
return
}
if ($.datepicker._get(dp_inst, "minDateTime") !== null && $.datepicker._get(dp_inst, "minDateTime") !== undefined && dp_date) {
var minDateTime = $.datepicker._get(dp_inst, "minDateTime"), minDateTimeDate = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), 0, 0, 0, 0);
if (this.hourMinOriginal === null || this.minuteMinOriginal === null || this.secondMinOriginal === null || this.millisecMinOriginal === null) {
this.hourMinOriginal = o.hourMin;
this.minuteMinOriginal = o.minuteMin;
this.secondMinOriginal = o.secondMin;
this.millisecMinOriginal = o.millisecMin
}
if (dp_inst.settings.timeOnly || minDateTimeDate.getTime() == dp_date.getTime()) {
this._defaults.hourMin = minDateTime.getHours();
if (this.hour <= this._defaults.hourMin) {
this.hour = this._defaults.hourMin;
this._defaults.minuteMin = minDateTime.getMinutes();
if (this.minute <= this._defaults.minuteMin) {
this.minute = this._defaults.minuteMin;
this._defaults.secondMin = minDateTime.getSeconds();
if (this.second <= this._defaults.secondMin) {
this.second = this._defaults.secondMin;
this._defaults.millisecMin = minDateTime.getMilliseconds()
} else {
if (this.millisec < this._defaults.millisecMin) {
this.millisec = this._defaults.millisecMin
}
this._defaults.millisecMin = this.millisecMinOriginal
}
} else {
this._defaults.secondMin = this.secondMinOriginal;
this._defaults.millisecMin = this.millisecMinOriginal
}
} else {
this._defaults.minuteMin = this.minuteMinOriginal;
this._defaults.secondMin = this.secondMinOriginal;
this._defaults.millisecMin = this.millisecMinOriginal
}
} else {
this._defaults.hourMin = this.hourMinOriginal;
this._defaults.minuteMin = this.minuteMinOriginal;
this._defaults.secondMin = this.secondMinOriginal;
this._defaults.millisecMin = this.millisecMinOriginal
}
}
if ($.datepicker._get(dp_inst, "maxDateTime") !== null && $.datepicker._get(dp_inst, "maxDateTime") !== undefined && dp_date) {
var maxDateTime = $.datepicker._get(dp_inst, "maxDateTime"), maxDateTimeDate = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), 0, 0, 0, 0);
if (this.hourMaxOriginal === null || this.minuteMaxOriginal === null || this.secondMaxOriginal === null) {
this.hourMaxOriginal = o.hourMax;
this.minuteMaxOriginal = o.minuteMax;
this.secondMaxOriginal = o.secondMax;
this.millisecMaxOriginal = o.millisecMax
}
if (dp_inst.settings.timeOnly || maxDateTimeDate.getTime() == dp_date.getTime()) {
this._defaults.hourMax = maxDateTime.getHours();
if (this.hour >= this._defaults.hourMax) {
this.hour = this._defaults.hourMax;
this._defaults.minuteMax = maxDateTime.getMinutes();
if (this.minute >= this._defaults.minuteMax) {
this.minute = this._defaults.minuteMax;
this._defaults.secondMax = maxDateTime.getSeconds()
} else {
if (this.second >= this._defaults.secondMax) {
this.second = this._defaults.secondMax;
this._defaults.millisecMax = maxDateTime.getMilliseconds()
} else {
if (this.millisec > this._defaults.millisecMax) {
this.millisec = this._defaults.millisecMax
}
this._defaults.millisecMax = this.millisecMaxOriginal
}
}
} else {
this._defaults.minuteMax = this.minuteMaxOriginal;
this._defaults.secondMax = this.secondMaxOriginal;
this._defaults.millisecMax = this.millisecMaxOriginal
}
} else {
this._defaults.hourMax = this.hourMaxOriginal;
this._defaults.minuteMax = this.minuteMaxOriginal;
this._defaults.secondMax = this.secondMaxOriginal;
this._defaults.millisecMax = this.millisecMaxOriginal
}
}
if (adjustSliders !== undefined && adjustSliders === true) {
var hourMax = parseInt((this._defaults.hourMax - ((this._defaults.hourMax - this._defaults.hourMin) % this._defaults.stepHour)), 10), minMax = parseInt((this._defaults.minuteMax - ((this._defaults.minuteMax - this._defaults.minuteMin) % this._defaults.stepMinute)), 10), secMax = parseInt((this._defaults.secondMax - ((this._defaults.secondMax - this._defaults.secondMin) % this._defaults.stepSecond)), 10), millisecMax = parseInt((this._defaults.millisecMax - ((this._defaults.millisecMax - this._defaults.millisecMin) % this._defaults.stepMillisec)), 10);
if (this.hour_slider) {
this.control.options(this, this.hour_slider, "hour", {min: this._defaults.hourMin, max: hourMax});
this.control.value(this, this.hour_slider, "hour", this.hour)
}
if (this.minute_slider) {
this.control.options(this, this.minute_slider, "minute", {min: this._defaults.minuteMin, max: minMax});
this.control.value(this, this.minute_slider, "minute", this.minute)
}
if (this.second_slider) {
this.control.options(this, this.second_slider, "second", {min: this._defaults.secondMin, max: secMax});
this.control.value(this, this.second_slider, "second", this.second)
}
if (this.millisec_slider) {
this.control.options(this, this.millisec_slider, "millisec", {min: this._defaults.millisecMin, max: millisecMax});
this.control.value(this, this.millisec_slider, "millisec", this.millisec)
}
}
}, _onTimeChange: function () {
var hour = (this.hour_slider) ? this.control.value(this, this.hour_slider, "hour") : false, minute = (this.minute_slider) ? this.control.value(this, this.minute_slider, "minute") : false, second = (this.second_slider) ? this.control.value(this, this.second_slider, "second") : false, millisec = (this.millisec_slider) ? this.control.value(this, this.millisec_slider, "millisec") : false, timezone = (this.timezone_select) ? this.timezone_select.val() : false, o = this._defaults, pickerTimeFormat = o.pickerTimeFormat || o.timeFormat, pickerTimeSuffix = o.pickerTimeSuffix || o.timeSuffix;
if (typeof(hour) == "object") {
hour = false
}
if (typeof(minute) == "object") {
minute = false
}
if (typeof(second) == "object") {
second = false
}
if (typeof(millisec) == "object") {
millisec = false
}
if (typeof(timezone) == "object") {
timezone = false
}
if (hour !== false) {
hour = parseInt(hour, 10)
}
if (minute !== false) {
minute = parseInt(minute, 10)
}
if (second !== false) {
second = parseInt(second, 10)
}
if (millisec !== false) {
millisec = parseInt(millisec, 10)
}
var ampm = o[hour < 12 ? "amNames" : "pmNames"][0];
var hasChanged = (hour != this.hour || minute != this.minute || second != this.second || millisec != this.millisec || (this.ampm.length > 0 && (hour < 12) != ($.inArray(this.ampm.toUpperCase(), this.amNames) !== -1)) || ((this.timezone === null && timezone != this.defaultTimezone) || (this.timezone !== null && timezone != this.timezone)));
if (hasChanged) {
if (hour !== false) {
this.hour = hour
}
if (minute !== false) {
this.minute = minute
}
if (second !== false) {
this.second = second
}
if (millisec !== false) {
this.millisec = millisec
}
if (timezone !== false) {
this.timezone = timezone
}
if (!this.inst) {
this.inst = $.datepicker._getInst(this.$input[0])
}
this._limitMinMaxDateTime(this.inst, true)
}
if (useAmpm(o.timeFormat)) {
this.ampm = ampm
}
this.formattedTime = $.datepicker.formatTime(o.timeFormat, this, o);
if (this.$timeObj) {
if (pickerTimeFormat === o.timeFormat) {
this.$timeObj.text(this.formattedTime + pickerTimeSuffix)
} else {
this.$timeObj.text($.datepicker.formatTime(pickerTimeFormat, this, o) + pickerTimeSuffix)
}
}
this.timeDefined = true;
if (hasChanged) {
this._updateDateTime()
}
}, _onSelectHandler: function () {
var onSelect = this._defaults.onSelect || this.inst.settings.onSelect;
var inputEl = this.$input ? this.$input[0] : null;
if (onSelect && inputEl) {
onSelect.apply(inputEl, [this.formattedDateTime, this])
}
}, _updateDateTime: function (dp_inst) {
dp_inst = this.inst || dp_inst;
var dt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)), dateFmt = $.datepicker._get(dp_inst, "dateFormat"), formatCfg = $.datepicker._getFormatConfig(dp_inst), timeAvailable = dt !== null && this.timeDefined;
this.formattedDate = $.datepicker.formatDate(dateFmt, (dt === null ? new Date() : dt), formatCfg);
var formattedDateTime = this.formattedDate;
if (this._defaults.timeOnly === true) {
formattedDateTime = this.formattedTime
} else {
if (this._defaults.timeOnly !== true && (this._defaults.alwaysSetTime || timeAvailable)) {
formattedDateTime += this._defaults.separator + this.formattedTime + this._defaults.timeSuffix
}
}
this.formattedDateTime = formattedDateTime;
if (!this._defaults.showTimepicker) {
this.$input.val(this.formattedDate)
} else {
if (this.$altInput && this._defaults.altFieldTimeOnly === true) {
this.$altInput.val(this.formattedTime);
this.$input.val(this.formattedDate)
} else {
if (this.$altInput) {
this.$input.val(formattedDateTime);
var altFormattedDateTime = "", altSeparator = this._defaults.altSeparator ? this._defaults.altSeparator : this._defaults.separator, altTimeSuffix = this._defaults.altTimeSuffix ? this._defaults.altTimeSuffix : this._defaults.timeSuffix;
if (this._defaults.altFormat) {
altFormattedDateTime = $.datepicker.formatDate(this._defaults.altFormat, (dt === null ? new Date() : dt), formatCfg)
} else {
altFormattedDateTime = this.formattedDate
}
if (altFormattedDateTime) {
altFormattedDateTime += altSeparator
}
if (this._defaults.altTimeFormat) {
altFormattedDateTime += $.datepicker.formatTime(this._defaults.altTimeFormat, this, this._defaults) + altTimeSuffix
} else {
altFormattedDateTime += this.formattedTime + altTimeSuffix
}
this.$altInput.val(altFormattedDateTime)
} else {
this.$input.val(formattedDateTime)
}
}
}
this.$input.trigger("change")
}, _onFocus: function () {
if (!this.$input.val() && this._defaults.defaultValue) {
this.$input.val(this._defaults.defaultValue);
var inst = $.datepicker._getInst(this.$input.get(0)), tp_inst = $.datepicker._get(inst, "timepicker");
if (tp_inst) {
if (tp_inst._defaults.timeOnly && (inst.input.val() != inst.lastVal)) {
try {
$.datepicker._updateDatepicker(inst)
} catch (err) {
$.datepicker.log(err)
}
}
}
}
}, _controls: {slider: {create: function (tp_inst, obj, unit, val, min, max, step) {
var rtl = tp_inst._defaults.isRTL;
return obj.prop("slide", null).slider({orientation: "horizontal", value: rtl ? val * -1 : val, min: rtl ? max * -1 : min, max: rtl ? min * -1 : max, step: step, slide: function (event, ui) {
tp_inst.control.value(tp_inst, $(this), unit, rtl ? ui.value * -1 : ui.value);
tp_inst._onTimeChange()
}, stop: function (event, ui) {
tp_inst._onSelectHandler()
}})
}, options: function (tp_inst, obj, unit, opts, val) {
if (tp_inst._defaults.isRTL) {
if (typeof(opts) == "string") {
if (opts == "min" || opts == "max") {
if (val !== undefined) {
return obj.slider(opts, val * -1)
}
return Math.abs(obj.slider(opts))
}
return obj.slider(opts)
}
var min = opts.min, max = opts.max;
opts.min = opts.max = null;
if (min !== undefined) {
opts.max = min * -1
}
if (max !== undefined) {
opts.min = max * -1
}
return obj.slider(opts)
}
if (typeof(opts) == "string" && val !== undefined) {
return obj.slider(opts, val)
}
return obj.slider(opts)
}, value: function (tp_inst, obj, unit, val) {
if (tp_inst._defaults.isRTL) {
if (val !== undefined) {
return obj.slider("value", val * -1)
}
return Math.abs(obj.slider("value"))
}
if (val !== undefined) {
return obj.slider("value", val)
}
return obj.slider("value")
}}, select: {create: function (tp_inst, obj, unit, val, min, max, step) {
var sel = '";
obj.children("select").remove();
$(sel).appendTo(obj).change(function (e) {
tp_inst._onTimeChange();
tp_inst._onSelectHandler()
});
return obj
}, options: function (tp_inst, obj, unit, opts, val) {
var o = {}, $t = obj.children("select");
if (typeof(opts) == "string") {
if (val === undefined) {
return $t.data(opts)
}
o[opts] = val
} else {
o = opts
}
return tp_inst.control.create(tp_inst, obj, $t.data("unit"), $t.val(), o.min || $t.data("min"), o.max || $t.data("max"), o.step || $t.data("step"))
}, value: function (tp_inst, obj, unit, val) {
var $t = obj.children("select");
if (val !== undefined) {
return $t.val(val)
}
return $t.val()
}}}});
$.fn.extend({timepicker: function (o) {
o = o || {};
var tmp_args = Array.prototype.slice.call(arguments);
if (typeof o == "object") {
tmp_args[0] = $.extend(o, {timeOnly: true})
}
return $(this).each(function () {
$.fn.datetimepicker.apply($(this), tmp_args)
})
}, datetimepicker: function (o) {
o = o || {};
var tmp_args = arguments;
if (typeof(o) == "string") {
if (o == "getDate") {
return $.fn.datepicker.apply($(this[0]), tmp_args)
} else {
return this.each(function () {
var $t = $(this);
$t.datepicker.apply($t, tmp_args)
})
}
} else {
return this.each(function () {
var $t = $(this);
$t.datepicker($.timepicker._newInst($t, o)._defaults)
})
}
}});
$.datepicker.parseDateTime = function (dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {
var parseRes = parseDateTimeInternal(dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings);
if (parseRes.timeObj) {
var t = parseRes.timeObj;
parseRes.date.setHours(t.hour, t.minute, t.second, t.millisec)
}
return parseRes.date
};
$.datepicker.parseTime = function (timeFormat, timeString, options) {
var o = extendRemove(extendRemove({}, $.timepicker._defaults), options || {});
var strictParse = function (f, s, o) {
var getPatternAmpm = function (amNames, pmNames) {
var markers = [];
if (amNames) {
$.merge(markers, amNames)
}
if (pmNames) {
$.merge(markers, pmNames)
}
markers = $.map(markers, function (val) {
return val.replace(/[.*+?|()\[\]{}\\]/g, "\\$&")
});
return"(" + markers.join("|") + ")?"
};
var getFormatPositions = function (timeFormat) {
var finds = timeFormat.toLowerCase().match(/(h{1,2}|m{1,2}|s{1,2}|l{1}|t{1,2}|z|'.*?')/g), orders = {h: -1, m: -1, s: -1, l: -1, t: -1, z: -1};
if (finds) {
for (var i = 0; i < finds.length; i++) {
if (orders[finds[i].toString().charAt(0)] == -1) {
orders[finds[i].toString().charAt(0)] = i + 1
}
}
}
return orders
};
var regstr = "^" + f.toString().replace(/([hH]{1,2}|mm?|ss?|[tT]{1,2}|[lz]|'.*?')/g,function (match) {
switch (match.charAt(0).toLowerCase()) {
case"h":
return"(\\d?\\d)";
case"m":
return"(\\d?\\d)";
case"s":
return"(\\d?\\d)";
case"l":
return"(\\d?\\d?\\d)";
case"z":
return"(z|[-+]\\d\\d:?\\d\\d|\\S+)?";
case"t":
return getPatternAmpm(o.amNames, o.pmNames);
default:
return"(" + match.replace(/\'/g, "").replace(/(\.|\$|\^|\\|\/|\(|\)|\[|\]|\?|\+|\*)/g, function (m) {
return"\\" + m
}) + ")?"
}
}).replace(/\s/g, "\\s?") + o.timeSuffix + "$", order = getFormatPositions(f), ampm = "", treg;
treg = s.match(new RegExp(regstr, "i"));
var resTime = {hour: 0, minute: 0, second: 0, millisec: 0};
if (treg) {
if (order.t !== -1) {
if (treg[order.t] === undefined || treg[order.t].length === 0) {
ampm = "";
resTime.ampm = ""
} else {
ampm = $.inArray(treg[order.t].toUpperCase(), o.amNames) !== -1 ? "AM" : "PM";
resTime.ampm = o[ampm == "AM" ? "amNames" : "pmNames"][0]
}
}
if (order.h !== -1) {
if (ampm == "AM" && treg[order.h] == "12") {
resTime.hour = 0
} else {
if (ampm == "PM" && treg[order.h] != "12") {
resTime.hour = parseInt(treg[order.h], 10) + 12
} else {
resTime.hour = Number(treg[order.h])
}
}
}
if (order.m !== -1) {
resTime.minute = Number(treg[order.m])
}
if (order.s !== -1) {
resTime.second = Number(treg[order.s])
}
if (order.l !== -1) {
resTime.millisec = Number(treg[order.l])
}
if (order.z !== -1 && treg[order.z] !== undefined) {
var tz = treg[order.z].toUpperCase();
switch (tz.length) {
case 1:
tz = o.timezoneIso8601 ? "Z" : "+0000";
break;
case 5:
if (o.timezoneIso8601) {
tz = tz.substring(1) == "0000" ? "Z" : tz.substring(0, 3) + ":" + tz.substring(3)
}
break;
case 6:
if (!o.timezoneIso8601) {
tz = tz == "Z" || tz.substring(1) == "00:00" ? "+0000" : tz.replace(/:/, "")
} else {
if (tz.substring(1) == "00:00") {
tz = "Z"
}
}
break
}
resTime.timezone = tz
}
return resTime
}
return false
};
var looseParse = function (f, s, o) {
try {
var d = new Date("2012-01-01 " + s);
return{hour: d.getHours(), minutes: d.getMinutes(), seconds: d.getSeconds(), millisec: d.getMilliseconds(), timezone: $.timepicker.timeZoneOffsetString(d)}
} catch (err) {
try {
return strictParse(f, s, o)
} catch (err2) {
$.datepicker.log("Unable to parse \ntimeString: " + s + "\ntimeFormat: " + f)
}
}
return false
};
if (typeof o.parse === "function") {
return o.parse(timeFormat, timeString, o)
}
if (o.parse === "loose") {
return looseParse(timeFormat, timeString, o)
}
return strictParse(timeFormat, timeString, o)
};
$.datepicker.formatTime = function (format, time, options) {
options = options || {};
options = $.extend({}, $.timepicker._defaults, options);
time = $.extend({hour: 0, minute: 0, second: 0, millisec: 0, timezone: "+0000"}, time);
var tmptime = format, ampmName = options.amNames[0], hour = parseInt(time.hour, 10);
if (hour > 11) {
ampmName = options.pmNames[0]
}
tmptime = tmptime.replace(/(?:HH?|hh?|mm?|ss?|[tT]{1,2}|[lz]|('.*?'|".*?"))/g, function (match) {
switch (match) {
case"HH":
return("0" + hour).slice(-2);
case"H":
return hour;
case"hh":
return("0" + convert24to12(hour)).slice(-2);
case"h":
return convert24to12(hour);
case"mm":
return("0" + time.minute).slice(-2);
case"m":
return time.minute;
case"ss":
return("0" + time.second).slice(-2);
case"s":
return time.second;
case"l":
return("00" + time.millisec).slice(-3);
case"z":
return time.timezone === null ? options.defaultTimezone : time.timezone;
case"T":
return ampmName.charAt(0).toUpperCase();
case"TT":
return ampmName.toUpperCase();
case"t":
return ampmName.charAt(0).toLowerCase();
case"tt":
return ampmName.toLowerCase();
default:
return match.replace(/\'/g, "") || "'"
}
});
tmptime = $.trim(tmptime);
return tmptime
};
$.datepicker._base_selectDate = $.datepicker._selectDate;
$.datepicker._selectDate = function (id, dateStr) {
var inst = this._getInst($(id)[0]), tp_inst = this._get(inst, "timepicker");
if (tp_inst) {
tp_inst._limitMinMaxDateTime(inst, true);
inst.inline = inst.stay_open = true;
this._base_selectDate(id, dateStr);
inst.inline = inst.stay_open = false;
this._notifyChange(inst);
this._updateDatepicker(inst)
} else {
this._base_selectDate(id, dateStr)
}
};
$.datepicker._base_updateDatepicker = $.datepicker._updateDatepicker;
$.datepicker._updateDatepicker = function (inst) {
var input = inst.input[0];
if ($.datepicker._curInst && $.datepicker._curInst != inst && $.datepicker._datepickerShowing && $.datepicker._lastInput != input) {
return
}
if (typeof(inst.stay_open) !== "boolean" || inst.stay_open === false) {
this._base_updateDatepicker(inst);
var tp_inst = this._get(inst, "timepicker");
if (tp_inst) {
tp_inst._addTimePicker(inst);
if (tp_inst._defaults.useLocalTimezone) {
var date = new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay, 12);
selectLocalTimeZone(tp_inst, date);
tp_inst._onTimeChange()
}
}
}
};
$.datepicker._base_doKeyPress = $.datepicker._doKeyPress;
$.datepicker._doKeyPress = function (event) {
var inst = $.datepicker._getInst(event.target), tp_inst = $.datepicker._get(inst, "timepicker");
if (tp_inst) {
if ($.datepicker._get(inst, "constrainInput")) {
var ampm = useAmpm(tp_inst._defaults.timeFormat), dateChars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat")), datetimeChars = tp_inst._defaults.timeFormat.toString().replace(/[hms]/g, "").replace(/TT/g, ampm ? "APM" : "").replace(/Tt/g, ampm ? "AaPpMm" : "").replace(/tT/g, ampm ? "AaPpMm" : "").replace(/T/g, ampm ? "AP" : "").replace(/tt/g, ampm ? "apm" : "").replace(/t/g, ampm ? "ap" : "") + " " + tp_inst._defaults.separator + tp_inst._defaults.timeSuffix + (tp_inst._defaults.showTimezone ? tp_inst._defaults.timezoneList.join("") : "") + (tp_inst._defaults.amNames.join("")) + (tp_inst._defaults.pmNames.join("")) + dateChars, chr = String.fromCharCode(event.charCode === undefined ? event.keyCode : event.charCode);
return event.ctrlKey || (chr < " " || !dateChars || datetimeChars.indexOf(chr) > -1)
}
}
return $.datepicker._base_doKeyPress(event)
};
$.datepicker._base_updateAlternate = $.datepicker._updateAlternate;
$.datepicker._updateAlternate = function (inst) {
var tp_inst = this._get(inst, "timepicker");
if (tp_inst) {
var altField = tp_inst._defaults.altField;
if (altField) {
var altFormat = tp_inst._defaults.altFormat || tp_inst._defaults.dateFormat, date = this._getDate(inst), formatCfg = $.datepicker._getFormatConfig(inst), altFormattedDateTime = "", altSeparator = tp_inst._defaults.altSeparator ? tp_inst._defaults.altSeparator : tp_inst._defaults.separator, altTimeSuffix = tp_inst._defaults.altTimeSuffix ? tp_inst._defaults.altTimeSuffix : tp_inst._defaults.timeSuffix, altTimeFormat = tp_inst._defaults.altTimeFormat !== null ? tp_inst._defaults.altTimeFormat : tp_inst._defaults.timeFormat;
altFormattedDateTime += $.datepicker.formatTime(altTimeFormat, tp_inst, tp_inst._defaults) + altTimeSuffix;
if (!tp_inst._defaults.timeOnly && !tp_inst._defaults.altFieldTimeOnly) {
if (tp_inst._defaults.altFormat) {
altFormattedDateTime = $.datepicker.formatDate(tp_inst._defaults.altFormat, (date === null ? new Date() : date), formatCfg) + altSeparator + altFormattedDateTime
} else {
altFormattedDateTime = tp_inst.formattedDate + altSeparator + altFormattedDateTime
}
}
$(altField).val(altFormattedDateTime)
}
} else {
$.datepicker._base_updateAlternate(inst)
}
};
$.datepicker._base_doKeyUp = $.datepicker._doKeyUp;
$.datepicker._doKeyUp = function (event) {
var inst = $.datepicker._getInst(event.target), tp_inst = $.datepicker._get(inst, "timepicker");
if (tp_inst) {
if (tp_inst._defaults.timeOnly && (inst.input.val() != inst.lastVal)) {
try {
$.datepicker._updateDatepicker(inst)
} catch (err) {
$.datepicker.log(err)
}
}
}
return $.datepicker._base_doKeyUp(event)
};
$.datepicker._base_gotoToday = $.datepicker._gotoToday;
$.datepicker._gotoToday = function (id) {
var inst = this._getInst($(id)[0]), $dp = inst.dpDiv;
this._base_gotoToday(id);
var tp_inst = this._get(inst, "timepicker");
selectLocalTimeZone(tp_inst);
var now = new Date();
this._setTime(inst, now);
$(".ui-datepicker-today", $dp).click()
};
$.datepicker._disableTimepickerDatepicker = function (target) {
var inst = this._getInst(target);
if (!inst) {
return
}
var tp_inst = this._get(inst, "timepicker");
$(target).datepicker("getDate");
if (tp_inst) {
tp_inst._defaults.showTimepicker = false;
tp_inst._updateDateTime(inst)
}
};
$.datepicker._enableTimepickerDatepicker = function (target) {
var inst = this._getInst(target);
if (!inst) {
return
}
var tp_inst = this._get(inst, "timepicker");
$(target).datepicker("getDate");
if (tp_inst) {
tp_inst._defaults.showTimepicker = true;
tp_inst._addTimePicker(inst);
tp_inst._updateDateTime(inst)
}
};
$.datepicker._setTime = function (inst, date) {
var tp_inst = this._get(inst, "timepicker");
if (tp_inst) {
var defaults = tp_inst._defaults;
tp_inst.hour = date ? date.getHours() : defaults.hour;
tp_inst.minute = date ? date.getMinutes() : defaults.minute;
tp_inst.second = date ? date.getSeconds() : defaults.second;
tp_inst.millisec = date ? date.getMilliseconds() : defaults.millisec;
tp_inst._limitMinMaxDateTime(inst, true);
tp_inst._onTimeChange();
tp_inst._updateDateTime(inst)
}
};
$.datepicker._setTimeDatepicker = function (target, date, withDate) {
var inst = this._getInst(target);
if (!inst) {
return
}
var tp_inst = this._get(inst, "timepicker");
if (tp_inst) {
this._setDateFromField(inst);
var tp_date;
if (date) {
if (typeof date == "string") {
tp_inst._parseTime(date, withDate);
tp_date = new Date();
tp_date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec)
} else {
tp_date = new Date(date.getTime())
}
if (tp_date.toString() == "Invalid Date") {
tp_date = undefined
}
this._setTime(inst, tp_date)
}
}
};
$.datepicker._base_setDateDatepicker = $.datepicker._setDateDatepicker;
$.datepicker._setDateDatepicker = function (target, date) {
var inst = this._getInst(target);
if (!inst) {
return
}
var tp_date = (date instanceof Date) ? new Date(date.getTime()) : date;
this._updateDatepicker(inst);
this._base_setDateDatepicker.apply(this, arguments);
this._setTimeDatepicker(target, tp_date, true)
};
$.datepicker._base_getDateDatepicker = $.datepicker._getDateDatepicker;
$.datepicker._getDateDatepicker = function (target, noDefault) {
var inst = this._getInst(target);
if (!inst) {
return
}
var tp_inst = this._get(inst, "timepicker");
if (tp_inst) {
if (inst.lastVal === undefined) {
this._setDateFromField(inst, noDefault)
}
var date = this._getDate(inst);
if (date && tp_inst._parseTime($(target).val(), tp_inst.timeOnly)) {
date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec)
}
return date
}
return this._base_getDateDatepicker(target, noDefault)
};
$.datepicker._base_parseDate = $.datepicker.parseDate;
$.datepicker.parseDate = function (format, value, settings) {
var date;
try {
date = this._base_parseDate(format, value, settings)
} catch (err) {
date = this._base_parseDate(format, value.substring(0, value.length - (err.length - err.indexOf(":") - 2)), settings);
$.datepicker.log("Error parsing the date string: " + err + "\ndate string = " + value + "\ndate format = " + format)
}
return date
};
$.datepicker._base_formatDate = $.datepicker._formatDate;
$.datepicker._formatDate = function (inst, day, month, year) {
var tp_inst = this._get(inst, "timepicker");
if (tp_inst) {
tp_inst._updateDateTime(inst);
return tp_inst.$input.val()
}
return this._base_formatDate(inst)
};
$.datepicker._base_optionDatepicker = $.datepicker._optionDatepicker;
$.datepicker._optionDatepicker = function (target, name, value) {
var inst = this._getInst(target), name_clone;
if (!inst) {
return null
}
var tp_inst = this._get(inst, "timepicker");
if (tp_inst) {
var min = null, max = null, onselect = null, overrides = tp_inst._defaults.evnts, fns = {}, prop;
if (typeof name == "string") {
if (name === "minDate" || name === "minDateTime") {
min = value
} else {
if (name === "maxDate" || name === "maxDateTime") {
max = value
} else {
if (name === "onSelect") {
onselect = value
} else {
if (overrides.hasOwnProperty(name)) {
if (typeof(value) === "undefined") {
return overrides[name]
}
fns[name] = value;
name_clone = {}
}
}
}
}
} else {
if (typeof name == "object") {
if (name.minDate) {
min = name.minDate
} else {
if (name.minDateTime) {
min = name.minDateTime
} else {
if (name.maxDate) {
max = name.maxDate
} else {
if (name.maxDateTime) {
max = name.maxDateTime
}
}
}
}
for (prop in overrides) {
if (overrides.hasOwnProperty(prop) && name[prop]) {
fns[prop] = name[prop]
}
}
}
}
for (prop in fns) {
if (fns.hasOwnProperty(prop)) {
overrides[prop] = fns[prop];
if (!name_clone) {
name_clone = $.extend({}, name)
}
delete name_clone[prop]
}
}
if (name_clone && isEmptyObject(name_clone)) {
return
}
if (min) {
if (min === 0) {
min = new Date()
} else {
min = new Date(min)
}
tp_inst._defaults.minDate = min;
tp_inst._defaults.minDateTime = min
} else {
if (max) {
if (max === 0) {
max = new Date()
} else {
max = new Date(max)
}
tp_inst._defaults.maxDate = max;
tp_inst._defaults.maxDateTime = max
} else {
if (onselect) {
tp_inst._defaults.onSelect = onselect
}
}
}
}
if (value === undefined) {
return this._base_optionDatepicker.call($.datepicker, target, name)
}
return this._base_optionDatepicker.call($.datepicker, target, name_clone || name, value)
};
var isEmptyObject = function (obj) {
var prop;
for (prop in obj) {
if (obj.hasOwnProperty(obj)) {
return false
}
}
return true
};
var extendRemove = function (target, props) {
$.extend(target, props);
for (var name in props) {
if (props[name] === null || props[name] === undefined) {
target[name] = props[name]
}
}
return target
};
var useAmpm = function (timeFormat) {
return(timeFormat.indexOf("t") !== -1 && timeFormat.indexOf("h") !== -1)
};
var convert24to12 = function (hour) {
if (hour > 12) {
hour = hour - 12
}
if (hour == 0) {
hour = 12
}
return String(hour)
};
var splitDateTime = function (dateFormat, dateTimeString, dateSettings, timeSettings) {
try {
var separator = timeSettings && timeSettings.separator ? timeSettings.separator : $.timepicker._defaults.separator, format = timeSettings && timeSettings.timeFormat ? timeSettings.timeFormat : $.timepicker._defaults.timeFormat, timeParts = format.split(separator), timePartsLen = timeParts.length, allParts = dateTimeString.split(separator), allPartsLen = allParts.length;
if (allPartsLen > 1) {
return[allParts.splice(0, allPartsLen - timePartsLen).join(separator), allParts.splice(0, timePartsLen).join(separator)]
}
} catch (err) {
$.datepicker.log("Could not split the date from the time. Please check the following datetimepicker options\nthrown error: " + err + "\ndateTimeString" + dateTimeString + "\ndateFormat = " + dateFormat + "\nseparator = " + timeSettings.separator + "\ntimeFormat = " + timeSettings.timeFormat);
if (err.indexOf(":") >= 0) {
var dateStringLength = dateTimeString.length - (err.length - err.indexOf(":") - 2), timeString = dateTimeString.substring(dateStringLength);
return[$.trim(dateTimeString.substring(0, dateStringLength)), $.trim(dateTimeString.substring(dateStringLength))]
} else {
throw err
}
}
return[dateTimeString, ""]
};
var parseDateTimeInternal = function (dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {
var date;
var splitRes = splitDateTime(dateFormat, dateTimeString, dateSettings, timeSettings);
date = $.datepicker._base_parseDate(dateFormat, splitRes[0], dateSettings);
if (splitRes[1] !== "") {
var timeString = splitRes[1], parsedTime = $.datepicker.parseTime(timeFormat, timeString, timeSettings);
if (parsedTime === null) {
throw"Wrong time format"
}
return{date: date, timeObj: parsedTime}
} else {
return{date: date}
}
};
var selectLocalTimeZone = function (tp_inst, date) {
if (tp_inst && tp_inst.timezone_select) {
tp_inst._defaults.useLocalTimezone = true;
var now = typeof date !== "undefined" ? date : new Date();
var tzoffset = $.timepicker.timeZoneOffsetString(now);
if (tp_inst._defaults.timezoneIso8601) {
tzoffset = tzoffset.substring(0, 3) + ":" + tzoffset.substring(3)
}
tp_inst.timezone_select.val(tzoffset)
}
};
$.timepicker = new Timepicker();
$.timepicker.timeZoneOffsetString = function (date) {
var off = date.getTimezoneOffset() * -1, minutes = off % 60, hours = (off - minutes) / 60;
return(off >= 0 ? "+" : "-") + ("0" + (hours * 101).toString()).substr(-2) + ("0" + (minutes * 101).toString()).substr(-2)
};
$.timepicker.timeRange = function (startTime, endTime, options) {
return $.timepicker.handleRange("timepicker", startTime, endTime, options)
};
$.timepicker.dateTimeRange = function (startTime, endTime, options) {
$.timepicker.dateRange(startTime, endTime, options, "datetimepicker")
};
$.timepicker.dateRange = function (startTime, endTime, options, method) {
method = method || "datepicker";
$.timepicker.handleRange(method, startTime, endTime, options)
};
$.timepicker.handleRange = function (method, startTime, endTime, options) {
$.fn[method].call(startTime, $.extend({onClose: function (dateText, inst) {
checkDates(this, endTime, dateText)
}, onSelect: function (selectedDateTime) {
selected(this, endTime, "minDate")
}}, options, options.start));
$.fn[method].call(endTime, $.extend({onClose: function (dateText, inst) {
checkDates(this, startTime, dateText)
}, onSelect: function (selectedDateTime) {
selected(this, startTime, "maxDate")
}}, options, options.end));
if (method != "timepicker" && options.reformat) {
$([startTime, endTime]).each(function () {
var format = $(this)[method].call($(this), "option", "dateFormat"), date = new Date($(this).val());
if ($(this).val() && date) {
$(this).val($.datepicker.formatDate(format, date))
}
})
}
checkDates(startTime, endTime, startTime.val());
function checkDates(changed, other, dateText) {
if (other.val() && (new Date(startTime.val()) > new Date(endTime.val()))) {
other.val(dateText)
}
}
selected(startTime, endTime, "minDate");
selected(endTime, startTime, "maxDate");
function selected(changed, other, option) {
if (!$(changed).val()) {
return
}
var date = $(changed)[method].call($(changed), "getDate");
if (date.getTime) {
$(other)[method].call($(other), "option", option, date)
}
}
return $([startTime.get(0), endTime.get(0)])
};
$.timepicker.version = "1.1.1"
})(jQuery);