{"version":3,"file":"kendo.scheduler.recurrence.min.js","names":["factory","define","amd","$","undefined$1","kendo","window","timezone","Class","ui","Widget","DropDownList","ButtonGroup","kendoDate","date","setTime","setDayOfWeek","adjustDST","firstDayOfMonth","getMilliseconds","DAYS_IN_LEAPYEAR","DAYS_IN_YEAR","MONTHS","WEEK_DAYS","WEEK_DAYS_IDX","SU","MO","TU","WE","TH","FR","SA","DATE_FORMATS","RULE_NAMES","RULE_NAMES_LENGTH","length","limitation","months","end","rule","monthRules","ruleValues","getMonth","changed","setMonth","setFullYear","getFullYear","monthDays","monthLength","month","days","hours","getHours","normalize","monthDay","getMonthLength","getDate","sort","numberSortPredicate","yearDays","year","yearDay","leapYear","dayInYear","weeks","day","weekStart","week","weekInYear","weekDays","weekDayRule","offsetDate","Date","getTime","offsets","start","normalizeDay","getDay","weekDayRules","ruleWeekOffset","weekDay","weekNumber","currentDay","normalizeDayIndex","result","idx","weekInMonth","normalizeOffset","push","ruleWeekValues","freq","positions","position","forEach","nextMonthFirstDay","ruleDay","offset","isInWeek","numberOfWeeks","setDate","hourRules","startTime","_startTime","startHours","setHours","minutes","setMinutes","getMinutes","minuteRules","seconds","setSeconds","getSeconds","secondRules","BaseFrequency","extend","next","options","this","_hour","limit","ruleName","firstRule","modified","interval","current","diff","startTimeHours","_startPeriod","frequency","excess","getTimezoneOffset","MS_PER_HOUR","MS_PER_MINUTE","intervalExcess","Math","floor","round","MS_PER_DAY","_date","_getNumberOfWeeksBetweenDates","_hasRuleValue","first","second","exactWeeks","HourlyFrequency","fn","DailyFrequency","WeeklyFrequency","setup","eventStartDate","MonthlyFrequency","YearlyFrequency","frequencies","hourly","daily","weekly","monthly","yearly","CLICK","CHANGE","firstWeekLength","ceil","lastDate","weeksInMonth","skipFirst","skipLast","rules","value","ruleValue","availableRules","parseArray","list","range","parseInt","isNaN","parseWeekDayList","valueLength","substring","toUpperCase","a","b","parseExceptions","exceptions","zone","dates","split","indexOf","parseUTCDate","isException","Array","isArray","dateTime","toExceptionString","concat","convert","toString","join","endPeriodByFreq","eventsByPosition","periodEvents","until","event","inPeriod","periodEventsLength","events","removeExceptionDates","exceptionDates","getZoneOffset","parseDate","apply","parseDateRule","dateRule","pair","property","tzid","valueIdx","pairs","parseRule","recur","splits","part","parts","instance","trim","exdates","toLowerCase","count","culture","calendar","firstDay","day1","day2","serializeDateRule","val","serialize","ruleString","valueString","serializeWeekDayList","recurrence","parse","expand","endTime","endDate","durationMS","startPeriod","ruleStart","ruleEnd","useEventStart","freqName","eventStartTime","eventStartMS","eventStart","currentIdx","shiftedStart","shiftedEnd","shiftedStartTime","shifterEndTime","recurrenceRule","startTimezone","endTimezone","clone","recurrenceException","set","startPeriodByFreq","_endPeriod","duration","dateOffset","dateMinusHour","dateMinusHourOffset","allDayCompensation","isAllDay","toInvariantTime","inPeriodCheckEndDate","toUtcTime","startZone","endZone","startOffsetDiff","endOffsetDiff","startTZOffsetDiff","endTZOffsetDiff","offsetTicksStart","offsetTicksEnd","toOccurrence","_endTime","slice","isMissingDSTHour","RECURRENCE_VIEW_TEMPLATE","template","DAY_RULE","WEEKDAY_RULE","WEEKEND_RULE","BaseRecurrenceEditor","init","element","that","call","wrapper","today","firstWeekDay","_namespace","name","spinners","mobile","messages","repeat","recurrenceEditorTitle","never","repeatEvery","repeatOn","of","label","mobileLabel","after","occurrence","on","offsetPositions","third","fourth","last","weekdays","weekday","weekend","_initInterval","_value","_container","find","kendoNumericTextBox","decimals","format","min","change","_trigger","_weekDayButtons","names","abbreviated","namesAbbr","values","items","text","attributes","_weekDayButtonGroup","selection","select","selectedDays","map","i","Number","getAttribute","_weekDayRule","clear","_weekDay","_weekDayOffset","_weekDayView","weekDayOffset","weekDayValue","method","weekDayOffsetWidget","_initWeekDay","data","weekdayMessage","offsetMessage","weekDayInput","autoWidth","dataTextField","dataValueField","dataSource","dayName","_initWeekDays","weekDayButtonGroup","selectedWeekDayButtons","ruleDays","ruleDaysLength","selectors","_initMonthDay","monthDayInput","_monthDay","NumericTextBox","max","_initCount","input","_count","_initUntil","startInput","closest","validDateValidationMessage","Validator","prototype","dateCompareValidationMessage","dateCompare","initialValue","attr","_until","kendoDatePicker","setOptions","trigger","RecurrenceEditor","_initFrequency","_initContainer","destroy","_frequency","off","freqButton","_initView","container","editContainer","parent","insertAfter","append","buttonGroupElement","title","html","_initMonth","_period","_end","monthInputs","monthName","_month1","_month2","endRule","namespace","click","e","_toggleEnd","currentTarget","_buttonNever","_buttonCount","_buttonUntil","toggleRule","_toggleMonthDay","_toggleYear","selector","radioButtons","_buttonMonthDay","eq","_buttonWeekDay","enableCount","enableUntil","prop","enable","monthRule","enableMonthDay","enableWeekDay","yearRule","enableMonth1","enableMonth2","plugin","RECURRENCE_HEADER_TEMPLATE","RECURRENCE_REPEAT_PATTERN_TEMPLATE","RECURRENCE_END_PATTERN_TEMPLATE","RECURRENCE_GROUP_BUTTON_TEMPLATE","MobileRecurrenceEditor","_optionTemplate","_pane","pane","_initRepeatButton","_initParentRepeatEnd","_defaultValue","animations","left","right","cancel","update","endTitle","repeatTitle","headerTitle","patterns","repeatBy","dayOfMonth","dayOfWeek","every","_destroyView","_endFields","target","_chevronButton","_repeatValue","parents","preventDefault","_createView","navigate","_view","_endLiItem","endLabelField","endEditField","appendTo","_navigateToView","_endParentLabelField","toggle","_endParentEndButton","_endText","_initRepeatEnd","_endLabelField","toggleClass","_endButton","viewName","frequencyMessages","ns","_initRepeatView","_initEndNavigation","endMessages","_initEndView","viewType","returnViewId","view","id","stopPropagation","hasClass","one","remove","content","hide","show","ev","endPattern","weekDaySelect","_options","monthSelect","monthNames","_monthSelect","repeatRuleGroupButton","weekDayView","monthDayView","currentValue","weekDayName","support","optionLabel","jQuery"],"sources":["kendo.scheduler.recurrence.js"],"mappings":"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","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.dropdownlist', 'kendo.datepicker', 'kendo.numerictextbox', 'kendo.buttongroup'], factory) :\n factory();\n})((function () {\n var __meta__ = {\n id: \"scheduler.recurrence\",\n name: \"Recurrence\",\n category: \"web\",\n depends: [ \"dropdownlist\", \"datepicker\", \"numerictextbox\", \"buttongroup\" ],\n hidden: true\n };\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n timezone = kendo.timezone,\n Class = kendo.Class,\n ui = kendo.ui,\n Widget = ui.Widget,\n DropDownList = ui.DropDownList,\n ButtonGroup = ui.ButtonGroup,\n kendoDate = kendo.date,\n setTime = kendoDate.setTime,\n setDayOfWeek = kendoDate.setDayOfWeek,\n adjustDST = kendoDate.adjustDST,\n firstDayOfMonth = kendoDate.firstDayOfMonth,\n getMilliseconds = kendoDate.getMilliseconds,\n DAYS_IN_LEAPYEAR = [0,31,60,91,121,152,182,213,244,274,305,335,366],\n DAYS_IN_YEAR = [0,31,59,90,120,151,181,212,243,273,304,334,365],\n MONTHS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n WEEK_DAYS = {\n 0: \"SU\",\n 1: \"MO\",\n 2: \"TU\",\n 3: \"WE\",\n 4: \"TH\",\n 5: \"FR\",\n 6: \"SA\"\n },\n WEEK_DAYS_IDX = {\n \"SU\": 0,\n \"MO\": 1,\n \"TU\": 2,\n \"WE\": 3,\n \"TH\": 4,\n \"FR\": 5,\n \"SA\": 6\n },\n DATE_FORMATS = [\n \"yyyy-MM-ddTHH:mm:ss.fffzzz\",\n \"yyyy-MM-ddTHH:mm:sszzz\",\n \"yyyy-MM-ddTHH:mm:ss\",\n \"yyyy-MM-ddTHH:mm\",\n \"yyyy-MM-ddTHH\",\n \"yyyy-MM-dd\",\n \"yyyyMMddTHHmmssfffzzz\",\n \"yyyyMMddTHHmmsszzz\",\n \"yyyyMMddTHHmmss\",\n \"yyyyMMddTHHmm\",\n \"yyyyMMddTHH\",\n \"yyyyMMdd\"\n ],\n RULE_NAMES = [\"months\", \"weeks\", \"yearDays\", \"monthDays\", \"weekDays\", \"hours\", \"minutes\", \"seconds\"],\n RULE_NAMES_LENGTH = RULE_NAMES.length,\n RECURRENCE_DATE_FORMAT = \"yyyyMMddTHHmmssZ\",\n limitation = {\n months: function(date, end, rule) {\n var monthRules = rule.months,\n months = ruleValues(monthRules, date.getMonth() + 1),\n changed = false;\n\n if (months !== null) {\n if (months.length) {\n date.setMonth(months[0] - 1, 1);\n } else {\n date.setFullYear(date.getFullYear() + 1, monthRules[0] - 1, 1);\n }\n\n changed = true;\n }\n\n return changed;\n },\n\n monthDays: function(date, end, rule) {\n var monthLength, month, days,\n changed = false,\n hours = date.getHours(),\n normalize = function(monthDay) {\n if (monthDay < 0) {\n monthDay = monthLength + monthDay + 1;\n }\n return monthDay;\n };\n\n while (date <= end) {\n month = date.getMonth();\n monthLength = getMonthLength(date);\n days = ruleValues(rule.monthDays, date.getDate(), normalize);\n\n if (days === null) {\n return changed;\n }\n\n changed = true;\n\n if (days.length) {\n date.setMonth(month, days.sort(numberSortPredicate)[0]);\n adjustDST(date, hours);\n\n if (month === date.getMonth()) {\n break;\n }\n } else {\n date.setMonth(month + 1, 1);\n }\n }\n\n return changed;\n },\n\n yearDays: function(date, end, rule) {\n var year, yearDays,\n changed = false,\n hours = date.getHours(),\n normalize = function(yearDay) {\n if (yearDay < 0) {\n yearDay = year + yearDay;\n }\n return yearDay;\n };\n\n while (date < end) {\n year = leapYear(date) ? 366 : 365;\n yearDays = ruleValues(rule.yearDays, dayInYear(date), normalize);\n\n if (yearDays === null) {\n return changed;\n }\n\n changed = true;\n year = date.getFullYear();\n\n if (yearDays.length) {\n date.setFullYear(year, 0, yearDays.sort(numberSortPredicate)[0]);\n adjustDST(date, hours);\n break;\n } else {\n date.setFullYear(year + 1, 0, 1);\n }\n }\n\n return changed;\n },\n\n weeks: function(date, end, rule) {\n var weekStart = rule.weekStart,\n year, weeks, day,\n changed = false,\n hours = date.getHours(),\n normalize = function(week) {\n if (week < 0) {\n week = 53 + week;\n }\n return week;\n };\n\n while (date < end) {\n weeks = ruleValues(rule.weeks, weekInYear(date, weekStart), normalize);\n\n if (weeks === null) {\n return changed;\n }\n\n changed = true;\n year = date.getFullYear();\n\n if (weeks.length) {\n day = (weeks.sort(numberSortPredicate)[0] * 7) - 1;\n\n date.setFullYear(year, 0, day);\n setDayOfWeek(date, weekStart, -1);\n\n adjustDST(date, hours);\n break;\n } else {\n date.setFullYear(year + 1, 0, 1);\n }\n }\n\n return changed;\n },\n\n weekDays: function(date, end, rule) {\n var offsetDate = new Date(date.getTime() + rule.offsets.start);\n var normalizeDay = offsetDate.getDay() - date.getDay();\n var weekDays = rule.weekDays;\n var weekStart = rule.weekStart;\n var weekDayRules = ruleWeekValues(weekDays, offsetDate, weekStart);\n var hours = date.getHours();\n var traverseRuleForNextMont = function(rule) {\n var nextMonthFirstDay = new Date(date.getFullYear(), date.getMonth() + 1, 1);\n var ruleDay = normalizeDayIndex(rule.day, weekStart);\n\n if (nextMonthFirstDay.getDay() <= ruleDay) {\n if (!weekDayRule || normalizeDayIndex(weekDayRule.day, weekStart) > ruleDay) {\n weekDayRule = rule;\n }\n }\n };\n var weekDayRule, day;\n\n\n if (weekDayRules === null) {\n return false;\n }\n\n weekDayRule = weekDayRules[0];\n\n if (!weekDayRule) {\n if (rule.freq === \"monthly\" && !rule.positions || rule.position > 0) {\n weekDays.forEach(traverseRuleForNextMont);\n }\n if (!weekDayRule) {\n weekDayRule = weekDays[0];\n }\n setDayOfWeek(date, weekStart);\n }\n\n day = weekDayRule.day;\n day -= normalizeDay;\n\n if (weekDayRule.offset) {\n while (date <= end && !isInWeek(date, weekDayRule, weekStart)) {\n if (weekInMonth(date, weekStart) === numberOfWeeks(date, weekStart)) {\n date.setMonth(date.getMonth() + 1, 1);\n adjustDST(date, hours);\n } else {\n date.setDate(date.getDate() + 7);\n adjustDST(date, hours);\n\n setDayOfWeek(date, weekStart, -1);\n }\n }\n }\n\n if (date.getDay() !== day) {\n setDayOfWeek(date, day);\n }\n\n return true;\n },\n\n hours: function(date, end, rule) {\n var hourRules = rule.hours,\n startTime = rule._startTime,\n startHours = startTime.getHours(),\n hours = ruleValues(hourRules, startHours),\n changed = false;\n\n if (hours !== null) {\n changed = true;\n\n date.setHours(startHours);\n adjustDST(date, startHours);\n\n if (hours.length) {\n hours = hours[0];\n date.setHours(hours);\n } else {\n hours = date.getHours();\n date.setDate(date.getDate() + 1);\n adjustDST(date, hours);\n\n hours = hourRules[0];\n date.setHours(hours);\n adjustDST(date, hours);\n }\n\n if (rule.minutes) {\n date.setMinutes(0);\n }\n\n startTime.setHours(hours, date.getMinutes());\n }\n\n return changed;\n },\n\n minutes: function(date, end, rule) {\n var minuteRules = rule.minutes,\n currentMinutes = date.getMinutes(),\n minutes = ruleValues(minuteRules, currentMinutes),\n hours = rule._startTime.getHours(),\n changed = false;\n\n if (minutes !== null) {\n changed = true;\n\n if (minutes.length) {\n minutes = minutes[0];\n } else {\n hours += 1;\n minutes = minuteRules[0];\n }\n\n if (rule.seconds) {\n date.setSeconds(0);\n }\n\n date.setHours(hours, minutes);\n\n hours = hours % 24;\n adjustDST(date, hours);\n rule._startTime.setHours(hours, minutes, date.getSeconds());\n }\n\n return changed;\n },\n\n seconds: function(date, end, rule) {\n var secondRules = rule.seconds,\n hours = rule._startTime.getHours(),\n seconds = ruleValues(secondRules, date.getSeconds()),\n minutes = date.getMinutes(),\n changed = false;\n\n if (seconds !== null) {\n changed = true;\n\n if (seconds.length) {\n date.setSeconds(seconds[0]);\n } else {\n minutes += 1;\n date.setMinutes(minutes, secondRules[0]);\n\n if (minutes > 59) {\n minutes = minutes % 60;\n hours = (hours + 1) % 24;\n }\n }\n\n rule._startTime.setHours(hours, minutes, date.getSeconds());\n }\n\n return changed;\n }\n },\n BaseFrequency = Class.extend({\n next: function(date, rule) {\n var startTime = rule._startTime,\n day = startTime.getDate(),\n minutes, seconds;\n\n if (rule.seconds) {\n seconds = date.getSeconds() + 1;\n\n date.setSeconds(seconds);\n startTime.setSeconds(seconds);\n startTime.setDate(day);\n\n } else if (rule.minutes) {\n minutes = date.getMinutes() + 1;\n\n date.setMinutes(minutes);\n startTime.setMinutes(minutes);\n startTime.setDate(day);\n } else {\n return false;\n }\n\n return true;\n },\n\n normalize: function(options) {\n var rule = options.rule;\n\n if (options.idx === 4 && rule.hours) {\n rule._startTime.setHours(0);\n this._hour(options.date, rule);\n }\n },\n\n limit: function(date, end, rule) {\n var interval = rule.interval,\n ruleName, firstRule,\n modified,\n idx, day;\n\n while (date <= end) {\n modified = firstRule = undefined$1;\n day = date.getDate();\n\n for (idx = 0; idx < RULE_NAMES_LENGTH; idx++) {\n ruleName = RULE_NAMES[idx];\n\n if (rule[ruleName]) {\n modified = limitation[ruleName](date, end, rule);\n if (firstRule !== undefined$1 && modified) {\n break;\n } else {\n firstRule = modified;\n }\n }\n\n if (modified) {\n this.normalize({ date: date, rule: rule, day: day, idx: idx });\n }\n }\n\n if ((interval === 1 || !this.interval(rule, date)) && idx === RULE_NAMES_LENGTH) {\n break;\n }\n }\n },\n\n interval: function(rule, current) {\n var start = new Date(rule._startPeriod);\n var date = new Date(current);\n var hours = current.getHours();\n var weekStart = rule.weekStart;\n var interval = rule.interval;\n var frequency = rule.freq;\n var modified = false;\n var excess = 0;\n var month = 0;\n var day = 1;\n var diff;\n\n var startTimeHours;\n\n if (frequency === \"hourly\") {\n diff = date.getTimezoneOffset() - start.getTimezoneOffset();\n startTimeHours = rule._startTime.getHours();\n\n date = date.getTime();\n if (hours !== startTimeHours) {\n date += (startTimeHours - hours) * kendoDate.MS_PER_HOUR;\n }\n date -= start;\n\n if (diff) {\n date -= diff * kendoDate.MS_PER_MINUTE;\n }\n\n diff = Math.floor(date / kendoDate.MS_PER_HOUR);\n excess = intervalExcess(diff, interval);\n\n if (excess !== 0) {\n this._hour(current, rule, excess);\n modified = true;\n }\n } else if (frequency === \"daily\") {\n kendoDate.setTime(date, -start, true);\n\n diff = Math.round(date / kendoDate.MS_PER_DAY);\n excess = intervalExcess(diff, interval);\n\n if (excess !== 0) {\n this._date(current, rule, excess);\n modified = true;\n }\n\n } else if (frequency === \"weekly\") {\n excess = this._getNumberOfWeeksBetweenDates(start, current);\n\n var normalizedCurrentIndex = normalizeDayIndex(current.getDay(), weekStart);\n var normalizedStartIndex = normalizeDayIndex(start.getDay(), weekStart);\n\n if (normalizedCurrentIndex < normalizedStartIndex) {\n excess += 1;\n }\n\n excess = intervalExcess(excess, interval);\n if (excess !== 0) {\n kendoDate.setDayOfWeek(current, rule.weekStart, -1);\n\n current.setDate(current.getDate() + (excess * 7));\n adjustDST(current, hours);\n\n modified = true;\n }\n } else if (frequency === \"monthly\") {\n diff = current.getFullYear() - start.getFullYear();\n diff = current.getMonth() - start.getMonth() + (diff * 12);\n\n excess = intervalExcess(diff, interval);\n\n if (excess !== 0) {\n day = rule._hasRuleValue ? 1 : current.getDate();\n\n current.setFullYear(current.getFullYear(), current.getMonth() + excess, day);\n adjustDST(current, hours);\n\n modified = true;\n }\n } else if (frequency === \"yearly\") {\n diff = current.getFullYear() - start.getFullYear();\n excess = intervalExcess(diff, interval);\n\n if (!rule.months) {\n month = current.getMonth();\n }\n\n if (!rule.yearDays && !rule.monthDays && !rule.weekDays) {\n day = current.getDate();\n }\n\n if (excess !== 0) {\n current.setFullYear(current.getFullYear() + excess, month, day);\n adjustDST(current, hours);\n\n modified = true;\n }\n }\n\n return modified;\n },\n\n _getNumberOfWeeksBetweenDates: function(first, second) {\n var weeks = (second - first) / 604800000;\n var exactWeeks = Math.floor(weeks);\n\n //this is happening when weeks pass DST change\n if (weeks - exactWeeks > 0.99) {\n exactWeeks = Math.round(weeks);\n }\n return exactWeeks;\n },\n\n _hour: function(date, rule, interval) {\n var startTime = rule._startTime,\n hours = startTime.getHours();\n\n if (interval) {\n hours += interval;\n }\n\n date.setHours(hours);\n\n hours = hours % 24;\n startTime.setHours(hours);\n adjustDST(date, hours);\n },\n\n _date: function(date, rule, interval) {\n var hours = date.getHours();\n\n date.setDate(date.getDate() + interval);\n if (!adjustDST(date, hours)) {\n this._hour(date, rule);\n }\n }\n }),\n HourlyFrequency = BaseFrequency.extend({\n next: function(date, rule) {\n if (!BaseFrequency.fn.next(date, rule)) {\n this._hour(date, rule, 1);\n }\n },\n\n normalize: function(options) {\n var rule = options.rule;\n\n if (options.idx === 4) {\n rule._startTime.setHours(0);\n this._hour(options.date, rule);\n }\n }\n }),\n DailyFrequency = BaseFrequency.extend({\n next: function(date, rule) {\n if (!BaseFrequency.fn.next(date, rule)) {\n this[rule.hours ? \"_hour\" : \"_date\"](date, rule, 1);\n }\n }\n }),\n WeeklyFrequency = DailyFrequency.extend({\n setup: function(rule, eventStartDate) {\n if (!rule.weekDays) {\n rule.weekDays = [{\n day: eventStartDate.getDay(),\n offset: 0\n }];\n }\n }\n }),\n MonthlyFrequency = BaseFrequency.extend({\n next: function(date, rule) {\n var day, hours;\n if (!BaseFrequency.fn.next(date, rule)) {\n if (rule.hours) {\n this._hour(date, rule, 1);\n } else if (rule.monthDays || rule.weekDays || rule.yearDays || rule.weeks) {\n this._date(date, rule, 1);\n } else {\n day = date.getDate();\n hours = date.getHours();\n\n date.setMonth(date.getMonth() + 1);\n adjustDST(date, hours);\n\n while (date.getDate() !== day) {\n date.setDate(day);\n adjustDST(date, hours);\n }\n\n this._hour(date, rule);\n }\n }\n },\n normalize: function(options) {\n var rule = options.rule,\n date = options.date,\n hours = date.getHours();\n\n if (options.idx === 0 && !rule.monthDays && !rule.weekDays) {\n date.setDate(options.day);\n adjustDST(date, hours);\n } else {\n BaseFrequency.fn.normalize(options);\n }\n },\n setup: function(rule, eventStartDate, date) {\n if (!rule.monthDays && !rule.weekDays) {\n date.setDate(eventStartDate.getDate());\n }\n }\n }),\n YearlyFrequency = MonthlyFrequency.extend({\n next: function(date, rule) {\n var day,\n hours = date.getHours();\n\n if (!BaseFrequency.fn.next(date, rule)) {\n if (rule.hours) {\n this._hour(date, rule, 1);\n } else if (rule.monthDays || rule.weekDays || rule.yearDays || rule.weeks) {\n this._date(date, rule, 1);\n } else if (rule.months) {\n day = date.getDate();\n\n date.setMonth(date.getMonth() + 1);\n adjustDST(date, hours);\n\n while (date.getDate() !== day) {\n date.setDate(day);\n adjustDST(date, hours);\n }\n\n this._hour(date, rule);\n } else {\n date.setFullYear(date.getFullYear() + 1);\n adjustDST(date, hours);\n\n this._hour(date, rule);\n }\n }\n },\n setup: function() {}\n }),\n frequencies = {\n \"hourly\": new HourlyFrequency(),\n \"daily\": new DailyFrequency(),\n \"weekly\": new WeeklyFrequency(),\n \"monthly\": new MonthlyFrequency(),\n \"yearly\": new YearlyFrequency()\n },\n CLICK = \"click\",\n CHANGE = \"change\";\n\n function intervalExcess(diff, interval) {\n var excess;\n if (diff !== 0 && diff < interval) {\n excess = interval - diff;\n } else {\n excess = diff % interval;\n if (excess) {\n excess = interval - excess;\n }\n }\n\n return excess;\n }\n\n function dayInYear(date) {\n var month = date.getMonth();\n var days = leapYear(date) ? DAYS_IN_LEAPYEAR[month] : DAYS_IN_YEAR[month];\n\n return days + date.getDate();\n }\n\n function weekInYear(date, weekStart) {\n var year, days;\n\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n adjustDST(date, 0);\n\n year = date.getFullYear();\n\n if (weekStart !== undefined$1) {\n setDayOfWeek(date, weekStart, -1);\n date.setDate(date.getDate() + 4);\n } else {\n date.setDate(date.getDate() + (4 - (date.getDay() || 7)));\n }\n\n adjustDST(date, 0);\n days = Math.floor((date.getTime() - new Date(year, 0, 1, -6)) / 86400000);\n\n return 1 + Math.floor(days / 7);\n }\n\n function weekInMonth(date, weekStart) {\n var firstWeekDay = firstDayOfMonth(date).getDay();\n var firstWeekLength = 7 - (firstWeekDay + 7 - (weekStart || 7)) || 7;\n\n if (firstWeekLength < 0) {\n firstWeekLength += 7;\n }\n\n return Math.ceil((date.getDate() - firstWeekLength) / 7) + 1;\n }\n\n function normalizeDayIndex(weekDay, weekStart) {\n return weekDay + (weekDay < weekStart ? 7 : 0);\n }\n\n function normalizeOffset(date, rule, weekStart) {\n var offset = rule.offset;\n\n if (!offset) {\n return weekInMonth(date, weekStart);\n }\n\n var lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n var weeksInMonth = weekInMonth(lastDate, weekStart);\n\n var day = normalizeDayIndex(rule.day, weekStart);\n\n var skipFirst = day < normalizeDayIndex(new Date(date.getFullYear(), date.getMonth(), 1).getDay(), weekStart);\n var skipLast = day > normalizeDayIndex(lastDate.getDay(), weekStart);\n\n if (offset < 0) {\n offset = weeksInMonth + (offset + 1 - (skipLast ? 1 : 0));\n } else if (skipFirst) {\n offset += 1;\n }\n\n weeksInMonth -= (skipLast ? 1 : 0);\n\n if (offset < (skipFirst ? 1 : 0) || offset > weeksInMonth) {\n return null;\n }\n\n return offset;\n }\n\n function numberOfWeeks(date, weekStart) {\n return weekInMonth(new Date(date.getFullYear(), date.getMonth() + 1, 0), weekStart);\n }\n\n function isInWeek(date, rule, weekStart) {\n return weekInMonth(date, weekStart) === normalizeOffset(date, rule, weekStart);\n }\n\n function ruleWeekValues(weekDays, date, weekStart) {\n var currentDay = normalizeDayIndex(date.getDay(), weekStart);\n var length = weekDays.length;\n var ruleWeekOffset;\n var weekDay, day;\n var weekNumber;\n var result = [];\n var idx = 0;\n\n for (;idx < length; idx++) {\n weekDay = weekDays[idx];\n\n weekNumber = weekInMonth(date, weekStart);\n ruleWeekOffset = normalizeOffset(date, weekDay, weekStart);\n\n if (ruleWeekOffset === null) {\n continue;\n }\n\n if (weekNumber < ruleWeekOffset) {\n result.push(weekDay);\n } else if (weekNumber === ruleWeekOffset) {\n day = normalizeDayIndex(weekDay.day, weekStart);\n\n if (currentDay < day) {\n result.push(weekDay);\n } else if (currentDay === day) {\n return null;\n }\n }\n }\n\n return result;\n }\n\n function ruleValues(rules, value, normalize) {\n var idx = 0,\n length = rules.length,\n availableRules = [],\n ruleValue;\n\n for (; idx < length; idx++) {\n ruleValue = rules[idx];\n\n if (normalize) {\n ruleValue = normalize(ruleValue);\n }\n\n if (value === ruleValue) {\n return null;\n } else if (value < ruleValue) {\n availableRules.push(ruleValue);\n }\n }\n\n return availableRules;\n }\n\n function parseArray(list, range) {\n var idx = 0,\n length = list.length,\n value;\n\n for (; idx < length; idx++) {\n value = parseInt(list[idx], 10);\n if (isNaN(value) || value < range.start || value > range.end || (value === 0 && range.start < 0)) {\n return null;\n }\n\n list[idx] = value;\n }\n\n return list.sort(numberSortPredicate);\n }\n\n function parseWeekDayList(list) {\n var idx = 0, length = list.length,\n value, valueLength, day;\n\n for (; idx < length; idx++) {\n value = list[idx];\n valueLength = value.length;\n day = value.substring(valueLength - 2).toUpperCase();\n\n day = WEEK_DAYS_IDX[day];\n if (day === undefined$1) {\n return null;\n }\n\n list[idx] = {\n offset: parseInt(value.substring(0, valueLength - 2), 10) || 0,\n day: day\n };\n }\n return list;\n }\n\n function serializeWeekDayList(list) {\n var idx = 0, length = list.length,\n value, valueString, result = [];\n\n for (; idx < length; idx++) {\n value = list[idx];\n if (typeof value === \"string\") {\n valueString = value;\n } else {\n valueString = \"\" + WEEK_DAYS[value.day];\n\n if (value.offset) {\n valueString = value.offset + valueString;\n }\n }\n\n result.push(valueString);\n }\n return result.toString();\n }\n\n function getMonthLength(date) {\n var month = date.getMonth();\n\n if (month === 1) {\n if (new Date(date.getFullYear(), 1, 29).getMonth() === 1) {\n return 29;\n }\n return 28;\n }\n return MONTHS[month];\n }\n\n function leapYear(year) {\n year = year.getFullYear();\n return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n }\n\n function numberSortPredicate(a, b) {\n return a - b;\n }\n\n function parseExceptions(exceptions, zone) {\n var idx = 0, length, date,\n dates = [];\n\n if (exceptions) {\n exceptions = exceptions.split(exceptions.indexOf(\";\") !== -1 ? \";\" : \",\");\n length = exceptions.length;\n\n for (; idx < length; idx++) {\n date = parseUTCDate(exceptions[idx], zone);\n\n if (date) {\n dates.push(date);\n }\n }\n }\n\n return dates;\n }\n\n function isException(exceptions, date, zone) {\n var dates = Array.isArray(exceptions) ? exceptions : parseExceptions(exceptions, zone),\n dateTime = date.getTime() - date.getMilliseconds(),\n idx = 0, length = dates.length;\n\n for (; idx < length; idx++) {\n if (dates[idx].getTime() === dateTime) {\n return true;\n }\n }\n\n return false;\n }\n\n function toExceptionString(dates, zone) {\n var idx = 0;\n var length;\n var date;\n var result = [].concat(dates);\n\n for (length = result.length; idx < length; idx++) {\n date = result[idx];\n date = kendo.timezone.convert(date, zone || date.getTimezoneOffset(), \"Etc/UTC\");\n result[idx] = kendo.toString(date, RECURRENCE_DATE_FORMAT);\n }\n\n return result.join(\",\");\n }\n\n function startPeriodByFreq(start, rule) {\n var date = new Date(start);\n\n switch (rule.freq) {\n case \"yearly\":\n date.setFullYear(date.getFullYear(), 0, 1);\n break;\n\n case \"monthly\":\n date.setFullYear(date.getFullYear(), date.getMonth(), 1);\n break;\n\n case \"weekly\":\n setDayOfWeek(date, rule.weekStart, -1);\n break;\n\n default:\n break;\n }\n\n if (rule.hours) {\n date.setHours(0);\n }\n\n if (rule.minutes) {\n date.setMinutes(0);\n }\n\n if (rule.seconds) {\n date.setSeconds(0);\n }\n\n return date;\n }\n\n function endPeriodByFreq(start, rule) {\n var date = new Date(start);\n\n switch (rule.freq) {\n case \"yearly\":\n date.setFullYear(date.getFullYear(), 11, 31);\n break;\n\n case \"monthly\":\n date.setFullYear(date.getFullYear(), date.getMonth() + 1, 0);\n break;\n\n case \"weekly\":\n setDayOfWeek(date, rule.weekStart, -1);\n date.setDate(date.getDate() + 6);\n break;\n\n default:\n break;\n }\n\n if (rule.hours) {\n date.setHours(23);\n }\n\n if (rule.minutes) {\n date.setMinutes(59);\n }\n\n if (rule.seconds) {\n date.setSeconds(59);\n }\n\n return date;\n }\n\n function eventsByPosition(periodEvents, start, positions, until) {\n var periodEventsLength = periodEvents.length;\n var events = [];\n var position;\n var event;\n var inPeriod;\n\n for (var idx = 0, length = positions.length; idx < length; idx++) {\n position = positions[idx];\n\n if (position < 0) {\n position = periodEventsLength + position;\n } else {\n position -= 1; //convert to zero based index\n }\n\n event = periodEvents[position];\n inPeriod = until ? event.start < until : true;\n\n if (event && event.start >= start && inPeriod) {\n events.push(event);\n }\n }\n\n return events;\n }\n\n function removeExceptionDates(periodEvents, exceptionDates, zone) {\n var events = [];\n var event;\n\n for (var idx = 0; idx < periodEvents.length; idx++) {\n event = periodEvents[idx];\n if (!isException(exceptionDates, event.start, zone)) {\n events.push(event);\n }\n }\n\n return events;\n }\n\n function expand(event, start, end, zone) {\n var rule,\n startTime, endTime, endDate,\n hours, minutes, seconds,\n durationMS, startPeriod, inPeriod,\n ruleStart, ruleEnd,\n useEventStart, freqName,\n exceptionDates,\n eventStartTime,\n eventStartMS,\n eventStart,\n count, freq,\n positions,\n currentIdx,\n periodEvents,\n events = [],\n shiftedStart,\n shiftedEnd,\n shiftedStartTime,\n shifterEndTime;\n\n rule = parseRule(event.recurrenceRule, zone, { // offsets argument\n start: (getZoneOffset(event.start, zone) - getZoneOffset(event.start, event.startTimezone || zone)) * kendo.date.MS_PER_MINUTE,\n end: (getZoneOffset(event.end, zone) - getZoneOffset(event.end, event.endTimezone || zone)) * kendo.date.MS_PER_MINUTE\n });\n\n if (!rule) {\n return [event];\n }\n\n positions = rule.positions;\n currentIdx = positions ? 0 : 1;\n\n ruleStart = rule.start;\n ruleEnd = rule.end;\n\n if (ruleStart || ruleEnd) {\n event = event.clone({\n start: ruleStart ? new Date(ruleStart.value[0]) : undefined$1,\n end: ruleEnd ? new Date(ruleEnd.value[0]) : undefined$1\n });\n }\n\n eventStart = event.start;\n eventStartMS = eventStart.getTime();\n eventStartTime = getMilliseconds(eventStart);\n\n exceptionDates = parseExceptions(event.recurrenceException, zone);\n\n if (!exceptionDates[0] && rule.exdates) {\n exceptionDates = rule.exdates.value;\n event.set(\"recurrenceException\", toExceptionString(exceptionDates, zone));\n }\n\n startPeriod = start = new Date(start);\n end = new Date(end);\n\n freqName = rule.freq;\n freq = frequencies[freqName];\n count = rule.count;\n\n if (rule.until && rule.until < end) {\n end = new Date(rule.until);\n }\n\n useEventStart = freqName === \"yearly\" || freqName === \"monthly\" || freqName === \"weekly\";\n\n if (start < eventStartMS || count || rule.interval > 1 || useEventStart ||\n ((freqName === \"daily\" || freqName === \"hourly\") && !rule.seconds)) {\n start = new Date(eventStartMS);\n } else {\n hours = start.getHours();\n minutes = start.getMinutes();\n seconds = start.getSeconds();\n\n if (!rule.hours) {\n hours = eventStart.getHours();\n }\n\n if (!rule.minutes) {\n minutes = eventStart.getMinutes();\n }\n\n if (!rule.seconds) {\n seconds = eventStart.getSeconds();\n }\n\n start.setHours(hours, minutes, seconds, eventStart.getMilliseconds());\n }\n\n rule._startPeriod = new Date(start);\n\n if (positions) {\n start = startPeriodByFreq(start, rule);\n end = endPeriodByFreq(end, rule);\n\n var diff = getMilliseconds(end) - getMilliseconds(start);\n if (diff < 0) {\n hours = start.getHours();\n end.setHours(hours, start.getMinutes(), start.getSeconds(), start.getMilliseconds());\n kendoDate.adjustDST(end, hours);\n }\n\n rule._startPeriod = new Date(start);\n rule._endPeriod = endPeriodByFreq(start, rule);\n }\n\n durationMS = event.duration();\n var allDayCompensation = event.isAllDay ? 86400000 : 0;\n rule._startTime = startTime = kendoDate.toInvariantTime(start);\n\n if (freq.setup) {\n freq.setup(rule, eventStart, start);\n }\n\n freq.limit(start, end, rule);\n\n while (start <= end) {\n endDate = new Date(start);\n setTime(endDate, durationMS);\n var inPeriodCheckEndDate = new Date(start);\n setTime(inPeriodCheckEndDate, durationMS + allDayCompensation);\n\n inPeriod = start >= startPeriod || inPeriodCheckEndDate > startPeriod;\n\n if (inPeriod && !isException(exceptionDates, start, zone) || positions) {\n startTime = kendoDate.toUtcTime(kendoDate.getDate(start)) + getMilliseconds(rule._startTime);\n endTime = startTime + durationMS;\n\n if (eventStartMS !== start.getTime() || eventStartTime !== getMilliseconds(rule._startTime)) {\n var startZone = event.startTimezone || event.endTimezone;\n var endZone = event.endTimezone || event.startTimezone;\n\n if (!event.isAllDay) {\n if ((zone && startZone) || (!zone && !startZone)) {\n var startOffsetDiff = getZoneOffset(start, zone) - getZoneOffset(event.start, zone);\n var endOffsetDiff = getZoneOffset(endDate, zone) - getZoneOffset(event.end, zone);\n var startTZOffsetDiff = getZoneOffset(start, startZone) - getZoneOffset(event.start, startZone);\n var endTZOffsetDiff = getZoneOffset(endDate, endZone) - getZoneOffset(event.end, endZone);\n\n if (startOffsetDiff !== startTZOffsetDiff) {\n var offsetTicksStart = (startOffsetDiff - startTZOffsetDiff) * 60000;\n shiftedStart = new Date(start.getTime() - offsetTicksStart);\n shiftedStartTime = startTime - offsetTicksStart;\n }\n\n if (endOffsetDiff !== endTZOffsetDiff) {\n var offsetTicksEnd = (endOffsetDiff - endTZOffsetDiff) * 60000;\n shiftedEnd = new Date(endDate.getTime() - offsetTicksEnd);\n shifterEndTime = endTime - offsetTicksEnd;\n }\n }\n }\n\n\n events.push(event.toOccurrence({\n start: shiftedStart || new Date(start),\n end: shiftedEnd || endDate,\n _startTime: shiftedStartTime || startTime,\n _endTime: shifterEndTime || endTime\n }));\n\n shiftedStart = shiftedEnd = shiftedStartTime = shifterEndTime = null;\n } else {\n event._startTime = startTime;\n event._endTime = endTime;\n events.push(event);\n }\n }\n\n if (positions) {\n freq.next(start, rule);\n freq.limit(start, end, rule);\n\n if (start > rule._endPeriod) {\n periodEvents = eventsByPosition(events.slice(currentIdx), eventStart, positions, rule.until);\n periodEvents = removeExceptionDates(periodEvents, exceptionDates, zone);\n events = events.slice(0, currentIdx).concat(periodEvents);\n\n rule._endPeriod = endPeriodByFreq(start, rule);\n\n currentIdx = events.length;\n }\n\n if (count && count === currentIdx) {\n break;\n }\n\n } else {\n if (count && count === currentIdx) {\n break;\n }\n\n currentIdx += 1;\n\n var isMissingDSTHour = isDSTMissingHour(start);\n freq.next(start, rule);\n\n if (isMissingDSTHour && rule.freq !== \"hourly\" && kendoDate.toInvariantTime(event.start).getTime() !== kendoDate.toInvariantTime(start).getTime()) {\n rule._startTime = startTime = new Date(start.getTime() - 3600000);\n }\n\n freq.limit(start, end, rule);\n }\n }\n\n return events;\n }\n\n function isDSTMissingHour(date) {\n var dateOffset = date.getTimezoneOffset();\n var dateMinusHour = new Date(date.getTime() - 3600000);\n var dateMinusHourOffset = dateMinusHour.getTimezoneOffset();\n\n return dateOffset < dateMinusHourOffset;\n }\n\n function getZoneOffset(date, zone) {\n return zone ? kendo.timezone.offset(date, zone) : date.getTimezoneOffset();\n }\n\n function parseUTCDate(value, zone) {\n value = kendo.parseDate(value, DATE_FORMATS); //Parse UTC to local time\n\n if (value && zone) {\n value = timezone.apply(value, zone);\n }\n\n return value;\n }\n\n function parseDateRule(dateRule, zone) {\n var pairs = dateRule.split(\";\");\n var pair;\n var property;\n var value;\n var tzid;\n var valueIdx, valueLength;\n\n for (var idx = 0, length = pairs.length; idx < length; idx++) {\n pair = pairs[idx].split(\":\");\n property = pair[0];\n value = pair[1];\n\n if (property.indexOf(\"TZID\") !== -1) {\n tzid = property.substring(property.indexOf(\"TZID\")).split(\"=\")[1];\n }\n\n if (value) {\n value = value.split(\",\");\n\n for (valueIdx = 0, valueLength = value.length; valueIdx < valueLength; valueIdx++) {\n value[valueIdx] = parseUTCDate(value[valueIdx], tzid || zone);\n }\n }\n }\n\n if (value) {\n return {\n value: value,\n tzid: tzid\n };\n }\n }\n\n function parseRule(recur, zone, offsets) {\n var instance = {};\n var splits, value;\n var idx = 0, length;\n var ruleValue = false;\n var rule, part, parts;\n var property, weekStart, weekDays;\n var predicate = function(a, b) {\n var day1 = a.day,\n day2 = b.day;\n\n if (day1 < weekStart) {\n day1 += 7;\n }\n\n if (day2 < weekStart) {\n day2 += 7;\n }\n\n return day1 - day2;\n };\n\n if (!recur) {\n return null;\n }\n\n parts = recur.split(\"\\n\");\n\n if (!parts[1] && (recur.indexOf(\"DTSTART\") !== -1 || recur.indexOf(\"DTEND\") !== -1 || recur.indexOf(\"EXDATE\") !== -1)) {\n parts = recur.split(\" \");\n }\n\n for (idx = 0, length = parts.length; idx < length; idx++) {\n part = kendo.trim(parts[idx]);\n\n if (part.indexOf(\"DTSTART\") !== -1) {\n instance.start = parseDateRule(part, zone);\n } else if (part.indexOf(\"DTEND\") !== -1) {\n instance.end = parseDateRule(part, zone);\n } else if (part.indexOf(\"EXDATE\") !== -1) {\n instance.exdates = parseDateRule(part, zone);\n } else if (part.indexOf(\"RRULE\") !== -1) {\n rule = part.substring(6);\n } else if (kendo.trim(part)) {\n rule = part;\n }\n }\n\n rule = rule.split(\";\");\n\n for (idx = 0, length = rule.length; idx < length; idx++) {\n property = rule[idx];\n splits = property.split(\"=\");\n value = kendo.trim(splits[1]).split(\",\");\n\n switch (kendo.trim(splits[0]).toUpperCase()) {\n case \"FREQ\":\n instance.freq = value[0].toLowerCase();\n break;\n case \"UNTIL\":\n instance.until = parseUTCDate(value[0], zone);\n break;\n case \"COUNT\":\n instance.count = parseInt(value[0], 10);\n break;\n case \"INTERVAL\":\n instance.interval = parseInt(value[0], 10);\n break;\n case \"BYSECOND\":\n instance.seconds = parseArray(value, { start: 0, end: 60 });\n ruleValue = true;\n break;\n case \"BYMINUTE\":\n instance.minutes = parseArray(value, { start: 0, end: 59 });\n ruleValue = true;\n break;\n case \"BYHOUR\":\n instance.hours = parseArray(value, { start: 0, end: 23 });\n ruleValue = true;\n break;\n case \"BYMONTHDAY\":\n instance.monthDays = parseArray(value, { start: -31, end: 31 });\n ruleValue = true;\n break;\n case \"BYYEARDAY\":\n instance.yearDays = parseArray(value, { start: -366, end: 366 });\n ruleValue = true;\n break;\n case \"BYMONTH\":\n instance.months = parseArray(value, { start: 1, end: 12 });\n ruleValue = true;\n break;\n case \"BYDAY\":\n instance.weekDays = weekDays = parseWeekDayList(value);\n ruleValue = true;\n break;\n case \"BYWEEKNO\":\n instance.weeks = parseArray(value, { start: -53, end: 53 });\n ruleValue = true;\n break;\n case \"BYSETPOS\":\n instance.positions = parseArray(value, { start: -366, end: 366 });\n break;\n case \"WKST\":\n instance.weekStart = weekStart = WEEK_DAYS_IDX[value[0]];\n break;\n }\n }\n\n if (instance.freq === undefined$1 || (instance.count !== undefined$1 && instance.until)) {\n return null;\n }\n\n if (!instance.interval) {\n instance.interval = 1;\n }\n\n if (weekStart === undefined$1) {\n instance.weekStart = weekStart = kendo.culture().calendar.firstDay;\n }\n\n if (weekDays) {\n instance.weekDays = weekDays.sort(predicate);\n }\n\n if (instance.positions && !ruleValue) {\n instance.positions = null;\n }\n\n instance._hasRuleValue = ruleValue;\n instance.offsets = offsets;\n\n return instance;\n }\n\n function serializeDateRule(dateRule, zone) {\n var value = dateRule.value;\n var tzid = dateRule.tzid || \"\";\n var length = value.length;\n var idx = 0;\n var val;\n\n for (; idx < length; idx++) {\n val = value[idx];\n val = timezone.convert(val, tzid || zone || val.getTimezoneOffset(), \"Etc/UTC\");\n value[idx] = kendo.toString(val, \"yyyyMMddTHHmmssZ\");\n }\n\n if (tzid) {\n tzid = \";TZID=\" + tzid;\n }\n\n return tzid + \":\" + value.join(\",\") + \" \";\n }\n\n function serialize(rule, zone) {\n var weekStart = rule.weekStart;\n var ruleString = \"FREQ=\" + rule.freq.toUpperCase();\n var exdates = rule.exdates || \"\";\n var start = rule.start || \"\";\n var end = rule.end || \"\";\n var until = rule.until;\n\n if (weekStart === undefined$1) {\n weekStart = kendo.culture().calendar.firstDay;\n }\n\n if (rule.interval > 1) {\n ruleString += \";INTERVAL=\" + rule.interval;\n }\n\n if (rule.count) {\n ruleString += \";COUNT=\" + rule.count;\n }\n\n if (until) {\n until = timezone.convert(until, zone || until.getTimezoneOffset(), \"Etc/UTC\");\n\n ruleString += \";UNTIL=\" + kendo.toString(until, \"yyyyMMddTHHmmssZ\");\n }\n\n if (rule.months) {\n ruleString += \";BYMONTH=\" + rule.months;\n }\n\n if (rule.weeks) {\n ruleString += \";BYWEEKNO=\" + rule.weeks;\n }\n\n if (rule.yearDays) {\n ruleString += \";BYYEARDAY=\" + rule.yearDays;\n }\n\n if (rule.monthDays) {\n ruleString += \";BYMONTHDAY=\" + rule.monthDays;\n }\n\n if (rule.weekDays) {\n ruleString += \";BYDAY=\" + serializeWeekDayList(rule.weekDays);\n }\n\n if (rule.hours) {\n ruleString += \";BYHOUR=\" + rule.hours;\n }\n\n if (rule.minutes) {\n ruleString += \";BYMINUTE=\" + rule.minutes;\n }\n\n if (rule.seconds) {\n ruleString += \";BYSECOND=\" + rule.seconds;\n }\n\n if (rule.positions) {\n ruleString += \";BYSETPOS=\" + rule.positions;\n }\n\n if (weekStart !== undefined$1) {\n ruleString += \";WKST=\" + WEEK_DAYS[weekStart];\n }\n\n if (start) {\n start = \"DTSTART\" + serializeDateRule(start, zone);\n }\n\n if (end) {\n end = \"DTEND\" + serializeDateRule(end, zone);\n }\n\n if (exdates) {\n exdates = \"EXDATE\" + serializeDateRule(exdates, zone);\n }\n\n if (start || end || exdates) {\n ruleString = start + end + exdates + \"RRULE:\" + ruleString;\n }\n\n return ruleString;\n }\n\n kendo.recurrence = {\n rule: {\n parse: parseRule,\n serialize: serialize\n },\n expand: expand,\n dayInYear: dayInYear,\n weekInYear: weekInYear,\n weekInMonth: weekInMonth,\n numberOfWeeks: numberOfWeeks,\n isException: isException,\n toExceptionString: toExceptionString\n };\n\n var RECURRENCE_VIEW_TEMPLATE = kendo.template(\n '# if (frequency !== \"never\") { #' +\n '
' +\n '' +\n '
' +\n '#:messages.interval#' +\n '
' +\n '
' +\n '# } #' +\n '# if (frequency === \"weekly\") { #' +\n '
' +\n '' +\n '
' +\n '
' +\n '
' +\n '' +\n '# } else if (frequency === \"monthly\") { #' +\n '
' +\n '
' +\n '' +\n '
' +\n '' +\n '# } else if (frequency === \"yearly\") { #' +\n '
' +\n '
' +\n '' +\n '
' +\n '
' +\n '# } #' +\n '# if (frequency !== \"never\") { #' +\n '
' +\n '
' +\n '' +\n '
' +\n '
' +\n '# } #'\n );\n\n var DAY_RULE = [\n { day: 0, offset: 0 },\n { day: 1, offset: 0 },\n { day: 2, offset: 0 },\n { day: 3, offset: 0 },\n { day: 4, offset: 0 },\n { day: 5, offset: 0 },\n { day: 6, offset: 0 }\n ];\n\n var WEEKDAY_RULE = [\n { day: 1, offset: 0 },\n { day: 2, offset: 0 },\n { day: 3, offset: 0 },\n { day: 4, offset: 0 },\n { day: 5, offset: 0 }\n ];\n\n var WEEKEND_RULE = [\n { day: 0, offset: 0 },\n { day: 6, offset: 0 }\n ];\n\n var BaseRecurrenceEditor = Widget.extend({\n init: function(element, options) {\n var start;\n var that = this;\n var frequencies = options && options.frequencies;\n\n Widget.fn.init.call(that, element, options);\n\n that.wrapper = that.element;\n\n options = that.options;\n options.start = start = options.start || kendoDate.today();\n\n if (frequencies) {\n options.frequencies = frequencies;\n }\n\n if (typeof start === \"string\") {\n options.start = kendo.parseDate(start, \"yyyyMMddTHHmmss\");\n }\n\n if (options.firstWeekDay === null) {\n options.firstWeekDay = kendo.culture().calendar.firstDay;\n }\n\n that._namespace = \".\" + options.name;\n },\n\n options: {\n value: \"\",\n start: \"\",\n timezone: \"\",\n spinners: true,\n firstWeekDay: null,\n frequencies: [\n \"never\",\n \"daily\",\n \"weekly\",\n \"monthly\",\n \"yearly\"\n ],\n mobile: false,\n messages: {\n repeat: \"Repeat\",\n recurrenceEditorTitle: \"Recurrence editor\",\n frequencies: {\n never: \"Never\",\n hourly: \"Hourly\",\n daily: \"Daily\",\n weekly: \"Weekly\",\n monthly: \"Monthly\",\n yearly: \"Yearly\"\n },\n hourly: {\n repeatEvery: \"Repeat every: \",\n interval: \" hour(s)\"\n },\n daily: {\n repeatEvery: \"Repeat every: \",\n interval: \" day(s)\"\n },\n weekly: {\n interval: \" week(s)\",\n repeatEvery: \"Repeat every: \",\n repeatOn: \"Repeat on: \"\n },\n monthly: {\n repeatEvery: \"Repeat every: \",\n repeatOn: \"Repeat on: \",\n interval: \" month(s)\",\n day: \"Day \",\n date: \"Date\"\n },\n yearly: {\n repeatEvery: \"Repeat every: \",\n repeatOn: \"Repeat on: \",\n interval: \" year(s)\",\n of: \" of \",\n month: \"month\",\n day: \"day\",\n date: \"Date\"\n },\n end: {\n label: \"End:\",\n mobileLabel: \"Ends\",\n never: \"Never\",\n after: \"After \",\n occurrence: \" occurrence(s)\",\n on: \"On \"\n },\n offsetPositions: {\n first: \"first\",\n second: \"second\",\n third: \"third\",\n fourth: \"fourth\",\n last: \"last\"\n },\n weekdays: {\n day: \"day\",\n weekday: \"weekday\",\n weekend: \"weekend day\"\n }\n }\n },\n\n events: [\"change\"],\n\n _initInterval: function() {\n var that = this;\n var rule = that._value;\n\n that._container\n .find(\".k-recur-interval\")\n .kendoNumericTextBox({\n spinners: that.options.spinners,\n value: rule.interval || 1,\n decimals: 0,\n format: \"#\",\n min: 1,\n change: function() {\n rule.interval = this.value();\n that._trigger();\n }\n });\n },\n\n _weekDayButtons: function(firstDay) {\n var that = this,\n names = kendo.culture().calendar.days.names,\n abbreviated = kendo.culture().calendar.days.namesAbbr,\n repeatOn = that.options.messages.weekly.repeatOn,\n length = names.length,\n idx = 0,\n values = [],\n items = [];\n\n for (; idx < length; idx++) {\n values.push(idx);\n }\n\n names = names.slice(firstDay).concat(names.slice(0, firstDay));\n abbreviated = abbreviated.slice(firstDay).concat(abbreviated.slice(0, firstDay));\n values = values.slice(firstDay).concat(values.slice(0, firstDay));\n\n for (idx = 0; idx < length; idx++) {\n items.push({\n text: abbreviated[idx],\n attributes: {\n \"data-value\": values[idx],\n \"aria-label\": repeatOn + \" \" + names[idx]\n }\n });\n }\n\n that._weekDayButtonGroup = new ButtonGroup(that._container.find(\".k-recur-weekday-buttons\"), {\n items: items,\n selection: \"multiple\",\n select: function() {\n var rule = that._value,\n selectedDays = that._weekDayButtonGroup.current();\n\n rule.weekDays = selectedDays.map(function(i, day) {\n return {\n day: Number(day.getAttribute(\"data-value\")),\n offset: 0\n };\n });\n\n if (!that.options.mobile) {\n that._trigger();\n }\n }\n });\n },\n\n _weekDayRule: function(clear) {\n var that = this;\n var weekday = (that._weekDay.element || that._weekDay).val();\n var offset = Number((that._weekDayOffset.element || that._weekDayOffset).val());\n var weekDays = null;\n var positions = null;\n\n if (!clear) {\n if (weekday === \"day\") {\n weekDays = DAY_RULE;\n positions = offset;\n } else if (weekday === \"weekday\") {\n weekDays = WEEKDAY_RULE;\n positions = offset;\n } else if (weekday === \"weekend\") {\n weekDays = WEEKEND_RULE;\n positions = offset;\n } else {\n weekDays = [{\n offset: offset,\n day: Number(weekday)\n }];\n }\n }\n\n that._value.weekDays = weekDays;\n that._value.positions = positions;\n },\n\n _weekDayView: function() {\n var that = this;\n var weekDays = that._value.weekDays;\n var positions = that._value.positions;\n var weekDayOffsetWidget = that._weekDayOffset;\n var weekDayOffset;\n var weekDayValue;\n var length;\n var method;\n\n if (weekDays) {\n length = weekDays.length;\n\n if (positions) {\n if (length === 7) {\n weekDayValue = \"day\";\n weekDayOffset = positions;\n } else if (length === 5) {\n weekDayValue = \"weekday\";\n weekDayOffset = positions;\n } else if (length === 2) {\n weekDayValue = \"weekend\";\n weekDayOffset = positions;\n }\n }\n\n if (!weekDayValue) {\n weekDays = weekDays[0];\n weekDayValue = weekDays.day;\n weekDayOffset = weekDays.offset || \"\";\n }\n\n method = weekDayOffsetWidget.value ? \"value\" : \"val\";\n\n weekDayOffsetWidget[method](weekDayOffset);\n that._weekDay[method](weekDayValue);\n }\n },\n\n _initWeekDay: function() {\n var that = this, data;\n\n var weekdayMessage = that.options.messages.weekdays;\n var offsetMessage = that.options.messages.offsetPositions;\n\n var weekDayInput = that._container.find(\".k-recur-weekday\");\n\n var change = function() {\n that._weekDayRule();\n that._trigger();\n };\n\n if (weekDayInput[0]) {\n that._weekDayOffset = new DropDownList(that._container.find(\".k-recur-weekday-offset\"), {\n autoWidth: true,\n change: change,\n dataTextField: \"text\",\n dataValueField: \"value\",\n dataSource: [\n { text: offsetMessage.first, value: \"1\" },\n { text: offsetMessage.second, value: \"2\" },\n { text: offsetMessage.third, value: \"3\" },\n { text: offsetMessage.fourth, value: \"4\" },\n { text: offsetMessage.last, value: \"-1\" }\n ]\n });\n\n data = [\n { text: weekdayMessage.day, value: \"day\" },\n { text: weekdayMessage.weekday, value: \"weekday\" },\n { text: weekdayMessage.weekend, value: \"weekend\" }\n ];\n\n that._weekDay = new DropDownList(weekDayInput, {\n autoWidth: true,\n value: that.options.start.getDay(),\n change: change,\n dataTextField: \"text\",\n dataValueField: \"value\",\n dataSource: data.concat($.map(kendo.culture().calendar.days.names, function(dayName, idx) {\n return {\n text: dayName,\n value: idx\n };\n }))\n });\n\n that._weekDayView();\n }\n },\n\n _initWeekDays: function() {\n var that = this;\n var rule = that._value;\n var weekDayButtonGroup = that._weekDayButtonGroup;\n\n if (weekDayButtonGroup && rule.weekDays && rule.weekDays.length) {\n var ruleDays = rule.weekDays,\n ruleDaysLength = ruleDays.length,\n selectors = [],\n i = 0,\n selectedWeekDayButtons;\n\n for (; i < ruleDaysLength; i++) {\n selectors.push(\"[data-value='\" + ruleDays[i].day + \"']\");\n }\n\n selectedWeekDayButtons = weekDayButtonGroup.element.find(selectors.join(\",\"));\n weekDayButtonGroup.select(selectedWeekDayButtons);\n }\n },\n\n _initMonthDay: function() {\n var that = this;\n var rule = that._value;\n var monthDayInput = that._container.find(\".k-recur-monthday\");\n\n if (monthDayInput[0]) {\n that._monthDay = new kendo.ui.NumericTextBox(monthDayInput, {\n spinners: that.options.spinners,\n min: 1,\n max: 31,\n decimals: 0,\n format: \"#\",\n value: rule.monthDays ? rule.monthDays[0] : that.options.start.getDate(),\n change: function() {\n var value = this.value();\n\n rule.monthDays = value ? [value] : value;\n that._trigger();\n }\n });\n }\n },\n\n _initCount: function() {\n var that = this,\n input = that._container.find(\".k-recur-count\"),\n rule = that._value;\n\n that._count = input.kendoNumericTextBox({\n spinners: that.options.spinners,\n value: rule.count || 1,\n decimals: 0,\n format: \"#\",\n min: 1,\n change: function() {\n rule.count = this.value();\n that._trigger();\n }\n }).data(\"kendoNumericTextBox\");\n },\n\n _initUntil: function() {\n var that = this,\n input = that._container.find(\".k-recur-until\"),\n start = that.options.start,\n rule = that._value,\n until = rule.until,\n min = until && until < start ? until : start,\n startInput = that.wrapper.closest(\".k-scheduler-edit-form\").find(\"[name=start]:visible\"),\n validDateValidationMessage = kendo.format(kendo.ui.Validator.prototype.options.messages.date, that.options.messages.end.on),\n dateCompareValidationMessage = kendo.ui.Validator.prototype.options.messages.dateCompare,\n initialValue = new Date(start.getFullYear(), start.getMonth(), start.getDate(), 23, 59, 59);\n\n input.attr(\"data-validDate-msg\", validDateValidationMessage);\n input.attr(\"data-untilDateCompare-msg\", dateCompareValidationMessage);\n\n if (startInput.length === 0) {\n startInput = that.wrapper.closest(\".k-scheduler-edit-form\").find(\"[name=start]\");\n }\n\n if (startInput.length > 0 && startInput.val()) {\n min = kendo.parseDate(startInput.val());\n\n if (initialValue < min) {\n initialValue = min;\n }\n }\n\n that._until = input.kendoDatePicker({\n min: min,\n value: until || initialValue,\n change: function() {\n var date = this.value();\n if (date) {\n rule.until = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59);\n }\n that._trigger();\n }\n }).data(\"kendoDatePicker\");\n\n if (startInput) {\n startInput.on(\"change\", function() {\n that._until.setOptions({\n min: startInput.val()\n });\n });\n }\n },\n\n _trigger: function() {\n if (!this.options.mobile) {\n this.trigger(\"change\");\n }\n }\n });\n\n var RecurrenceEditor = BaseRecurrenceEditor.extend({\n init: function(element, options) {\n var that = this;\n\n BaseRecurrenceEditor.fn.init.call(that, element, options);\n\n that._initFrequency();\n\n that._initContainer();\n\n that.value(that.options.value);\n },\n\n options: {\n name: \"RecurrenceEditor\"\n },\n\n events: [ \"change\" ],\n\n destroy: function() {\n var that = this;\n\n that._frequency.destroy();\n\n if (this._weekDayButtonGroup) {\n this._weekDayButtonGroup.destroy();\n }\n\n that._container.find(\"input[type=radio],input[type=checkbox]\").off(CLICK + that._namespace);\n\n kendo.destroy(that._container);\n\n BaseRecurrenceEditor.fn.destroy.call(that);\n },\n\n value: function(value) {\n var that = this;\n var timezone = that.options.timezone;\n var freq, freqButton;\n\n if (value === undefined$1) {\n if (!that._value.freq) {\n return \"\";\n }\n\n return serialize(that._value, timezone);\n }\n\n that._value = parseRule(value, timezone) || {};\n\n freq = that._value.freq;\n\n if (freq) {\n freqButton = that._frequency.element.find(\"[data-value='\" + freq + \"']\");\n that._frequency.select(freqButton);\n } else {\n that._frequency.select(0);\n }\n\n that._initView(that._frequency.current().data(\"value\"));\n },\n\n _initContainer: function() {\n var element = this.element,\n container = $('
'),\n editContainer = element.parent(\".k-edit-field\");\n\n if (editContainer[0]) {\n container.insertAfter(editContainer);\n } else {\n element.append(container);\n }\n\n this._container = container;\n },\n\n _initFrequency: function() {\n var that = this,\n options = that.options,\n frequencies = options.frequencies,\n messages = options.messages.frequencies,\n buttonGroupElement = $('
').attr({ title: options.messages.recurrenceEditorTitle }),\n frequency;\n\n frequencies = $.map(frequencies, function(frequency) {\n return {\n text: messages[frequency],\n attributes: { \"data-value\": frequency, \"aria-label\": options.messages.repeat + messages[frequency] }\n };\n });\n\n frequency = frequencies[0];\n if (frequency && frequency.attributes && frequency.attributes[\"data-value\"] === \"never\") {\n frequency.attributes[\"data-value\"] = \"\";\n }\n\n that.element.append(buttonGroupElement);\n that._frequency = new ButtonGroup(buttonGroupElement, {\n items: frequencies,\n select: function() {\n that._value = {};\n that._initView(that._frequency.current().data(\"value\"));\n that.trigger(\"change\");\n }\n });\n },\n\n _initView: function(frequency) {\n var that = this;\n var rule = that._value;\n var options = that.options;\n\n var data = {\n frequency: frequency || \"never\",\n firstWeekDay: options.firstWeekDay,\n messages: options.messages[frequency],\n end: options.messages.end\n };\n\n kendo.destroy(that._container);\n that._container.html(RECURRENCE_VIEW_TEMPLATE(data));\n\n if (!frequency) {\n that._value = {};\n return;\n }\n\n rule.freq = frequency;\n\n if (frequency === \"weekly\" && !rule.weekDays) {\n rule.weekDays = [{\n day: options.start.getDay(),\n offset: 0\n }];\n }\n\n that._weekDayButtons(options.firstWeekDay);\n\n that._initInterval();\n that._initWeekDays();\n that._initMonthDay();\n that._initWeekDay();\n that._initMonth();\n that._initCount();\n that._initUntil();\n\n that._period();\n that._end();\n },\n\n _initMonth: function() {\n var that = this;\n var rule = that._value;\n var month = rule.months || [that.options.start.getMonth() + 1];\n var monthInputs = that._container.find(\".k-recur-month\");\n var options;\n\n if (monthInputs[0]) {\n options = {\n autoWidth: true,\n change: function() {\n rule.months = [Number(this.value())];\n that.trigger(\"change\");\n },\n dataTextField: \"text\",\n dataValueField: \"value\",\n dataSource: $.map(kendo.culture().calendar.months.names, function(monthName, idx) {\n return {\n text: monthName,\n value: idx + 1\n };\n })\n };\n\n that._month1 = new DropDownList(monthInputs[0], options);\n that._month2 = new DropDownList(monthInputs[1], options);\n\n if (month) {\n month = month[0];\n that._month1.value(month);\n that._month2.value(month);\n }\n }\n\n },\n\n _end: function() {\n var that = this;\n var rule = that._value;\n var container = that._container;\n var namespace = that._namespace;\n var click = function(e) {\n that._toggleEnd(e.currentTarget.value);\n that.trigger(\"change\");\n };\n var endRule;\n\n that._buttonNever = container.find(\".k-recur-end-never\").on(CLICK + namespace, click);\n that._buttonCount = container.find(\".k-recur-end-count\").on(CLICK + namespace, click);\n that._buttonUntil = container.find(\".k-recur-end-until\").on(CLICK + namespace, click);\n\n if (rule.count) {\n endRule = \"count\";\n } else if (rule.until) {\n endRule = \"until\";\n }\n\n that._toggleEnd(endRule);\n },\n\n _period: function() {\n var that = this;\n var rule = that._value;\n var monthly = rule.freq === \"monthly\";\n\n var toggleRule = monthly ? that._toggleMonthDay : that._toggleYear;\n\n var selector = \".k-recur-\" + (monthly ? \"month\" : \"year\") + \"-radio\";\n var radioButtons = that._container.find(selector);\n\n if (!monthly && rule.freq !== \"yearly\") {\n return;\n }\n\n radioButtons.on(CLICK + that._namespace, function(e) {\n toggleRule.call(that, e.currentTarget.value);\n that.trigger(\"change\");\n });\n\n that._buttonMonthDay = radioButtons.eq(0);\n that._buttonWeekDay = radioButtons.eq(1);\n\n toggleRule.call(that, rule.weekDays ? \"weekday\" : \"monthday\");\n },\n\n _toggleEnd: function(endRule) {\n var that = this;\n var count, until;\n var enableCount, enableUntil;\n\n if (endRule === \"count\") {\n that._buttonCount.prop(\"checked\", true);\n\n enableCount = true;\n enableUntil = false;\n\n count = that._count.value();\n until = null;\n } else if (endRule === \"until\") {\n that._buttonUntil.prop(\"checked\", true);\n\n enableCount = false;\n enableUntil = true;\n\n count = null;\n until = that._until.value();\n } else {\n that._buttonNever.prop(\"checked\", true);\n\n enableCount = enableUntil = false;\n count = until = null;\n }\n\n if (that._count) {\n that._count.enable(enableCount);\n }\n\n if (that._until) {\n that._until.enable(enableUntil);\n }\n\n that._value.count = count;\n that._value.until = until;\n },\n\n _toggleMonthDay: function(monthRule) {\n var that = this;\n var enableMonthDay = false;\n var enableWeekDay = true;\n var clear = false;\n var monthDays;\n\n if (monthRule === \"monthday\") {\n that._buttonMonthDay.prop(\"checked\", true);\n\n monthDays = [that._monthDay.value()];\n\n enableMonthDay = true;\n enableWeekDay = false;\n clear = true;\n } else {\n that._buttonWeekDay.prop(\"checked\", true);\n monthDays = null;\n }\n\n that._weekDay.enable(enableWeekDay);\n that._weekDayOffset.enable(enableWeekDay);\n that._monthDay.enable(enableMonthDay);\n\n that._value.monthDays = monthDays;\n\n that._weekDayRule(clear);\n },\n\n _toggleYear: function(yearRule) {\n var that = this;\n var enableMonth1 = false;\n var enableMonth2 = true;\n var month;\n\n if (yearRule === \"monthday\") {\n enableMonth1 = true;\n enableMonth2 = false;\n\n month = that._month1.value();\n } else {\n month = that._month2.value();\n }\n\n that._month1.enable(enableMonth1);\n that._month2.enable(enableMonth2);\n\n that._value.months = [month];\n that._toggleMonthDay(yearRule);\n }\n });\n\n ui.plugin(RecurrenceEditor);\n\n\n var RECURRENCE_HEADER_TEMPLATE = kendo.template(\n '
' +\n '
    ' +\n '
  • ' +\n '' +\n '
  • ' +\n '
  • ' +\n '
' +\n '
'\n );\n\n var RECURRENCE_REPEAT_PATTERN_TEMPLATE = kendo.template(\n '# if (frequency !== \"never\") { #' +\n '' +\n '# } #' +\n '# if (frequency === \"weekly\") { #' +\n '' +\n '# } else if (frequency === \"monthly\") { #' +\n '' +\n '# } else if (frequency === \"yearly\") { #' +\n '' +\n '# } #'\n );\n\n var RECURRENCE_END_PATTERN_TEMPLATE = kendo.template(\n '# if (endPattern === \"count\") { #' +\n '' +\n '# } else if (endPattern === \"until\") { #' +\n '' +\n '# } #'\n );\n\n var RECURRENCE_GROUP_BUTTON_TEMPLATE = kendo.template(\n ''\n );\n\n var MobileRecurrenceEditor = BaseRecurrenceEditor.extend({\n init: function(element, options) {\n var that = this;\n\n BaseRecurrenceEditor.fn.init.call(that, element, options);\n\n options = that.options;\n\n that._optionTemplate = kendo.template('');\n\n that.value(options.value);\n\n that._pane = options.pane || that.wrapper.closest(\"[data-role=pane]\").data(\"kendoPane\");\n\n that._initRepeatButton();\n\n that._initParentRepeatEnd();\n\n that._defaultValue = that._value;\n },\n\n options: {\n name: \"MobileRecurrenceEditor\",\n animations: {\n left: \"slide\",\n right: \"slide:right\"\n },\n mobile: true,\n messages: {\n cancel: \"Cancel\",\n update: \"Save\",\n endTitle: \"Repeat ends\",\n repeatTitle: \"Repeat pattern\",\n headerTitle: \"Repeat event\",\n end: {\n patterns: {\n never: \"Never\",\n after: \"After...\",\n on: \"On...\"\n },\n never: \"Never\",\n after: \"End repeat after\",\n on: \"End repeat on\"\n },\n daily: {\n interval: \"\"\n },\n hourly: {\n interval: \"\"\n },\n weekly: {\n interval: \"\"\n },\n monthly: {\n interval: \"\",\n repeatBy: \"Repeat by: \",\n dayOfMonth: \"Day of the month\",\n dayOfWeek: \"Day of the week\",\n repeatEvery: \"Repeat every\",\n every: \"Every\",\n day: \"Day \"\n },\n yearly: {\n interval: \"\",\n repeatBy: \"Repeat by: \",\n dayOfMonth: \"Day of the month\",\n dayOfWeek: \"Day of the week\",\n repeatEvery: \"Repeat every: \",\n every: \"Every\",\n month: \"Month\",\n day: \"Day\"\n }\n }\n },\n\n events: [ \"change\" ],\n\n value: function(value) {\n var that = this;\n var timezone = that.options.timezone;\n\n if (value === undefined$1) {\n if (!that._value.freq) {\n return \"\";\n }\n\n return serialize(that._value, timezone);\n }\n\n that._value = parseRule(value, timezone) || {};\n },\n\n destroy: function() {\n this._destroyView();\n\n kendo.destroy(this._endFields);\n\n if (this._weekDayButtonGroup) {\n this._weekDayButtonGroup.destroy();\n }\n\n this.element.off(CLICK + this._namespace);\n\n BaseRecurrenceEditor.fn.destroy.call(this);\n },\n\n _initInterval: function() {\n var that = this;\n var rule = that._value;\n\n that._container.find(\".k-recur-interval\")\n .val(that._value.interval || 1)\n .on(CHANGE + that._namespace, function(e) {\n rule.interval = e.target.value;\n that._trigger();\n });\n },\n\n _initRepeatButton: function() {\n var that = this;\n var freq = that.options.messages.frequencies[this._value.freq || \"never\"];\n\n that._chevronButton = $('');\n that._repeatValue = $('' + freq + '');\n\n that.element.append(that._repeatValue).append(that._chevronButton);\n\n that.element.parents(\"li.k-item\").on(CLICK + that._namespace, function(e) {\n e.preventDefault();\n that._createView(\"repeat\");\n that._pane.navigate(that._view, that.options.animations.left);\n });\n },\n\n _endLiItem: function() {\n var that = this;\n return '
  • ';\n },\n\n _initParentRepeatEnd: function() {\n var that = this;\n\n var endLabelField = $(that._endLiItem()).insertAfter(that.element.parents(\"li.k-item\"));\n\n var endEditField = $('
    ')\n .appendTo(endLabelField.find(\".k-label\"));\n\n endLabelField.on(CLICK + that._namespace, function(e) {\n e.preventDefault();\n that._navigateToView(\"repeat\");\n });\n\n that._endParentLabelField = endLabelField.toggle(!!that._value.freq);\n that._endParentEndButton = endEditField.find(\".k-scheduler-recur-end\").text(that._endText());\n },\n\n _initRepeatEnd: function() {\n var that = this;\n\n var endLabelField = $(that._endLiItem()).insertAfter(that._container);\n\n var endEditField = $('
    ')\n .appendTo(endLabelField.find(\".k-label\"));\n\n endLabelField.on(CLICK + that._namespace, function(e) {\n e.preventDefault();\n that._navigateToView(\"end\");\n });\n\n that._endLabelField = endLabelField.toggleClass(\"k-disabled\", !that._value.freq);\n that._endButton = endEditField.find(\".k-scheduler-recur-end\").text(that._endText());\n },\n\n _navigateToView: function(viewName) {\n var that = this;\n that._createView(viewName);\n that._pane.navigate(that._view, that.options.animations.left);\n },\n\n _endText: function() {\n var rule = this._value;\n var messages = this.options.messages.end;\n\n var text = messages.never;\n\n if (rule.count) {\n text = kendo.format(\"{0} {1}\", messages.after, rule.count);\n } else if (rule.until) {\n text = kendo.format(\"{0} {1:d}\", messages.on, rule.until);\n }\n\n return text;\n },\n\n _initFrequency: function() {\n var that = this;\n var frequencyMessages = that.options.messages.frequencies;\n\n var html = RECURRENCE_GROUP_BUTTON_TEMPLATE({\n dataSource: $.map(this.options.frequencies, function(frequency) {\n return {\n text: frequencyMessages[frequency],\n value: frequency !== \"never\" ? frequency : \"\"\n };\n }),\n value: that._value.freq || \"\",\n ns: kendo.ns\n });\n\n that._view.element\n .find(\".k-recur-pattern\")\n .append(html);\n\n that._view.element.find(\".k-scheduler-select\")\n .on(CHANGE + that._namespace, function(e) {\n var value = e.target.value;\n that._value = { freq: value };\n that._defaultValue = $.extend({}, that._value);\n that._initRepeatView();\n that._endButton.text(that._endText());\n that._endParentEndButton.text(that._endText());\n });\n },\n\n _initEndNavigation: function() {\n var that = this;\n var endMessages = that.options.messages.end.patterns;\n var rule = that._value;\n var value = \"\";\n\n if (rule.count) {\n value = \"count\";\n } else if (rule.until) {\n value = \"until\";\n }\n\n var html = RECURRENCE_GROUP_BUTTON_TEMPLATE({\n dataSource: [\n { text: endMessages.never, value: \"\" },\n { text: endMessages.after, value: \"count\" },\n { text: endMessages.on, value: \"until\" }\n ],\n value: value,\n ns: kendo.ns\n });\n\n that._view.element\n .find(\".k-recur-pattern\")\n .append(html);\n\n that._view.element.find(\".k-scheduler-select\")\n .on(CHANGE + that._namespace, function(e) {\n var value = e.target.value;\n var count = null;\n var until = null;\n\n that._initEndView(value);\n\n if (that._count.length) {\n count = that._count.val();\n until = null;\n } else if (that._until.length) {\n count = null;\n until = that._until.val ? kendo.parseDate(that._until.val(), \"yyyy-MM-dd\") : that._until.value();\n }\n\n rule.count = count;\n rule.until = until;\n });\n },\n\n _createView: function(viewType) {\n var that = this;\n var options = that.options;\n var messages = options.messages;\n var headerTitle = messages[viewType === \"repeat\" ? \"repeatTitle\" : \"endTitle\"];\n\n var html = '
    ' +\n '
    ' +\n '' +\n messages.headerTitle +\n '' +\n '
    ';\n\n var returnViewId = that._pane.view().id;\n\n that._view = that._pane.append(html + RECURRENCE_HEADER_TEMPLATE({ headerTitle: headerTitle }));\n\n that._view.element.on(CLICK + that._namespace, \"a.k-scheduler-cancel, a.k-scheduler-update\", function(e) {\n e.preventDefault();\n e.stopPropagation();\n\n if ($(this).hasClass(\"k-scheduler-update\")) {\n that.trigger(\"change\");\n that._defaultValue = $.extend({}, that._value);\n } else {\n that._value = that._defaultValue;\n }\n\n var frequency = that._value.freq;\n\n that._endParentEndButton.text(that._endText());\n that._endParentLabelField.toggle(!!frequency && frequency !== \"never\");\n that._endButton.text(that._endText());\n\n that._repeatValue.text(messages.frequencies[frequency || \"never\"]);\n\n that._pane.one(\"viewShow\", function() {\n that._destroyView();\n });\n\n that._pane.navigate(returnViewId, that.options.animations.right);\n });\n\n that._container = that._view.element.find(\".k-recur-view\");\n\n if (viewType === \"repeat\") {\n that._initFrequency();\n that._initRepeatView();\n that._initRepeatEnd();\n } else {\n that._initEndNavigation();\n that._initEndView();\n }\n },\n\n _destroyView: function() {\n if (this._view) {\n\n this._view.destroy();\n this._view.element.remove();\n this._container = null;\n }\n\n\n this._view = null;\n },\n\n _initRepeatView: function() {\n var that = this;\n var frequency = that._value.freq || \"never\";\n\n var data = {\n frequency: frequency,\n firstWeekDay: that.options.firstWeekDay,\n messages: that.options.messages[frequency]\n };\n\n var html = RECURRENCE_REPEAT_PATTERN_TEMPLATE(data);\n\n var container = that._container = that._container || this._pane.view().content.find(\"li.k-recur-view\");\n var rule = that._value;\n\n if (that._endLabelField) {\n that._endLabelField.toggleClass(\"k-disabled\", frequency === \"never\");\n }\n\n kendo.destroy(container);\n container.html(html);\n\n if (!html) {\n that._value = {};\n container.hide();\n return;\n } else {\n container.show();\n }\n\n if (frequency === \"weekly\" && !rule.weekDays) {\n rule.weekDays = [{\n day: that.options.start.getDay(),\n offset: 0\n }];\n }\n\n that._weekDayButtons(that.options.firstWeekDay);\n\n that._initInterval();\n that._initMonthDay();\n that._initWeekDays();\n that._initWeekDay();\n that._initMonth();\n\n that._period();\n },\n\n _initMonthDay: function() {\n var that = this;\n var rule = that._value;\n var monthDayInput = that._monthDay = that._container.find(\".k-recur-monthday\");\n\n monthDayInput.attr({\n min: 1,\n max: 31\n })\n .val(rule.monthDays ? rule.monthDays[0] : that.options.start.getDate())\n .on(CHANGE + that._namespace, function(e) {\n rule.count = e.target.value;\n that._trigger();\n });\n },\n\n _initCount: function() {\n var that = this,\n input = that._count = that._container.find(\".k-recur-count\"),\n rule = that._value;\n\n input.val(rule.count || 1)\n .on(CHANGE + that._namespace, function(ev) {\n rule.count = ev.target.value;\n that._trigger();\n });\n },\n\n _initEndView: function(endPattern) {\n var that = this;\n var rule = that._value;\n\n if (endPattern === undefined$1) {\n if (rule.count) {\n endPattern = \"count\";\n } else if (rule.until) {\n endPattern = \"until\";\n }\n }\n\n var data = {\n endPattern: endPattern,\n messages: that.options.messages.end\n };\n\n kendo.destroy(that._container);\n that._container.html(RECURRENCE_END_PATTERN_TEMPLATE(data));\n\n that._initCount();\n that._initUntil();\n },\n\n _initWeekDay: function() {\n var that = this, data;\n\n var weekdayMessage = that.options.messages.weekdays;\n var offsetMessage = that.options.messages.offsetPositions;\n\n var weekDaySelect = that._container.find(\".k-recur-weekday\");\n\n var change = function() {\n that._weekDayRule();\n that.trigger(\"change\");\n };\n\n if (weekDaySelect[0]) {\n that._weekDayOffset = that._container.find(\".k-recur-weekday-offset\")\n .html(that._options([\n { text: offsetMessage.first, value: \"1\" },\n { text: offsetMessage.second, value: \"2\" },\n { text: offsetMessage.third, value: \"3\" },\n { text: offsetMessage.fourth, value: \"4\" },\n { text: offsetMessage.last, value: \"-1\" }\n ]))\n .on(\"change\", change);\n\n data = [\n { text: weekdayMessage.day, value: \"day\" },\n { text: weekdayMessage.weekday, value: \"weekday\" },\n { text: weekdayMessage.weekend, value: \"weekend\" }\n ];\n\n data = data.concat($.map(kendo.culture().calendar.days.names, function(dayName, idx) {\n return {\n text: dayName,\n value: idx\n };\n }));\n\n that._weekDay = weekDaySelect.html(that._options(data))\n .on(\"change\", change)\n .val(that.options.start.getDay());\n\n that._weekDayView();\n }\n },\n\n _initMonth: function() {\n var that = this;\n var rule = that._value;\n var start = that.options.start;\n var month = rule.months || [start.getMonth() + 1];\n var monthSelect = that._container.find(\".k-recur-month\");\n var monthNames = kendo.culture().calendar.months.names;\n\n if (monthSelect[0]) {\n var data = $.map(monthNames, function(monthName, idx) {\n return {\n text: monthName,\n value: idx + 1\n };\n });\n\n monthSelect.html(that._options(data))\n .on(\"change\", function() {\n rule.months = [Number(this.value)];\n });\n\n that._monthSelect = monthSelect;\n\n if (month) {\n monthSelect.val(month[0]);\n }\n }\n\n },\n\n _period: function() {\n var that = this;\n var rule = that._value;\n var container = that._container;\n var messages = that.options.messages[rule.freq];\n var repeatRuleGroupButton = container.find(\".k-repeat-rule\");\n var weekDayView = container.find(\".k-weekday-view\");\n var monthDayView = container.find(\".k-monthday-view\");\n\n if (repeatRuleGroupButton[0]) {\n var currentValue = rule.weekDays ? \"weekday\" : \"monthday\";\n\n var html = RECURRENCE_GROUP_BUTTON_TEMPLATE({\n value: currentValue,\n dataSource: [\n { text: messages.dayOfMonth, value: \"monthday\" },\n { text: messages.dayOfWeek, value: \"weekday\" }\n ],\n ns: kendo.ns\n });\n\n var init = function(val) {\n var weekDayName = that._weekDay.val();\n var weekDayOffset = that._weekDayOffset.val();\n var monthDay = that._monthDay.val();\n var month = that._monthSelect ? that._monthSelect.val() : null;\n\n if (val === \"monthday\") {\n rule.weekDays = null;\n rule.monthDays = monthDay ? [monthDay] : monthDay;\n rule.months = month ? [Number(month)] : month;\n\n weekDayView.hide();\n monthDayView.show();\n } else {\n rule.monthDays = null;\n rule.months = month ? [Number(month)] : month;\n\n rule.weekDays = [{\n offset: Number(weekDayOffset),\n day: Number(weekDayName)\n }];\n\n weekDayView.show();\n monthDayView.hide();\n }\n };\n\n repeatRuleGroupButton\n .append(html);\n\n repeatRuleGroupButton.find(\".k-scheduler-select\")\n .on(CHANGE + that._namespace, function(e) {\n init(e.target.value);\n });\n\n init(currentValue);\n }\n },\n\n _initUntil: function() {\n var that = this;\n var input = that._container.find(\".k-recur-until\");\n var start = that.options.start;\n var rule = that._value;\n var until = rule.until;\n var min = until && until < start ? until : start;\n var validDateValidationMessage = kendo.format(kendo.ui.Validator.prototype.options.messages.date, that.options.messages.end.on);\n var dateCompareValidationMessage = kendo.ui.Validator.prototype.options.messages.dateCompare;\n\n input.attr(\"data-validDate-msg\", validDateValidationMessage);\n input.attr(\"data-untilDateCompare-msg\", dateCompareValidationMessage);\n\n if (kendo.support.input.date) {\n that._until = input.attr(\"min\", kendo.toString(min, \"yyyy-MM-dd\"))\n .val(kendo.toString(until || start, \"yyyy-MM-dd\"))\n .on(\"change\", function() {\n var date = kendo.parseDate(this.value, \"yyyy-MM-dd\");\n if (date) {\n rule.until = date;\n }\n that._trigger();\n });\n } else {\n that._until = input.kendoDatePicker({\n min: min,\n value: until || start,\n change: function() {\n var date = this.value();\n if (date) {\n rule.until = date;\n }\n that._trigger();\n }\n }).data(\"kendoDatePicker\");\n }\n },\n\n _options: function(data, optionLabel) {\n var idx = 0;\n var html = \"\";\n var length = data.length;\n var template = this._optionTemplate;\n\n if (optionLabel) {\n html += template({ value: \"\", text: optionLabel });\n }\n\n for (; idx < length; idx++) {\n html += template(data[idx]);\n }\n\n return html;\n }\n });\n\n ui.plugin(MobileRecurrenceEditor);\n\n })(window.kendo.jQuery);\n\n}));\n"]}