{"version":3,"sources":["datepicker.js"],"names":["window","$","undefined","$body","$datepickersContainer","datepicker","pluginName","containerBuilt","defaults","hotKeys","Datepicker","classes","inline","language","startDate","Date","firstDay","weekends","dateFormat","altField","altFieldDateFormat","toggleSelected","keyboardNav","position","offset","view","minView","showOtherMonths","selectOtherMonths","moveToOtherMonthsOnSelect","showOtherYears","selectOtherYears","moveToOtherYearsOnSelect","minDate","maxDate","disableNavWhenOutOfRange","multipleDates","multipleDatesSeparator","range","todayButton","clearButton","showEvent","autoClose","monthsField","prevHtml","nextHtml","navTitles","days","months","years","timepicker","onlyTimepicker","dateTimeSeparator","timeFormat","minHours","maxHours","minMinutes","maxMinutes","hoursStep","minutesStep","onSelect","onShow","onHide","onChangeMonth","onChangeYear","onChangeDecade","onChangeView","onRenderCell","ctrlRight","ctrlUp","ctrlLeft","ctrlDown","shiftRight","shiftUp","shiftLeft","shiftDown","altUp","altRight","altLeft","altDown","ctrlShiftUp","el","options","this","$el","opts","extend","data","nodeName","elIsInput","$altField","inited","visible","silent","currentDate","currentView","_createShortCuts","selectedDates","views","keys","minRange","maxRange","_prevOnSelectValue","init","prototype","VERSION","viewIndexes","_buildDatepickersContainer","_buildBaseHtml","_defineLocale","_syncWithMinMaxDates","_setPositionClasses","_bindEvents","_bindKeyboardEvents","$datepicker","on","_onMouseDownDatepicker","bind","_onMouseUpDatepicker","addClass","fn","Timepicker","_bindTimepickerEvents","Body","show","nav","Navigation","_onClickCell","_onMouseEnterCell","_onMouseLeaveCell","_onShowEvent","_onMouseUpEl","_onBlur","_onKeyUpGeneral","_onResize","_onMouseUpBody","_onKeyDown","_onKeyUp","_onHotKey","_onTimeChange","isWeekend","day","indexOf","lang","loc","console","warn","ru","join","boundary","_getWordBoundaryRegExp","match","ampm","append","$appendTarget","$inline","insertAfter","appendTo","$content","$nav","_triggerOnChange","length","formattedDates","parsedSelected","getParsedDate","_this","dates","year","month","date","hours","minutes","map","formatDate","parsedDate","next","d","o","curDecade","prev","string","validHours","result","locale","leadingZero","getLeadingZeroNum","decade","getDecade","fullHours","dayPeriod","replacer","_replacer","_getValidHoursFromDate","test","replace","getTime","toUpperCase","fullDate","daysShort","fullMonth","monthsShort","fullMinutes","toString","slice","str","reg","p1","p2","p3","sign","symbols","RegExp","selectDate","len","newDate","Array","isArray","forEach","lastSelectedDate","_setTime","_trigger","setHours","setMinutes","getMonth","getFullYear","_render","_isSelected","push","bigger","_setInputValue","timepickerIsActive","hide","removeDate","selected","some","curDate","i","isSame","splice","today","clear","update","param","value","arguments","_addButtonsIfNeed","setPosition","_handleDate","_updateRanges","_updateCurrentTime","curTime","minTime","maxTime","checkDate","cellType","res","altValues","format","altFormat","val","_isInRange","type","time","min","max","dMinTime","dMaxTime","types","_getDimensions","width","outerWidth","height","outerHeight","left","top","_getDateFromCell","cell","pos","main","split","removeAttr","dims","selfDims","secondary","css","_bindVisionEvents","removeClass","focused","inFocus","blur","down","_changeView","up","event","off","one","dir","nextView","viewIndex","_handleHotKey","key","focusedParsed","totalDaysInNextMonth","_getFocusedDate","monthChanged","yearChanged","decadeChanged","y","m","getDaysCount","_registerKey","curKey","_unRegisterKey","index","_isHotKeyPressed","currentHotKey","found","pressedKeys","sort","hotKey","every","args","trigger","_focusNextCell","keyCode","nd","getDate","_getCell","$cell","selector","find","destroy","closest","remove","_handleAlreadySelectedDates","alreadySelected","selectedDate","e","originalEvent","timepickerFocus","focus","setTimeout","code","which","preventDefault","hasClass","target","less","_update","h","_focused","prevView","substring","getDay","getHours","getMinutes","firstYear","Math","floor","template","source","date1","date2","d1","d2","_type","dateCompareTo","num","parseInt","resetTime","each","Constructor","daysMin","templates","dp","proxy","$names","$cells","_getDayNamesHtml","curDay","html","_getCellContents","parent","render","disabled","_getDaysHtml","totalMonthDays","firstMonthDay","lastMonthDay","daysFromPevMonth","daysFromNextMonth","_getDayHtml","content","_getMonthsHtml","_getMonthHtml","_getYearsHtml","_getYearHtml","_renderTypes","dayNames","attr","acitve","active","_handleClick","$buttonsContainer","_onClickNavButton","_onClickNavTitle","_addButton","title","_getTitle","setNavStatus","_addButtonsContainer","action","label","_disableNav","_activateNav","inst","input","_buildHTML","navigator","userAgent","_onSelectDate","$ranges","_onChangeRange","_onMouseUpRange","_onMouseEnterRange","_onMouseOutRange","_date","_setMinTimeFromDate","_setMaxTimeFromDate","_setDefaultMinMaxTime","_validateHoursMinutes","lz","hourMin","hourMax","hourStep","hourValue","hourVisible","displayHours","minMin","minMax","minStep","minValue","_template","$timepicker","$hours","$minutes","$hoursText","$minutesText","$ampm","_hours","$target","name","jQuery"],"mappings":"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","file":"../datepicker.js","sourcesContent":[";(function (window, $, undefined) { ;(function () {\r\n var VERSION = '2.2.3',\r\n pluginName = 'datepicker',\r\n autoInitSelector = '.datepicker-here',\r\n $body, $datepickersContainer,\r\n containerBuilt = false,\r\n baseTemplate = '' +\r\n '
' +\r\n '' +\r\n '' +\r\n '
' +\r\n '
',\r\n defaults = {\r\n classes: '',\r\n inline: false,\r\n language: 'ru',\r\n startDate: new Date(),\r\n firstDay: '',\r\n weekends: [6, 0],\r\n dateFormat: '',\r\n altField: '',\r\n altFieldDateFormat: '@',\r\n toggleSelected: true,\r\n keyboardNav: true,\r\n\r\n position: 'bottom left',\r\n offset: 12,\r\n\r\n view: 'days',\r\n minView: 'days',\r\n\r\n showOtherMonths: true,\r\n selectOtherMonths: true,\r\n moveToOtherMonthsOnSelect: true,\r\n\r\n showOtherYears: true,\r\n selectOtherYears: true,\r\n moveToOtherYearsOnSelect: true,\r\n\r\n minDate: '',\r\n maxDate: '',\r\n disableNavWhenOutOfRange: true,\r\n\r\n multipleDates: false, // Boolean or Number\r\n multipleDatesSeparator: ',',\r\n range: false,\r\n\r\n todayButton: false,\r\n clearButton: false,\r\n\r\n showEvent: 'focus',\r\n autoClose: false,\r\n\r\n // navigation\r\n monthsField: 'monthsShort',\r\n prevHtml: '',\r\n nextHtml: '',\r\n navTitles: {\r\n days: 'MM, yyyy',\r\n months: 'yyyy',\r\n years: 'yyyy1 - yyyy2'\r\n },\r\n\r\n // timepicker\r\n timepicker: false,\r\n onlyTimepicker: false,\r\n dateTimeSeparator: ' ',\r\n timeFormat: '',\r\n minHours: 0,\r\n maxHours: 24,\r\n minMinutes: 0,\r\n maxMinutes: 59,\r\n hoursStep: 1,\r\n minutesStep: 1,\r\n\r\n // events\r\n onSelect: '',\r\n onShow: '',\r\n onHide: '',\r\n onChangeMonth: '',\r\n onChangeYear: '',\r\n onChangeDecade: '',\r\n onChangeView: '',\r\n onRenderCell: ''\r\n },\r\n hotKeys = {\r\n 'ctrlRight': [17, 39],\r\n 'ctrlUp': [17, 38],\r\n 'ctrlLeft': [17, 37],\r\n 'ctrlDown': [17, 40],\r\n 'shiftRight': [16, 39],\r\n 'shiftUp': [16, 38],\r\n 'shiftLeft': [16, 37],\r\n 'shiftDown': [16, 40],\r\n 'altUp': [18, 38],\r\n 'altRight': [18, 39],\r\n 'altLeft': [18, 37],\r\n 'altDown': [18, 40],\r\n 'ctrlShiftUp': [16, 17, 38]\r\n },\r\n datepicker;\r\n\r\n var Datepicker = function (el, options) {\r\n this.el = el;\r\n this.$el = $(el);\r\n\r\n this.opts = $.extend(true, {}, defaults, options, this.$el.data());\r\n\r\n if ($body == undefined) {\r\n $body = $('body');\r\n }\r\n\r\n if (!this.opts.startDate) {\r\n this.opts.startDate = new Date();\r\n }\r\n\r\n if (this.el.nodeName == 'INPUT') {\r\n this.elIsInput = true;\r\n }\r\n\r\n if (this.opts.altField) {\r\n this.$altField = typeof this.opts.altField == 'string' ? $(this.opts.altField) : this.opts.altField;\r\n }\r\n\r\n this.inited = false;\r\n this.visible = false;\r\n this.silent = false; // Need to prevent unnecessary rendering\r\n\r\n this.currentDate = this.opts.startDate;\r\n this.currentView = this.opts.view;\r\n this._createShortCuts();\r\n this.selectedDates = [];\r\n this.views = {};\r\n this.keys = [];\r\n this.minRange = '';\r\n this.maxRange = '';\r\n this._prevOnSelectValue = '';\r\n\r\n this.init()\r\n };\r\n\r\n datepicker = Datepicker;\r\n\r\n datepicker.prototype = {\r\n VERSION: VERSION,\r\n viewIndexes: ['days', 'months', 'years'],\r\n\r\n init: function () {\r\n if (!containerBuilt && !this.opts.inline && this.elIsInput) {\r\n this._buildDatepickersContainer();\r\n }\r\n this._buildBaseHtml();\r\n this._defineLocale(this.opts.language);\r\n this._syncWithMinMaxDates();\r\n\r\n if (this.elIsInput) {\r\n if (!this.opts.inline) {\r\n // Set extra classes for proper transitions\r\n this._setPositionClasses(this.opts.position);\r\n this._bindEvents()\r\n }\r\n if (this.opts.keyboardNav && !this.opts.onlyTimepicker) {\r\n this._bindKeyboardEvents();\r\n }\r\n this.$datepicker.on('mousedown', this._onMouseDownDatepicker.bind(this));\r\n this.$datepicker.on('mouseup', this._onMouseUpDatepicker.bind(this));\r\n }\r\n\r\n if (this.opts.classes) {\r\n this.$datepicker.addClass(this.opts.classes)\r\n }\r\n\r\n if (this.opts.timepicker) {\r\n this.timepicker = new $.fn.datepicker.Timepicker(this, this.opts);\r\n this._bindTimepickerEvents();\r\n }\r\n\r\n if (this.opts.onlyTimepicker) {\r\n this.$datepicker.addClass('-only-timepicker-');\r\n }\r\n\r\n this.views[this.currentView] = new $.fn.datepicker.Body(this, this.currentView, this.opts);\r\n this.views[this.currentView].show();\r\n this.nav = new $.fn.datepicker.Navigation(this, this.opts);\r\n this.view = this.currentView;\r\n\r\n this.$el.on('clickCell.adp', this._onClickCell.bind(this));\r\n this.$datepicker.on('mouseenter', '.datepicker--cell', this._onMouseEnterCell.bind(this));\r\n this.$datepicker.on('mouseleave', '.datepicker--cell', this._onMouseLeaveCell.bind(this));\r\n\r\n this.inited = true;\r\n },\r\n\r\n _createShortCuts: function () {\r\n this.minDate = this.opts.minDate ? this.opts.minDate : new Date(-8639999913600000);\r\n this.maxDate = this.opts.maxDate ? this.opts.maxDate : new Date(8639999913600000);\r\n },\r\n\r\n _bindEvents : function () {\r\n this.$el.on(this.opts.showEvent + '.adp', this._onShowEvent.bind(this));\r\n this.$el.on('mouseup.adp', this._onMouseUpEl.bind(this));\r\n this.$el.on('blur.adp', this._onBlur.bind(this));\r\n this.$el.on('keyup.adp', this._onKeyUpGeneral.bind(this));\r\n $(window).on('resize.adp', this._onResize.bind(this));\r\n $('body').on('mouseup.adp', this._onMouseUpBody.bind(this));\r\n },\r\n\r\n _bindKeyboardEvents: function () {\r\n this.$el.on('keydown.adp', this._onKeyDown.bind(this));\r\n this.$el.on('keyup.adp', this._onKeyUp.bind(this));\r\n this.$el.on('hotKey.adp', this._onHotKey.bind(this));\r\n },\r\n\r\n _bindTimepickerEvents: function () {\r\n this.$el.on('timeChange.adp', this._onTimeChange.bind(this));\r\n },\r\n\r\n isWeekend: function (day) {\r\n return this.opts.weekends.indexOf(day) !== -1;\r\n },\r\n\r\n _defineLocale: function (lang) {\r\n if (typeof lang == 'string') {\r\n this.loc = $.fn.datepicker.language[lang];\r\n if (!this.loc) {\r\n console.warn('Can\\'t find language \"' + lang + '\" in Datepicker.language, will use \"ru\" instead');\r\n this.loc = $.extend(true, {}, $.fn.datepicker.language.ru)\r\n }\r\n\r\n this.loc = $.extend(true, {}, $.fn.datepicker.language.ru, $.fn.datepicker.language[lang])\r\n } else {\r\n this.loc = $.extend(true, {}, $.fn.datepicker.language.ru, lang)\r\n }\r\n\r\n if (this.opts.dateFormat) {\r\n this.loc.dateFormat = this.opts.dateFormat\r\n }\r\n\r\n if (this.opts.timeFormat) {\r\n this.loc.timeFormat = this.opts.timeFormat\r\n }\r\n\r\n if (this.opts.firstDay !== '') {\r\n this.loc.firstDay = this.opts.firstDay\r\n }\r\n\r\n if (this.opts.timepicker) {\r\n this.loc.dateFormat = [this.loc.dateFormat, this.loc.timeFormat].join(this.opts.dateTimeSeparator);\r\n }\r\n\r\n if (this.opts.onlyTimepicker) {\r\n this.loc.dateFormat = this.loc.timeFormat;\r\n }\r\n\r\n var boundary = this._getWordBoundaryRegExp;\r\n if (this.loc.timeFormat.match(boundary('aa')) ||\r\n this.loc.timeFormat.match(boundary('AA'))\r\n ) {\r\n this.ampm = true;\r\n }\r\n },\r\n\r\n _buildDatepickersContainer: function () {\r\n containerBuilt = true;\r\n $body.append('
');\r\n $datepickersContainer = $('#datepickers-container');\r\n },\r\n\r\n _buildBaseHtml: function () {\r\n var $appendTarget,\r\n $inline = $('
');\r\n\r\n if(this.el.nodeName == 'INPUT') {\r\n if (!this.opts.inline) {\r\n $appendTarget = $datepickersContainer;\r\n } else {\r\n $appendTarget = $inline.insertAfter(this.$el)\r\n }\r\n } else {\r\n $appendTarget = $inline.appendTo(this.$el)\r\n }\r\n\r\n this.$datepicker = $(baseTemplate).appendTo($appendTarget);\r\n this.$content = $('.datepicker--content', this.$datepicker);\r\n this.$nav = $('.datepicker--nav', this.$datepicker);\r\n },\r\n\r\n _triggerOnChange: function () {\r\n if (!this.selectedDates.length) {\r\n // Prevent from triggering multiple onSelect callback with same argument (empty string) in IE10-11\r\n if (this._prevOnSelectValue === '') return;\r\n this._prevOnSelectValue = '';\r\n return this.opts.onSelect('', '', this);\r\n }\r\n\r\n var selectedDates = this.selectedDates,\r\n parsedSelected = datepicker.getParsedDate(selectedDates[0]),\r\n formattedDates,\r\n _this = this,\r\n dates = new Date(\r\n parsedSelected.year,\r\n parsedSelected.month,\r\n parsedSelected.date,\r\n parsedSelected.hours,\r\n parsedSelected.minutes\r\n );\r\n\r\n formattedDates = selectedDates.map(function (date) {\r\n return _this.formatDate(_this.loc.dateFormat, date)\r\n }).join(this.opts.multipleDatesSeparator);\r\n\r\n // Create new dates array, to separate it from original selectedDates\r\n if (this.opts.multipleDates || this.opts.range) {\r\n dates = selectedDates.map(function(date) {\r\n var parsedDate = datepicker.getParsedDate(date);\r\n return new Date(\r\n parsedDate.year,\r\n parsedDate.month,\r\n parsedDate.date,\r\n parsedDate.hours,\r\n parsedDate.minutes\r\n );\r\n })\r\n }\r\n\r\n this._prevOnSelectValue = formattedDates;\r\n this.opts.onSelect(formattedDates, dates, this);\r\n },\r\n\r\n next: function () {\r\n var d = this.parsedDate,\r\n o = this.opts;\r\n switch (this.view) {\r\n case 'days':\r\n this.date = new Date(d.year, d.month + 1, 1);\r\n if (o.onChangeMonth) o.onChangeMonth(this.parsedDate.month, this.parsedDate.year);\r\n break;\r\n case 'months':\r\n this.date = new Date(d.year + 1, d.month, 1);\r\n if (o.onChangeYear) o.onChangeYear(this.parsedDate.year);\r\n break;\r\n case 'years':\r\n this.date = new Date(d.year + 10, 0, 1);\r\n if (o.onChangeDecade) o.onChangeDecade(this.curDecade);\r\n break;\r\n }\r\n },\r\n\r\n prev: function () {\r\n var d = this.parsedDate,\r\n o = this.opts;\r\n switch (this.view) {\r\n case 'days':\r\n this.date = new Date(d.year, d.month - 1, 1);\r\n if (o.onChangeMonth) o.onChangeMonth(this.parsedDate.month, this.parsedDate.year);\r\n break;\r\n case 'months':\r\n this.date = new Date(d.year - 1, d.month, 1);\r\n if (o.onChangeYear) o.onChangeYear(this.parsedDate.year);\r\n break;\r\n case 'years':\r\n this.date = new Date(d.year - 10, 0, 1);\r\n if (o.onChangeDecade) o.onChangeDecade(this.curDecade);\r\n break;\r\n }\r\n },\r\n\r\n formatDate: function (string, date) {\r\n date = date || this.date;\r\n var result = string,\r\n boundary = this._getWordBoundaryRegExp,\r\n locale = this.loc,\r\n leadingZero = datepicker.getLeadingZeroNum,\r\n decade = datepicker.getDecade(date),\r\n d = datepicker.getParsedDate(date),\r\n fullHours = d.fullHours,\r\n hours = d.hours,\r\n ampm = string.match(boundary('aa')) || string.match(boundary('AA')),\r\n dayPeriod = 'am',\r\n replacer = this._replacer,\r\n validHours;\r\n\r\n if (this.opts.timepicker && this.timepicker && ampm) {\r\n validHours = this.timepicker._getValidHoursFromDate(date, ampm);\r\n fullHours = leadingZero(validHours.hours);\r\n hours = validHours.hours;\r\n dayPeriod = validHours.dayPeriod;\r\n }\r\n\r\n switch (true) {\r\n case /@/.test(result):\r\n result = result.replace(/@/, date.getTime());\r\n case /aa/.test(result):\r\n result = replacer(result, boundary('aa'), dayPeriod);\r\n case /AA/.test(result):\r\n result = replacer(result, boundary('AA'), dayPeriod.toUpperCase());\r\n case /dd/.test(result):\r\n result = replacer(result, boundary('dd'), d.fullDate);\r\n case /d/.test(result):\r\n result = replacer(result, boundary('d'), d.date);\r\n case /DD/.test(result):\r\n result = replacer(result, boundary('DD'), locale.days[d.day]);\r\n case /D/.test(result):\r\n result = replacer(result, boundary('D'), locale.daysShort[d.day]);\r\n case /mm/.test(result):\r\n result = replacer(result, boundary('mm'), d.fullMonth);\r\n case /m/.test(result):\r\n result = replacer(result, boundary('m'), d.month + 1);\r\n case /MM/.test(result):\r\n result = replacer(result, boundary('MM'), this.loc.months[d.month]);\r\n case /M/.test(result):\r\n result = replacer(result, boundary('M'), locale.monthsShort[d.month]);\r\n case /ii/.test(result):\r\n result = replacer(result, boundary('ii'), d.fullMinutes);\r\n case /i/.test(result):\r\n result = replacer(result, boundary('i'), d.minutes);\r\n case /hh/.test(result):\r\n result = replacer(result, boundary('hh'), fullHours);\r\n case /h/.test(result):\r\n result = replacer(result, boundary('h'), hours);\r\n case /yyyy/.test(result):\r\n result = replacer(result, boundary('yyyy'), d.year);\r\n case /yyyy1/.test(result):\r\n result = replacer(result, boundary('yyyy1'), decade[0]);\r\n case /yyyy2/.test(result):\r\n result = replacer(result, boundary('yyyy2'), decade[1]);\r\n case /yy/.test(result):\r\n result = replacer(result, boundary('yy'), d.year.toString().slice(-2));\r\n }\r\n\r\n return result;\r\n },\r\n\r\n _replacer: function (str, reg, data) {\r\n return str.replace(reg, function (match, p1,p2,p3) {\r\n return p1 + data + p3;\r\n })\r\n },\r\n\r\n _getWordBoundaryRegExp: function (sign) {\r\n var symbols = '\\\\s|\\\\.|-|/|\\\\\\\\|,|\\\\$|\\\\!|\\\\?|:|;';\r\n\r\n return new RegExp('(^|>|' + symbols + ')(' + sign + ')($|<|' + symbols + ')', 'g');\r\n },\r\n\r\n\r\n selectDate: function (date) {\r\n var _this = this,\r\n opts = _this.opts,\r\n d = _this.parsedDate,\r\n selectedDates = _this.selectedDates,\r\n len = selectedDates.length,\r\n newDate = '';\r\n\r\n if (Array.isArray(date)) {\r\n date.forEach(function (d) {\r\n _this.selectDate(d)\r\n });\r\n return;\r\n }\r\n\r\n if (!(date instanceof Date)) return;\r\n\r\n this.lastSelectedDate = date;\r\n\r\n // Set new time values from Date\r\n if (this.timepicker) {\r\n this.timepicker._setTime(date);\r\n }\r\n\r\n // On this step timepicker will set valid values in it's instance\r\n _this._trigger('selectDate', date);\r\n\r\n // Set correct time values after timepicker's validation\r\n // Prevent from setting hours or minutes which values are lesser then `min` value or\r\n // greater then `max` value\r\n if (this.timepicker) {\r\n date.setHours(this.timepicker.hours);\r\n date.setMinutes(this.timepicker.minutes)\r\n }\r\n\r\n if (_this.view == 'days') {\r\n if (date.getMonth() != d.month && opts.moveToOtherMonthsOnSelect) {\r\n newDate = new Date(date.getFullYear(), date.getMonth(), 1);\r\n }\r\n }\r\n\r\n if (_this.view == 'years') {\r\n if (date.getFullYear() != d.year && opts.moveToOtherYearsOnSelect) {\r\n newDate = new Date(date.getFullYear(), 0, 1);\r\n }\r\n }\r\n\r\n if (newDate) {\r\n _this.silent = true;\r\n _this.date = newDate;\r\n _this.silent = false;\r\n _this.nav._render()\r\n }\r\n\r\n if (opts.multipleDates && !opts.range) { // Set priority to range functionality\r\n if (len === opts.multipleDates) return;\r\n if (!_this._isSelected(date)) {\r\n _this.selectedDates.push(date);\r\n }\r\n } else if (opts.range) {\r\n if (len == 2) {\r\n _this.selectedDates = [date];\r\n _this.minRange = date;\r\n _this.maxRange = '';\r\n } else if (len == 1) {\r\n _this.selectedDates.push(date);\r\n if (!_this.maxRange){\r\n _this.maxRange = date;\r\n } else {\r\n _this.minRange = date;\r\n }\r\n // Swap dates if they were selected via dp.selectDate() and second date was smaller then first\r\n if (datepicker.bigger(_this.maxRange, _this.minRange)) {\r\n _this.maxRange = _this.minRange;\r\n _this.minRange = date;\r\n }\r\n _this.selectedDates = [_this.minRange, _this.maxRange]\r\n\r\n } else {\r\n _this.selectedDates = [date];\r\n _this.minRange = date;\r\n }\r\n } else {\r\n _this.selectedDates = [date];\r\n }\r\n\r\n _this._setInputValue();\r\n\r\n if (opts.onSelect) {\r\n _this._triggerOnChange();\r\n }\r\n\r\n if (opts.autoClose && !this.timepickerIsActive) {\r\n if (!opts.multipleDates && !opts.range) {\r\n _this.hide();\r\n } else if (opts.range && _this.selectedDates.length == 2) {\r\n _this.hide();\r\n }\r\n }\r\n\r\n _this.views[this.currentView]._render()\r\n },\r\n\r\n removeDate: function (date) {\r\n var selected = this.selectedDates,\r\n _this = this;\r\n\r\n if (!(date instanceof Date)) return;\r\n\r\n return selected.some(function (curDate, i) {\r\n if (datepicker.isSame(curDate, date)) {\r\n selected.splice(i, 1);\r\n\r\n if (!_this.selectedDates.length) {\r\n _this.minRange = '';\r\n _this.maxRange = '';\r\n _this.lastSelectedDate = '';\r\n } else {\r\n _this.lastSelectedDate = _this.selectedDates[_this.selectedDates.length - 1];\r\n }\r\n\r\n _this.views[_this.currentView]._render();\r\n _this._setInputValue();\r\n\r\n if (_this.opts.onSelect) {\r\n _this._triggerOnChange();\r\n }\r\n\r\n return true\r\n }\r\n })\r\n },\r\n\r\n today: function () {\r\n this.silent = true;\r\n this.view = this.opts.minView;\r\n this.silent = false;\r\n this.date = new Date();\r\n\r\n if (this.opts.todayButton instanceof Date) {\r\n this.selectDate(this.opts.todayButton)\r\n }\r\n },\r\n\r\n clear: function () {\r\n this.selectedDates = [];\r\n this.minRange = '';\r\n this.maxRange = '';\r\n this.views[this.currentView]._render();\r\n this._setInputValue();\r\n if (this.opts.onSelect) {\r\n this._triggerOnChange()\r\n }\r\n },\r\n\r\n /**\r\n * Updates datepicker options\r\n * @param {String|Object} param - parameter's name to update. If object then it will extend current options\r\n * @param {String|Number|Object} [value] - new param value\r\n */\r\n update: function (param, value) {\r\n var len = arguments.length,\r\n lastSelectedDate = this.lastSelectedDate;\r\n\r\n if (len == 2) {\r\n this.opts[param] = value;\r\n } else if (len == 1 && typeof param == 'object') {\r\n this.opts = $.extend(true, this.opts, param)\r\n }\r\n\r\n this._createShortCuts();\r\n this._syncWithMinMaxDates();\r\n this._defineLocale(this.opts.language);\r\n this.nav._addButtonsIfNeed();\r\n if (!this.opts.onlyTimepicker) this.nav._render();\r\n this.views[this.currentView]._render();\r\n\r\n if (this.elIsInput && !this.opts.inline) {\r\n this._setPositionClasses(this.opts.position);\r\n if (this.visible) {\r\n this.setPosition(this.opts.position)\r\n }\r\n }\r\n\r\n if (this.opts.classes) {\r\n this.$datepicker.addClass(this.opts.classes)\r\n }\r\n\r\n if (this.opts.onlyTimepicker) {\r\n this.$datepicker.addClass('-only-timepicker-');\r\n }\r\n\r\n if (this.opts.timepicker) {\r\n if (lastSelectedDate) this.timepicker._handleDate(lastSelectedDate);\r\n this.timepicker._updateRanges();\r\n this.timepicker._updateCurrentTime();\r\n // Change hours and minutes if it's values have been changed through min/max hours/minutes\r\n if (lastSelectedDate) {\r\n lastSelectedDate.setHours(this.timepicker.hours);\r\n lastSelectedDate.setMinutes(this.timepicker.minutes);\r\n }\r\n }\r\n\r\n this._setInputValue();\r\n\r\n return this;\r\n },\r\n\r\n _syncWithMinMaxDates: function () {\r\n var curTime = this.date.getTime();\r\n this.silent = true;\r\n if (this.minTime > curTime) {\r\n this.date = this.minDate;\r\n }\r\n\r\n if (this.maxTime < curTime) {\r\n this.date = this.maxDate;\r\n }\r\n this.silent = false;\r\n },\r\n\r\n _isSelected: function (checkDate, cellType) {\r\n var res = false;\r\n this.selectedDates.some(function (date) {\r\n if (datepicker.isSame(date, checkDate, cellType)) {\r\n res = date;\r\n return true;\r\n }\r\n });\r\n return res;\r\n },\r\n\r\n _setInputValue: function () {\r\n var _this = this,\r\n opts = _this.opts,\r\n format = _this.loc.dateFormat,\r\n altFormat = opts.altFieldDateFormat,\r\n value = _this.selectedDates.map(function (date) {\r\n return _this.formatDate(format, date)\r\n }),\r\n altValues;\r\n\r\n if (opts.altField && _this.$altField.length) {\r\n altValues = this.selectedDates.map(function (date) {\r\n return _this.formatDate(altFormat, date)\r\n });\r\n altValues = altValues.join(this.opts.multipleDatesSeparator);\r\n this.$altField.val(altValues);\r\n }\r\n\r\n value = value.join(this.opts.multipleDatesSeparator);\r\n\r\n this.$el.val(value)\r\n },\r\n\r\n /**\r\n * Check if date is between minDate and maxDate\r\n * @param date {object} - date object\r\n * @param type {string} - cell type\r\n * @returns {boolean}\r\n * @private\r\n */\r\n _isInRange: function (date, type) {\r\n var time = date.getTime(),\r\n d = datepicker.getParsedDate(date),\r\n min = datepicker.getParsedDate(this.minDate),\r\n max = datepicker.getParsedDate(this.maxDate),\r\n dMinTime = new Date(d.year, d.month, min.date).getTime(),\r\n dMaxTime = new Date(d.year, d.month, max.date).getTime(),\r\n types = {\r\n day: time >= this.minTime && time <= this.maxTime,\r\n month: dMinTime >= this.minTime && dMaxTime <= this.maxTime,\r\n year: d.year >= min.year && d.year <= max.year\r\n };\r\n return type ? types[type] : types.day\r\n },\r\n\r\n _getDimensions: function ($el) {\r\n var offset = $el.offset();\r\n\r\n return {\r\n width: $el.outerWidth(),\r\n height: $el.outerHeight(),\r\n left: offset.left,\r\n top: offset.top\r\n }\r\n },\r\n\r\n _getDateFromCell: function (cell) {\r\n var curDate = this.parsedDate,\r\n year = cell.data('year') || curDate.year,\r\n month = cell.data('month') == undefined ? curDate.month : cell.data('month'),\r\n date = cell.data('date') || 1;\r\n\r\n return new Date(year, month, date);\r\n },\r\n\r\n _setPositionClasses: function (pos) {\r\n pos = pos.split(' ');\r\n var main = pos[0],\r\n sec = pos[1],\r\n classes = 'datepicker -' + main + '-' + sec + '- -from-' + main + '-';\r\n\r\n if (this.visible) classes += ' active';\r\n\r\n this.$datepicker\r\n .removeAttr('class')\r\n .addClass(classes);\r\n },\r\n\r\n setPosition: function (position) {\r\n position = position || this.opts.position;\r\n\r\n var dims = this._getDimensions(this.$el),\r\n selfDims = this._getDimensions(this.$datepicker),\r\n pos = position.split(' '),\r\n top, left,\r\n offset = this.opts.offset,\r\n main = pos[0],\r\n secondary = pos[1];\r\n\r\n switch (main) {\r\n case 'top':\r\n top = dims.top - selfDims.height - offset;\r\n break;\r\n case 'right':\r\n left = dims.left + dims.width + offset;\r\n break;\r\n case 'bottom':\r\n top = dims.top + dims.height + offset;\r\n break;\r\n case 'left':\r\n left = dims.left - selfDims.width - offset;\r\n break;\r\n }\r\n\r\n switch(secondary) {\r\n case 'top':\r\n top = dims.top;\r\n break;\r\n case 'right':\r\n left = dims.left + dims.width - selfDims.width;\r\n break;\r\n case 'bottom':\r\n top = dims.top + dims.height - selfDims.height;\r\n break;\r\n case 'left':\r\n left = dims.left;\r\n break;\r\n case 'center':\r\n if (/left|right/.test(main)) {\r\n top = dims.top + dims.height/2 - selfDims.height/2;\r\n } else {\r\n left = dims.left + dims.width/2 - selfDims.width/2;\r\n }\r\n }\r\n\r\n this.$datepicker\r\n .css({\r\n left: left,\r\n top: top\r\n })\r\n },\r\n\r\n show: function () {\r\n var onShow = this.opts.onShow;\r\n\r\n this.setPosition(this.opts.position);\r\n this.$datepicker.addClass('active');\r\n this.visible = true;\r\n\r\n if (onShow) {\r\n this._bindVisionEvents(onShow)\r\n }\r\n },\r\n\r\n hide: function () {\r\n var onHide = this.opts.onHide;\r\n\r\n this.$datepicker\r\n .removeClass('active')\r\n .css({\r\n left: '-100000px'\r\n });\r\n\r\n this.focused = '';\r\n this.keys = [];\r\n\r\n this.inFocus = false;\r\n this.visible = false;\r\n this.$el.blur();\r\n\r\n if (onHide) {\r\n this._bindVisionEvents(onHide)\r\n }\r\n },\r\n\r\n down: function (date) {\r\n this._changeView(date, 'down');\r\n },\r\n\r\n up: function (date) {\r\n this._changeView(date, 'up');\r\n },\r\n\r\n _bindVisionEvents: function (event) {\r\n this.$datepicker.off('transitionend.dp');\r\n event(this, false);\r\n this.$datepicker.one('transitionend.dp', event.bind(this, this, true))\r\n },\r\n\r\n _changeView: function (date, dir) {\r\n date = date || this.focused || this.date;\r\n\r\n var nextView = dir == 'up' ? this.viewIndex + 1 : this.viewIndex - 1;\r\n if (nextView > 2) nextView = 2;\r\n if (nextView < 0) nextView = 0;\r\n\r\n this.silent = true;\r\n this.date = new Date(date.getFullYear(), date.getMonth(), 1);\r\n this.silent = false;\r\n this.view = this.viewIndexes[nextView];\r\n\r\n },\r\n\r\n _handleHotKey: function (key) {\r\n var date = datepicker.getParsedDate(this._getFocusedDate()),\r\n focusedParsed,\r\n o = this.opts,\r\n newDate,\r\n totalDaysInNextMonth,\r\n monthChanged = false,\r\n yearChanged = false,\r\n decadeChanged = false,\r\n y = date.year,\r\n m = date.month,\r\n d = date.date;\r\n\r\n switch (key) {\r\n case 'ctrlRight':\r\n case 'ctrlUp':\r\n m += 1;\r\n monthChanged = true;\r\n break;\r\n case 'ctrlLeft':\r\n case 'ctrlDown':\r\n m -= 1;\r\n monthChanged = true;\r\n break;\r\n case 'shiftRight':\r\n case 'shiftUp':\r\n yearChanged = true;\r\n y += 1;\r\n break;\r\n case 'shiftLeft':\r\n case 'shiftDown':\r\n yearChanged = true;\r\n y -= 1;\r\n break;\r\n case 'altRight':\r\n case 'altUp':\r\n decadeChanged = true;\r\n y += 10;\r\n break;\r\n case 'altLeft':\r\n case 'altDown':\r\n decadeChanged = true;\r\n y -= 10;\r\n break;\r\n case 'ctrlShiftUp':\r\n this.up();\r\n break;\r\n }\r\n\r\n totalDaysInNextMonth = datepicker.getDaysCount(new Date(y,m));\r\n newDate = new Date(y,m,d);\r\n\r\n // If next month has less days than current, set date to total days in that month\r\n if (totalDaysInNextMonth < d) d = totalDaysInNextMonth;\r\n\r\n // Check if newDate is in valid range\r\n if (newDate.getTime() < this.minTime) {\r\n newDate = this.minDate;\r\n } else if (newDate.getTime() > this.maxTime) {\r\n newDate = this.maxDate;\r\n }\r\n\r\n this.focused = newDate;\r\n\r\n focusedParsed = datepicker.getParsedDate(newDate);\r\n if (monthChanged && o.onChangeMonth) {\r\n o.onChangeMonth(focusedParsed.month, focusedParsed.year)\r\n }\r\n if (yearChanged && o.onChangeYear) {\r\n o.onChangeYear(focusedParsed.year)\r\n }\r\n if (decadeChanged && o.onChangeDecade) {\r\n o.onChangeDecade(this.curDecade)\r\n }\r\n },\r\n\r\n _registerKey: function (key) {\r\n var exists = this.keys.some(function (curKey) {\r\n return curKey == key;\r\n });\r\n\r\n if (!exists) {\r\n this.keys.push(key)\r\n }\r\n },\r\n\r\n _unRegisterKey: function (key) {\r\n var index = this.keys.indexOf(key);\r\n\r\n this.keys.splice(index, 1);\r\n },\r\n\r\n _isHotKeyPressed: function () {\r\n var currentHotKey,\r\n found = false,\r\n _this = this,\r\n pressedKeys = this.keys.sort();\r\n\r\n for (var hotKey in hotKeys) {\r\n currentHotKey = hotKeys[hotKey];\r\n if (pressedKeys.length != currentHotKey.length) continue;\r\n\r\n if (currentHotKey.every(function (key, i) { return key == pressedKeys[i]})) {\r\n _this._trigger('hotKey', hotKey);\r\n found = true;\r\n }\r\n }\r\n\r\n return found;\r\n },\r\n\r\n _trigger: function (event, args) {\r\n this.$el.trigger(event, args)\r\n },\r\n\r\n _focusNextCell: function (keyCode, type) {\r\n type = type || this.cellType;\r\n\r\n var date = datepicker.getParsedDate(this._getFocusedDate()),\r\n y = date.year,\r\n m = date.month,\r\n d = date.date;\r\n\r\n if (this._isHotKeyPressed()){\r\n return;\r\n }\r\n\r\n switch(keyCode) {\r\n case 37: // left\r\n type == 'day' ? (d -= 1) : '';\r\n type == 'month' ? (m -= 1) : '';\r\n type == 'year' ? (y -= 1) : '';\r\n break;\r\n case 38: // up\r\n type == 'day' ? (d -= 7) : '';\r\n type == 'month' ? (m -= 3) : '';\r\n type == 'year' ? (y -= 4) : '';\r\n break;\r\n case 39: // right\r\n type == 'day' ? (d += 1) : '';\r\n type == 'month' ? (m += 1) : '';\r\n type == 'year' ? (y += 1) : '';\r\n break;\r\n case 40: // down\r\n type == 'day' ? (d += 7) : '';\r\n type == 'month' ? (m += 3) : '';\r\n type == 'year' ? (y += 4) : '';\r\n break;\r\n }\r\n\r\n var nd = new Date(y,m,d);\r\n if (nd.getTime() < this.minTime) {\r\n nd = this.minDate;\r\n } else if (nd.getTime() > this.maxTime) {\r\n nd = this.maxDate;\r\n }\r\n\r\n this.focused = nd;\r\n\r\n },\r\n\r\n _getFocusedDate: function () {\r\n var focused = this.focused || this.selectedDates[this.selectedDates.length - 1],\r\n d = this.parsedDate;\r\n\r\n if (!focused) {\r\n switch (this.view) {\r\n case 'days':\r\n focused = new Date(d.year, d.month, new Date().getDate());\r\n break;\r\n case 'months':\r\n focused = new Date(d.year, d.month, 1);\r\n break;\r\n case 'years':\r\n focused = new Date(d.year, 0, 1);\r\n break;\r\n }\r\n }\r\n\r\n return focused;\r\n },\r\n\r\n _getCell: function (date, type) {\r\n type = type || this.cellType;\r\n\r\n var d = datepicker.getParsedDate(date),\r\n selector = '.datepicker--cell[data-year=\"' + d.year + '\"]',\r\n $cell;\r\n\r\n switch (type) {\r\n case 'month':\r\n selector = '[data-month=\"' + d.month + '\"]';\r\n break;\r\n case 'day':\r\n selector += '[data-month=\"' + d.month + '\"][data-date=\"' + d.date + '\"]';\r\n break;\r\n }\r\n $cell = this.views[this.currentView].$el.find(selector);\r\n\r\n return $cell.length ? $cell : $('');\r\n },\r\n\r\n destroy: function () {\r\n var _this = this;\r\n _this.$el\r\n .off('.adp')\r\n .data('datepicker', '');\r\n\r\n _this.selectedDates = [];\r\n _this.focused = '';\r\n _this.views = {};\r\n _this.keys = [];\r\n _this.minRange = '';\r\n _this.maxRange = '';\r\n\r\n if (_this.opts.inline || !_this.elIsInput) {\r\n _this.$datepicker.closest('.datepicker-inline').remove();\r\n } else {\r\n _this.$datepicker.remove();\r\n }\r\n },\r\n\r\n _handleAlreadySelectedDates: function (alreadySelected, selectedDate) {\r\n if (this.opts.range) {\r\n if (!this.opts.toggleSelected) {\r\n // Add possibility to select same date when range is true\r\n if (this.selectedDates.length != 2) {\r\n this._trigger('clickCell', selectedDate);\r\n }\r\n } else {\r\n this.removeDate(selectedDate);\r\n }\r\n } else if (this.opts.toggleSelected){\r\n this.removeDate(selectedDate);\r\n }\r\n\r\n // Change last selected date to be able to change time when clicking on this cell\r\n if (!this.opts.toggleSelected) {\r\n this.lastSelectedDate = alreadySelected;\r\n if (this.opts.timepicker) {\r\n this.timepicker._setTime(alreadySelected);\r\n this.timepicker.update();\r\n }\r\n }\r\n },\r\n\r\n _onShowEvent: function (e) {\r\n if (!this.visible) {\r\n this.show();\r\n }\r\n },\r\n\r\n _onBlur: function () {\r\n if (!this.inFocus && this.visible) {\r\n this.hide();\r\n }\r\n },\r\n\r\n _onMouseDownDatepicker: function (e) {\r\n this.inFocus = true;\r\n },\r\n\r\n _onMouseUpDatepicker: function (e) {\r\n this.inFocus = false;\r\n e.originalEvent.inFocus = true;\r\n if (!e.originalEvent.timepickerFocus) this.$el.focus();\r\n },\r\n\r\n _onKeyUpGeneral: function (e) {\r\n var val = this.$el.val();\r\n\r\n if (!val) {\r\n this.clear();\r\n }\r\n },\r\n\r\n _onResize: function () {\r\n if (this.visible) {\r\n this.setPosition();\r\n }\r\n },\r\n\r\n _onMouseUpBody: function (e) {\r\n if (e.originalEvent.inFocus) return;\r\n\r\n if (this.visible && !this.inFocus) {\r\n this.hide();\r\n }\r\n },\r\n\r\n _onMouseUpEl: function (e) {\r\n e.originalEvent.inFocus = true;\r\n setTimeout(this._onKeyUpGeneral.bind(this),4);\r\n },\r\n\r\n _onKeyDown: function (e) {\r\n var code = e.which;\r\n this._registerKey(code);\r\n\r\n // Arrows\r\n if (code >= 37 && code <= 40) {\r\n e.preventDefault();\r\n this._focusNextCell(code);\r\n }\r\n\r\n // Enter\r\n if (code == 13) {\r\n if (this.focused) {\r\n if (this._getCell(this.focused).hasClass('-disabled-')) return;\r\n if (this.view != this.opts.minView) {\r\n this.down()\r\n } else {\r\n var alreadySelected = this._isSelected(this.focused, this.cellType);\r\n\r\n if (!alreadySelected) {\r\n if (this.timepicker) {\r\n this.focused.setHours(this.timepicker.hours);\r\n this.focused.setMinutes(this.timepicker.minutes);\r\n }\r\n this.selectDate(this.focused);\r\n return;\r\n }\r\n this._handleAlreadySelectedDates(alreadySelected, this.focused)\r\n }\r\n }\r\n }\r\n\r\n // Esc\r\n if (code == 27) {\r\n this.hide();\r\n }\r\n },\r\n\r\n _onKeyUp: function (e) {\r\n var code = e.which;\r\n this._unRegisterKey(code);\r\n },\r\n\r\n _onHotKey: function (e, hotKey) {\r\n this._handleHotKey(hotKey);\r\n },\r\n\r\n _onMouseEnterCell: function (e) {\r\n var $cell = $(e.target).closest('.datepicker--cell'),\r\n date = this._getDateFromCell($cell);\r\n\r\n // Prevent from unnecessary rendering and setting new currentDate\r\n this.silent = true;\r\n\r\n if (this.focused) {\r\n this.focused = ''\r\n }\r\n\r\n $cell.addClass('-focus-');\r\n\r\n this.focused = date;\r\n this.silent = false;\r\n\r\n if (this.opts.range && this.selectedDates.length == 1) {\r\n this.minRange = this.selectedDates[0];\r\n this.maxRange = '';\r\n if (datepicker.less(this.minRange, this.focused)) {\r\n this.maxRange = this.minRange;\r\n this.minRange = '';\r\n }\r\n this.views[this.currentView]._update();\r\n }\r\n },\r\n\r\n _onMouseLeaveCell: function (e) {\r\n var $cell = $(e.target).closest('.datepicker--cell');\r\n\r\n $cell.removeClass('-focus-');\r\n\r\n this.silent = true;\r\n this.focused = '';\r\n this.silent = false;\r\n },\r\n\r\n _onTimeChange: function (e, h, m) {\r\n var date = new Date(),\r\n selectedDates = this.selectedDates,\r\n selected = false;\r\n\r\n if (selectedDates.length) {\r\n selected = true;\r\n date = this.lastSelectedDate;\r\n }\r\n\r\n date.setHours(h);\r\n date.setMinutes(m);\r\n\r\n if (!selected && !this._getCell(date).hasClass('-disabled-')) {\r\n this.selectDate(date);\r\n } else {\r\n this._setInputValue();\r\n if (this.opts.onSelect) {\r\n this._triggerOnChange();\r\n }\r\n }\r\n },\r\n\r\n _onClickCell: function (e, date) {\r\n if (this.timepicker) {\r\n date.setHours(this.timepicker.hours);\r\n date.setMinutes(this.timepicker.minutes);\r\n }\r\n this.selectDate(date);\r\n },\r\n\r\n set focused(val) {\r\n if (!val && this.focused) {\r\n var $cell = this._getCell(this.focused);\r\n\r\n if ($cell.length) {\r\n $cell.removeClass('-focus-')\r\n }\r\n }\r\n this._focused = val;\r\n if (this.opts.range && this.selectedDates.length == 1) {\r\n this.minRange = this.selectedDates[0];\r\n this.maxRange = '';\r\n if (datepicker.less(this.minRange, this._focused)) {\r\n this.maxRange = this.minRange;\r\n this.minRange = '';\r\n }\r\n }\r\n if (this.silent) return;\r\n this.date = val;\r\n },\r\n\r\n get focused() {\r\n return this._focused;\r\n },\r\n\r\n get parsedDate() {\r\n return datepicker.getParsedDate(this.date);\r\n },\r\n\r\n set date (val) {\r\n if (!(val instanceof Date)) return;\r\n\r\n this.currentDate = val;\r\n\r\n if (this.inited && !this.silent) {\r\n this.views[this.view]._render();\r\n this.nav._render();\r\n if (this.visible && this.elIsInput) {\r\n this.setPosition();\r\n }\r\n }\r\n return val;\r\n },\r\n\r\n get date () {\r\n return this.currentDate\r\n },\r\n\r\n set view (val) {\r\n this.viewIndex = this.viewIndexes.indexOf(val);\r\n\r\n if (this.viewIndex < 0) {\r\n return;\r\n }\r\n\r\n this.prevView = this.currentView;\r\n this.currentView = val;\r\n\r\n if (this.inited) {\r\n if (!this.views[val]) {\r\n this.views[val] = new $.fn.datepicker.Body(this, val, this.opts)\r\n } else {\r\n this.views[val]._render();\r\n }\r\n\r\n this.views[this.prevView].hide();\r\n this.views[val].show();\r\n this.nav._render();\r\n\r\n if (this.opts.onChangeView) {\r\n this.opts.onChangeView(val)\r\n }\r\n if (this.elIsInput && this.visible) this.setPosition();\r\n }\r\n\r\n return val\r\n },\r\n\r\n get view() {\r\n return this.currentView;\r\n },\r\n\r\n get cellType() {\r\n return this.view.substring(0, this.view.length - 1)\r\n },\r\n\r\n get minTime() {\r\n var min = datepicker.getParsedDate(this.minDate);\r\n return new Date(min.year, min.month, min.date).getTime()\r\n },\r\n\r\n get maxTime() {\r\n var max = datepicker.getParsedDate(this.maxDate);\r\n return new Date(max.year, max.month, max.date).getTime()\r\n },\r\n\r\n get curDecade() {\r\n return datepicker.getDecade(this.date)\r\n }\r\n };\r\n\r\n // Utils\r\n // -------------------------------------------------\r\n\r\n datepicker.getDaysCount = function (date) {\r\n return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\r\n };\r\n\r\n datepicker.getParsedDate = function (date) {\r\n return {\r\n year: date.getFullYear(),\r\n month: date.getMonth(),\r\n fullMonth: (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1, // One based\r\n date: date.getDate(),\r\n fullDate: date.getDate() < 10 ? '0' + date.getDate() : date.getDate(),\r\n day: date.getDay(),\r\n hours: date.getHours(),\r\n fullHours: date.getHours() < 10 ? '0' + date.getHours() : date.getHours() ,\r\n minutes: date.getMinutes(),\r\n fullMinutes: date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()\r\n }\r\n };\r\n\r\n datepicker.getDecade = function (date) {\r\n var firstYear = Math.floor(date.getFullYear() / 10) * 10;\r\n\r\n return [firstYear, firstYear + 9];\r\n };\r\n\r\n datepicker.template = function (str, data) {\r\n return str.replace(/#\\{([\\w]+)\\}/g, function (source, match) {\r\n if (data[match] || data[match] === 0) {\r\n return data[match]\r\n }\r\n });\r\n };\r\n\r\n datepicker.isSame = function (date1, date2, type) {\r\n if (!date1 || !date2) return false;\r\n var d1 = datepicker.getParsedDate(date1),\r\n d2 = datepicker.getParsedDate(date2),\r\n _type = type ? type : 'day',\r\n\r\n conditions = {\r\n day: d1.date == d2.date && d1.month == d2.month && d1.year == d2.year,\r\n month: d1.month == d2.month && d1.year == d2.year,\r\n year: d1.year == d2.year\r\n };\r\n\r\n return conditions[_type];\r\n };\r\n\r\n datepicker.less = function (dateCompareTo, date, type) {\r\n if (!dateCompareTo || !date) return false;\r\n return date.getTime() < dateCompareTo.getTime();\r\n };\r\n\r\n datepicker.bigger = function (dateCompareTo, date, type) {\r\n if (!dateCompareTo || !date) return false;\r\n return date.getTime() > dateCompareTo.getTime();\r\n };\r\n\r\n datepicker.getLeadingZeroNum = function (num) {\r\n return parseInt(num) < 10 ? '0' + num : num;\r\n };\r\n\r\n /**\r\n * Returns copy of date with hours and minutes equals to 0\r\n * @param date {Date}\r\n */\r\n datepicker.resetTime = function (date) {\r\n if (typeof date != 'object') return;\r\n date = datepicker.getParsedDate(date);\r\n return new Date(date.year, date.month, date.date)\r\n };\r\n\r\n $.fn.datepicker = function ( options ) {\r\n return this.each(function () {\r\n if (!$.data(this, pluginName)) {\r\n $.data(this, pluginName,\r\n new Datepicker( this, options ));\r\n } else {\r\n var _this = $.data(this, pluginName);\r\n\r\n _this.opts = $.extend(true, _this.opts, options);\r\n _this.update();\r\n }\r\n });\r\n };\r\n\r\n $.fn.datepicker.Constructor = Datepicker;\r\n\r\n $.fn.datepicker.language = {\r\n ru: {\r\n days: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'],\r\n daysShort: ['Вос','Пон','Вто','Сре','Чет','Пят','Суб'],\r\n daysMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],\r\n months: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],\r\n monthsShort: ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'],\r\n today: 'Сегодня',\r\n clear: 'Очистить',\r\n dateFormat: 'dd.mm.yyyy',\r\n timeFormat: 'hh:ii',\r\n firstDay: 1\r\n }\r\n };\r\n\r\n $(function () {\r\n $(autoInitSelector).datepicker();\r\n })\r\n\r\n})();\r\n\r\n;(function () {\r\n var templates = {\r\n days:'' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
',\r\n months: '' +\r\n '
' +\r\n '
' +\r\n '
',\r\n years: '' +\r\n '
' +\r\n '
' +\r\n '
'\r\n },\r\n datepicker = $.fn.datepicker,\r\n dp = datepicker.Constructor;\r\n\r\n datepicker.Body = function (d, type, opts) {\r\n this.d = d;\r\n this.type = type;\r\n this.opts = opts;\r\n this.$el = $('');\r\n\r\n if (this.opts.onlyTimepicker) return;\r\n this.init();\r\n };\r\n\r\n datepicker.Body.prototype = {\r\n init: function () {\r\n this._buildBaseHtml();\r\n this._render();\r\n\r\n this._bindEvents();\r\n },\r\n\r\n _bindEvents: function () {\r\n this.$el.on('click', '.datepicker--cell', $.proxy(this._onClickCell, this));\r\n },\r\n\r\n _buildBaseHtml: function () {\r\n this.$el = $(templates[this.type]).appendTo(this.d.$content);\r\n this.$names = $('.datepicker--days-names', this.$el);\r\n this.$cells = $('.datepicker--cells', this.$el);\r\n },\r\n\r\n _getDayNamesHtml: function (firstDay, curDay, html, i) {\r\n curDay = curDay != undefined ? curDay : firstDay;\r\n html = html ? html : '';\r\n i = i != undefined ? i : 0;\r\n\r\n if (i > 7) return html;\r\n if (curDay == 7) return this._getDayNamesHtml(firstDay, 0, html, ++i);\r\n\r\n html += '
' + this.d.loc.daysMin[curDay] + '
';\r\n\r\n return this._getDayNamesHtml(firstDay, ++curDay, html, ++i);\r\n },\r\n\r\n _getCellContents: function (date, type) {\r\n var classes = \"datepicker--cell datepicker--cell-\" + type,\r\n currentDate = new Date(),\r\n parent = this.d,\r\n minRange = dp.resetTime(parent.minRange),\r\n maxRange = dp.resetTime(parent.maxRange),\r\n opts = parent.opts,\r\n d = dp.getParsedDate(date),\r\n render = {},\r\n html = d.date;\r\n\r\n switch (type) {\r\n case 'day':\r\n if (parent.isWeekend(d.day)) classes += \" -weekend-\";\r\n if (d.month != this.d.parsedDate.month) {\r\n classes += \" -other-month-\";\r\n if (!opts.selectOtherMonths) {\r\n classes += \" -disabled-\";\r\n }\r\n if (!opts.showOtherMonths) html = '';\r\n }\r\n break;\r\n case 'month':\r\n html = parent.loc[parent.opts.monthsField][d.month];\r\n break;\r\n case 'year':\r\n var decade = parent.curDecade;\r\n html = d.year;\r\n if (d.year < decade[0] || d.year > decade[1]) {\r\n classes += ' -other-decade-';\r\n if (!opts.selectOtherYears) {\r\n classes += \" -disabled-\";\r\n }\r\n if (!opts.showOtherYears) html = '';\r\n }\r\n break;\r\n }\r\n\r\n if (opts.onRenderCell) {\r\n render = opts.onRenderCell(date, type) || {};\r\n html = render.html ? render.html : html;\r\n classes += render.classes ? ' ' + render.classes : '';\r\n }\r\n\r\n if (opts.range) {\r\n if (dp.isSame(minRange, date, type)) classes += ' -range-from-';\r\n if (dp.isSame(maxRange, date, type)) classes += ' -range-to-';\r\n\r\n if (parent.selectedDates.length == 1 && parent.focused) {\r\n if (\r\n (dp.bigger(minRange, date) && dp.less(parent.focused, date)) ||\r\n (dp.less(maxRange, date) && dp.bigger(parent.focused, date)))\r\n {\r\n classes += ' -in-range-'\r\n }\r\n\r\n if (dp.less(maxRange, date) && dp.isSame(parent.focused, date)) {\r\n classes += ' -range-from-'\r\n }\r\n if (dp.bigger(minRange, date) && dp.isSame(parent.focused, date)) {\r\n classes += ' -range-to-'\r\n }\r\n\r\n } else if (parent.selectedDates.length == 2) {\r\n if (dp.bigger(minRange, date) && dp.less(maxRange, date)) {\r\n classes += ' -in-range-'\r\n }\r\n }\r\n }\r\n\r\n\r\n if (dp.isSame(currentDate, date, type)) classes += ' -current-';\r\n if (parent.focused && dp.isSame(date, parent.focused, type)) classes += ' -focus-';\r\n if (parent._isSelected(date, type)) classes += ' -selected-';\r\n if (!parent._isInRange(date, type) || render.disabled) classes += ' -disabled-';\r\n\r\n return {\r\n html: html,\r\n classes: classes\r\n }\r\n },\r\n\r\n /**\r\n * Calculates days number to render. Generates days html and returns it.\r\n * @param {object} date - Date object\r\n * @returns {string}\r\n * @private\r\n */\r\n _getDaysHtml: function (date) {\r\n var totalMonthDays = dp.getDaysCount(date),\r\n firstMonthDay = new Date(date.getFullYear(), date.getMonth(), 1).getDay(),\r\n lastMonthDay = new Date(date.getFullYear(), date.getMonth(), totalMonthDays).getDay(),\r\n daysFromPevMonth = firstMonthDay - this.d.loc.firstDay,\r\n daysFromNextMonth = 6 - lastMonthDay + this.d.loc.firstDay;\r\n\r\n daysFromPevMonth = daysFromPevMonth < 0 ? daysFromPevMonth + 7 : daysFromPevMonth;\r\n daysFromNextMonth = daysFromNextMonth > 6 ? daysFromNextMonth - 7 : daysFromNextMonth;\r\n\r\n var startDayIndex = -daysFromPevMonth + 1,\r\n m, y,\r\n html = '';\r\n\r\n for (var i = startDayIndex, max = totalMonthDays + daysFromNextMonth; i <= max; i++) {\r\n y = date.getFullYear();\r\n m = date.getMonth();\r\n\r\n html += this._getDayHtml(new Date(y, m, i))\r\n }\r\n\r\n return html;\r\n },\r\n\r\n _getDayHtml: function (date) {\r\n var content = this._getCellContents(date, 'day');\r\n\r\n return '
' + content.html + '
';\r\n },\r\n\r\n /**\r\n * Generates months html\r\n * @param {object} date - date instance\r\n * @returns {string}\r\n * @private\r\n */\r\n _getMonthsHtml: function (date) {\r\n var html = '',\r\n d = dp.getParsedDate(date),\r\n i = 0;\r\n\r\n while(i < 12) {\r\n html += this._getMonthHtml(new Date(d.year, i));\r\n i++\r\n }\r\n\r\n return html;\r\n },\r\n\r\n _getMonthHtml: function (date) {\r\n var content = this._getCellContents(date, 'month');\r\n\r\n return '
' + content.html + '
'\r\n },\r\n\r\n _getYearsHtml: function (date) {\r\n var d = dp.getParsedDate(date),\r\n decade = dp.getDecade(date),\r\n firstYear = decade[0] - 1,\r\n html = '',\r\n i = firstYear;\r\n\r\n for (i; i <= decade[1] + 1; i++) {\r\n html += this._getYearHtml(new Date(i , 0));\r\n }\r\n\r\n return html;\r\n },\r\n\r\n _getYearHtml: function (date) {\r\n var content = this._getCellContents(date, 'year');\r\n\r\n return '
' + content.html + '
'\r\n },\r\n\r\n _renderTypes: {\r\n days: function () {\r\n var dayNames = this._getDayNamesHtml(this.d.loc.firstDay),\r\n days = this._getDaysHtml(this.d.currentDate);\r\n\r\n this.$cells.html(days);\r\n this.$names.html(dayNames)\r\n },\r\n months: function () {\r\n var html = this._getMonthsHtml(this.d.currentDate);\r\n\r\n this.$cells.html(html)\r\n },\r\n years: function () {\r\n var html = this._getYearsHtml(this.d.currentDate);\r\n\r\n this.$cells.html(html)\r\n }\r\n },\r\n\r\n _render: function () {\r\n if (this.opts.onlyTimepicker) return;\r\n this._renderTypes[this.type].bind(this)();\r\n },\r\n\r\n _update: function () {\r\n var $cells = $('.datepicker--cell', this.$cells),\r\n _this = this,\r\n classes,\r\n $cell,\r\n date;\r\n $cells.each(function (cell, i) {\r\n $cell = $(this);\r\n date = _this.d._getDateFromCell($(this));\r\n classes = _this._getCellContents(date, _this.d.cellType);\r\n $cell.attr('class',classes.classes)\r\n });\r\n },\r\n\r\n show: function () {\r\n if (this.opts.onlyTimepicker) return;\r\n this.$el.addClass('active');\r\n this.acitve = true;\r\n },\r\n\r\n hide: function () {\r\n this.$el.removeClass('active');\r\n this.active = false;\r\n },\r\n\r\n // Events\r\n // -------------------------------------------------\r\n\r\n _handleClick: function (el) {\r\n var date = el.data('date') || 1,\r\n month = el.data('month') || 0,\r\n year = el.data('year') || this.d.parsedDate.year,\r\n dp = this.d;\r\n // Change view if min view does not reach yet\r\n if (dp.view != this.opts.minView) {\r\n dp.down(new Date(year, month, date));\r\n return;\r\n }\r\n // Select date if min view is reached\r\n var selectedDate = new Date(year, month, date),\r\n alreadySelected = this.d._isSelected(selectedDate, this.d.cellType);\r\n\r\n if (!alreadySelected) {\r\n dp._trigger('clickCell', selectedDate);\r\n return;\r\n }\r\n\r\n dp._handleAlreadySelectedDates.bind(dp, alreadySelected, selectedDate)();\r\n\r\n },\r\n\r\n _onClickCell: function (e) {\r\n var $el = $(e.target).closest('.datepicker--cell');\r\n\r\n if ($el.hasClass('-disabled-')) return;\r\n\r\n this._handleClick.bind(this)($el);\r\n }\r\n };\r\n})();\r\n\r\n;(function () {\r\n var template = '' +\r\n '
#{prevHtml}
' +\r\n '
#{title}
' +\r\n '
#{nextHtml}
',\r\n buttonsContainerTemplate = '
',\r\n button = '#{label}',\r\n datepicker = $.fn.datepicker,\r\n dp = datepicker.Constructor;\r\n\r\n datepicker.Navigation = function (d, opts) {\r\n this.d = d;\r\n this.opts = opts;\r\n\r\n this.$buttonsContainer = '';\r\n\r\n this.init();\r\n };\r\n\r\n datepicker.Navigation.prototype = {\r\n init: function () {\r\n this._buildBaseHtml();\r\n this._bindEvents();\r\n },\r\n\r\n _bindEvents: function () {\r\n this.d.$nav.on('click', '.datepicker--nav-action', $.proxy(this._onClickNavButton, this));\r\n this.d.$nav.on('click', '.datepicker--nav-title', $.proxy(this._onClickNavTitle, this));\r\n this.d.$datepicker.on('click', '.datepicker--button', $.proxy(this._onClickNavButton, this));\r\n },\r\n\r\n _buildBaseHtml: function () {\r\n if (!this.opts.onlyTimepicker) {\r\n this._render();\r\n }\r\n this._addButtonsIfNeed();\r\n },\r\n\r\n _addButtonsIfNeed: function () {\r\n if (this.opts.todayButton) {\r\n this._addButton('today')\r\n }\r\n if (this.opts.clearButton) {\r\n this._addButton('clear')\r\n }\r\n },\r\n\r\n _render: function () {\r\n var title = this._getTitle(this.d.currentDate),\r\n html = dp.template(template, $.extend({title: title}, this.opts));\r\n this.d.$nav.html(html);\r\n if (this.d.view == 'years') {\r\n $('.datepicker--nav-title', this.d.$nav).addClass('-disabled-');\r\n }\r\n this.setNavStatus();\r\n },\r\n\r\n _getTitle: function (date) {\r\n return this.d.formatDate(this.opts.navTitles[this.d.view], date)\r\n },\r\n\r\n _addButton: function (type) {\r\n if (!this.$buttonsContainer.length) {\r\n this._addButtonsContainer();\r\n }\r\n\r\n var data = {\r\n action: type,\r\n label: this.d.loc[type]\r\n },\r\n html = dp.template(button, data);\r\n\r\n if ($('[data-action=' + type + ']', this.$buttonsContainer).length) return;\r\n this.$buttonsContainer.append(html);\r\n },\r\n\r\n _addButtonsContainer: function () {\r\n this.d.$datepicker.append(buttonsContainerTemplate);\r\n this.$buttonsContainer = $('.datepicker--buttons', this.d.$datepicker);\r\n },\r\n\r\n setNavStatus: function () {\r\n if (!(this.opts.minDate || this.opts.maxDate) || !this.opts.disableNavWhenOutOfRange) return;\r\n\r\n var date = this.d.parsedDate,\r\n m = date.month,\r\n y = date.year,\r\n d = date.date;\r\n\r\n switch (this.d.view) {\r\n case 'days':\r\n if (!this.d._isInRange(new Date(y, m-1, 1), 'month')) {\r\n this._disableNav('prev')\r\n }\r\n if (!this.d._isInRange(new Date(y, m+1, 1), 'month')) {\r\n this._disableNav('next')\r\n }\r\n break;\r\n case 'months':\r\n if (!this.d._isInRange(new Date(y-1, m, d), 'year')) {\r\n this._disableNav('prev')\r\n }\r\n if (!this.d._isInRange(new Date(y+1, m, d), 'year')) {\r\n this._disableNav('next')\r\n }\r\n break;\r\n case 'years':\r\n var decade = dp.getDecade(this.d.date);\r\n if (!this.d._isInRange(new Date(decade[0] - 1, 0, 1), 'year')) {\r\n this._disableNav('prev')\r\n }\r\n if (!this.d._isInRange(new Date(decade[1] + 1, 0, 1), 'year')) {\r\n this._disableNav('next')\r\n }\r\n break;\r\n }\r\n },\r\n\r\n _disableNav: function (nav) {\r\n $('[data-action=\"' + nav + '\"]', this.d.$nav).addClass('-disabled-')\r\n },\r\n\r\n _activateNav: function (nav) {\r\n $('[data-action=\"' + nav + '\"]', this.d.$nav).removeClass('-disabled-')\r\n },\r\n\r\n _onClickNavButton: function (e) {\r\n var $el = $(e.target).closest('[data-action]'),\r\n action = $el.data('action');\r\n\r\n this.d[action]();\r\n },\r\n\r\n _onClickNavTitle: function (e) {\r\n if ($(e.target).hasClass('-disabled-')) return;\r\n\r\n if (this.d.view == 'days') {\r\n return this.d.view = 'months'\r\n }\r\n\r\n this.d.view = 'years';\r\n }\r\n }\r\n\r\n})();\r\n\r\n;(function () {\r\n var template = '
' +\r\n '
' +\r\n ' #{hourVisible}' +\r\n ' :' +\r\n ' #{minValue}' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n ' ' +\r\n '
' +\r\n '
' +\r\n ' ' +\r\n '
' +\r\n '
' +\r\n '
',\r\n datepicker = $.fn.datepicker,\r\n dp = datepicker.Constructor;\r\n\r\n datepicker.Timepicker = function (inst, opts) {\r\n this.d = inst;\r\n this.opts = opts;\r\n\r\n this.init();\r\n };\r\n\r\n datepicker.Timepicker.prototype = {\r\n init: function () {\r\n var input = 'input';\r\n this._setTime(this.d.date);\r\n this._buildHTML();\r\n\r\n if (navigator.userAgent.match(/trident/gi)) {\r\n input = 'change';\r\n }\r\n\r\n this.d.$el.on('selectDate', this._onSelectDate.bind(this));\r\n this.$ranges.on(input, this._onChangeRange.bind(this));\r\n this.$ranges.on('mouseup', this._onMouseUpRange.bind(this));\r\n this.$ranges.on('mousemove focus ', this._onMouseEnterRange.bind(this));\r\n this.$ranges.on('mouseout blur', this._onMouseOutRange.bind(this));\r\n },\r\n\r\n _setTime: function (date) {\r\n var _date = dp.getParsedDate(date);\r\n\r\n this._handleDate(date);\r\n this.hours = _date.hours < this.minHours ? this.minHours : _date.hours;\r\n this.minutes = _date.minutes < this.minMinutes ? this.minMinutes : _date.minutes;\r\n },\r\n\r\n /**\r\n * Sets minHours and minMinutes from date (usually it's a minDate)\r\n * Also changes minMinutes if current hours are bigger then @date hours\r\n * @param date {Date}\r\n * @private\r\n */\r\n _setMinTimeFromDate: function (date) {\r\n this.minHours = date.getHours();\r\n this.minMinutes = date.getMinutes();\r\n\r\n // If, for example, min hours are 10, and current hours are 12,\r\n // update minMinutes to default value, to be able to choose whole range of values\r\n if (this.d.lastSelectedDate) {\r\n if (this.d.lastSelectedDate.getHours() > date.getHours()) {\r\n this.minMinutes = this.opts.minMinutes;\r\n }\r\n }\r\n },\r\n\r\n _setMaxTimeFromDate: function (date) {\r\n this.maxHours = date.getHours();\r\n this.maxMinutes = date.getMinutes();\r\n\r\n if (this.d.lastSelectedDate) {\r\n if (this.d.lastSelectedDate.getHours() < date.getHours()) {\r\n this.maxMinutes = this.opts.maxMinutes;\r\n }\r\n }\r\n },\r\n\r\n _setDefaultMinMaxTime: function () {\r\n var maxHours = 23,\r\n maxMinutes = 59,\r\n opts = this.opts;\r\n\r\n this.minHours = opts.minHours < 0 || opts.minHours > maxHours ? 0 : opts.minHours;\r\n this.minMinutes = opts.minMinutes < 0 || opts.minMinutes > maxMinutes ? 0 : opts.minMinutes;\r\n this.maxHours = opts.maxHours < 0 || opts.maxHours > maxHours ? maxHours : opts.maxHours;\r\n this.maxMinutes = opts.maxMinutes < 0 || opts.maxMinutes > maxMinutes ? maxMinutes : opts.maxMinutes;\r\n },\r\n\r\n /**\r\n * Looks for min/max hours/minutes and if current values\r\n * are out of range sets valid values.\r\n * @private\r\n */\r\n _validateHoursMinutes: function (date) {\r\n if (this.hours < this.minHours) {\r\n this.hours = this.minHours;\r\n } else if (this.hours > this.maxHours) {\r\n this.hours = this.maxHours;\r\n }\r\n\r\n if (this.minutes < this.minMinutes) {\r\n this.minutes = this.minMinutes;\r\n } else if (this.minutes > this.maxMinutes) {\r\n this.minutes = this.maxMinutes;\r\n }\r\n },\r\n\r\n _buildHTML: function () {\r\n var lz = dp.getLeadingZeroNum,\r\n data = {\r\n hourMin: this.minHours,\r\n hourMax: lz(this.maxHours),\r\n hourStep: this.opts.hoursStep,\r\n hourValue: this.hours,\r\n hourVisible: lz(this.displayHours),\r\n minMin: this.minMinutes,\r\n minMax: lz(this.maxMinutes),\r\n minStep: this.opts.minutesStep,\r\n minValue: lz(this.minutes)\r\n },\r\n _template = dp.template(template, data);\r\n\r\n this.$timepicker = $(_template).appendTo(this.d.$datepicker);\r\n this.$ranges = $('[type=\"range\"]', this.$timepicker);\r\n this.$hours = $('[name=\"hours\"]', this.$timepicker);\r\n this.$minutes = $('[name=\"minutes\"]', this.$timepicker);\r\n this.$hoursText = $('.datepicker--time-current-hours', this.$timepicker);\r\n this.$minutesText = $('.datepicker--time-current-minutes', this.$timepicker);\r\n\r\n if (this.d.ampm) {\r\n this.$ampm = $('')\r\n .appendTo($('.datepicker--time-current', this.$timepicker))\r\n .html(this.dayPeriod);\r\n\r\n this.$timepicker.addClass('-am-pm-');\r\n }\r\n },\r\n\r\n _updateCurrentTime: function () {\r\n var h = dp.getLeadingZeroNum(this.displayHours),\r\n m = dp.getLeadingZeroNum(this.minutes);\r\n\r\n this.$hoursText.html(h);\r\n this.$minutesText.html(m);\r\n\r\n if (this.d.ampm) {\r\n this.$ampm.html(this.dayPeriod);\r\n }\r\n },\r\n\r\n _updateRanges: function () {\r\n this.$hours.attr({\r\n min: this.minHours,\r\n max: this.maxHours\r\n }).val(this.hours);\r\n\r\n this.$minutes.attr({\r\n min: this.minMinutes,\r\n max: this.maxMinutes\r\n }).val(this.minutes)\r\n },\r\n\r\n /**\r\n * Sets minHours, minMinutes etc. from date. If date is not passed, than sets\r\n * values from options\r\n * @param [date] {object} - Date object, to get values from\r\n * @private\r\n */\r\n _handleDate: function (date) {\r\n this._setDefaultMinMaxTime();\r\n if (date) {\r\n if (dp.isSame(date, this.d.opts.minDate)) {\r\n this._setMinTimeFromDate(this.d.opts.minDate);\r\n } else if (dp.isSame(date, this.d.opts.maxDate)) {\r\n this._setMaxTimeFromDate(this.d.opts.maxDate);\r\n }\r\n }\r\n\r\n this._validateHoursMinutes(date);\r\n },\r\n\r\n update: function () {\r\n this._updateRanges();\r\n this._updateCurrentTime();\r\n },\r\n\r\n /**\r\n * Calculates valid hour value to display in text input and datepicker's body.\r\n * @param date {Date|Number} - date or hours\r\n * @param [ampm] {Boolean} - 12 hours mode\r\n * @returns {{hours: *, dayPeriod: string}}\r\n * @private\r\n */\r\n _getValidHoursFromDate: function (date, ampm) {\r\n var d = date,\r\n hours = date;\r\n\r\n if (date instanceof Date) {\r\n d = dp.getParsedDate(date);\r\n hours = d.hours;\r\n }\r\n\r\n var _ampm = ampm || this.d.ampm,\r\n dayPeriod = 'am';\r\n\r\n if (_ampm) {\r\n switch(true) {\r\n case hours == 0:\r\n hours = 12;\r\n break;\r\n case hours == 12:\r\n dayPeriod = 'pm';\r\n break;\r\n case hours > 11:\r\n hours = hours - 12;\r\n dayPeriod = 'pm';\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n hours: hours,\r\n dayPeriod: dayPeriod\r\n }\r\n },\r\n\r\n set hours (val) {\r\n this._hours = val;\r\n\r\n var displayHours = this._getValidHoursFromDate(val);\r\n\r\n this.displayHours = displayHours.hours;\r\n this.dayPeriod = displayHours.dayPeriod;\r\n },\r\n\r\n get hours() {\r\n return this._hours;\r\n },\r\n\r\n // Events\r\n // -------------------------------------------------\r\n\r\n _onChangeRange: function (e) {\r\n var $target = $(e.target),\r\n name = $target.attr('name');\r\n \r\n this.d.timepickerIsActive = true;\r\n\r\n this[name] = $target.val();\r\n this._updateCurrentTime();\r\n this.d._trigger('timeChange', [this.hours, this.minutes]);\r\n\r\n this._handleDate(this.d.lastSelectedDate);\r\n this.update()\r\n },\r\n\r\n _onSelectDate: function (e, data) {\r\n this._handleDate(data);\r\n this.update();\r\n },\r\n\r\n _onMouseEnterRange: function (e) {\r\n var name = $(e.target).attr('name');\r\n $('.datepicker--time-current-' + name, this.$timepicker).addClass('-focus-');\r\n },\r\n\r\n _onMouseOutRange: function (e) {\r\n var name = $(e.target).attr('name');\r\n if (this.d.inFocus) return; // Prevent removing focus when mouse out of range slider\r\n $('.datepicker--time-current-' + name, this.$timepicker).removeClass('-focus-');\r\n },\r\n\r\n _onMouseUpRange: function (e) {\r\n this.d.timepickerIsActive = false;\r\n }\r\n };\r\n})();\r\n})(window, jQuery);\r\n\r\n\r\n\r\n// Craig - Added english language here \r\n\r\n; (function ($) {\r\n $.fn.datepicker.language['en'] = {\r\n days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\r\n daysMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\r\n months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\r\n monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n today: 'Today',\r\n clear: 'Clear',\r\n dateFormat: 'mm/dd/yyyy',\r\n timeFormat: 'hh:ii aa',\r\n firstDay: 0\r\n };\r\n})(jQuery);"]}