');\r\n\t\t\t\t\tif (this.o.calendarWeeks){\r\n\t\t\t\t\t\t// ISO 8601: First week contains first thursday.\r\n\t\t\t\t\t\t// ISO also states week starts on Monday, but we can be more abstract here.\r\n\t\t\t\t\t\tvar\r\n\t\t\t\t\t\t\t// Start of current week: based on weekstart/current date\r\n\t\t\t\t\t\t\tws = new Date(+prevMonth + (this.o.weekStart - prevMonth.getUTCDay() - 7) % 7 * 864e5),\r\n\t\t\t\t\t\t\t// Thursday of this week\r\n\t\t\t\t\t\t\tth = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),\r\n\t\t\t\t\t\t\t// First Thursday of year, year from thursday\r\n\t\t\t\t\t\t\tyth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay())%7*864e5),\r\n\t\t\t\t\t\t\t// Calendar week: ms between thursdays, div ms per day, div 7 days\r\n\t\t\t\t\t\t\tcalWeek = (th - yth) / 864e5 / 7 + 1;\r\n\t\t\t\t\t\thtml.push(''+ calWeek +' | ');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tclsName = this.getClassNames(prevMonth);\r\n\t\t\t\tclsName.push('day');\r\n\r\n\t\t\t\tif (this.o.beforeShowDay !== $.noop){\r\n\t\t\t\t\tbefore = this.o.beforeShowDay(this._utc_to_local(prevMonth));\r\n\t\t\t\t\tif (before === undefined)\r\n\t\t\t\t\t\tbefore = {};\r\n\t\t\t\t\telse if (typeof(before) === 'boolean')\r\n\t\t\t\t\t\tbefore = {enabled: before};\r\n\t\t\t\t\telse if (typeof(before) === 'string')\r\n\t\t\t\t\t\tbefore = {classes: before};\r\n\t\t\t\t\tif (before.enabled === false)\r\n\t\t\t\t\t\tclsName.push('disabled');\r\n\t\t\t\t\tif (before.classes)\r\n\t\t\t\t\t\tclsName = clsName.concat(before.classes.split(/\\s+/));\r\n\t\t\t\t\tif (before.tooltip)\r\n\t\t\t\t\t\ttooltip = before.tooltip;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclsName = $.unique(clsName);\r\n\t\t\t\thtml.push(''+prevMonth.getUTCDate() + ' | ');\r\n\t\t\t\ttooltip = null;\r\n\t\t\t\tif (prevMonth.getUTCDay() === this.o.weekEnd){\r\n\t\t\t\t\thtml.push('
');\r\n\t\t\t\t}\r\n\t\t\t\tprevMonth.setUTCDate(prevMonth.getUTCDate()+1);\r\n\t\t\t}\r\n\t\t\tthis.picker.find('.datepicker-days tbody').empty().append(html.join(''));\r\n\r\n\t\t\tvar monthsTitle = dates[this.o.language].monthsTitle || dates['en'].monthsTitle || 'Months';\r\n\t\t\tvar months = this.picker.find('.datepicker-months')\r\n\t\t\t\t\t\t.find('.datepicker-switch')\r\n\t\t\t\t\t\t\t.text(this.o.maxViewMode < 2 ? monthsTitle : year)\r\n\t\t\t\t\t\t\t.end()\r\n\t\t\t\t\t\t.find('span').removeClass('active');\r\n\r\n\t\t\t$.each(this.dates, function(i, d){\r\n\t\t\t\tif (d.getUTCFullYear() === year)\r\n\t\t\t\t\tmonths.eq(d.getUTCMonth()).addClass('active');\r\n\t\t\t});\r\n\r\n\t\t\tif (year < startYear || year > endYear){\r\n\t\t\t\tmonths.addClass('disabled');\r\n\t\t\t}\r\n\t\t\tif (year === startYear){\r\n\t\t\t\tmonths.slice(0, startMonth).addClass('disabled');\r\n\t\t\t}\r\n\t\t\tif (year === endYear){\r\n\t\t\t\tmonths.slice(endMonth+1).addClass('disabled');\r\n\t\t\t}\r\n\r\n\t\t\tif (this.o.beforeShowMonth !== $.noop){\r\n\t\t\t\tvar that = this;\r\n\t\t\t\t$.each(months, function(i, month){\r\n var moDate = new Date(year, i, 1);\r\n var before = that.o.beforeShowMonth(moDate);\r\n\t\t\t\t\tif (before === undefined)\r\n\t\t\t\t\t\tbefore = {};\r\n\t\t\t\t\telse if (typeof(before) === 'boolean')\r\n\t\t\t\t\t\tbefore = {enabled: before};\r\n\t\t\t\t\telse if (typeof(before) === 'string')\r\n\t\t\t\t\t\tbefore = {classes: before};\r\n\t\t\t\t\tif (before.enabled === false && !$(month).hasClass('disabled'))\r\n\t\t\t\t\t $(month).addClass('disabled');\r\n\t\t\t\t\tif (before.classes)\r\n\t\t\t\t\t $(month).addClass(before.classes);\r\n\t\t\t\t\tif (before.tooltip)\r\n\t\t\t\t\t $(month).prop('title', before.tooltip);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Generating decade/years picker\r\n\t\t\tthis._fill_yearsView(\r\n\t\t\t\t'.datepicker-years',\r\n\t\t\t\t'year',\r\n\t\t\t\t10,\r\n\t\t\t\t1,\r\n\t\t\t\tyear,\r\n\t\t\t\tstartYear,\r\n\t\t\t\tendYear,\r\n\t\t\t\tthis.o.beforeShowYear\r\n\t\t\t);\r\n\r\n\t\t\t// Generating century/decades picker\r\n\t\t\tthis._fill_yearsView(\r\n\t\t\t\t'.datepicker-decades',\r\n\t\t\t\t'decade',\r\n\t\t\t\t100,\r\n\t\t\t\t10,\r\n\t\t\t\tyear,\r\n\t\t\t\tstartYear,\r\n\t\t\t\tendYear,\r\n\t\t\t\tthis.o.beforeShowDecade\r\n\t\t\t);\r\n\r\n\t\t\t// Generating millennium/centuries picker\r\n\t\t\tthis._fill_yearsView(\r\n\t\t\t\t'.datepicker-centuries',\r\n\t\t\t\t'century',\r\n\t\t\t\t1000,\r\n\t\t\t\t100,\r\n\t\t\t\tyear,\r\n\t\t\t\tstartYear,\r\n\t\t\t\tendYear,\r\n\t\t\t\tthis.o.beforeShowCentury\r\n\t\t\t);\r\n\t\t},\r\n\r\n\t\tupdateNavArrows: function(){\r\n\t\t\tif (!this._allow_update)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tvar d = new Date(this.viewDate),\r\n\t\t\t\tyear = d.getUTCFullYear(),\r\n\t\t\t\tmonth = d.getUTCMonth();\r\n\t\t\tswitch (this.viewMode){\r\n\t\t\t\tcase 0:\r\n\t\t\t\t\tif (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear() && month <= this.o.startDate.getUTCMonth()){\r\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'hidden'});\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'visible'});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear() && month >= this.o.endDate.getUTCMonth()){\r\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'hidden'});\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'visible'});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 1:\r\n\t\t\t\tcase 2:\r\n\t\t\t\tcase 3:\r\n\t\t\t\tcase 4:\r\n\t\t\t\t\tif (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear() || this.o.maxViewMode < 2){\r\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'hidden'});\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'visible'});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear() || this.o.maxViewMode < 2){\r\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'hidden'});\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'visible'});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tclick: function(e){\r\n\t\t\te.preventDefault();\r\n\t\t\te.stopPropagation();\r\n\r\n\t\t\tvar target, dir, day, year, month, monthChanged, yearChanged;\r\n\t\t\ttarget = $(e.target);\r\n\r\n\t\t\t// Clicked on the switch\r\n\t\t\tif (target.hasClass('datepicker-switch')){\r\n\t\t\t\tthis.showMode(1);\r\n\t\t\t}\r\n\r\n\t\t\t// Clicked on prev or next\r\n\t\t\tvar navArrow = target.closest('.prev, .next');\r\n\t\t\tif (navArrow.length > 0) {\r\n\t\t\t\tdir = DPGlobal.modes[this.viewMode].navStep * (navArrow.hasClass('prev') ? -1 : 1);\r\n\t\t\t\tif (this.viewMode === 0){\r\n\t\t\t\t\tthis.viewDate = this.moveMonth(this.viewDate, dir);\r\n\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.viewDate = this.moveYear(this.viewDate, dir);\r\n\t\t\t\t\tif (this.viewMode === 1){\r\n\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.fill();\r\n\t\t\t}\r\n\r\n\t\t\t// Clicked on today button\r\n\t\t\tif (target.hasClass('today') && !target.hasClass('day')){\r\n\t\t\t\tthis.showMode(-2);\r\n\t\t\t\tthis._setDate(UTCToday(), this.o.todayBtn === 'linked' ? null : 'view');\r\n\t\t\t}\r\n\r\n\t\t\t// Clicked on clear button\r\n\t\t\tif (target.hasClass('clear')){\r\n\t\t\t\tthis.clearDates();\r\n\t\t\t}\r\n\r\n\t\t\tif (!target.hasClass('disabled')){\r\n\t\t\t\t// Clicked on a day\r\n\t\t\t\tif (target.hasClass('day')){\r\n\t\t\t\t\tday = parseInt(target.text(), 10) || 1;\r\n\t\t\t\t\tyear = this.viewDate.getUTCFullYear();\r\n\t\t\t\t\tmonth = this.viewDate.getUTCMonth();\r\n\r\n\t\t\t\t\t// From last month\r\n\t\t\t\t\tif (target.hasClass('old')){\r\n\t\t\t\t\t\tif (month === 0) {\r\n\t\t\t\t\t\t\tmonth = 11;\r\n\t\t\t\t\t\t\tyear = year - 1;\r\n\t\t\t\t\t\t\tmonthChanged = true;\r\n\t\t\t\t\t\t\tyearChanged = true;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tmonth = month - 1;\r\n\t\t\t\t\t\t\tmonthChanged = true;\r\n \t\t\t\t\t\t}\r\n \t\t\t\t\t}\r\n\r\n\t\t\t\t\t// From next month\r\n\t\t\t\t\tif (target.hasClass('new')) {\r\n\t\t\t\t\t\tif (month === 11){\r\n\t\t\t\t\t\t\tmonth = 0;\r\n\t\t\t\t\t\t\tyear = year + 1;\r\n\t\t\t\t\t\t\tmonthChanged = true;\r\n\t\t\t\t\t\t\tyearChanged = true;\r\n \t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tmonth = month + 1;\r\n\t\t\t\t\t\t\tmonthChanged = true;\r\n \t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis._setDate(UTCDate(year, month, day));\r\n\t\t\t\t\tif (yearChanged) {\r\n\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (monthChanged) {\r\n\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Clicked on a month\r\n\t\t\t\tif (target.hasClass('month')) {\r\n\t\t\t\t\tthis.viewDate.setUTCDate(1);\r\n\t\t\t\t\tday = 1;\r\n\t\t\t\t\tmonth = target.parent().find('span').index(target);\r\n\t\t\t\t\tyear = this.viewDate.getUTCFullYear();\r\n\t\t\t\t\tthis.viewDate.setUTCMonth(month);\r\n\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\r\n\t\t\t\t\tif (this.o.minViewMode === 1){\r\n\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day));\r\n\t\t\t\t\t\tthis.showMode();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.showMode(-1);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.fill();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Clicked on a year\r\n\t\t\t\tif (target.hasClass('year')\r\n\t\t\t\t\t\t|| target.hasClass('decade')\r\n\t\t\t\t\t\t|| target.hasClass('century')) {\r\n\t\t\t\t\tthis.viewDate.setUTCDate(1);\r\n\r\n\t\t\t\t\tday = 1;\r\n\t\t\t\t\tmonth = 0;\r\n\t\t\t\t\tyear = parseInt(target.text(), 10)||0;\r\n\t\t\t\t\tthis.viewDate.setUTCFullYear(year);\r\n\r\n\t\t\t\t\tif (target.hasClass('year')){\r\n\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\r\n\t\t\t\t\t\tif (this.o.minViewMode === 2){\r\n\t\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (target.hasClass('decade')){\r\n\t\t\t\t\t\tthis._trigger('changeDecade', this.viewDate);\r\n\t\t\t\t\t\tif (this.o.minViewMode === 3){\r\n\t\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (target.hasClass('century')){\r\n\t\t\t\t\t\tthis._trigger('changeCentury', this.viewDate);\r\n\t\t\t\t\t\tif (this.o.minViewMode === 4){\r\n\t\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.showMode(-1);\r\n\t\t\t\t\tthis.fill();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this.picker.is(':visible') && this._focused_from){\r\n\t\t\t\t$(this._focused_from).focus();\r\n\t\t\t}\r\n\t\t\tdelete this._focused_from;\r\n\t\t},\r\n\r\n\t\t_toggle_multidate: function(date){\r\n\t\t\tvar ix = this.dates.contains(date);\r\n\t\t\tif (!date){\r\n\t\t\t\tthis.dates.clear();\r\n\t\t\t}\r\n\r\n\t\t\tif (ix !== -1){\r\n\t\t\t\tif (this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive){\r\n\t\t\t\t\tthis.dates.remove(ix);\r\n\t\t\t\t}\r\n\t\t\t} else if (this.o.multidate === false) {\r\n\t\t\t\tthis.dates.clear();\r\n\t\t\t\tthis.dates.push(date);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.dates.push(date);\r\n\t\t\t}\r\n\r\n\t\t\tif (typeof this.o.multidate === 'number')\r\n\t\t\t\twhile (this.dates.length > this.o.multidate)\r\n\t\t\t\t\tthis.dates.remove(0);\r\n\t\t},\r\n\r\n\t\t_setDate: function(date, which){\r\n\t\t\tif (!which || which === 'date')\r\n\t\t\t\tthis._toggle_multidate(date && new Date(date));\r\n\t\t\tif (!which || which === 'view')\r\n\t\t\t\tthis.viewDate = date && new Date(date);\r\n\r\n\t\t\tthis.fill();\r\n\t\t\tthis.setValue();\r\n\t\t\tif (!which || which !== 'view') {\r\n\t\t\t\tthis._trigger('changeDate');\r\n\t\t\t}\r\n\t\t\tif (this.inputField){\r\n\t\t\t\tthis.inputField.change();\r\n\t\t\t}\r\n\t\t\tif (this.o.autoclose && (!which || which === 'date')){\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tmoveDay: function(date, dir){\r\n\t\t\tvar newDate = new Date(date);\r\n\t\t\tnewDate.setUTCDate(date.getUTCDate() + dir);\r\n\r\n\t\t\treturn newDate;\r\n\t\t},\r\n\r\n\t\tmoveWeek: function(date, dir){\r\n\t\t\treturn this.moveDay(date, dir * 7);\r\n\t\t},\r\n\r\n\t\tmoveMonth: function(date, dir){\r\n\t\t\tif (!isValidDate(date))\r\n\t\t\t\treturn this.o.defaultViewDate;\r\n\t\t\tif (!dir)\r\n\t\t\t\treturn date;\r\n\t\t\tvar new_date = new Date(date.valueOf()),\r\n\t\t\t\tday = new_date.getUTCDate(),\r\n\t\t\t\tmonth = new_date.getUTCMonth(),\r\n\t\t\t\tmag = Math.abs(dir),\r\n\t\t\t\tnew_month, test;\r\n\t\t\tdir = dir > 0 ? 1 : -1;\r\n\t\t\tif (mag === 1){\r\n\t\t\t\ttest = dir === -1\r\n\t\t\t\t\t// If going back one month, make sure month is not current month\r\n\t\t\t\t\t// (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)\r\n\t\t\t\t\t? function(){\r\n\t\t\t\t\t\treturn new_date.getUTCMonth() === month;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// If going forward one month, make sure month is as expected\r\n\t\t\t\t\t// (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)\r\n\t\t\t\t\t: function(){\r\n\t\t\t\t\t\treturn new_date.getUTCMonth() !== new_month;\r\n\t\t\t\t\t};\r\n\t\t\t\tnew_month = month + dir;\r\n\t\t\t\tnew_date.setUTCMonth(new_month);\r\n\t\t\t\t// Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\r\n\t\t\t\tif (new_month < 0 || new_month > 11)\r\n\t\t\t\t\tnew_month = (new_month + 12) % 12;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// For magnitudes >1, move one month at a time...\r\n\t\t\t\tfor (var i=0; i < mag; i++)\r\n\t\t\t\t\t// ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\r\n\t\t\t\t\tnew_date = this.moveMonth(new_date, dir);\r\n\t\t\t\t// ...then reset the day, keeping it in the new month\r\n\t\t\t\tnew_month = new_date.getUTCMonth();\r\n\t\t\t\tnew_date.setUTCDate(day);\r\n\t\t\t\ttest = function(){\r\n\t\t\t\t\treturn new_month !== new_date.getUTCMonth();\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\t// Common date-resetting loop -- if date is beyond end of month, make it\r\n\t\t\t// end of month\r\n\t\t\twhile (test()){\r\n\t\t\t\tnew_date.setUTCDate(--day);\r\n\t\t\t\tnew_date.setUTCMonth(new_month);\r\n\t\t\t}\r\n\t\t\treturn new_date;\r\n\t\t},\r\n\r\n\t\tmoveYear: function(date, dir){\r\n\t\t\treturn this.moveMonth(date, dir*12);\r\n\t\t},\r\n\r\n\t\tmoveAvailableDate: function(date, dir, fn){\r\n\t\t\tdo {\r\n\t\t\t\tdate = this[fn](date, dir);\r\n\r\n\t\t\t\tif (!this.dateWithinRange(date))\r\n\t\t\t\t\treturn false;\r\n\r\n\t\t\t\tfn = 'moveDay';\r\n\t\t\t}\r\n\t\t\twhile (this.dateIsDisabled(date));\r\n\r\n\t\t\treturn date;\r\n\t\t},\r\n\r\n\t\tweekOfDateIsDisabled: function(date){\r\n\t\t\treturn $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1;\r\n\t\t},\r\n\r\n\t\tdateIsDisabled: function(date){\r\n\t\t\treturn (\r\n\t\t\t\tthis.weekOfDateIsDisabled(date) ||\r\n\t\t\t\t$.grep(this.o.datesDisabled, function(d){\r\n\t\t\t\t\treturn isUTCEquals(date, d);\r\n\t\t\t\t}).length > 0\r\n\t\t\t);\r\n\t\t},\r\n\r\n\t\tdateWithinRange: function(date){\r\n\t\t\treturn date >= this.o.startDate && date <= this.o.endDate;\r\n\t\t},\r\n\r\n\t\tkeydown: function(e){\r\n\t\t\tif (!this.picker.is(':visible')){\r\n\t\t\t\tif (e.keyCode === 40 || e.keyCode === 27) { // allow down to re-show picker\r\n\t\t\t\t\tthis.show();\r\n\t\t\t\t\te.stopPropagation();\r\n }\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar dateChanged = false,\r\n\t\t\t\tdir, newViewDate,\r\n\t\t\t\tfocusDate = this.focusDate || this.viewDate;\r\n\t\t\tswitch (e.keyCode){\r\n\t\t\t\tcase 27: // escape\r\n\t\t\t\t\tif (this.focusDate){\r\n\t\t\t\t\t\tthis.focusDate = null;\r\n\t\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\r\n\t\t\t\t\t\tthis.fill();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthis.hide();\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 37: // left\r\n\t\t\t\tcase 38: // up\r\n\t\t\t\tcase 39: // right\r\n\t\t\t\tcase 40: // down\r\n\t\t\t\t\tif (!this.o.keyboardNavigation || this.o.daysOfWeekDisabled.length === 7)\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdir = e.keyCode === 37 || e.keyCode === 38 ? -1 : 1;\r\n if (this.viewMode === 0) {\r\n \t\t\t\t\tif (e.ctrlKey){\r\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\r\n\r\n \t\t\t\t\t\tif (newViewDate)\r\n \t\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\r\n \t\t\t\t\t}\r\n \t\t\t\t\telse if (e.shiftKey){\r\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\r\n\r\n \t\t\t\t\t\tif (newViewDate)\r\n \t\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\r\n \t\t\t\t\t}\r\n \t\t\t\t\telse if (e.keyCode === 37 || e.keyCode === 39){\r\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveDay');\r\n \t\t\t\t\t}\r\n \t\t\t\t\telse if (!this.weekOfDateIsDisabled(focusDate)){\r\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveWeek');\r\n \t\t\t\t\t}\r\n } else if (this.viewMode === 1) {\r\n if (e.keyCode === 38 || e.keyCode === 40) {\r\n dir = dir * 4;\r\n }\r\n newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\r\n } else if (this.viewMode === 2) {\r\n if (e.keyCode === 38 || e.keyCode === 40) {\r\n dir = dir * 4;\r\n }\r\n newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\r\n }\r\n\t\t\t\t\tif (newViewDate){\r\n\t\t\t\t\t\tthis.focusDate = this.viewDate = newViewDate;\r\n\t\t\t\t\t\tthis.setValue();\r\n\t\t\t\t\t\tthis.fill();\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 13: // enter\r\n\t\t\t\t\tif (!this.o.forceParse)\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tfocusDate = this.focusDate || this.dates.get(-1) || this.viewDate;\r\n\t\t\t\t\tif (this.o.keyboardNavigation) {\r\n\t\t\t\t\t\tthis._toggle_multidate(focusDate);\r\n\t\t\t\t\t\tdateChanged = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.focusDate = null;\r\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\r\n\t\t\t\t\tthis.setValue();\r\n\t\t\t\t\tthis.fill();\r\n\t\t\t\t\tif (this.picker.is(':visible')){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tif (this.o.autoclose)\r\n\t\t\t\t\t\t\tthis.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 9: // tab\r\n\t\t\t\t\tthis.focusDate = null;\r\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\r\n\t\t\t\t\tthis.fill();\r\n\t\t\t\t\tthis.hide();\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif (dateChanged){\r\n\t\t\t\tif (this.dates.length)\r\n\t\t\t\t\tthis._trigger('changeDate');\r\n\t\t\t\telse\r\n\t\t\t\t\tthis._trigger('clearDate');\r\n\t\t\t\tif (this.inputField){\r\n\t\t\t\t\tthis.inputField.change();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tshowMode: function(dir){\r\n\t\t\tif (dir){\r\n\t\t\t\tthis.viewMode = Math.max(this.o.minViewMode, Math.min(this.o.maxViewMode, this.viewMode + dir));\r\n\t\t\t}\r\n\t\t\tthis.picker\r\n\t\t\t\t.children('div')\r\n\t\t\t\t.hide()\r\n\t\t\t\t.filter('.datepicker-' + DPGlobal.modes[this.viewMode].clsName)\r\n\t\t\t\t\t.show();\r\n\t\t\tthis.updateNavArrows();\r\n\t\t}\r\n\t};\r\n\r\n\tvar DateRangePicker = function(element, options){\r\n\t\t$(element).data('datepicker', this);\r\n\t\tthis.element = $(element);\r\n\t\tthis.inputs = $.map(options.inputs, function(i){\r\n\t\t\treturn i.jquery ? i[0] : i;\r\n\t\t});\r\n\t\tdelete options.inputs;\r\n\r\n\t\tdatepickerPlugin.call($(this.inputs), options)\r\n\t\t\t.on('changeDate', $.proxy(this.dateUpdated, this));\r\n\r\n\t\tthis.pickers = $.map(this.inputs, function(i){\r\n\t\t\treturn $(i).data('datepicker');\r\n\t\t});\r\n\t\tthis.updateDates();\r\n\t};\r\n\tDateRangePicker.prototype = {\r\n\t\tupdateDates: function(){\r\n\t\t\tthis.dates = $.map(this.pickers, function(i){\r\n\t\t\t\treturn i.getUTCDate();\r\n\t\t\t});\r\n\t\t\tthis.updateRanges();\r\n\t\t},\r\n\t\tupdateRanges: function(){\r\n\t\t\tvar range = $.map(this.dates, function(d){\r\n\t\t\t\treturn d.valueOf();\r\n\t\t\t});\r\n\t\t\t$.each(this.pickers, function(i, p){\r\n\t\t\t\tp.setRange(range);\r\n\t\t\t});\r\n\t\t},\r\n\t\tdateUpdated: function(e){\r\n\t\t\t// `this.updating` is a workaround for preventing infinite recursion\r\n\t\t\t// between `changeDate` triggering and `setUTCDate` calling. Until\r\n\t\t\t// there is a better mechanism.\r\n\t\t\tif (this.updating)\r\n\t\t\t\treturn;\r\n\t\t\tthis.updating = true;\r\n\r\n\t\t\tvar dp = $(e.target).data('datepicker');\r\n\r\n\t\t\tif (typeof(dp) === \"undefined\") {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar new_date = dp.getUTCDate(),\r\n\t\t\t\ti = $.inArray(e.target, this.inputs),\r\n\t\t\t\tj = i - 1,\r\n\t\t\t\tk = i + 1,\r\n\t\t\t\tl = this.inputs.length;\r\n\t\t\tif (i === -1)\r\n\t\t\t\treturn;\r\n\r\n\t\t\t$.each(this.pickers, function(i, p){\r\n\t\t\t\tif (!p.getUTCDate())\r\n\t\t\t\t\tp.setUTCDate(new_date);\r\n\t\t\t});\r\n\r\n\t\t\tif (new_date < this.dates[j]){\r\n\t\t\t\t// Date being moved earlier/left\r\n\t\t\t\twhile (j >= 0 && new_date < this.dates[j]){\r\n\t\t\t\t\tthis.pickers[j--].setUTCDate(new_date);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (new_date > this.dates[k]){\r\n\t\t\t\t// Date being moved later/right\r\n\t\t\t\twhile (k < l && new_date > this.dates[k]){\r\n\t\t\t\t\tthis.pickers[k++].setUTCDate(new_date);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.updateDates();\r\n\r\n\t\t\tdelete this.updating;\r\n\t\t},\r\n\t\tremove: function(){\r\n\t\t\t$.map(this.pickers, function(p){ p.remove(); });\r\n\t\t\tdelete this.element.data().datepicker;\r\n\t\t}\r\n\t};\r\n\r\n\tfunction opts_from_el(el, prefix){\r\n\t\t// Derive options from element data-attrs\r\n\t\tvar data = $(el).data(),\r\n\t\t\tout = {}, inkey,\r\n\t\t\treplace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');\r\n\t\tprefix = new RegExp('^' + prefix.toLowerCase());\r\n\t\tfunction re_lower(_,a){\r\n\t\t\treturn a.toLowerCase();\r\n\t\t}\r\n\t\tfor (var key in data)\r\n\t\t\tif (prefix.test(key)){\r\n\t\t\t\tinkey = key.replace(replace, re_lower);\r\n\t\t\t\tout[inkey] = data[key];\r\n\t\t\t}\r\n\t\treturn out;\r\n\t}\r\n\r\n\tfunction opts_from_locale(lang){\r\n\t\t// Derive options from locale plugins\r\n\t\tvar out = {};\r\n\t\t// Check if \"de-DE\" style date is available, if not language should\r\n\t\t// fallback to 2 letter code eg \"de\"\r\n\t\tif (!dates[lang]){\r\n\t\t\tlang = lang.split('-')[0];\r\n\t\t\tif (!dates[lang])\r\n\t\t\t\treturn;\r\n\t\t}\r\n\t\tvar d = dates[lang];\r\n\t\t$.each(locale_opts, function(i,k){\r\n\t\t\tif (k in d)\r\n\t\t\t\tout[k] = d[k];\r\n\t\t});\r\n\t\treturn out;\r\n\t}\r\n\r\n\tvar old = $.fn.datepicker;\r\n\tvar datepickerPlugin = function(option){\r\n\t\tvar args = Array.apply(null, arguments);\r\n\t\targs.shift();\r\n\t\tvar internal_return;\r\n\t\tthis.each(function(){\r\n\t\t\tvar $this = $(this),\r\n\t\t\t\tdata = $this.data('datepicker'),\r\n\t\t\t\toptions = typeof option === 'object' && option;\r\n\t\t\tif (!data){\r\n\t\t\t\tvar elopts = opts_from_el(this, 'date'),\r\n\t\t\t\t\t// Preliminary otions\r\n\t\t\t\t\txopts = $.extend({}, defaults, elopts, options),\r\n\t\t\t\t\tlocopts = opts_from_locale(xopts.language),\r\n\t\t\t\t\t// Options priority: js args, data-attrs, locales, defaults\r\n\t\t\t\t\topts = $.extend({}, defaults, locopts, elopts, options);\r\n\t\t\t\tif ($this.hasClass('input-daterange') || opts.inputs){\r\n\t\t\t\t\t$.extend(opts, {\r\n\t\t\t\t\t\tinputs: opts.inputs || $this.find('input').toArray()\r\n\t\t\t\t\t});\r\n\t\t\t\t\tdata = new DateRangePicker(this, opts);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tdata = new Datepicker(this, opts);\r\n\t\t\t\t}\r\n\t\t\t\t$this.data('datepicker', data);\r\n\t\t\t}\r\n\t\t\tif (typeof option === 'string' && typeof data[option] === 'function'){\r\n\t\t\t\tinternal_return = data[option].apply(data, args);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (\r\n\t\t\tinternal_return === undefined ||\r\n\t\t\tinternal_return instanceof Datepicker ||\r\n\t\t\tinternal_return instanceof DateRangePicker\r\n\t\t)\r\n\t\t\treturn this;\r\n\r\n\t\tif (this.length > 1)\r\n\t\t\tthrow new Error('Using only allowed for the collection of a single element (' + option + ' function)');\r\n\t\telse\r\n\t\t\treturn internal_return;\r\n\t};\r\n\t$.fn.datepicker = datepickerPlugin;\r\n\r\n\tvar defaults = $.fn.datepicker.defaults = {\r\n\t\tassumeNearbyYear: false,\r\n\t\tautoclose: false,\r\n\t\tbeforeShowDay: $.noop,\r\n\t\tbeforeShowMonth: $.noop,\r\n\t\tbeforeShowYear: $.noop,\r\n\t\tbeforeShowDecade: $.noop,\r\n\t\tbeforeShowCentury: $.noop,\r\n\t\tcalendarWeeks: false,\r\n\t\tclearBtn: false,\r\n\t\ttoggleActive: false,\r\n\t\tdaysOfWeekDisabled: [],\r\n\t\tdaysOfWeekHighlighted: [],\r\n\t\tdatesDisabled: [],\r\n\t\tendDate: Infinity,\r\n\t\tforceParse: true,\r\n\t\tformat: 'mm/dd/yyyy',\r\n\t\tkeyboardNavigation: true,\r\n\t\tlanguage: 'en',\r\n\t\tminViewMode: 0,\r\n\t\tmaxViewMode: 4,\r\n\t\tmultidate: false,\r\n\t\tmultidateSeparator: ',',\r\n\t\torientation: \"auto\",\r\n\t\trtl: false,\r\n\t\tstartDate: -Infinity,\r\n\t\tstartView: 0,\r\n\t\ttodayBtn: false,\r\n\t\ttodayHighlight: false,\r\n\t\tweekStart: 0,\r\n\t\tdisableTouchKeyboard: false,\r\n\t\tenableOnReadonly: true,\r\n\t\tshowOnFocus: true,\r\n\t\tzIndexOffset: 10,\r\n\t\tcontainer: 'body',\r\n\t\timmediateUpdates: false,\r\n\t\ttitle: '',\r\n\t\ttemplates: {\r\n\t\t\tleftArrow: '«',\r\n\t\t\trightArrow: '»'\r\n\t\t}\r\n\t};\r\n\tvar locale_opts = $.fn.datepicker.locale_opts = [\r\n\t\t'format',\r\n\t\t'rtl',\r\n\t\t'weekStart'\r\n\t];\r\n\t$.fn.datepicker.Constructor = Datepicker;\r\n\tvar dates = $.fn.datepicker.dates = {\r\n\t\ten: {\r\n\t\t\tdays: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\r\n\t\t\tdaysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\r\n\t\t\tdaysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\r\n\t\t\tmonths: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\r\n\t\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\r\n\t\t\ttoday: \"Today\",\r\n\t\t\tclear: \"Clear\",\r\n\t\t\ttitleFormat: \"MM yyyy\"\r\n\t\t}\r\n\t};\r\n\r\n\tvar DPGlobal = {\r\n\t\tmodes: [\r\n\t\t\t{\r\n\t\t\t\tclsName: 'days',\r\n\t\t\t\tnavFnc: 'Month',\r\n\t\t\t\tnavStep: 1\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tclsName: 'months',\r\n\t\t\t\tnavFnc: 'FullYear',\r\n\t\t\t\tnavStep: 1\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tclsName: 'years',\r\n\t\t\t\tnavFnc: 'FullYear',\r\n\t\t\t\tnavStep: 10\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tclsName: 'decades',\r\n\t\t\t\tnavFnc: 'FullDecade',\r\n\t\t\t\tnavStep: 100\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tclsName: 'centuries',\r\n\t\t\t\tnavFnc: 'FullCentury',\r\n\t\t\t\tnavStep: 1000\r\n\t\t}],\r\n\t\tisLeapYear: function(year){\r\n\t\t\treturn (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));\r\n\t\t},\r\n\t\tgetDaysInMonth: function(year, month){\r\n\t\t\treturn [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\r\n\t\t},\r\n\t\tvalidParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,\r\n\t\tnonpunctuation: /[^ -\\/:-@\\u5e74\\u6708\\u65e5\\[-`{-~\\t\\n\\r]+/g,\r\n\t\tparseFormat: function(format){\r\n\t\t\tif (typeof format.toValue === 'function' && typeof format.toDisplay === 'function')\r\n return format;\r\n // IE treats \\0 as a string end in inputs (truncating the value),\r\n\t\t\t// so it's a bad format delimiter, anyway\r\n\t\t\tvar separators = format.replace(this.validParts, '\\0').split('\\0'),\r\n\t\t\t\tparts = format.match(this.validParts);\r\n\t\t\tif (!separators || !separators.length || !parts || parts.length === 0){\r\n\t\t\t\tthrow new Error(\"Invalid date format.\");\r\n\t\t\t}\r\n\t\t\treturn {separators: separators, parts: parts};\r\n\t\t},\r\n\t\tparseDate: function(date, format, language, assumeNearby){\r\n\t\t\tif (!date)\r\n\t\t\t\treturn undefined;\r\n\t\t\tif (date instanceof Date)\r\n\t\t\t\treturn date;\r\n\t\t\tif (typeof format === 'string')\r\n\t\t\t\tformat = DPGlobal.parseFormat(format);\r\n\t\t\tif (format.toValue)\r\n return format.toValue(date, format, language);\r\n var part_re = /([\\-+]\\d+)([dmwy])/,\r\n\t\t\t\tparts = date.match(/([\\-+]\\d+)([dmwy])/g),\r\n\t\t\t\tfn_map = {\r\n\t\t\t\t\td: 'moveDay',\r\n\t\t\t\t\tm: 'moveMonth',\r\n\t\t\t\t\tw: 'moveWeek',\r\n\t\t\t\t\ty: 'moveYear'\r\n\t\t\t\t},\r\n\t\t\t\tdateAliases = {\r\n\t\t\t\t\tyesterday: '-1d',\r\n\t\t\t\t\ttoday: '+0d',\r\n\t\t\t\t\ttomorrow: '+1d'\r\n\t\t\t\t},\r\n\t\t\t\tpart, dir, i, fn;\r\n\t\t\tif (/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/.test(date)){\r\n\t\t\t\tdate = new Date();\r\n\t\t\t\tfor (i=0; i < parts.length; i++){\r\n\t\t\t\t\tpart = part_re.exec(parts[i]);\r\n\t\t\t\t\tdir = parseInt(part[1]);\r\n\t\t\t\t\tfn = fn_map[part[2]];\r\n\t\t\t\t\tdate = Datepicker.prototype[fn](date, dir);\r\n\t\t\t\t}\r\n\t\t\t\treturn UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\r\n\t\t\t}\r\n\r\n\t\t\tif (typeof dateAliases[date] !== 'undefined') {\r\n\t\t\t\tdate = dateAliases[date];\r\n\t\t\t\tparts = date.match(/([\\-+]\\d+)([dmwy])/g);\r\n\r\n\t\t\t\tif (/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/.test(date)){\r\n\t\t\t\t\tdate = new Date();\r\n\t\t\t\t \tfor (i=0; i < parts.length; i++){\r\n\t\t\t\t\t\tpart = part_re.exec(parts[i]);\r\n\t\t\t\t\t\tdir = parseInt(part[1]);\r\n\t\t\t\t\t\tfn = fn_map[part[2]];\r\n\t\t\t\t\t\tdate = Datepicker.prototype[fn](date, dir);\r\n\t\t\t\t \t}\r\n\r\n\t\t\t \t\treturn UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tparts = date && date.match(this.nonpunctuation) || [];\r\n\t\t\tdate = new Date();\r\n\r\n\t\t\tfunction applyNearbyYear(year, threshold){\r\n\t\t\t\tif (threshold === true)\r\n\t\t\t\t\tthreshold = 10;\r\n\r\n\t\t\t\t// if year is 2 digits or less, than the user most likely is trying to get a recent century\r\n\t\t\t\tif (year < 100){\r\n\t\t\t\t\tyear += 2000;\r\n\t\t\t\t\t// if the new year is more than threshold years in advance, use last century\r\n\t\t\t\t\tif (year > ((new Date()).getFullYear()+threshold)){\r\n\t\t\t\t\t\tyear -= 100;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn year;\r\n\t\t\t}\r\n\r\n\t\t\tvar parsed = {},\r\n\t\t\t\tsetters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],\r\n\t\t\t\tsetters_map = {\r\n\t\t\t\t\tyyyy: function(d,v){\r\n\t\t\t\t\t\treturn d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tyy: function(d,v){\r\n\t\t\t\t\t\treturn d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tm: function(d,v){\r\n\t\t\t\t\t\tif (isNaN(d))\r\n\t\t\t\t\t\t\treturn d;\r\n\t\t\t\t\t\tv -= 1;\r\n\t\t\t\t\t\twhile (v < 0) v += 12;\r\n\t\t\t\t\t\tv %= 12;\r\n\t\t\t\t\t\td.setUTCMonth(v);\r\n\t\t\t\t\t\twhile (d.getUTCMonth() !== v)\r\n\t\t\t\t\t\t\td.setUTCDate(d.getUTCDate()-1);\r\n\t\t\t\t\t\treturn d;\r\n\t\t\t\t\t},\r\n\t\t\t\t\td: function(d,v){\r\n\t\t\t\t\t\treturn d.setUTCDate(v);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tval, filtered;\r\n\t\t\tsetters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\r\n\t\t\tsetters_map['dd'] = setters_map['d'];\r\n\t\t\tdate = UTCToday();\r\n\t\t\tvar fparts = format.parts.slice();\r\n\t\t\t// Remove noop parts\r\n\t\t\tif (parts.length !== fparts.length){\r\n\t\t\t\tfparts = $(fparts).filter(function(i,p){\r\n\t\t\t\t\treturn $.inArray(p, setters_order) !== -1;\r\n\t\t\t\t}).toArray();\r\n\t\t\t}\r\n\t\t\t// Process remainder\r\n\t\t\tfunction match_part(){\r\n\t\t\t\tvar m = this.slice(0, parts[i].length),\r\n\t\t\t\t\tp = parts[i].slice(0, m.length);\r\n\t\t\t\treturn m.toLowerCase() === p.toLowerCase();\r\n\t\t\t}\r\n\t\t\tif (parts.length === fparts.length){\r\n\t\t\t\tvar cnt;\r\n\t\t\t\tfor (i=0, cnt = fparts.length; i < cnt; i++){\r\n\t\t\t\t\tval = parseInt(parts[i], 10);\r\n\t\t\t\t\tpart = fparts[i];\r\n\t\t\t\t\tif (isNaN(val)){\r\n\t\t\t\t\t\tswitch (part){\r\n\t\t\t\t\t\t\tcase 'MM':\r\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].months).filter(match_part);\r\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].months) + 1;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'M':\r\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].monthsShort).filter(match_part);\r\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].monthsShort) + 1;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tparsed[part] = val;\r\n\t\t\t\t}\r\n\t\t\t\tvar _date, s;\r\n\t\t\t\tfor (i=0; i < setters_order.length; i++){\r\n\t\t\t\t\ts = setters_order[i];\r\n\t\t\t\t\tif (s in parsed && !isNaN(parsed[s])){\r\n\t\t\t\t\t\t_date = new Date(date);\r\n\t\t\t\t\t\tsetters_map[s](_date, parsed[s]);\r\n\t\t\t\t\t\tif (!isNaN(_date))\r\n\t\t\t\t\t\t\tdate = _date;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn date;\r\n\t\t},\r\n\t\tformatDate: function(date, format, language){\r\n\t\t\tif (!date)\r\n\t\t\t\treturn '';\r\n\t\t\tif (typeof format === 'string')\r\n\t\t\t\tformat = DPGlobal.parseFormat(format);\r\n\t\t\tif (format.toDisplay)\r\n return format.toDisplay(date, format, language);\r\n var val = {\r\n\t\t\t\td: date.getUTCDate(),\r\n\t\t\t\tD: dates[language].daysShort[date.getUTCDay()],\r\n\t\t\t\tDD: dates[language].days[date.getUTCDay()],\r\n\t\t\t\tm: date.getUTCMonth() + 1,\r\n\t\t\t\tM: dates[language].monthsShort[date.getUTCMonth()],\r\n\t\t\t\tMM: dates[language].months[date.getUTCMonth()],\r\n\t\t\t\tyy: date.getUTCFullYear().toString().substring(2),\r\n\t\t\t\tyyyy: date.getUTCFullYear()\r\n\t\t\t};\r\n\t\t\tval.dd = (val.d < 10 ? '0' : '') + val.d;\r\n\t\t\tval.mm = (val.m < 10 ? '0' : '') + val.m;\r\n\t\t\tdate = [];\r\n\t\t\tvar seps = $.extend([], format.separators);\r\n\t\t\tfor (var i=0, cnt = format.parts.length; i <= cnt; i++){\r\n\t\t\t\tif (seps.length)\r\n\t\t\t\t\tdate.push(seps.shift());\r\n\t\t\t\tdate.push(val[format.parts[i]]);\r\n\t\t\t}\r\n\t\t\treturn date.join('');\r\n\t\t},\r\n\t\theadTemplate: '