{"version":3,"file":"AccessibleDatePicker.min.js","names":["accessibleDatePicker","closeCalendar","container","$","off","input","document","getElementById","this","selectorId","datepicker","each","focus","moveOneMonth","currentDate","dir","button","ENABLED_SELECTOR","$currentCells","currentIdx","inArray","parentNode","click","setTimeout","updateHeaderElements","$newCells","newTd","newAnchor","find","setHighlightState","handleNextClicks","prepHighlightState","hide","handlePrevClicks","monthDayYearText","cleanUps","clean","removeChild","datePickDiv","dates","attr","on","e","which","preventDefault","target","index","date","currentRow","closest","currentTds","currentIndex","dayIndex","daySpan","monthName","innerHTML","year","number","dateText","title","setAttribute","context","prev","next","href","appendOffscreenMonthText","highlight","cage","newHighlight","prevHighlight","getCurrentDate","removeClass","addClass","buttonText","isNext","hasClass","months","currentMonth","text","toLowerCase","monthIndex","currentYear","adjacentIndex","parseInt","length","firstToCap","html","s","charAt","toUpperCase","slice","init","labelId","tagName","previousElementSibling","id","parentElement","today","datePickHandler","activeDate","removeAttribute","calendarKeyboardListener","keyVent","dateCurrent","stopPropagation","shiftKey","previousDay","dateLink","td","prevTd","prevDateLink","handlePrevious","previousRow","prevRowDates","prevRowDate","previousMonth","prevLink","trs","lastRowTdLinks","lastDate","nextDay","nextTd","nextDateLink","handleNext","nextRow","nextRowFirstDate","nextMonth","nextMon","firstDate","upHandler","cont","rowContext","rowTds","rowLinks","targetIndex","prevRow","parallel","linkCheck","newRows","lastRow","lastRowTds","tdParallelIndex","newParallel","newCheck","secondLastRow","targetTd","selectedableDays","downHandler","nextLink","targetRow","targetCells","cellIndex","nextWeekTd","nextWeekCheck","nextMonthTrs","firstParallel","firstCheck","secondRow","secondRowTd","secondCheck","firstOfMonth","$daysOfMonth","lastDay","keyup","event","keyCode","close","removeAria","removeAttr"],"sources":["Purchase/Scripts/ECommShared/AccessibleDatePicker.js"],"mappings":"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","sourcesContent":["// Taken (and modified) from https://dequeuniversity.com/library/aria/date-pickers/sf-date-picker\r\n\r\nvar accessibleDatePicker = (function () {\r\n this.selectorId = '';\r\n\r\n function init() {\r\n\r\n $('.ui-datepicker-trigger').each(function () {\r\n var labelId = $(this).closest('div').find('label').attr('id');\r\n if (labelId != null)\r\n $(this).attr('aria-describedby', labelId);\r\n });\r\n\r\n $('.ui-datepicker-trigger').click(function (e) {\r\n\r\n if (e.target.tagName.toLowerCase() == 'button')\r\n selectorId = e.target.previousElementSibling.id;\r\n else\r\n selectorId = e.target.parentElement.previousElementSibling.id;\r\n\r\n setTimeout(function () {\r\n var today = $('.ui-datepicker-today a')[0];\r\n if (!today) {\r\n today = $('.ui-state-active')[0] ||\r\n $('a.ui-state-default')[0];\r\n }\r\n\r\n // Hide the entire page (except the date picker) from screen readers to prevent document navigation (by headings, etc.) while the popup is open\r\n $(\"main\").attr('id', 'dp-container');\r\n $(\"#dp-container\").attr('aria-hidden', 'true');\r\n $(\"#skipnav\").attr('aria-hidden', 'true');\r\n\r\n // Hide the \"today\" button because it doesn't do what you think it supposed to do\r\n $(\".ui-datepicker-current\").hide();\r\n today.focus();\r\n datePickHandler();\r\n $(document).on('click', '#ui-datepicker-div .ui-datepicker-close', function () {\r\n closeCalendar();\r\n });\r\n }, 0);\r\n });\r\n\r\n $('.ui-datepicker-trigger').keyup(function (event) {\r\n if (event.keyCode === 13) {\r\n $(this).click();\r\n }\r\n });\r\n }\r\n\r\n function datePickHandler() {\r\n var activeDate;\r\n var container = document.getElementById('ui-datepicker-div');\r\n var input = document.getElementById(this.selectorId);\r\n if (!container || !input) {\r\n return;\r\n }\r\n\r\n // $(container).find('table').first().attr('role', 'grid');\r\n\r\n container.setAttribute('role', 'application');\r\n container.setAttribute('aria-label', 'Calendar view date-picker');\r\n\r\n // the top controls:\r\n var prev = $('.ui-datepicker-prev', container)[0],\r\n next = $('.ui-datepicker-next', container)[0];\r\n\r\n\r\n // This is the line that needs to be fixed for use on pages with base URL set in head\r\n next.href = 'javascript:void(0)';\r\n prev.href = 'javascript:void(0)';\r\n\r\n next.setAttribute('role', 'button');\r\n next.removeAttribute('title');\r\n prev.setAttribute('role', 'button');\r\n prev.removeAttribute('title');\r\n\r\n appendOffscreenMonthText(next);\r\n appendOffscreenMonthText(prev);\r\n\r\n // delegation won't work here for whatever reason, so we are forced to attach individual click listeners to the prev / next month buttons each time they are added to the DOM\r\n $(next).on('click', handleNextClicks);\r\n $(prev).on('click', handlePrevClicks);\r\n\r\n monthDayYearText();\r\n $(container).on('keydown', function calendarKeyboardListener(keyVent) {\r\n var which = keyVent.which;\r\n var target = keyVent.target;\r\n var dateCurrent = getCurrentDate(container);\r\n if (!dateCurrent) {\r\n dateCurrent = $('a.ui-state-default')[0];\r\n setHighlightState(dateCurrent, container);\r\n }\r\n\r\n if (27 === which) {\r\n keyVent.stopPropagation();\r\n return closeCalendar();\r\n } else if (which === 9 && keyVent.shiftKey) { // SHIFT + TAB\r\n keyVent.preventDefault();\r\n if ($(target).hasClass('ui-datepicker-close')) { // close button\r\n $('.ui-datepicker-prev')[0].focus();\r\n } else if ($(target).hasClass('ui-state-default')) { // a date link\r\n $('.ui-datepicker-close')[0].focus();\r\n } else if ($(target).hasClass('ui-datepicker-prev')) { // the prev link\r\n $('.ui-datepicker-next')[0].focus();\r\n } else if ($(target).hasClass('ui-datepicker-next')) { // the next link\r\n activeDate = $('.ui-state-highlight') ||\r\n $('.ui-state-active')[0];\r\n if (activeDate) {\r\n activeDate.focus();\r\n }\r\n }\r\n } else if (which === 9) { // TAB\r\n keyVent.preventDefault();\r\n if ($(target).hasClass('ui-datepicker-close')) { // close button\r\n activeDate = $('.ui-state-highlight') ||\r\n $('.ui-state-active')[0];\r\n if (activeDate) {\r\n activeDate.focus();\r\n }\r\n } else if ($(target).hasClass('ui-state-default')) {\r\n $('.ui-datepicker-next')[0].focus();\r\n } else if ($(target).hasClass('ui-datepicker-next')) {\r\n $('.ui-datepicker-prev')[0].focus();\r\n } else if ($(target).hasClass('ui-datepicker-prev')) {\r\n $('.ui-datepicker-close')[0].focus();\r\n }\r\n } else if (which === 37) { // LEFT arrow key\r\n // if we're on a date link...\r\n if (!$(target).hasClass('ui-datepicker-close') && $(target).hasClass('ui-state-default')) {\r\n keyVent.preventDefault();\r\n previousDay(target);\r\n }\r\n } else if (which === 39) { // RIGHT arrow key\r\n // if we're on a date link...\r\n if (!$(target).hasClass('ui-datepicker-close') && $(target).hasClass('ui-state-default')) {\r\n keyVent.preventDefault();\r\n nextDay(target);\r\n }\r\n } else if (which === 38) { // UP arrow key\r\n if (!$(target).hasClass('ui-datepicker-close') && $(target).hasClass('ui-state-default')) {\r\n keyVent.preventDefault();\r\n upHandler(target, container, prev);\r\n }\r\n } else if (which === 40) { // DOWN arrow key\r\n if (!$(target).hasClass('ui-datepicker-close') && $(target).hasClass('ui-state-default')) {\r\n keyVent.preventDefault();\r\n downHandler(target, container, next);\r\n }\r\n } else if (which === 13) { // ENTER\r\n if ($(target).hasClass('ui-state-default')) {\r\n setTimeout(function () {\r\n closeCalendar();\r\n }, 100);\r\n } else if ($(target).hasClass('ui-datepicker-prev')) {\r\n handlePrevClicks();\r\n } else if ($(target).hasClass('ui-datepicker-next')) {\r\n handleNextClicks();\r\n }\r\n } else if (32 === which) {\r\n if ($(target).hasClass('ui-datepicker-prev') || $(target).hasClass('ui-datepicker-next')) {\r\n target.click();\r\n }\r\n } else if (33 === which) { // PAGE UP\r\n moveOneMonth(target, 'prev');\r\n } else if (34 === which) { // PAGE DOWN\r\n moveOneMonth(target, 'next');\r\n } else if (36 === which) { // HOME\r\n var firstOfMonth = $(target).closest('tbody').find('.ui-state-default')[0];\r\n if (firstOfMonth) {\r\n firstOfMonth.focus();\r\n setHighlightState(firstOfMonth, $('#ui-datepicker-div')[0]);\r\n }\r\n } else if (35 === which) { // END\r\n var $daysOfMonth = $(target).closest('tbody').find('.ui-state-default');\r\n var lastDay = $daysOfMonth[$daysOfMonth.length - 1];\r\n if (lastDay) {\r\n lastDay.focus();\r\n setHighlightState(lastDay, $('#ui-datepicker-div')[0]);\r\n }\r\n }\r\n $(\".ui-datepicker-current\").hide();\r\n });\r\n }\r\n\r\n function closeCalendar() {\r\n var container = $('#ui-datepicker-div');\r\n $(container).off('keydown');\r\n var input = document.getElementById(this.selectorId);\r\n $(input).datepicker('hide');\r\n\r\n $('.dateControl').each(function () {\r\n $(this).datepicker('hide');\r\n });\r\n\r\n input.focus();\r\n }\r\n\r\n function removeAria() {\r\n // make the rest of the page accessible again:\r\n $(\"#dp-container\").removeAttr('aria-hidden');\r\n $(\"#skipnav\").removeAttr('aria-hidden');\r\n }\r\n\r\n function isOdd(num) {\r\n return num % 2;\r\n }\r\n\r\n function moveOneMonth(currentDate, dir) {\r\n var button = (dir === 'next')\r\n ? $('.ui-datepicker-next')[0]\r\n : $('.ui-datepicker-prev')[0];\r\n\r\n if (!button) {\r\n return;\r\n }\r\n\r\n var ENABLED_SELECTOR = '#ui-datepicker-div tbody td:not(.ui-state-disabled)';\r\n var $currentCells = $(ENABLED_SELECTOR);\r\n var currentIdx = $.inArray(currentDate.parentNode, $currentCells);\r\n\r\n button.click();\r\n setTimeout(function () {\r\n updateHeaderElements();\r\n\r\n var $newCells = $(ENABLED_SELECTOR);\r\n var newTd = $newCells[currentIdx];\r\n var newAnchor = newTd && $(newTd).find('a')[0];\r\n\r\n while (!newAnchor) {\r\n currentIdx--;\r\n newTd = $newCells[currentIdx];\r\n newAnchor = newTd && $(newTd).find('a')[0];\r\n }\r\n\r\n setHighlightState(newAnchor, $('#ui-datepicker-div')[0]);\r\n newAnchor.focus();\r\n\r\n }, 0);\r\n\r\n }\r\n\r\n function handleNextClicks() {\r\n setTimeout(function () {\r\n updateHeaderElements();\r\n prepHighlightState();\r\n //$('.ui-datepicker-next').focus();\r\n $('.ui-state-highlight').focus();\r\n $(\".ui-datepicker-current\").hide();\r\n }, 0);\r\n }\r\n\r\n function handlePrevClicks() {\r\n setTimeout(function () {\r\n updateHeaderElements();\r\n prepHighlightState();\r\n //$('.ui-datepicker-prev').focus();\r\n $('.ui-state-highlight').focus();\r\n $(\".ui-datepicker-current\").hide();\r\n }, 0);\r\n }\r\n\r\n function previousDay(dateLink) {\r\n var container = document.getElementById('ui-datepicker-div');\r\n if (!dateLink) {\r\n return;\r\n }\r\n var td = $(dateLink).closest('td');\r\n if (!td) {\r\n return;\r\n }\r\n\r\n var prevTd = $(td).prev(),\r\n prevDateLink = $('a.ui-state-default', prevTd)[0];\r\n\r\n if (prevTd && prevDateLink) {\r\n setHighlightState(prevDateLink, container);\r\n prevDateLink.focus();\r\n } else {\r\n handlePrevious(dateLink);\r\n }\r\n }\r\n\r\n\r\n function handlePrevious(target) {\r\n var container = document.getElementById('ui-datepicker-div');\r\n if (!target) {\r\n return;\r\n }\r\n var currentRow = $(target).closest('tr');\r\n if (!currentRow) {\r\n return;\r\n }\r\n var previousRow = $(currentRow).prev();\r\n\r\n if (!previousRow || previousRow.length === 0) {\r\n // there is not previous row, so we go to previous month...\r\n previousMonth();\r\n } else {\r\n var prevRowDates = $('td a.ui-state-default', previousRow);\r\n var prevRowDate = prevRowDates[prevRowDates.length - 1];\r\n\r\n if (prevRowDate) {\r\n setTimeout(function () {\r\n setHighlightState(prevRowDate, container);\r\n prevRowDate.focus();\r\n }, 0);\r\n }\r\n }\r\n }\r\n\r\n function previousMonth() {\r\n var prevLink = $('.ui-datepicker-prev')[0];\r\n var container = document.getElementById('ui-datepicker-div');\r\n prevLink.click();\r\n // focus last day of new month\r\n setTimeout(function () {\r\n var trs = $('tr', container),\r\n lastRowTdLinks = $('td a.ui-state-default', trs[trs.length - 1]),\r\n lastDate = lastRowTdLinks[lastRowTdLinks.length - 1];\r\n\r\n // updating the cached header elements\r\n updateHeaderElements();\r\n\r\n setHighlightState(lastDate, container);\r\n lastDate.focus();\r\n\r\n }, 0);\r\n }\r\n\r\n ///////////////// NEXT /////////////////\r\n /**\r\n * Handles right arrow key navigation\r\n * @param {HTMLElement} dateLink The target of the keyboard event\r\n */\r\n function nextDay(dateLink) {\r\n var container = document.getElementById('ui-datepicker-div');\r\n if (!dateLink) {\r\n return;\r\n }\r\n var td = $(dateLink).closest('td');\r\n if (!td) {\r\n return;\r\n }\r\n var nextTd = $(td).next(),\r\n nextDateLink = $('a.ui-state-default', nextTd)[0];\r\n\r\n if (nextTd && nextDateLink) {\r\n setHighlightState(nextDateLink, container);\r\n nextDateLink.focus(); // the next day (same row)\r\n } else {\r\n handleNext(dateLink);\r\n }\r\n }\r\n\r\n function handleNext(target) {\r\n var container = document.getElementById('ui-datepicker-div');\r\n if (!target) {\r\n return;\r\n }\r\n var currentRow = $(target).closest('tr'),\r\n nextRow = $(currentRow).next();\r\n\r\n if (!nextRow || nextRow.length === 0) {\r\n nextMonth();\r\n } else {\r\n var nextRowFirstDate = $('a.ui-state-default', nextRow)[0];\r\n if (nextRowFirstDate) {\r\n setHighlightState(nextRowFirstDate, container);\r\n nextRowFirstDate.focus();\r\n }\r\n }\r\n }\r\n\r\n function nextMonth() {\r\n nextMon = $('.ui-datepicker-next')[0];\r\n var container = document.getElementById('ui-datepicker-div');\r\n nextMon.click();\r\n // focus the first day of the new month\r\n setTimeout(function () {\r\n // updating the cached header elements\r\n updateHeaderElements();\r\n\r\n var firstDate = $('a.ui-state-default', container)[0];\r\n setHighlightState(firstDate, container);\r\n firstDate.focus();\r\n }, 0);\r\n }\r\n\r\n /////////// UP ///////////\r\n /**\r\n * Handle the up arrow navigation through dates\r\n * @param {HTMLElement} target The target of the keyboard event (day)\r\n * @param {HTMLElement} cont The calendar container\r\n * @param {HTMLElement} prevLink Link to navigate to previous month\r\n */\r\n function upHandler(target, cont, prevLink) {\r\n prevLink = $('.ui-datepicker-prev')[0];\r\n var rowContext = $(target).closest('tr');\r\n if (!rowContext) {\r\n return;\r\n }\r\n var rowTds = $('td', rowContext),\r\n rowLinks = $('a.ui-state-default', rowContext),\r\n targetIndex = $.inArray(target, rowLinks),\r\n prevRow = $(rowContext).prev(),\r\n prevRowTds = $('td', prevRow),\r\n parallel = prevRowTds[targetIndex],\r\n linkCheck = $('a.ui-state-default', parallel)[0];\r\n\r\n if (prevRow && parallel && linkCheck) {\r\n // there is a previous row, a td at the same index\r\n // of the target AND theres a link in that td\r\n setHighlightState(linkCheck, cont);\r\n linkCheck.focus();\r\n } else {\r\n // we're either on the first row of a month, or we're on the\r\n // second and there is not a date link directly above the target\r\n prevLink.click();\r\n setTimeout(function () {\r\n // updating the cached header elements\r\n updateHeaderElements();\r\n var newRows = $('tr', cont),\r\n lastRow = newRows[newRows.length - 1],\r\n lastRowTds = $('td', lastRow),\r\n tdParallelIndex = $.inArray(target.parentNode, rowTds),\r\n newParallel = lastRowTds[tdParallelIndex],\r\n newCheck = $('a.ui-state-default', newParallel)[0];\r\n\r\n if (lastRow && newParallel && newCheck) {\r\n setHighlightState(newCheck, cont);\r\n newCheck.focus();\r\n } else {\r\n // theres no date link on the last week (row) of the new month\r\n // meaning its an empty cell, so we'll try the 2nd to last week\r\n var secondLastRow = newRows[newRows.length - 2],\r\n secondTds = $('td', secondLastRow),\r\n targetTd = secondTds[tdParallelIndex],\r\n linkCheck = $('a.ui-state-default', targetTd)[0];\r\n\r\n if (linkCheck) {\r\n setHighlightState(linkCheck, cont);\r\n linkCheck.focus();\r\n }\r\n else {\r\n debugger;\r\n selectedableDays = $('a.ui-state-default', cont);\r\n linkCheck = selectedableDays[selectedableDays.length - 1];\r\n }\r\n if (linkCheck) {\r\n setHighlightState(linkCheck, cont);\r\n linkCheck.focus();\r\n }\r\n }\r\n }, 0);\r\n }\r\n }\r\n\r\n //////////////// DOWN ////////////////\r\n /**\r\n * Handles down arrow navigation through dates in calendar\r\n * @param {HTMLElement} target The target of the keyboard event (day)\r\n * @param {HTMLElement} cont The calendar container\r\n * @param {HTMLElement} nextLink Link to navigate to next month\r\n */\r\n function downHandler(target, cont, nextLink) {\r\n nextLink = $('.ui-datepicker-next')[0];\r\n var targetRow = $(target).closest('tr');\r\n if (!targetRow) {\r\n return;\r\n }\r\n var targetCells = $('td', targetRow),\r\n cellIndex = $.inArray(target.parentNode, targetCells), // the td (parent of target) index\r\n nextRow = $(targetRow).next(),\r\n nextRowCells = $('td', nextRow),\r\n nextWeekTd = nextRowCells[cellIndex],\r\n nextWeekCheck = $('a.ui-state-default', nextWeekTd)[0];\r\n\r\n if (nextRow && nextWeekTd && nextWeekCheck) {\r\n // theres a next row, a TD at the same index of `target`,\r\n // and theres an anchor within that td\r\n setHighlightState(nextWeekCheck, cont);\r\n nextWeekCheck.focus();\r\n } else {\r\n nextLink.click();\r\n\r\n setTimeout(function () {\r\n // updating the cached header elements\r\n updateHeaderElements();\r\n\r\n var nextMonthTrs = $('tbody tr', cont),\r\n firstTds = $('td', nextMonthTrs[0]),\r\n firstParallel = firstTds[cellIndex],\r\n firstCheck = $('a.ui-state-default', firstParallel)[0];\r\n\r\n if (firstParallel && firstCheck) {\r\n setHighlightState(firstCheck, cont);\r\n firstCheck.focus();\r\n } else {\r\n // lets try the second row b/c we didnt find a\r\n // date link in the first row at the target's index\r\n var secondRow = nextMonthTrs[1],\r\n secondTds = $('td', secondRow),\r\n secondRowTd = secondTds[cellIndex],\r\n secondCheck = $('a.ui-state-default', secondRowTd)[0];\r\n\r\n if (secondRow && secondCheck) {\r\n setHighlightState(secondCheck, cont);\r\n secondCheck.focus();\r\n }\r\n }\r\n }, 0);\r\n }\r\n }\r\n\r\n\r\n function onCalendarHide() {\r\n closeCalendar();\r\n }\r\n\r\n // add an aria-label to the date link indicating the currently focused date\r\n // (formatted identically to the required format: mm/dd/yyyy)\r\n function monthDayYearText() {\r\n var cleanUps = $('.amaze-date');\r\n\r\n $(cleanUps).each(function (clean) {\r\n clean.parentNode.removeChild(clean);\r\n });\r\n\r\n var datePickDiv = document.getElementById('ui-datepicker-div');\r\n if (!datePickDiv) {\r\n return;\r\n }\r\n\r\n var dates = $('a.ui-state-default', datePickDiv);\r\n $(dates).attr('role', 'button').on('keydown', function (e) {\r\n if (e.which === 32) {\r\n e.preventDefault();\r\n e.target.click();\r\n setTimeout(function () {\r\n closeCalendar();\r\n }, 100);\r\n }\r\n });\r\n $(dates).each(function (index, date) {\r\n var currentRow = $(date).closest('tr'),\r\n currentTds = $('td', currentRow),\r\n currentIndex = $.inArray(date.parentNode, currentTds),\r\n headThs = $('thead tr th', datePickDiv),\r\n dayIndex = headThs[currentIndex],\r\n daySpan = $('span', dayIndex)[0],\r\n monthName = $('.ui-datepicker-month', datePickDiv)[0].innerHTML,\r\n year = $('.ui-datepicker-year', datePickDiv)[0].innerHTML,\r\n number = date.innerHTML;\r\n\r\n if (!daySpan || !monthName || !number || !year) {\r\n return;\r\n }\r\n\r\n // AT Reads: {month} {date} {year} {day}\r\n // \"December 18 2014 Thursday\"\r\n var dateText = date.innerHTML + ' ' + monthName + ' ' + year + ' ' + daySpan.title;\r\n // AT Reads: {date(number)} {name of day} {name of month} {year(number)}\r\n // var dateText = date.innerHTML + ' ' + daySpan.title + ' ' + monthName + ' ' + year;\r\n // add an aria-label to the date link reading out the currently focused date\r\n date.setAttribute('aria-label', dateText);\r\n });\r\n }\r\n\r\n\r\n\r\n // update the cached header elements because we're in a new month or year\r\n function updateHeaderElements() {\r\n var context = document.getElementById('ui-datepicker-div');\r\n if (!context) {\r\n return;\r\n }\r\n\r\n // $(context).find('table').first().attr('role', 'grid');\r\n\r\n prev = $('.ui-datepicker-prev', context)[0];\r\n next = $('.ui-datepicker-next', context)[0];\r\n\r\n //make them click/focus - able\r\n next.href = 'javascript:void(0)';\r\n prev.href = 'javascript:void(0)';\r\n\r\n next.setAttribute('role', 'button');\r\n prev.setAttribute('role', 'button');\r\n appendOffscreenMonthText(next);\r\n appendOffscreenMonthText(prev);\r\n\r\n $(next).on('click', handleNextClicks);\r\n $(prev).on('click', handlePrevClicks);\r\n\r\n // add month day year text\r\n monthDayYearText();\r\n }\r\n\r\n\r\n function prepHighlightState() {\r\n var highlight;\r\n var cage = document.getElementById('ui-datepicker-div');\r\n highlight = $('.ui-state-highlight', cage)[0] ||\r\n $('.ui-state-default', cage)[0];\r\n if (highlight && cage) {\r\n setHighlightState(highlight, cage);\r\n }\r\n }\r\n\r\n // Set the highlighted class to date elements, when focus is recieved\r\n function setHighlightState(newHighlight, container) {\r\n var prevHighlight = getCurrentDate(container);\r\n // remove the highlight state from previously\r\n // highlighted date and add it to our newly active date\r\n $(prevHighlight).removeClass('ui-state-highlight');\r\n $(newHighlight).addClass('ui-state-highlight');\r\n }\r\n\r\n\r\n // grabs the current date based on the hightlight class\r\n function getCurrentDate(container) {\r\n var currentDate = $('.ui-state-highlight', container)[0];\r\n return currentDate;\r\n }\r\n\r\n /**\r\n * Appends logical next/prev month text to the buttons\r\n * - ex: Next Month, January 2015\r\n * Previous Month, November 2014\r\n */\r\n function appendOffscreenMonthText(button) {\r\n var buttonText;\r\n var isNext = $(button).hasClass('ui-datepicker-next');\r\n var months = [\r\n 'january', 'february',\r\n 'march', 'april',\r\n 'may', 'june', 'july',\r\n 'august', 'september',\r\n 'october',\r\n 'november', 'december'\r\n ];\r\n\r\n var currentMonth = $('.ui-datepicker-title .ui-datepicker-month').text().toLowerCase();\r\n var monthIndex = $.inArray(currentMonth.toLowerCase(), months);\r\n var currentYear = $('.ui-datepicker-title .ui-datepicker-year').text().toLowerCase();\r\n var adjacentIndex = (isNext) ? monthIndex + 1 : monthIndex - 1;\r\n\r\n if (isNext && currentMonth === 'december') {\r\n currentYear = parseInt(currentYear, 10) + 1;\r\n adjacentIndex = 0;\r\n } else if (!isNext && currentMonth === 'january') {\r\n currentYear = parseInt(currentYear, 10) - 1;\r\n adjacentIndex = months.length - 1;\r\n }\r\n\r\n buttonText = (isNext)\r\n ? 'Next Month, ' + firstToCap(months[adjacentIndex]) + ' ' + currentYear\r\n : 'Previous Month, ' + firstToCap(months[adjacentIndex]) + ' ' + currentYear;\r\n\r\n $(button).find('.ui-icon').html(buttonText);\r\n\r\n }\r\n\r\n // Returns the string with the first letter capitalized\r\n function firstToCap(s) {\r\n return s.charAt(0).toUpperCase() + s.slice(1);\r\n }\r\n\r\n return {\r\n init: init,\r\n close: removeAria\r\n };\r\n})();"]}