{"version":3,"names":["$","Timepicker","this","regional","currentText","closeText","ampm","amNames","pmNames","timeFormat","timeSuffix","timeOnlyTitle","timeText","hourText","minuteText","secondText","millisecText","timezoneText","_defaults","showButtonPanel","timeOnly","showHour","showMinute","showSecond","showMillisec","showTimezone","showTime","stepHour","stepMinute","stepSecond","stepMillisec","hour","minute","second","millisec","timezone","hourMin","minuteMin","secondMin","millisecMin","hourMax","minuteMax","secondMax","millisecMax","minDateTime","maxDateTime","onSelect","hourGrid","minuteGrid","secondGrid","millisecGrid","alwaysSetTime","separator","altFieldTimeOnly","showTimepicker","timezoneIso8609","timezoneList","addSliderAccess","sliderAccessArgs","extend","extendRemove","target","props","name","undefined","ui","timepicker","version","prototype","$input","$altInput","$timeObj","inst","hour_slider","minute_slider","second_slider","millisec_slider","timezone_select","hourMinOriginal","minuteMinOriginal","secondMinOriginal","millisecMinOriginal","hourMaxOriginal","minuteMaxOriginal","secondMaxOriginal","millisecMaxOriginal","formattedDate","formattedTime","formattedDateTime","setDefaults","settings","_newInst","o","tp_inst","inlineSettings","attrName","attrValue","attr","eval","err","beforeShow","input","dp_inst","isFunction","onChangeMonthYear","year","month","_updateDateTime","call","onClose","dateText","timeDefined","val","map","toUpperCase","i","push","Math","abs","toString","slice","substring","altField","css","cursor","focus","trigger","minDate","Date","maxDate","getTime","_addTimePicker","currDT","_parseTime","_limitMinMaxDateTime","_injectTimePicker","timeString","withDate","treg","regstr","replace","_getPatternAmpm","order","_getFormatPositions","datepicker","_getInst","dp_dateFormat","_get","specials","RegExp","length","match","t","inArray","h","parseFloat","toFixed","Number","m","s","l","z","tz","markers","merge","join","finds","toLowerCase","orders","charAt","$dp","dpDiv","parseInt","minMax","secMax","dp_id","id","find","noDisplay","html","hourGridSize","minuteGridSize","secondGridSize","millisecGridSize","size","tmph","$tp","prepend","hide","slider","orientation","value","min","max","step","slide","event","_onTimeChange","append","fn","apply","idx","text","label","change","width","marginLeft","borderCollapse","each","index","click","ap","aph","_onSelectHandler","textAlign","overflow","$buttonPanel","before","onSelectDelegate","bind","setTimeout","sliderAccess","sliderAccessWidth","outerWidth","$g","oldWidth","oldMarginLeft","newWidth","newMarginLeft","adjustSliders","dp_date","selectedYear","selectedMonth","selectedDay","minDateTimeDate","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","maxDateTimeDate","hasChanged","formatTime","inputEl","_formatTime","time","format","tmptime","arguments","dt","_daylightSavingAdjust","dateFmt","formatCfg","_getFormatConfig","timeAvailable","formatDate","lastVal","tmp_args","datetimepicker","$t","options","ampmName","trim","_base_selectDate","_selectDate","dateStr","inline","stay_open","_notifyChange","_updateDatepicker","_base_updateDatepicker","_curInst","_datepickerShowing","_lastInput","_base_doKeyPress","_doKeyPress","dateChars","_possibleChars","datetimeChars","chr","String","fromCharCode","charCode","keyCode","ctrlKey","indexOf","_base_doKeyUp","_doKeyUp","log","_base_gotoToday","_gotoToday","now","tzoffset","getTimezoneOffset","tzsign","tzmin","_setTime","_disableTimepickerDatepicker","date","_enableTimepickerDatepicker","defaults","_setTimeDatepicker","tp_date","_setDateFromField","setHours","_base_setDateDatepicker","_setDateDatepicker","_base_getDateDatepicker","_getDateDatepicker","noDefault","_getDate","_base_parseDate","parseDate","_base_formatDate","_formatDate","day","_base_optionDatepicker","_optionDatepicker","onselect","jQuery"],"sources":["jquery-ui-timepicker-addon.js"],"sourcesContent":["/*\n* jQuery timepicker addon\n* By: Trent Richardson [http://trentrichardson.com]\n* Version 1.0.0\n* Last Modified: 02/05/2012\n*\n* Copyright 2012 Trent Richardson\n* Dual licensed under the MIT and GPL licenses.\n* http://trentrichardson.com/Impromptu/GPL-LICENSE.txt\n* http://trentrichardson.com/Impromptu/MIT-LICENSE.txt\n*\n* HERES THE CSS:\n* .ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }\n* .ui-timepicker-div dl { text-align: left; }\n* .ui-timepicker-div dl dt { height: 25px; margin-bottom: -25px; }\n* .ui-timepicker-div dl dd { margin: 0 10px 10px 65px; }\n* .ui-timepicker-div td { font-size: 90%; }\n* .ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; }\n*/\n\n(function($) {\n\n// Prevent \"Uncaught RangeError: Maximum call stack size exceeded\"\n$.ui.timepicker = $.ui.timepicker || {};\nif ($.ui.timepicker.version) {\n\treturn;\n}\n\n$.extend($.ui, { timepicker: { version: \"1.0.0\" } });\n\n/* Time picker manager.\n   Use the singleton instance of this class, $.timepicker, to interact with the time picker.\n   Settings for (groups of) time pickers are maintained in an instance object,\n   allowing multiple different settings on the same page. */\n\nfunction Timepicker() {\n\tthis.regional = []; // Available regional settings, indexed by language code\n\tthis.regional[''] = { // Default regional settings\n\t\tcurrentText: 'Now',\n\t\tcloseText: 'Done',\n\t\tampm: false,\n\t\tamNames: ['AM', 'A'],\n\t\tpmNames: ['PM', 'P'],\n\t\ttimeFormat: 'hh:mm tt',\n\t\ttimeSuffix: '',\n\t\ttimeOnlyTitle: 'Choose Time',\n\t\ttimeText: 'Time',\n\t\thourText: 'Hour',\n\t\tminuteText: 'Minute',\n\t\tsecondText: 'Second',\n\t\tmillisecText: 'Millisecond',\n\t\ttimezoneText: 'Time Zone'\n\t};\n\tthis._defaults = { // Global defaults for all the datetime picker instances\n\t\tshowButtonPanel: true,\n\t\ttimeOnly: false,\n\t\tshowHour: true,\n\t\tshowMinute: true,\n\t\tshowSecond: false,\n\t\tshowMillisec: false,\n\t\tshowTimezone: false,\n\t\tshowTime: true,\n\t\tstepHour: 1,\n\t\tstepMinute: 1,\n\t\tstepSecond: 1,\n\t\tstepMillisec: 1,\n\t\thour: 0,\n\t\tminute: 0,\n\t\tsecond: 0,\n\t\tmillisec: 0,\n\t\ttimezone: '+0000',\n\t\thourMin: 0,\n\t\tminuteMin: 0,\n\t\tsecondMin: 0,\n\t\tmillisecMin: 0,\n\t\thourMax: 23,\n\t\tminuteMax: 59,\n\t\tsecondMax: 59,\n\t\tmillisecMax: 999,\n\t\tminDateTime: null,\n\t\tmaxDateTime: null,\n\t\tonSelect: null,\n\t\thourGrid: 0,\n\t\tminuteGrid: 0,\n\t\tsecondGrid: 0,\n\t\tmillisecGrid: 0,\n\t\talwaysSetTime: true,\n\t\tseparator: ' ',\n\t\taltFieldTimeOnly: true,\n\t\tshowTimepicker: true,\n\t\ttimezoneIso8609: false,\n\t\ttimezoneList: null,\n\t\taddSliderAccess: false,\n\t\tsliderAccessArgs: null\n\t};\n\t$.extend(this._defaults, this.regional['']);\n};\n\n$.extend(Timepicker.prototype, {\n\t$input: null,\n\t$altInput: null,\n\t$timeObj: null,\n\tinst: null,\n\thour_slider: null,\n\tminute_slider: null,\n\tsecond_slider: null,\n\tmillisec_slider: null,\n\ttimezone_select: null,\n\thour: 0,\n\tminute: 0,\n\tsecond: 0,\n\tmillisec: 0,\n\ttimezone: '+0000',\n\thourMinOriginal: null,\n\tminuteMinOriginal: null,\n\tsecondMinOriginal: null,\n\tmillisecMinOriginal: null,\n\thourMaxOriginal: null,\n\tminuteMaxOriginal: null,\n\tsecondMaxOriginal: null,\n\tmillisecMaxOriginal: null,\n\tampm: '',\n\tformattedDate: '',\n\tformattedTime: '',\n\tformattedDateTime: '',\n\ttimezoneList: null,\n\n\t/* Override the default settings for all instances of the time picker.\n\t   @param  settings  object - the new settings to use as defaults (anonymous object)\n\t   @return the manager object */\n\tsetDefaults: function(settings) {\n\t\textendRemove(this._defaults, settings || {});\n\t\treturn this;\n\t},\n\n\t//########################################################################\n\t// Create a new Timepicker instance\n\t//########################################################################\n\t_newInst: function($input, o) {\n\t\tvar tp_inst = new Timepicker(),\n\t\t\tinlineSettings = {};\n\n\t\tfor (var attrName in this._defaults) {\n\t\t\tvar attrValue = $input.attr('time:' + attrName);\n\t\t\tif (attrValue) {\n\t\t\t\ttry {\n\t\t\t\t\tinlineSettings[attrName] = eval(attrValue);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tinlineSettings[attrName] = attrValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\ttp_inst._defaults = $.extend({}, this._defaults, inlineSettings, o, {\n\t\t\tbeforeShow: function(input, dp_inst) {\n\t\t\t\tif ($.isFunction(o.beforeShow))\n\t\t\t\t\treturn o.beforeShow(input, dp_inst, tp_inst);\n\t\t\t},\n\t\t\tonChangeMonthYear: function(year, month, dp_inst) {\n\t\t\t\t// Update the time as well : this prevents the time from disappearing from the $input field.\n\t\t\t\ttp_inst._updateDateTime(dp_inst);\n\t\t\t\tif ($.isFunction(o.onChangeMonthYear))\n\t\t\t\t\to.onChangeMonthYear.call($input[0], year, month, dp_inst, tp_inst);\n\t\t\t},\n\t\t\tonClose: function(dateText, dp_inst) {\n\t\t\t\tif (tp_inst.timeDefined === true && $input.val() != '')\n\t\t\t\t\ttp_inst._updateDateTime(dp_inst);\n\t\t\t\tif ($.isFunction(o.onClose))\n\t\t\t\t\to.onClose.call($input[0], dateText, dp_inst, tp_inst);\n\t\t\t},\n\t\t\ttimepicker: tp_inst // add timepicker as a property of datepicker: $.datepicker._get(dp_inst, 'timepicker');\n\t\t});\n\t\ttp_inst.amNames = $.map(tp_inst._defaults.amNames, function(val) { return val.toUpperCase(); });\n\t\ttp_inst.pmNames = $.map(tp_inst._defaults.pmNames, function(val) { return val.toUpperCase(); });\n\n\t\tif (tp_inst._defaults.timezoneList === null) {\n\t\t\tvar timezoneList = [];\n\t\t\tfor (var i = -11; i <= 12; i++)\n\t\t\t\ttimezoneList.push((i >= 0 ? '+' : '-') + ('0' + Math.abs(i).toString()).slice(-2) + '00');\n\t\t\tif (tp_inst._defaults.timezoneIso8609)\n\t\t\t\ttimezoneList = $.map(timezoneList, function(val) {\n\t\t\t\t\treturn val == '+0000' ? 'Z' : (val.substring(0, 3) + ':' + val.substring(3));\n\t\t\t\t});\n\t\t\ttp_inst._defaults.timezoneList = timezoneList;\n\t\t}\n\n\t\ttp_inst.hour = tp_inst._defaults.hour;\n\t\ttp_inst.minute = tp_inst._defaults.minute;\n\t\ttp_inst.second = tp_inst._defaults.second;\n\t\ttp_inst.millisec = tp_inst._defaults.millisec;\n\t\ttp_inst.ampm = '';\n\t\ttp_inst.$input = $input;\n\n\t\tif (o.altField)\n\t\t\ttp_inst.$altInput = $(o.altField)\n\t\t\t\t.css({ cursor: 'pointer' })\n\t\t\t\t.focus(function(){ $input.trigger(\"focus\"); });\n\n\t\tif(tp_inst._defaults.minDate==0 || tp_inst._defaults.minDateTime==0)\n\t\t{\n\t\t\ttp_inst._defaults.minDate=new Date();\n\t\t}\n\t\tif(tp_inst._defaults.maxDate==0 || tp_inst._defaults.maxDateTime==0)\n\t\t{\n\t\t\ttp_inst._defaults.maxDate=new Date();\n\t\t}\n\n\t\t// datepicker needs minDate/maxDate, timepicker needs minDateTime/maxDateTime..\n\t\tif(tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date)\n\t\t\ttp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime());\n\t\tif(tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date)\n\t\t\ttp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime());\n\t\tif(tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date)\n\t\t\ttp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime());\n\t\tif(tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date)\n\t\t\ttp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime());\n\t\treturn tp_inst;\n\t},\n\n\t//########################################################################\n\t// add our sliders to the calendar\n\t//########################################################################\n\t_addTimePicker: function(dp_inst) {\n\t\tvar currDT = (this.$altInput && this._defaults.altFieldTimeOnly) ?\n\t\t\t\tthis.$input.val() + ' ' + this.$altInput.val() :\n\t\t\t\tthis.$input.val();\n\n\t\tthis.timeDefined = this._parseTime(currDT);\n\t\tthis._limitMinMaxDateTime(dp_inst, false);\n\t\tthis._injectTimePicker();\n\t},\n\n\t//########################################################################\n\t// parse the time string from input value or _setTime\n\t//########################################################################\n\t_parseTime: function(timeString, withDate) {\n\t\tvar regstr = this._defaults.timeFormat.toString()\n\t\t\t\t.replace(/h{1,2}/ig, '(\\\\d?\\\\d)')\n\t\t\t\t.replace(/m{1,2}/ig, '(\\\\d?\\\\d)')\n\t\t\t\t.replace(/s{1,2}/ig, '(\\\\d?\\\\d)')\n\t\t\t\t.replace(/l{1}/ig, '(\\\\d?\\\\d?\\\\d)')\n\t\t\t\t.replace(/t{1,2}/ig, this._getPatternAmpm())\n\t\t\t\t.replace(/z{1}/ig, '(z|[-+]\\\\d\\\\d:?\\\\d\\\\d)?')\n\t\t\t\t.replace(/\\s/g, '\\\\s?') + this._defaults.timeSuffix + '$',\n\t\t\torder = this._getFormatPositions(),\n\t\t\tampm = '',\n\t\t\ttreg;\n\n\t\tif (!this.inst) this.inst = $.datepicker._getInst(this.$input[0]);\n\n\t\tif (withDate || !this._defaults.timeOnly) {\n\t\t\t// the time should come after x number of characters and a space.\n\t\t\t// x = at least the length of text specified by the date format\n\t\t\tvar dp_dateFormat = $.datepicker._get(this.inst, 'dateFormat');\n\t\t\t// escape special regex characters in the seperator\n\t\t\tvar specials = new RegExp(\"[.*+?|()\\\\[\\\\]{}\\\\\\\\]\", \"g\");\n\t\t\tregstr = '^.{' + dp_dateFormat.length + ',}?' + this._defaults.separator.replace(specials, \"\\\\$&\") + regstr;\n\t\t}\n\n\t\ttreg = timeString.match(new RegExp(regstr, 'i'));\n\n\t\tif (treg) {\n\t\t\tif (order.t !== -1) {\n\t\t\t\tif (treg[order.t] === undefined || treg[order.t].length === 0) {\n\t\t\t\t\tampm = '';\n\t\t\t\t\tthis.ampm = '';\n\t\t\t\t} else {\n\t\t\t\t\tampm = $.inArray(treg[order.t].toUpperCase(), this.amNames) !== -1 ? 'AM' : 'PM';\n\t\t\t\t\tthis.ampm = this._defaults[ampm == 'AM' ? 'amNames' : 'pmNames'][0];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (order.h !== -1) {\n\t\t\t\tif (ampm == 'AM' && treg[order.h] == '12')\n\t\t\t\t\tthis.hour = 0; // 12am = 0 hour\n\t\t\t\telse if (ampm == 'PM' && treg[order.h] != '12')\n\t\t\t\t\tthis.hour = (parseFloat(treg[order.h]) + 12).toFixed(0); // 12pm = 12 hour, any other pm = hour + 12\n\t\t\t\telse this.hour = Number(treg[order.h]);\n\t\t\t}\n\n\t\t\tif (order.m !== -1) this.minute = Number(treg[order.m]);\n\t\t\tif (order.s !== -1) this.second = Number(treg[order.s]);\n\t\t\tif (order.l !== -1) this.millisec = Number(treg[order.l]);\n\t\t\tif (order.z !== -1 && treg[order.z] !== undefined) {\n\t\t\t\tvar tz = treg[order.z].toUpperCase();\n\t\t\t\tswitch (tz.length) {\n\t\t\t\tcase 1:\t// Z\n\t\t\t\t\ttz = this._defaults.timezoneIso8609 ? 'Z' : '+0000';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 5:\t// +hhmm\n\t\t\t\t\tif (this._defaults.timezoneIso8609)\n\t\t\t\t\t\ttz = tz.substring(1) == '0000'\n\t\t\t\t\t\t   ? 'Z'\n\t\t\t\t\t\t   : tz.substring(0, 3) + ':' + tz.substring(3);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 6:\t// +hh:mm\n\t\t\t\t\tif (!this._defaults.timezoneIso8609)\n\t\t\t\t\t\ttz = tz == 'Z' || tz.substring(1) == '00:00'\n\t\t\t\t\t\t   ? '+0000'\n\t\t\t\t\t\t   : tz.replace(/:/, '');\n\t\t\t\t\telse if (tz.substring(1) == '00:00')\n\t\t\t\t\t\ttz = 'Z';\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthis.timezone = tz;\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\t\treturn false;\n\t},\n\n\t//########################################################################\n\t// pattern for standard and localized AM/PM markers\n\t//########################################################################\n\t_getPatternAmpm: function() {\n\t\tvar markers = [],\n\t\t\to = this._defaults;\n\t\tif (o.amNames)\n\t\t\t$.merge(markers, o.amNames);\n\t\tif (o.pmNames)\n\t\t\t$.merge(markers, o.pmNames);\n\t\tmarkers = $.map(markers, function(val) { return val.replace(/[.*+?|()\\[\\]{}\\\\]/g, '\\\\$&'); });\n\t\treturn '(' + markers.join('|') + ')?';\n\t},\n\n\t//########################################################################\n\t// figure out position of time elements.. cause js cant do named captures\n\t//########################################################################\n\t_getFormatPositions: function() {\n\t\tvar finds = this._defaults.timeFormat.toLowerCase().match(/(h{1,2}|m{1,2}|s{1,2}|l{1}|t{1,2}|z)/g),\n\t\t\torders = { h: -1, m: -1, s: -1, l: -1, t: -1, z: -1 };\n\n\t\tif (finds)\n\t\t\tfor (var i = 0; i < finds.length; i++)\n\t\t\t\tif (orders[finds[i].toString().charAt(0)] == -1)\n\t\t\t\t\torders[finds[i].toString().charAt(0)] = i + 1;\n\n\t\treturn orders;\n\t},\n\n\t//########################################################################\n\t// generate and inject html for timepicker into ui datepicker\n\t//########################################################################\n\t_injectTimePicker: function() {\n\t\tvar $dp = this.inst.dpDiv,\n\t\t\to = this._defaults,\n\t\t\ttp_inst = this,\n\t\t\t// Added by Peter Medeiros:\n\t\t\t// - Figure out what the hour/minute/second max should be based on the step values.\n\t\t\t// - Example: if stepMinute is 15, then minMax is 45.\n\t\t\thourMax = parseInt((o.hourMax - ((o.hourMax - o.hourMin) % o.stepHour)) ,10),\n\t\t\tminMax  = parseInt((o.minuteMax - ((o.minuteMax - o.minuteMin) % o.stepMinute)) ,10),\n\t\t\tsecMax  = parseInt((o.secondMax - ((o.secondMax - o.secondMin) % o.stepSecond)) ,10),\n\t\t\tmillisecMax  = parseInt((o.millisecMax - ((o.millisecMax - o.millisecMin) % o.stepMillisec)) ,10),\n\t\t\tdp_id = this.inst.id.toString().replace(/([^A-Za-z0-9_])/g, '');\n\n\t\t// Prevent displaying twice\n\t\t//if ($dp.find(\"div#ui-timepicker-div-\"+ dp_id).length === 0) {\n\t\tif ($dp.find(\"div#ui-timepicker-div-\"+ dp_id).length === 0 && o.showTimepicker) {\n\t\t\tvar noDisplay = ' style=\"display:none;\"',\n\t\t\t\thtml =\t'<div class=\"ui-timepicker-div\" id=\"ui-timepicker-div-' + dp_id + '\"><dl>' +\n\t\t\t\t\t\t'<dt class=\"ui_tpicker_time_label\" id=\"ui_tpicker_time_label_' + dp_id + '\"' +\n\t\t\t\t\t\t((o.showTime) ? '' : noDisplay) + '>' + o.timeText + '</dt>' +\n\t\t\t\t\t\t'<dd class=\"ui_tpicker_time\" id=\"ui_tpicker_time_' + dp_id + '\"' +\n\t\t\t\t\t\t((o.showTime) ? '' : noDisplay) + '></dd>' +\n\t\t\t\t\t\t'<dt class=\"ui_tpicker_hour_label\" id=\"ui_tpicker_hour_label_' + dp_id + '\"' +\n\t\t\t\t\t\t((o.showHour) ? '' : noDisplay) + '>' + o.hourText + '</dt>',\n\t\t\t\thourGridSize = 0,\n\t\t\t\tminuteGridSize = 0,\n\t\t\t\tsecondGridSize = 0,\n\t\t\t\tmillisecGridSize = 0,\n\t\t\t\tsize = null;\n\n \t\t\t// Hours\n\t\t\thtml += '<dd class=\"ui_tpicker_hour\"><div id=\"ui_tpicker_hour_' + dp_id + '\"' +\n\t\t\t\t\t\t((o.showHour) ? '' : noDisplay) + '></div>';\n\t\t\tif (o.showHour && o.hourGrid > 0) {\n\t\t\t\thtml += '<div style=\"padding-left: 1px\"><table class=\"ui-tpicker-grid-label\"><tr>';\n\n\t\t\t\tfor (var h = o.hourMin; h <= hourMax; h += parseInt(o.hourGrid,10)) {\n\t\t\t\t\thourGridSize++;\n\t\t\t\t\tvar tmph = (o.ampm && h > 12) ? h-12 : h;\n\t\t\t\t\tif (tmph < 10) tmph = '0' + tmph;\n\t\t\t\t\tif (o.ampm) {\n\t\t\t\t\t\tif (h == 0) tmph = 12 +'a';\n\t\t\t\t\t\telse if (h < 12) tmph += 'a';\n\t\t\t\t\t\telse tmph += 'p';\n\t\t\t\t\t}\n\t\t\t\t\thtml += '<td>' + tmph + '</td>';\n\t\t\t\t}\n\n\t\t\t\thtml += '</tr></table></div>';\n\t\t\t}\n\t\t\thtml += '</dd>';\n\n\t\t\t// Minutes\n\t\t\thtml += '<dt class=\"ui_tpicker_minute_label\" id=\"ui_tpicker_minute_label_' + dp_id + '\"' +\n\t\t\t\t\t((o.showMinute) ? '' : noDisplay) + '>' + o.minuteText + '</dt>'+\n\t\t\t\t\t'<dd class=\"ui_tpicker_minute\"><div id=\"ui_tpicker_minute_' + dp_id + '\"' +\n\t\t\t\t\t\t\t((o.showMinute) ? '' : noDisplay) + '></div>';\n\n\t\t\tif (o.showMinute && o.minuteGrid > 0) {\n\t\t\t\thtml += '<div style=\"padding-left: 1px\"><table class=\"ui-tpicker-grid-label\"><tr>';\n\n\t\t\t\tfor (var m = o.minuteMin; m <= minMax; m += parseInt(o.minuteGrid,10)) {\n\t\t\t\t\tminuteGridSize++;\n\t\t\t\t\thtml += '<td>' + ((m < 10) ? '0' : '') + m + '</td>';\n\t\t\t\t}\n\n\t\t\t\thtml += '</tr></table></div>';\n\t\t\t}\n\t\t\thtml += '</dd>';\n\n\t\t\t// Seconds\n\t\t\thtml += '<dt class=\"ui_tpicker_second_label\" id=\"ui_tpicker_second_label_' + dp_id + '\"' +\n\t\t\t\t\t((o.showSecond) ? '' : noDisplay) + '>' + o.secondText + '</dt>'+\n\t\t\t\t\t'<dd class=\"ui_tpicker_second\"><div id=\"ui_tpicker_second_' + dp_id + '\"'+\n\t\t\t\t\t\t\t((o.showSecond) ? '' : noDisplay) + '></div>';\n\n\t\t\tif (o.showSecond && o.secondGrid > 0) {\n\t\t\t\thtml += '<div style=\"padding-left: 1px\"><table><tr>';\n\n\t\t\t\tfor (var s = o.secondMin; s <= secMax; s += parseInt(o.secondGrid,10)) {\n\t\t\t\t\tsecondGridSize++;\n\t\t\t\t\thtml += '<td>' + ((s < 10) ? '0' : '') + s + '</td>';\n\t\t\t\t}\n\n\t\t\t\thtml += '</tr></table></div>';\n\t\t\t}\n\t\t\thtml += '</dd>';\n\n\t\t\t// Milliseconds\n\t\t\thtml += '<dt class=\"ui_tpicker_millisec_label\" id=\"ui_tpicker_millisec_label_' + dp_id + '\"' +\n\t\t\t\t\t((o.showMillisec) ? '' : noDisplay) + '>' + o.millisecText + '</dt>'+\n\t\t\t\t\t'<dd class=\"ui_tpicker_millisec\"><div id=\"ui_tpicker_millisec_' + dp_id + '\"'+\n\t\t\t\t\t\t\t((o.showMillisec) ? '' : noDisplay) + '></div>';\n\n\t\t\tif (o.showMillisec && o.millisecGrid > 0) {\n\t\t\t\thtml += '<div style=\"padding-left: 1px\"><table><tr>';\n\n\t\t\t\tfor (var l = o.millisecMin; l <= millisecMax; l += parseInt(o.millisecGrid,10)) {\n\t\t\t\t\tmillisecGridSize++;\n\t\t\t\t\thtml += '<td>' + ((l < 10) ? '0' : '') + l + '</td>';\n\t\t\t\t}\n\n\t\t\t\thtml += '</tr></table></div>';\n\t\t\t}\n\t\t\thtml += '</dd>';\n\n\t\t\t// Timezone\n\t\t\thtml += '<dt class=\"ui_tpicker_timezone_label\" id=\"ui_tpicker_timezone_label_' + dp_id + '\"' +\n\t\t\t\t\t((o.showTimezone) ? '' : noDisplay) + '>' + o.timezoneText + '</dt>';\n\t\t\thtml += '<dd class=\"ui_tpicker_timezone\" id=\"ui_tpicker_timezone_' + dp_id + '\"'\t+\n\t\t\t\t\t\t\t((o.showTimezone) ? '' : noDisplay) + '></dd>';\n\n\t\t\thtml += '</dl></div>';\n\t\t\t$tp = $(html);\n\n\t\t\t\t// if we only want time picker...\n\t\t\tif (o.timeOnly === true) {\n\t\t\t\t$tp.prepend(\n\t\t\t\t\t'<div class=\"ui-widget-header ui-helper-clearfix ui-corner-all\">' +\n\t\t\t\t\t\t'<div class=\"ui-datepicker-title\">' + o.timeOnlyTitle + '</div>' +\n\t\t\t\t\t'</div>');\n\t\t\t\t$dp.find('.ui-datepicker-header, .ui-datepicker-calendar').hide();\n\t\t\t}\n\n\t\t\tthis.hour_slider = $tp.find('#ui_tpicker_hour_'+ dp_id).slider({\n\t\t\t\torientation: \"horizontal\",\n\t\t\t\tvalue: this.hour,\n\t\t\t\tmin: o.hourMin,\n\t\t\t\tmax: hourMax,\n\t\t\t\tstep: o.stepHour,\n\t\t\t\tslide: function(event, ui) {\n\t\t\t\t\ttp_inst.hour_slider.slider( \"option\", \"value\", ui.value);\n\t\t\t\t\ttp_inst._onTimeChange();\n\t\t\t\t}\n\t\t\t});\n\n\n\t\t\t// Updated by Peter Medeiros:\n\t\t\t// - Pass in Event and UI instance into slide function\n\t\t\tthis.minute_slider = $tp.find('#ui_tpicker_minute_'+ dp_id).slider({\n\t\t\t\torientation: \"horizontal\",\n\t\t\t\tvalue: this.minute,\n\t\t\t\tmin: o.minuteMin,\n\t\t\t\tmax: minMax,\n\t\t\t\tstep: o.stepMinute,\n\t\t\t\tslide: function(event, ui) {\n\t\t\t\t\ttp_inst.minute_slider.slider( \"option\", \"value\", ui.value);\n\t\t\t\t\ttp_inst._onTimeChange();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.second_slider = $tp.find('#ui_tpicker_second_'+ dp_id).slider({\n\t\t\t\torientation: \"horizontal\",\n\t\t\t\tvalue: this.second,\n\t\t\t\tmin: o.secondMin,\n\t\t\t\tmax: secMax,\n\t\t\t\tstep: o.stepSecond,\n\t\t\t\tslide: function(event, ui) {\n\t\t\t\t\ttp_inst.second_slider.slider( \"option\", \"value\", ui.value);\n\t\t\t\t\ttp_inst._onTimeChange();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.millisec_slider = $tp.find('#ui_tpicker_millisec_'+ dp_id).slider({\n\t\t\t\torientation: \"horizontal\",\n\t\t\t\tvalue: this.millisec,\n\t\t\t\tmin: o.millisecMin,\n\t\t\t\tmax: millisecMax,\n\t\t\t\tstep: o.stepMillisec,\n\t\t\t\tslide: function(event, ui) {\n\t\t\t\t\ttp_inst.millisec_slider.slider( \"option\", \"value\", ui.value);\n\t\t\t\t\ttp_inst._onTimeChange();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.timezone_select = $tp.find('#ui_tpicker_timezone_'+ dp_id).append('<select></select>').find(\"select\");\n\t\t\t$.fn.append.apply(this.timezone_select,\n\t\t\t\t$.map(o.timezoneList, function(val, idx) {\n\t\t\t\t\treturn $(\"<option />\")\n\t\t\t\t\t\t.val(typeof val == \"object\" ? val.value : val)\n\t\t\t\t\t\t.text(typeof val == \"object\" ? val.label : val);\n\t\t\t\t})\n\t\t\t);\n\t\t\tthis.timezone_select.val((typeof this.timezone != \"undefined\" && this.timezone != null && this.timezone != \"\") ? this.timezone : o.timezone);\n\t\t\tthis.timezone_select.change(function() {\n\t\t\t\ttp_inst._onTimeChange();\n\t\t\t});\n\n\t\t\t// Add grid functionality\n\t\t\tif (o.showHour && o.hourGrid > 0) {\n\t\t\t\tsize = 100 * hourGridSize * o.hourGrid / (hourMax - o.hourMin);\n\n\t\t\t\t$tp.find(\".ui_tpicker_hour table\").css({\n\t\t\t\t\twidth: size + \"%\",\n\t\t\t\t\tmarginLeft: (size / (-2 * hourGridSize)) + \"%\",\n\t\t\t\t\tborderCollapse: 'collapse'\n\t\t\t\t}).find(\"td\").each( function(index) {\n\t\t\t\t\t$(this).click(function() {\n\t\t\t\t\t\tvar h = $(this).html();\n\t\t\t\t\t\tif(o.ampm)\t{\n\t\t\t\t\t\t\tvar ap = h.substring(2).toLowerCase(),\n\t\t\t\t\t\t\t\taph = parseInt(h.substring(0,2), 10);\n\t\t\t\t\t\t\tif (ap == 'a') {\n\t\t\t\t\t\t\t\tif (aph == 12) h = 0;\n\t\t\t\t\t\t\t\telse h = aph;\n\t\t\t\t\t\t\t} else if (aph == 12) h = 12;\n\t\t\t\t\t\t\telse h = aph + 12;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttp_inst.hour_slider.slider(\"option\", \"value\", h);\n\t\t\t\t\t\ttp_inst._onTimeChange();\n\t\t\t\t\t\ttp_inst._onSelectHandler();\n\t\t\t\t\t}).css({\n\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\twidth: (100 / hourGridSize) + '%',\n\t\t\t\t\t\ttextAlign: 'center',\n\t\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (o.showMinute && o.minuteGrid > 0) {\n\t\t\t\tsize = 100 * minuteGridSize * o.minuteGrid / (minMax - o.minuteMin);\n\t\t\t\t$tp.find(\".ui_tpicker_minute table\").css({\n\t\t\t\t\twidth: size + \"%\",\n\t\t\t\t\tmarginLeft: (size / (-2 * minuteGridSize)) + \"%\",\n\t\t\t\t\tborderCollapse: 'collapse'\n\t\t\t\t}).find(\"td\").each(function(index) {\n\t\t\t\t\t$(this).click(function() {\n\t\t\t\t\t\ttp_inst.minute_slider.slider(\"option\", \"value\", $(this).html());\n\t\t\t\t\t\ttp_inst._onTimeChange();\n\t\t\t\t\t\ttp_inst._onSelectHandler();\n\t\t\t\t\t}).css({\n\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\twidth: (100 / minuteGridSize) + '%',\n\t\t\t\t\t\ttextAlign: 'center',\n\t\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (o.showSecond && o.secondGrid > 0) {\n\t\t\t\t$tp.find(\".ui_tpicker_second table\").css({\n\t\t\t\t\twidth: size + \"%\",\n\t\t\t\t\tmarginLeft: (size / (-2 * secondGridSize)) + \"%\",\n\t\t\t\t\tborderCollapse: 'collapse'\n\t\t\t\t}).find(\"td\").each(function(index) {\n\t\t\t\t\t$(this).click(function() {\n\t\t\t\t\t\ttp_inst.second_slider.slider(\"option\", \"value\", $(this).html());\n\t\t\t\t\t\ttp_inst._onTimeChange();\n\t\t\t\t\t\ttp_inst._onSelectHandler();\n\t\t\t\t\t}).css({\n\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\twidth: (100 / secondGridSize) + '%',\n\t\t\t\t\t\ttextAlign: 'center',\n\t\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (o.showMillisec && o.millisecGrid > 0) {\n\t\t\t\t$tp.find(\".ui_tpicker_millisec table\").css({\n\t\t\t\t\twidth: size + \"%\",\n\t\t\t\t\tmarginLeft: (size / (-2 * millisecGridSize)) + \"%\",\n\t\t\t\t\tborderCollapse: 'collapse'\n\t\t\t\t}).find(\"td\").each(function(index) {\n\t\t\t\t\t$(this).click(function() {\n\t\t\t\t\t\ttp_inst.millisec_slider.slider(\"option\", \"value\", $(this).html());\n\t\t\t\t\t\ttp_inst._onTimeChange();\n\t\t\t\t\t\ttp_inst._onSelectHandler();\n\t\t\t\t\t}).css({\n\t\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t\twidth: (100 / millisecGridSize) + '%',\n\t\t\t\t\t\ttextAlign: 'center',\n\t\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar $buttonPanel = $dp.find('.ui-datepicker-buttonpane');\n\t\t\tif ($buttonPanel.length) $buttonPanel.before($tp);\n\t\t\telse $dp.append($tp);\n\n\t\t\tthis.$timeObj = $tp.find('#ui_tpicker_time_'+ dp_id);\n\n\t\t\tif (this.inst !== null) {\n\t\t\t\tvar timeDefined = this.timeDefined;\n\t\t\t\tthis._onTimeChange();\n\t\t\t\tthis.timeDefined = timeDefined;\n\t\t\t}\n\n\t\t\t//Emulate datepicker onSelect behavior. Call on slidestop.\n\t\t\tvar onSelectDelegate = function() {\n\t\t\t\ttp_inst._onSelectHandler();\n\t\t\t};\n\t\t\tthis.hour_slider.bind('slidestop',onSelectDelegate);\n\t\t\tthis.minute_slider.bind('slidestop',onSelectDelegate);\n\t\t\tthis.second_slider.bind('slidestop',onSelectDelegate);\n\t\t\tthis.millisec_slider.bind('slidestop',onSelectDelegate);\n\n\t\t\t// slideAccess integration: http://trentrichardson.com/2011/11/11/jquery-ui-sliders-and-touch-accessibility/\n\t\t\tif (this._defaults.addSliderAccess){\n\t\t\t\tvar sliderAccessArgs = this._defaults.sliderAccessArgs;\n\t\t\t\tsetTimeout(function(){ // fix for inline mode\n\t\t\t\t\tif($tp.find('.ui-slider-access').length == 0){\n\t\t\t\t\t\t$tp.find('.ui-slider:visible').sliderAccess(sliderAccessArgs);\n\n\t\t\t\t\t\t// fix any grids since sliders are shorter\n\t\t\t\t\t\tvar sliderAccessWidth = $tp.find('.ui-slider-access:eq(0)').outerWidth(true);\n\t\t\t\t\t\tif(sliderAccessWidth){\n\t\t\t\t\t\t\t$tp.find('table:visible').each(function(){\n\t\t\t\t\t\t\t\tvar $g = $(this),\n\t\t\t\t\t\t\t\t\toldWidth = $g.outerWidth(),\n\t\t\t\t\t\t\t\t\toldMarginLeft = $g.css('marginLeft').toString().replace('%',''),\n\t\t\t\t\t\t\t\t\tnewWidth = oldWidth - sliderAccessWidth,\n\t\t\t\t\t\t\t\t\tnewMarginLeft = ((oldMarginLeft * newWidth)/oldWidth) + '%';\n\n\t\t\t\t\t\t\t\t$g.css({ width: newWidth, marginLeft: newMarginLeft });\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},0);\n\t\t\t}\n\t\t\t// end slideAccess integration\n\n\t\t}\n\t},\n\n\t//########################################################################\n\t// This function tries to limit the ability to go outside the\n\t// min/max date range\n\t//########################################################################\n\t_limitMinMaxDateTime: function(dp_inst, adjustSliders){\n\t\tvar o = this._defaults,\n\t\t\tdp_date = new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay);\n\n\t\tif(!this._defaults.showTimepicker) return; // No time so nothing to check here\n\n\t\tif($.datepicker._get(dp_inst, 'minDateTime') !== null && $.datepicker._get(dp_inst, 'minDateTime') !== undefined && dp_date){\n\t\t\tvar minDateTime = $.datepicker._get(dp_inst, 'minDateTime'),\n\t\t\t\tminDateTimeDate = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), 0, 0, 0, 0);\n\n\t\t\tif(this.hourMinOriginal === null || this.minuteMinOriginal === null || this.secondMinOriginal === null || this.millisecMinOriginal === null){\n\t\t\t\tthis.hourMinOriginal = o.hourMin;\n\t\t\t\tthis.minuteMinOriginal = o.minuteMin;\n\t\t\t\tthis.secondMinOriginal = o.secondMin;\n\t\t\t\tthis.millisecMinOriginal = o.millisecMin;\n\t\t\t}\n\n\t\t\tif(dp_inst.settings.timeOnly || minDateTimeDate.getTime() == dp_date.getTime()) {\n\t\t\t\tthis._defaults.hourMin = minDateTime.getHours();\n\t\t\t\tif (this.hour <= this._defaults.hourMin) {\n\t\t\t\t\tthis.hour = this._defaults.hourMin;\n\t\t\t\t\tthis._defaults.minuteMin = minDateTime.getMinutes();\n\t\t\t\t\tif (this.minute <= this._defaults.minuteMin) {\n\t\t\t\t\t\tthis.minute = this._defaults.minuteMin;\n\t\t\t\t\t\tthis._defaults.secondMin = minDateTime.getSeconds();\n\t\t\t\t\t} else if (this.second <= this._defaults.secondMin){\n\t\t\t\t\t\tthis.second = this._defaults.secondMin;\n\t\t\t\t\t\tthis._defaults.millisecMin = minDateTime.getMilliseconds();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(this.millisec < this._defaults.millisecMin)\n\t\t\t\t\t\t\tthis.millisec = this._defaults.millisecMin;\n\t\t\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis._defaults.minuteMin = this.minuteMinOriginal;\n\t\t\t\t\tthis._defaults.secondMin = this.secondMinOriginal;\n\t\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis._defaults.hourMin = this.hourMinOriginal;\n\t\t\t\tthis._defaults.minuteMin = this.minuteMinOriginal;\n\t\t\t\tthis._defaults.secondMin = this.secondMinOriginal;\n\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\n\t\t\t}\n\t\t}\n\n\t\tif($.datepicker._get(dp_inst, 'maxDateTime') !== null && $.datepicker._get(dp_inst, 'maxDateTime') !== undefined && dp_date){\n\t\t\tvar maxDateTime = $.datepicker._get(dp_inst, 'maxDateTime'),\n\t\t\t\tmaxDateTimeDate = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), 0, 0, 0, 0);\n\n\t\t\tif(this.hourMaxOriginal === null || this.minuteMaxOriginal === null || this.secondMaxOriginal === null){\n\t\t\t\tthis.hourMaxOriginal = o.hourMax;\n\t\t\t\tthis.minuteMaxOriginal = o.minuteMax;\n\t\t\t\tthis.secondMaxOriginal = o.secondMax;\n\t\t\t\tthis.millisecMaxOriginal = o.millisecMax;\n\t\t\t}\n\n\t\t\tif(dp_inst.settings.timeOnly || maxDateTimeDate.getTime() == dp_date.getTime()){\n\t\t\t\tthis._defaults.hourMax = maxDateTime.getHours();\n\t\t\t\tif (this.hour >= this._defaults.hourMax) {\n\t\t\t\t\tthis.hour = this._defaults.hourMax;\n\t\t\t\t\tthis._defaults.minuteMax = maxDateTime.getMinutes();\n\t\t\t\t\tif (this.minute >= this._defaults.minuteMax) {\n\t\t\t\t\t\tthis.minute = this._defaults.minuteMax;\n\t\t\t\t\t\tthis._defaults.secondMax = maxDateTime.getSeconds();\n\t\t\t\t\t} else if (this.second >= this._defaults.secondMax) {\n\t\t\t\t\t\tthis.second = this._defaults.secondMax;\n\t\t\t\t\t\tthis._defaults.millisecMax = maxDateTime.getMilliseconds();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(this.millisec > this._defaults.millisecMax) this.millisec = this._defaults.millisecMax;\n\t\t\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis._defaults.minuteMax = this.minuteMaxOriginal;\n\t\t\t\t\tthis._defaults.secondMax = this.secondMaxOriginal;\n\t\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis._defaults.hourMax = this.hourMaxOriginal;\n\t\t\t\tthis._defaults.minuteMax = this.minuteMaxOriginal;\n\t\t\t\tthis._defaults.secondMax = this.secondMaxOriginal;\n\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\n\t\t\t}\n\t\t}\n\n\t\tif(adjustSliders !== undefined && adjustSliders === true){\n\t\t\tvar hourMax = parseInt((this._defaults.hourMax - ((this._defaults.hourMax - this._defaults.hourMin) % this._defaults.stepHour)) ,10),\n                minMax  = parseInt((this._defaults.minuteMax - ((this._defaults.minuteMax - this._defaults.minuteMin) % this._defaults.stepMinute)) ,10),\n                secMax  = parseInt((this._defaults.secondMax - ((this._defaults.secondMax - this._defaults.secondMin) % this._defaults.stepSecond)) ,10),\n\t\t\t\tmillisecMax  = parseInt((this._defaults.millisecMax - ((this._defaults.millisecMax - this._defaults.millisecMin) % this._defaults.stepMillisec)) ,10);\n\n\t\t\tif(this.hour_slider)\n\t\t\t\tthis.hour_slider.slider(\"option\", { min: this._defaults.hourMin, max: hourMax }).slider('value', this.hour);\n\t\t\tif(this.minute_slider)\n\t\t\t\tthis.minute_slider.slider(\"option\", { min: this._defaults.minuteMin, max: minMax }).slider('value', this.minute);\n\t\t\tif(this.second_slider)\n\t\t\t\tthis.second_slider.slider(\"option\", { min: this._defaults.secondMin, max: secMax }).slider('value', this.second);\n\t\t\tif(this.millisec_slider)\n\t\t\t\tthis.millisec_slider.slider(\"option\", { min: this._defaults.millisecMin, max: millisecMax }).slider('value', this.millisec);\n\t\t}\n\n\t},\n\n\n\t//########################################################################\n\t// when a slider moves, set the internal time...\n\t// on time change is also called when the time is updated in the text field\n\t//########################################################################\n\t_onTimeChange: function() {\n\t\tvar hour   = (this.hour_slider) ? this.hour_slider.slider('value') : false,\n\t\t\tminute = (this.minute_slider) ? this.minute_slider.slider('value') : false,\n\t\t\tsecond = (this.second_slider) ? this.second_slider.slider('value') : false,\n\t\t\tmillisec = (this.millisec_slider) ? this.millisec_slider.slider('value') : false,\n\t\t\ttimezone = (this.timezone_select) ? this.timezone_select.val() : false,\n\t\t\to = this._defaults;\n\n\t\tif (typeof(hour) == 'object') hour = false;\n\t\tif (typeof(minute) == 'object') minute = false;\n\t\tif (typeof(second) == 'object') second = false;\n\t\tif (typeof(millisec) == 'object') millisec = false;\n\t\tif (typeof(timezone) == 'object') timezone = false;\n\n\t\tif (hour !== false) hour = parseInt(hour,10);\n\t\tif (minute !== false) minute = parseInt(minute,10);\n\t\tif (second !== false) second = parseInt(second,10);\n\t\tif (millisec !== false) millisec = parseInt(millisec,10);\n\n\t\tvar ampm = o[hour < 12 ? 'amNames' : 'pmNames'][0];\n\n\t\t// If the update was done in the input field, the input field should not be updated.\n\t\t// If the update was done using the sliders, update the input field.\n\t\tvar hasChanged = (hour != this.hour || minute != this.minute\n\t\t\t\t|| second != this.second || millisec != this.millisec\n\t\t\t\t|| (this.ampm.length > 0\n\t\t\t\t    && (hour < 12) != ($.inArray(this.ampm.toUpperCase(), this.amNames) !== -1))\n\t\t\t\t|| timezone != this.timezone);\n\n\t\tif (hasChanged) {\n\n\t\t\tif (hour !== false)this.hour = hour;\n\t\t\tif (minute !== false) this.minute = minute;\n\t\t\tif (second !== false) this.second = second;\n\t\t\tif (millisec !== false) this.millisec = millisec;\n\t\t\tif (timezone !== false) this.timezone = timezone;\n\n\t\t\tif (!this.inst) this.inst = $.datepicker._getInst(this.$input[0]);\n\n\t\t\tthis._limitMinMaxDateTime(this.inst, true);\n\t\t}\n\t\tif (o.ampm) this.ampm = ampm;\n\n\t\t//this._formatTime();\n\t\tthis.formattedTime = $.datepicker.formatTime(this._defaults.timeFormat, this, this._defaults);\n\t\tif (this.$timeObj) this.$timeObj.text(this.formattedTime + o.timeSuffix);\n\t\tthis.timeDefined = true;\n\t\tif (hasChanged) this._updateDateTime();\n\t},\n\n\t//########################################################################\n\t// call custom onSelect.\n\t// bind to sliders slidestop, and grid click.\n\t//########################################################################\n\t_onSelectHandler: function() {\n\t\tvar onSelect = this._defaults.onSelect;\n\t\tvar inputEl = this.$input ? this.$input[0] : null;\n\t\tif (onSelect && inputEl) {\n\t\t\tonSelect.apply(inputEl, [this.formattedDateTime, this]);\n\t\t}\n\t},\n\n\t//########################################################################\n\t// left for any backwards compatibility\n\t//########################################################################\n\t_formatTime: function(time, format) {\n\t\ttime = time || { hour: this.hour, minute: this.minute, second: this.second, millisec: this.millisec, ampm: this.ampm, timezone: this.timezone };\n\t\tvar tmptime = (format || this._defaults.timeFormat).toString();\n\n\t\ttmptime = $.datepicker.formatTime(tmptime, time, this._defaults);\n\n\t\tif (arguments.length) return tmptime;\n\t\telse this.formattedTime = tmptime;\n\t},\n\n\t//########################################################################\n\t// update our input with the new date time..\n\t//########################################################################\n\t_updateDateTime: function(dp_inst) {\n\t\tdp_inst = this.inst || dp_inst;\n\t\tvar dt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),\n\t\t\tdateFmt = $.datepicker._get(dp_inst, 'dateFormat'),\n\t\t\tformatCfg = $.datepicker._getFormatConfig(dp_inst),\n\t\t\ttimeAvailable = dt !== null && this.timeDefined;\n\t\tthis.formattedDate = $.datepicker.formatDate(dateFmt, (dt === null ? new Date() : dt), formatCfg);\n\t\tvar formattedDateTime = this.formattedDate;\n\t\tif (dp_inst.lastVal !== undefined && (dp_inst.lastVal.length > 0 && this.$input.val().length === 0))\n\t\t\treturn;\n\n\t\tif (this._defaults.timeOnly === true) {\n\t\t\tformattedDateTime = this.formattedTime;\n\t\t} else if (this._defaults.timeOnly !== true && (this._defaults.alwaysSetTime || timeAvailable)) {\n\t\t\tformattedDateTime += this._defaults.separator + this.formattedTime + this._defaults.timeSuffix;\n\t\t}\n\n\t\tthis.formattedDateTime = formattedDateTime;\n\n\t\tif(!this._defaults.showTimepicker) {\n\t\t\tthis.$input.val(this.formattedDate);\n\t\t} else if (this.$altInput && this._defaults.altFieldTimeOnly === true) {\n\t\t\tthis.$altInput.val(this.formattedTime);\n\t\t\tthis.$input.val(this.formattedDate);\n\t\t} else if(this.$altInput) {\n\t\t\tthis.$altInput.val(formattedDateTime);\n\t\t\tthis.$input.val(formattedDateTime);\n\t\t} else {\n\t\t\tthis.$input.val(formattedDateTime);\n\t\t}\n\n\t\tthis.$input.trigger(\"change\");\n\t}\n\n});\n\n$.fn.extend({\n\t//########################################################################\n\t// shorthand just to use timepicker..\n\t//########################################################################\n\ttimepicker: function(o) {\n\t\to = o || {};\n\t\tvar tmp_args = arguments;\n\n\t\tif (typeof o == 'object') tmp_args[0] = $.extend(o, { timeOnly: true });\n\n\t\treturn $(this).each(function() {\n\t\t\t$.fn.datetimepicker.apply($(this), tmp_args);\n\t\t});\n\t},\n\n\t//########################################################################\n\t// extend timepicker to datepicker\n\t//########################################################################\n\tdatetimepicker: function(o) {\n\t\to = o || {};\n\t\ttmp_args = arguments;\n\n\t\tif (typeof(o) == 'string'){\n\t\t\tif(o == 'getDate')\n\t\t\t\treturn $.fn.datepicker.apply($(this[0]), tmp_args);\n\t\t\telse\n\t\t\t\treturn this.each(function() {\n\t\t\t\t\tvar $t = $(this);\n\t\t\t\t\t$t.datepicker.apply($t, tmp_args);\n\t\t\t\t});\n\t\t}\n\t\telse\n\t\t\treturn this.each(function() {\n\t\t\t\tvar $t = $(this);\n\t\t\t\t$t.datepicker($.timepicker._newInst($t, o)._defaults);\n\t\t\t});\n\t}\n});\n\n//########################################################################\n// format the time all pretty...\n// format = string format of the time\n// time = a {}, not a Date() for timezones\n// options = essentially the regional[].. amNames, pmNames, ampm\n//########################################################################\n$.datepicker.formatTime = function(format, time, options) {\n\toptions = options || {};\n\toptions = $.extend($.timepicker._defaults, options);\n\ttime = $.extend({hour:0, minute:0, second:0, millisec:0, timezone:'+0000'}, time);\n\n\tvar tmptime = format;\n\tvar ampmName = options['amNames'][0];\n\n\tvar hour = parseInt(time.hour, 10);\n\tif (options.ampm) {\n\t\tif (hour > 11){\n\t\t\tampmName = options['pmNames'][0];\n\t\t\tif(hour > 12)\n\t\t\t\thour = hour % 12;\n\t\t}\n\t\tif (hour === 0)\n\t\t\thour = 12;\n\t}\n\ttmptime = tmptime.replace(/(?:hh?|mm?|ss?|[tT]{1,2}|[lz])/g, function(match) {\n\t\tswitch (match.toLowerCase()) {\n\t\t\tcase 'hh': return ('0' + hour).slice(-2);\n\t\t\tcase 'h':  return hour;\n\t\t\tcase 'mm': return ('0' + time.minute).slice(-2);\n\t\t\tcase 'm':  return time.minute;\n\t\t\tcase 'ss': return ('0' + time.second).slice(-2);\n\t\t\tcase 's':  return time.second;\n\t\t\tcase 'l':  return ('00' + time.millisec).slice(-3);\n\t\t\tcase 'z':  return time.timezone;\n\t\t\tcase 't': case 'tt':\n\t\t\t\tif (options.ampm) {\n\t\t\t\t\tif (match.length == 1)\n\t\t\t\t\t\tampmName = ampmName.charAt(0);\n\t\t\t\t\treturn match.charAt(0) == 'T' ? ampmName.toUpperCase() : ampmName.toLowerCase();\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t}\n\t});\n\n\ttmptime = $.trim(tmptime);\n\treturn tmptime;\n};\n\n//########################################################################\n// the bad hack :/ override datepicker so it doesnt close on select\n// inspired: http://stackoverflow.com/questions/1252512/jquery-datepicker-prevent-closing-picker-when-clicking-a-date/1762378#1762378\n//########################################################################\n$.datepicker._base_selectDate = $.datepicker._selectDate;\n$.datepicker._selectDate = function (id, dateStr) {\n\tvar inst = this._getInst($(id)[0]),\n\t\ttp_inst = this._get(inst, 'timepicker');\n\n\tif (tp_inst) {\n\t\ttp_inst._limitMinMaxDateTime(inst, true);\n\t\tinst.inline = inst.stay_open = true;\n\t\t//This way the onSelect handler called from calendarpicker get the full dateTime\n\t\tthis._base_selectDate(id, dateStr);\n\t\tinst.inline = inst.stay_open = false;\n\t\tthis._notifyChange(inst);\n\t\tthis._updateDatepicker(inst);\n\t}\n\telse this._base_selectDate(id, dateStr);\n};\n\n//#############################################################################################\n// second bad hack :/ override datepicker so it triggers an event when changing the input field\n// and does not redraw the datepicker on every selectDate event\n//#############################################################################################\n$.datepicker._base_updateDatepicker = $.datepicker._updateDatepicker;\n$.datepicker._updateDatepicker = function(inst) {\n\n\t// don't popup the datepicker if there is another instance already opened\n\tvar input = inst.input[0];\n\tif($.datepicker._curInst &&\n\t   $.datepicker._curInst != inst &&\n\t   $.datepicker._datepickerShowing &&\n\t   $.datepicker._lastInput != input) {\n\t\treturn;\n\t}\n\n\tif (typeof(inst.stay_open) !== 'boolean' || inst.stay_open === false) {\n\n\t\tthis._base_updateDatepicker(inst);\n\n\t\t// Reload the time control when changing something in the input text field.\n\t\tvar tp_inst = this._get(inst, 'timepicker');\n\t\tif(tp_inst) tp_inst._addTimePicker(inst);\n\t}\n};\n\n//#######################################################################################\n// third bad hack :/ override datepicker so it allows spaces and colon in the input field\n//#######################################################################################\n$.datepicker._base_doKeyPress = $.datepicker._doKeyPress;\n$.datepicker._doKeyPress = function(event) {\n\tvar inst = $.datepicker._getInst(event.target),\n\t\ttp_inst = $.datepicker._get(inst, 'timepicker');\n\n\tif (tp_inst) {\n\t\tif ($.datepicker._get(inst, 'constrainInput')) {\n\t\t\tvar ampm = tp_inst._defaults.ampm,\n\t\t\t\tdateChars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')),\n\t\t\t\tdatetimeChars = tp_inst._defaults.timeFormat.toString()\n\t\t\t\t\t\t\t\t.replace(/[hms]/g, '')\n\t\t\t\t\t\t\t\t.replace(/TT/g, ampm ? 'APM' : '')\n\t\t\t\t\t\t\t\t.replace(/Tt/g, ampm ? 'AaPpMm' : '')\n\t\t\t\t\t\t\t\t.replace(/tT/g, ampm ? 'AaPpMm' : '')\n\t\t\t\t\t\t\t\t.replace(/T/g, ampm ? 'AP' : '')\n\t\t\t\t\t\t\t\t.replace(/tt/g, ampm ? 'apm' : '')\n\t\t\t\t\t\t\t\t.replace(/t/g, ampm ? 'ap' : '') +\n\t\t\t\t\t\t\t\t\" \" +\n\t\t\t\t\t\t\t\ttp_inst._defaults.separator +\n\t\t\t\t\t\t\t\ttp_inst._defaults.timeSuffix +\n\t\t\t\t\t\t\t\t(tp_inst._defaults.showTimezone ? tp_inst._defaults.timezoneList.join('') : '') +\n\t\t\t\t\t\t\t\t(tp_inst._defaults.amNames.join('')) +\n\t\t\t\t\t\t\t\t(tp_inst._defaults.pmNames.join('')) +\n\t\t\t\t\t\t\t\tdateChars,\n\t\t\t\tchr = String.fromCharCode(event.charCode === undefined ? event.keyCode : event.charCode);\n\t\t\treturn event.ctrlKey || (chr < ' ' || !dateChars || datetimeChars.indexOf(chr) > -1);\n\t\t}\n\t}\n\n\treturn $.datepicker._base_doKeyPress(event);\n};\n\n//#######################################################################################\n// Override key up event to sync manual input changes.\n//#######################################################################################\n$.datepicker._base_doKeyUp = $.datepicker._doKeyUp;\n$.datepicker._doKeyUp = function (event) {\n\tvar inst = $.datepicker._getInst(event.target),\n\t\ttp_inst = $.datepicker._get(inst, 'timepicker');\n\n\tif (tp_inst) {\n\t\tif (tp_inst._defaults.timeOnly && (inst.input.val() != inst.lastVal)) {\n\t\t\ttry {\n\t\t\t\t$.datepicker._updateDatepicker(inst);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\t$.datepicker.log(err);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn $.datepicker._base_doKeyUp(event);\n};\n\n//#######################################################################################\n// override \"Today\" button to also grab the time.\n//#######################################################################################\n$.datepicker._base_gotoToday = $.datepicker._gotoToday;\n$.datepicker._gotoToday = function(id) {\n\tvar inst = this._getInst($(id)[0]),\n\t\t$dp = inst.dpDiv;\n\tthis._base_gotoToday(id);\n\tvar now = new Date();\n\tvar tp_inst = this._get(inst, 'timepicker');\n\tif (tp_inst && tp_inst._defaults.showTimezone && tp_inst.timezone_select) {\n\t\tvar tzoffset = now.getTimezoneOffset(); // If +0100, returns -60\n\t\tvar tzsign = tzoffset > 0 ? '-' : '+';\n\t\ttzoffset = Math.abs(tzoffset);\n\t\tvar tzmin = tzoffset % 60;\n\t\ttzoffset = tzsign + ('0' + (tzoffset - tzmin) / 60).slice(-2) + ('0' + tzmin).slice(-2);\n\t\tif (tp_inst._defaults.timezoneIso8609)\n\t\t\ttzoffset = tzoffset.substring(0, 3) + ':' + tzoffset.substring(3);\n\t\ttp_inst.timezone_select.val(tzoffset);\n\t}\n\tthis._setTime(inst, now);\n\t$( '.ui-datepicker-today', $dp).click();\n};\n\n//#######################################################################################\n// Disable & enable the Time in the datetimepicker\n//#######################################################################################\n$.datepicker._disableTimepickerDatepicker = function(target, date, withDate) {\n\tvar inst = this._getInst(target),\n\ttp_inst = this._get(inst, 'timepicker');\n\t$(target).datepicker('getDate'); // Init selected[Year|Month|Day]\n\tif (tp_inst) {\n\t\ttp_inst._defaults.showTimepicker = false;\n\t\ttp_inst._updateDateTime(inst);\n\t}\n};\n\n$.datepicker._enableTimepickerDatepicker = function(target, date, withDate) {\n\tvar inst = this._getInst(target),\n\ttp_inst = this._get(inst, 'timepicker');\n\t$(target).datepicker('getDate'); // Init selected[Year|Month|Day]\n\tif (tp_inst) {\n\t\ttp_inst._defaults.showTimepicker = true;\n\t\ttp_inst._addTimePicker(inst); // Could be disabled on page load\n\t\ttp_inst._updateDateTime(inst);\n\t}\n};\n\n//#######################################################################################\n// Create our own set time function\n//#######################################################################################\n$.datepicker._setTime = function(inst, date) {\n\tvar tp_inst = this._get(inst, 'timepicker');\n\tif (tp_inst) {\n\t\tvar defaults = tp_inst._defaults,\n\t\t\t// calling _setTime with no date sets time to defaults\n\t\t\thour = date ? date.getHours() : defaults.hour,\n\t\t\tminute = date ? date.getMinutes() : defaults.minute,\n\t\t\tsecond = date ? date.getSeconds() : defaults.second,\n\t\t\tmillisec = date ? date.getMilliseconds() : defaults.millisec;\n\n\t\t//check if within min/max times..\n\t\tif ((hour < defaults.hourMin || hour > defaults.hourMax) || (minute < defaults.minuteMin || minute > defaults.minuteMax) || (second < defaults.secondMin || second > defaults.secondMax) || (millisec < defaults.millisecMin || millisec > defaults.millisecMax)) {\n\t\t\thour = defaults.hourMin;\n\t\t\tminute = defaults.minuteMin;\n\t\t\tsecond = defaults.secondMin;\n\t\t\tmillisec = defaults.millisecMin;\n\t\t}\n\n\t\ttp_inst.hour = hour;\n\t\ttp_inst.minute = minute;\n\t\ttp_inst.second = second;\n\t\ttp_inst.millisec = millisec;\n\n\t\tif (tp_inst.hour_slider) tp_inst.hour_slider.slider('value', hour);\n\t\tif (tp_inst.minute_slider) tp_inst.minute_slider.slider('value', minute);\n\t\tif (tp_inst.second_slider) tp_inst.second_slider.slider('value', second);\n\t\tif (tp_inst.millisec_slider) tp_inst.millisec_slider.slider('value', millisec);\n\n\t\ttp_inst._onTimeChange();\n\t\ttp_inst._updateDateTime(inst);\n\t}\n};\n\n//#######################################################################################\n// Create new public method to set only time, callable as $().datepicker('setTime', date)\n//#######################################################################################\n$.datepicker._setTimeDatepicker = function(target, date, withDate) {\n\tvar inst = this._getInst(target),\n\t\ttp_inst = this._get(inst, 'timepicker');\n\n\tif (tp_inst) {\n\t\tthis._setDateFromField(inst);\n\t\tvar tp_date;\n\t\tif (date) {\n\t\t\tif (typeof date == \"string\") {\n\t\t\t\ttp_inst._parseTime(date, withDate);\n\t\t\t\ttp_date = new Date();\n\t\t\t\ttp_date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);\n\t\t\t}\n\t\t\telse tp_date = new Date(date.getTime());\n\t\t\tif (tp_date.toString() == 'Invalid Date') tp_date = undefined;\n\t\t\tthis._setTime(inst, tp_date);\n\t\t}\n\t}\n\n};\n\n//#######################################################################################\n// override setDate() to allow setting time too within Date object\n//#######################################################################################\n$.datepicker._base_setDateDatepicker = $.datepicker._setDateDatepicker;\n$.datepicker._setDateDatepicker = function(target, date) {\n\tvar inst = this._getInst(target),\n\ttp_date = (date instanceof Date) ? new Date(date.getTime()) : date;\n\n\tthis._updateDatepicker(inst);\n\tthis._base_setDateDatepicker.apply(this, arguments);\n\tthis._setTimeDatepicker(target, tp_date, true);\n};\n\n//#######################################################################################\n// override getDate() to allow getting time too within Date object\n//#######################################################################################\n$.datepicker._base_getDateDatepicker = $.datepicker._getDateDatepicker;\n$.datepicker._getDateDatepicker = function(target, noDefault) {\n\tvar inst = this._getInst(target),\n\t\ttp_inst = this._get(inst, 'timepicker');\n\n\tif (tp_inst) {\n\t\tthis._setDateFromField(inst, noDefault);\n\t\tvar date = this._getDate(inst);\n\t\tif (date && tp_inst._parseTime($(target).val(), tp_inst.timeOnly)) date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);\n\t\treturn date;\n\t}\n\treturn this._base_getDateDatepicker(target, noDefault);\n};\n\n//#######################################################################################\n// override parseDate() because UI 1.8.14 throws an error about \"Extra characters\"\n// An option in datapicker to ignore extra format characters would be nicer.\n//#######################################################################################\n$.datepicker._base_parseDate = $.datepicker.parseDate;\n$.datepicker.parseDate = function(format, value, settings) {\n\tvar date;\n\ttry {\n\t\tdate = this._base_parseDate(format, value, settings);\n\t} catch (err) {\n\t\tif (err.indexOf(\":\") >= 0) {\n\t\t\t// Hack!  The error message ends with a colon, a space, and\n\t\t\t// the \"extra\" characters.  We rely on that instead of\n\t\t\t// attempting to perfectly reproduce the parsing algorithm.\n\t\t\tdate = this._base_parseDate(format, value.substring(0,value.length-(err.length-err.indexOf(':')-2)), settings);\n\t\t} else {\n\t\t\t// The underlying error was not related to the time\n\t\t\tthrow err;\n\t\t}\n\t}\n\treturn date;\n};\n\n//#######################################################################################\n// override formatDate to set date with time to the input\n//#######################################################################################\n$.datepicker._base_formatDate = $.datepicker._formatDate;\n$.datepicker._formatDate = function(inst, day, month, year){\n\tvar tp_inst = this._get(inst, 'timepicker');\n\tif(tp_inst) {\n\t\ttp_inst._updateDateTime(inst);\n\t\treturn tp_inst.$input.val();\n\t}\n\treturn this._base_formatDate(inst);\n};\n\n//#######################################################################################\n// override options setter to add time to maxDate(Time) and minDate(Time). MaxDate\n//#######################################################################################\n$.datepicker._base_optionDatepicker = $.datepicker._optionDatepicker;\n$.datepicker._optionDatepicker = function(target, name, value) {\n\tvar inst = this._getInst(target),\n\t\ttp_inst = this._get(inst, 'timepicker');\n\tif (tp_inst) {\n\t\tvar min = null, max = null, onselect = null;\n\t\tif (typeof name == 'string') { // if min/max was set with the string\n\t\t\tif (name === 'minDate' || name === 'minDateTime' )\n\t\t\t\tmin = value;\n\t\t\telse if (name === 'maxDate' || name === 'maxDateTime')\n\t\t\t\tmax = value;\n\t\t\telse if (name === 'onSelect')\n\t\t\t\tonselect = value;\n\t\t} else if (typeof name == 'object') { //if min/max was set with the JSON\n\t\t\tif (name.minDate)\n\t\t\t\tmin = name.minDate;\n\t\t\telse if (name.minDateTime)\n\t\t\t\tmin = name.minDateTime;\n\t\t\telse if (name.maxDate)\n\t\t\t\tmax = name.maxDate;\n\t\t\telse if (name.maxDateTime)\n\t\t\t\tmax = name.maxDateTime;\n\t\t}\n\t\tif(min) { //if min was set\n\t\t\tif (min == 0)\n\t\t\t\tmin = new Date();\n\t\t\telse\n\t\t\t\tmin = new Date(min);\n\n\t\t\ttp_inst._defaults.minDate = min;\n\t\t\ttp_inst._defaults.minDateTime = min;\n\t\t} else if (max) { //if max was set\n\t\t\tif(max==0)\n\t\t\t\tmax=new Date();\n\t\t\telse\n\t\t\t\tmax= new Date(max);\n\t\t\ttp_inst._defaults.maxDate = max;\n\t\t\ttp_inst._defaults.maxDateTime = max;\n\t\t} else if (onselect)\n\t\t\ttp_inst._defaults.onSelect = onselect;\n\t}\n\tif (value === undefined)\n\t\treturn this._base_optionDatepicker(target, name);\n\treturn this._base_optionDatepicker(target, name, value);\n};\n\n//#######################################################################################\n// jQuery extend now ignores nulls!\n//#######################################################################################\nfunction extendRemove(target, props) {\n\t$.extend(target, props);\n\tfor (var name in props)\n\t\tif (props[name] === null || props[name] === undefined)\n\t\t\ttarget[name] = props[name];\n\treturn target;\n};\n\n$.timepicker = new Timepicker(); // singleton instance\n$.timepicker.version = \"1.0.0\";\n\n})(jQuery);\n"],"mappings":"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"}