diff --git a/media/system/js/fields/calendar.js b/media/system/js/fields/calendar.js index 6adf6b9faf74b..26c99eb99956e 100644 --- a/media/system/js/fields/calendar.js +++ b/media/system/js/fields/calendar.js @@ -17,7 +17,7 @@ return str; }; - /** Traslates to english numbers a string. */ + /** Translates to english numbers a string. */ Date.toEnglish = function(str) { str = this.toString(); var nums = [0,1,2,3,4,5,6,7,8,9]; @@ -67,7 +67,7 @@ instanceParams = { inputField : this.inputField, dateType : JoomlaCalLocale.dateType ? JoomlaCalLocale.dateType : 'gregorian', - direction : (document.dir != undefined) ? document.dir : document.getElementsByTagName("html")[0].getAttribute("dir"), + direction : (document.dir !== undefined) ? document.dir : document.getElementsByTagName("html")[0].getAttribute("dir"), firstDayOfWeek : btn.getAttribute("data-firstday") ? parseInt(btn.getAttribute("data-firstday")) : 0, dateFormat : "%Y-%m-%d %H:%M:%S", weekend : JoomlaCalLocale.weekend ? JoomlaCalLocale.weekend : [0,6], @@ -146,7 +146,7 @@ // Get the date from the input var inputAltValueDate = Date.parseFieldDate(this.inputField.getAttribute('data-alt-value'), this.params.dateFormat, 'gregorian'); - if (this.inputField.value.length) { + if (this.inputField.value !== '') { this.date = inputAltValueDate; this.inputField.value = inputAltValueDate.print(this.params.dateFormat, this.params.dateType, true); } else { @@ -177,7 +177,7 @@ if (!self.params.time24) { if (/pm/i.test(ampm.value) && hours < 12) { hours = parseInt(hours) + 12; - } else if (/am/i.test(ampm.value) && hours == 12) { + } else if (/am/i.test(ampm.value) && hours === 12) { hours = 0; } } @@ -223,22 +223,21 @@ /** Method to set the value for the input field */ JoomlaCalendar.prototype.callHandler = function () { /** Output the date **/ - if (this.params.dateType == 'gregorian') { - this.inputField.setAttribute('data-alt-value', this.date.print(this.params.dateFormat, this.params.dateType, false)); - if (this.inputField.getAttribute('data-alt-value') && this.inputField.getAttribute('data-alt-value') != '0000-00-00 00:00:00') { - this.inputField.value = this.date.print(this.params.dateFormat, this.params.dateType, true); - } - } else { - this.inputField.setAttribute('data-alt-value', this.date.print(this.params.dateFormat, 'gregorian', false)); - this.inputField.setAttribute('data-local-value', this.date.print(this.params.dateFormat, this.params.dateType, false)); + this.inputField.setAttribute('data-alt-value', this.date.print(this.params.dateFormat, 'gregorian', false)); + + if (this.inputField.getAttribute('data-alt-value') && this.inputField.getAttribute('data-alt-value') !== '0000-00-00 00:00:00') { this.inputField.value = this.date.print(this.params.dateFormat, this.params.dateType, true); + if (this.params.dateType !== 'gregorian') { + this.inputField.setAttribute('data-local-value', this.date.print(this.params.dateFormat, this.params.dateType, true)); + } } + this.inputField.value = this.date.print(this.params.dateFormat, this.params.dateType, true); if (typeof this.inputField.onchange == "function") { this.inputField.onchange(); } - if (this.dateClicked && typeof this.params.onUpdate == "function") { + if (this.dateClicked && typeof this.params.onUpdate === "function") { this.params.onUpdate(this); } @@ -258,10 +257,10 @@ /** Method to show the calendar. */ JoomlaCalendar.prototype.show = function () { /** This is needed for IE8 */ - if (navigator.appName.indexOf("Internet Explorer")!=-1) { + if (navigator.appName.indexOf("Internet Explorer")!==-1) { var badBrowser = ( - navigator.appVersion.indexOf("MSIE 9")==-1 && - navigator.appVersion.indexOf("MSIE 1")==-1 + navigator.appVersion.indexOf("MSIE 9")===-1 && + navigator.appVersion.indexOf("MSIE 1")===-1 ); if (badBrowser) { @@ -276,15 +275,6 @@ this.checkInputs(); this.inputField.focus(); - var rows = this.table.getElementsByTagName("tr"); - for (var i = rows.length; i > 0;) { - var row = rows[--i]; - var cells = row.getElementsByTagName("td"); - for (var j = cells.length; j > 0;) { - var cell = cells[--j]; - } - } - this.dropdownElement.style.display = "block"; this.hidden = false; @@ -332,7 +322,8 @@ var self = this, el = ev.currentTarget, target = ev.target || ev.srcElement; - if (ev.srcElement && ev.srcElement.hasAttribute('data-action')) { + + if (target && target.hasAttribute('data-action')) { return; } @@ -356,22 +347,22 @@ return false; } - if (typeof el.navtype === "undefined" || el.navtype != 300) { - if (el.navtype == 50) { el._current = el.innerHTML; } + if (typeof el.navtype === "undefined" || el.navtype !== 300) { + if (el.navtype === 50) { el._current = el.innerHTML; } - if (target == el || target.parentNode == el) { self.cellClick(el, ev); } + if (target === el || target.parentNode === el) { self.cellClick(el, ev); } var mon = null; - if (typeof el.month != "undefined") { + if (typeof el.month !== "undefined") { mon = el; } - if (typeof el.parentNode.month != "undefined") { + if (typeof el.parentNode.month !== "undefined") { mon = el.parentNode; } var date = null; if (mon) { date = new Date(self.date); - if (mon.month != date.getLocalMonth(self.params.dateType)) { + if (mon.month !== date.getLocalMonth(self.params.dateType)) { date.setLocalMonth(self.params.dateType, mon.month); self.setDate(date); self.dateClicked = false; @@ -379,15 +370,15 @@ } } else { var year = null; - if (typeof el.year != "undefined") { + if (typeof el.year !== "undefined") { year = target; } - if (typeof el.parentNode.year != "undefined") { + if (typeof el.parentNode.year !== "undefined") { year = target.parentNode; } if (year) { date = new Date(self.date); - if (year.year != date.getLocalFullYear(self.params.dateType)) { + if (year.year !== date.getLocalFullYear(self.params.dateType)) { date.setFullYear(self.params.dateType, year.year); self.setDate(date); self.dateClicked = false; @@ -407,17 +398,16 @@ newdate = false, date = null; - if (typeof el.navtype == "undefined") { + if (typeof el.navtype === "undefined") { if (self.currentDateEl) { el.classList.add("selected"); self.currentDateEl = el.caldate; - closing = (self.currentDateEl == el.caldate); + closing = (self.currentDateEl === el.caldate); if (!closing) { self.currentDateEl = el.caldate; } } self.date.setLocalDateOnly('gregorian', el.caldate); - date = self.date; var other_month = !(self.dateClicked = !el.otherMonth); if (self.currentDateEl) { newdate = !el.disabled; } if (other_month) { @@ -484,7 +474,7 @@ if (!date.equalsTo(self.date)) { this.setDate(date); newdate = true; - } else if (el.navtype == 0) { + } else if (el.navtype === 0) { newdate = closing = true; } } @@ -507,42 +497,31 @@ /** Method to handle keyboard click events **/ JoomlaCalendar.prototype._handleCalKeyEvent = function (ev) { var self = this, - K = parseInt(ev.keyCode); + K = ev.keyCode; // Get value from input - if (ev.target === this.inputField && (K === 13 || K === 9) && !ev.shiftKey) { - if (this.inputField.value != '') { - self.date = Date.parseFieldDate(this.inputField.value, self.params.dateFormat, self.params.dateType); - this.processCalendar(self.params.firstDayOfWeek, self.date); - this.cellClick(self.currentDateEl, ev); - } else { - this.inputField.value = ''; - this.inputField.setAttribute('value', ''); - this.inputField.setAttribute('data-alt-value', '0000-00-00 00:00:00'); - } + if (ev.target === this.inputField && (K === 13 || K === 9)) { this.close(); } - if (self.params.direction == 'rtl') { - if (K == 37) { + if (self.params.direction === 'rtl') { + if (K === 37) { K = 39; - } else if (K == 39) { + } else if (K === 39) { K = 37; } } - if (ev.shiftKey && K === 32) { // KEY Shift + space (now) - this.cellClick(self._nav_now, ev); + if (K === 32) { // KEY Shift + space (now) + if (ev.shiftKey) { + ev.preventDefault(); + this.cellClick(self._nav_now, ev); + self.close(); + } } if (K === 27) { // KEY esc (close); this.close(); } - if (ev.shiftKey && K === 13) { // KEY enter (select and close) - if (this.params.showsTime) { - this.dateClicked = false; - } - this.cellClick(self.currentDateEl, ev); - } if (K === 38) { // KEY up (previous week) this.moveCursorBy(7); } @@ -555,12 +534,12 @@ if (K === 39) { // KEY right (next day) this.moveCursorBy( -1); } - if (ev.target === this.inputField && !(K>48 || K<57 || K===186 || K===189 || K===190 || K === 32)) { + if (ev.target === this.inputField && !(K>48 || K<57 || K===186 || K===189 || K===190 || K===32)) { return stopCalEvent(ev); } }; - /** Method to create the html stracture of the calendar */ + /** Method to create the html structure of the calendar */ JoomlaCalendar.prototype._create = function () { var self = this, parent = this.element, @@ -617,7 +596,7 @@ for (var key in dataAttr) { cell.setAttribute(key, dataAttr[key]); } - if (navtype != 0 && Math.abs(navtype) <= 2) { + if (navtype !== 0 && Math.abs(navtype) <= 2) { cell.className += " nav"; } @@ -627,7 +606,7 @@ cell.calendar = cal; cell.navtype = navtype; - if (navtype != 0 && Math.abs(navtype) <= 2) { + if (navtype !== 0 && Math.abs(navtype) <= 2) { cell.innerHTML = "" + text + ""; } else { cell.innerHTML = cs ? "
" + text + "
" : text; @@ -682,7 +661,7 @@ cell.calendar = self; cell.fdow = realday; } - if (weekend.indexOf(weekend) != -1) { + if (weekend.indexOf(weekend) !== -1) { cell.classList.add("weekend"); } @@ -734,7 +713,7 @@ part._range = []; for (var i = range_start; i <= range_end; ++i) { var txt, selAttr = ''; - if (i == selected) { + if (i === selected) { selAttr = true; } if (i < 10 && range_end >= 10) { @@ -804,29 +783,31 @@ row = createElement("div", this.wrapper); row.className = "buttons-wrapper btn-group"; + this._nav_save = hh(JoomlaCalLocale.save, '', 100, 'button', '', 'js-btn btn btn-clear', {"data-action": "clear"}); + + if (!this.inputField.hasAttribute('required')) { + var savea = row.querySelector('[data-action="clear"]'); + savea.addEventListener("click", function (e) { + e.preventDefault(); + var days = self.table.querySelectorAll('td'); + for (var i = 0; i < days.length; i++) { + if (days[i].classList.contains('selected')) { + days[i].classList.remove('selected'); + break; + } + } + self.inputField.setAttribute('data-alt-value', "0000-00-00 00:00:00"); + self.inputField.setAttribute('value', ''); + self.inputField.value = ''; + }); + } + if (this.params.showsTodayBtn) { - this._nav_save = hh(JoomlaCalLocale.save, '', 100, 'a', '', 'js-btn btn btn-clear', {"data-action": "clear"}); - - if (!this.inputField.hasAttribute('required')) { - var savea = row.querySelector('[data-action="clear"]'); - savea.addEventListener("click", - function (e) { - var days = self.table.querySelectorAll('td'); - for (var i = 0; i < days.length; i++) { - if (days[i].classList.contains('selected')) { - days[i].classList.remove('selected'); - break; - } - } - self.inputField.setAttribute('data-alt-value', "0000-00-00 00:00:00"); - self.inputField.setAttribute('value', ''); - self.inputField.value = ''; - }); - } + this._nav_now = hh(JoomlaCalLocale.today, '', 0, 'button', '', 'js-btn btn btn-today', {"data-action": "today"}); - this._nav_now = hh(JoomlaCalLocale.today, '', 0, 'a', '', 'js-btn btn btn-today', {"data-action": "today"}); - var todaya = row.querySelector('[data-action="today"]'); - todaya.addEventListener('click', function () { + var todaya = this.wrapper.querySelector('[data-action="today"]'); + todaya.addEventListener('click', function (e) { + e.preventDefault(); self.date.setLocalDateOnly('gregorian', new Date()); // TODAY self.dateClicked = true; self.callHandler(); @@ -834,9 +815,29 @@ }); } - this._nav_exit = hh(JoomlaCalLocale.exit, '', 999, 'a', '', 'js-btn btn btn-exit', {"data-action": "exit"}); - var exita = row.querySelector('[data-action="exit"]'); - exita.addEventListener('click', function () { self.close(); }); + this._nav_exit = hh(JoomlaCalLocale.exit, '', 999, 'button', '', 'js-btn btn btn-exit', {"data-action": "exit"}); + var exita = this.wrapper.querySelector('[data-action="exit"]'); + exita.addEventListener('click', function (e) { + e.preventDefault(); + if (!self.dateClicked) { + if (self.inputField.value) { + if (self.params.dateType !== 'gregorian') { + self.inputField.setAttribute('data-local-value', self.inputField.value); + } + if (typeof self.dateClicked === 'undefined') { + // value needs to be validated + self.inputField.setAttribute('data-alt-value', Date.parseFieldDate(self.inputField.value, self.params.dateFormat, self.params.dateType) + .print(self.params.dateFormat, 'gregorian', false)); + } else { + self.inputField.setAttribute('data-alt-value', self.date.print(self.params.dateFormat, 'gregorian', false)); + } + } else { + self.inputField.setAttribute('data-alt-value', '0000-00-00 00:00:00'); + } + self.date = Date.parseFieldDate(self.inputField.getAttribute('data-alt-value'), self.params.dateFormat, self.params.dateType); + } + self.close(); + }); this.processCalendar(); }; @@ -908,7 +909,7 @@ var wday = date.getLocalDay(this.params.dateType); cell.pos = i << 4 | j; dpos[j] = cell; - var current_month = (date.getLocalMonth(this.params.dateType) == month); + var current_month = (date.getLocalMonth(this.params.dateType) === month); if (!current_month) { if (this.params.showsOthers) { cell.className += " disabled othermonth "; @@ -925,17 +926,17 @@ cell.style.cursor = "pointer"; } cell.disabled = false; - cell.innerHTML = this.params.debug ? iday : Date.convertNumbers(iday); // translated day number for each cell + cell.innerHTML = this.params.debug ? iday : Date.convertNumbers(iday); // translated day number for each cell if (!cell.disabled) { cell.caldate = new Date(date); - if (current_month && iday == mday) { + if (current_month && iday === mday) { cell.className += " selected"; this.currentDateEl = cell; } - if (date.getLocalFullYear(this.params.dateType) == TY && date.getLocalMonth(this.params.dateType) == TM && iday == TD) { + if (date.getLocalFullYear(this.params.dateType) === TY && date.getLocalMonth(this.params.dateType) === TM && iday === TD) { cell.className += " today"; } - if (weekend.indexOf(wday) != -1) + if (weekend.indexOf(wday) !== -1) cell.className += " weekend"; } } @@ -995,19 +996,32 @@ JoomlaCalendar.prototype._bindEvents = function () { var self = this; this.inputField.addEventListener('blur', function(event) { - var elem = event.target; - while (elem.parentNode) { - elem = elem.parentNode; - if (elem.classList.contains('field-calendar')) { - if (event.target.value) { - event.target.setAttribute('data-alt-value', event.target.value); + var calObj = JoomlaCalendar.getCalObject(this)._joomlaCalendar; + + // If calendar is open we will handle the event elsewhere + if (calObj.dropdownElement.style.display === 'block') { + event.preventDefault(); + return; + } + + if (calObj) { + if (calObj.inputField.value) { + if (calObj.params.dateType !== 'gregorian') { + calObj.inputField.setAttribute('data-local-value', calObj.inputField.value); + } + if (typeof calObj.dateClicked === 'undefined') { + // value needs to be validated + calObj.inputField.setAttribute('data-alt-value', Date.parseFieldDate(calObj.inputField.value, calObj.params.dateFormat, calObj.params.dateType) + .print(calObj.params.dateFormat, 'gregorian', false)); } else { - event.target.setAttribute('data-alt-value', '0000-00-00 00:00:00'); + calObj.inputField.setAttribute('data-alt-value', calObj.date.print(calObj.params.dateFormat, 'gregorian', false)); } - elem._joomlaCalendar.checkInputs(); - return; + } else { + calObj.inputField.setAttribute('data-alt-value', '0000-00-00 00:00:00'); } + calObj.date = Date.parseFieldDate(calObj.inputField.getAttribute('data-alt-value'), calObj.params.dateFormat, calObj.params.dateType); } + self.close(); }, true); this.button.addEventListener('click', function() { @@ -1017,7 +1031,7 @@ /** Helpers **/ var stopCalEvent = function (ev) { ev || (ev = window.event); ev.preventDefault(); ev.stopPropagation(); return false; }; - var createElement = function (type, parent) { var el = null; el = document.createElement(type); if (typeof parent != "undefined") { parent.appendChild(el); } return el; }; + var createElement = function (type, parent) { var el = null; el = document.createElement(type); if (typeof parent !== "undefined") { parent.appendChild(el); } return el; }; var isInt = function (input) { return !isNaN(input) && (function(x) { return (x | 0) === x; })(parseFloat(input)) }; var getBoundary = function (input, type) { var date = new Date(); var y = date.getLocalFullYear(type); return y + input; }; /** @@ -1060,11 +1074,21 @@ /** Method to change input values with the data-alt-value values. **/ JoomlaCalendar.prototype.setAltValue = function() { var input = this.inputField; + if (input.getAttribute('disabled')) return; + input.value = input.getAttribute('data-alt-value') ? input.getAttribute('data-alt-value') : ''; + }; - if (input.getAttribute("data-alt-value")) { - input.value = input.getAttribute('data-alt-value'); - } else { - input.value = ''; + /** Method to change the inputs before submit. **/ + JoomlaCalendar.onSubmit = function() { + var elements = document.querySelectorAll(".field-calendar"); + + for (var i = 0; i < elements.length; i++) { + var element = elements[i], + instance = element._joomlaCalendar; + + if (instance) { + instance.setAltValue(); + } } }; @@ -1104,21 +1128,8 @@ instance.recreate(); } - var onSubmit = function () { - var elements = (container || document).querySelectorAll(".field-calendar"); - - for (var i = 0; i < elements.length; i++) { - var element = elements[i], - instance = element._joomlaCalendar; - - if (instance) { - instance.setAltValue(); - } - } - }; - - if (element && element.getElementsByTagName('input')[0] && element.getElementsByTagName('input')[0].form) { - element.getElementsByTagName('input')[0].form.addEventListener('submit', onSubmit); + if (element && element.getElementsByTagName('input')[0] && element.getElementsByTagName('input')[0].form && !element.getElementsByTagName('input')[0].disabled) { + element.getElementsByTagName('input')[0].form.addEventListener('submit', JoomlaCalendar.onSubmit); } }; diff --git a/media/system/js/fields/calendar.min.js b/media/system/js/fields/calendar.min.js index ea441ad7a7799..e9e11bb695558 100644 --- a/media/system/js/fields/calendar.min.js +++ b/media/system/js/fields/calendar.min.js @@ -1 +1 @@ -!function(window,document){"use strict";Date.convertNumbers=function(str){var str=str.toString();if(Object.prototype.toString.call(JoomlaCalLocale.localLangNumbers)==="[object Array]"){for(var i=0;i0;){var row=rows[--i];var cells=row.getElementsByTagName("td");for(var j=cells.length;j>0;){var cell=cells[--j]}}this.dropdownElement.style.display="block";this.hidden=false;document.addEventListener("keydown",this._calKeyEvent,true);document.addEventListener("keypress",this._calKeyEvent,true);document.addEventListener("mousedown",this._documentClick,true);var containerTmp=this.element.querySelector(".js-calendar");if(window.innerHeight+window.scrollYself.params.minYear){date.setOtherFullYear(self.params.dateType,year-1)}}break;case-1:var day=date.getLocalDate(self.params.dateType);if(mon>0){var max=date.getLocalMonthDays(self.params.dateType,mon-1);if(day>max){date.setLocalDate(self.params.dateType,max)}date.setLocalMonth(self.params.dateType,mon-1)}else if(year-->self.params.minYear){date.setOtherFullYear(self.params.dateType,year);var max=date.getLocalMonthDays(self.params.dateType,11);if(day>max){date.setLocalDate(self.params.dateType,max)}date.setLocalMonth(self.params.dateType,11)}break;case 1:var day=date.getLocalDate(self.params.dateType);if(mon<11){var max=date.getLocalMonthDays(self.params.dateType,mon+1);if(day>max){date.setLocalDate(self.params.dateType,max)}date.setLocalMonth(self.params.dateType,mon+1)}else if(yearmax){date.setLocalDate(self.params.dateType,max)}date.setLocalMonth(self.params.dateType,0)}break;case 2:if(!self.params.compressedHeader)if(year48||K<57||K===186||K===189||K===190||K===32)){return stopCalEvent(ev)}};JoomlaCalendar.prototype._create=function(){var self=this,parent=this.element,table=createElement("table"),div=createElement("div");this.table=table;table.className="table";table.cellSpacing=0;table.cellPadding=0;table.style.marginBottom=0;this.dropdownElement=div;parent.appendChild(div);if(this.params.direction){div.style.direction=this.params.direction}div.className="js-calendar";div.style.position="absolute";div.style.boxShadow="0px 0px 70px 0px rgba(0,0,0,0.67)";div.style.minWidth=this.inputField.width;div.style.padding="0";div.style.display="none";div.style.left="auto";div.style.top="auto";div.style.zIndex=1060;div.style.borderRadius="20px";this.wrapper=createElement("div");this.wrapper.className="calendar-container";div.appendChild(this.wrapper);this.wrapper.appendChild(table);var thead=createElement("thead",table);thead.className="calendar-header";var cell=null,row=null,cal=this,hh=function(text,cs,navtype,node,styles,classes,dataAttr){node=node?node:"td";styles=styles?styles:{};cell=createElement(node,row);if(cs){classes=classes?'class="'+classes+'"':"";cell.colSpan=cs}for(var key in styles){cell.style[key]=styles[key]}for(var key in dataAttr){cell.setAttribute(key,dataAttr[key])}if(navtype!=0&&Math.abs(navtype)<=2){cell.className+=" nav"}if(cs){cell.addEventListener("mousedown",self._dayMouseDown,true)}cell.calendar=cal;cell.navtype=navtype;if(navtype!=0&&Math.abs(navtype)<=2){cell.innerHTML=""+text+""}else{cell.innerHTML=cs?"
"+text+"
":text;if(!cs&&classes){cell.className=classes}}return cell};if(this.params.compressedHeader===false){row=createElement("tr",thead);row.className="calendar-head-row";this._nav_py=hh("‹",1,-2,"",{"text-align":"center","font-size":"18px","line-height":"18px"},"js-btn btn-prev-year");this.title=hh('
',this.params.weekNumbers?6:5,300);this.title.className="title";this._nav_ny=hh(" ›",1,2,"",{"text-align":"center","font-size":"18px","line-height":"18px"},"js-btn btn-next-year")}row=createElement("tr",thead);row.className="calendar-head-row";this._nav_pm=hh("‹",1,-1,"",{"text-align":"center","font-size":"2em","line-height":"1em"},"js-btn btn-prev-month");this._nav_month=hh('
',this.params.weekNumbers?6:5,888,"td",{textAlign:"center"});this._nav_month.className="title";this._nav_nm=hh(" ›",1,1,"",{"text-align":"center","font-size":"2em","line-height":"1em"},"js-btn btn-next-month");row=createElement("tr",thead);row.className=self.params.weekNumbers?"daynames wk":"daynames";if(this.params.weekNumbers){cell=createElement("td",row);cell.className="day-name wn";cell.innerHTML=JoomlaCalLocale.wk}for(var i=7;i>0;--i){cell=createElement("td",row);if(!i){cell.calendar=self}}this.firstdayname=this.params.weekNumbers?row.firstChild.nextSibling:row.firstChild;var fdow=this.params.firstDayOfWeek,cell=this.firstdayname,weekend=JoomlaCalLocale.weekend;for(var i=0;i<7;++i){var realday=(i+fdow)%7;cell.classList.add("day-name");this.params.weekNumbers?cell.classList.add("day-name-week"):"";if(i){cell.calendar=self;cell.fdow=realday}if(weekend.indexOf(weekend)!=-1){cell.classList.add("weekend")}cell.innerHTML=JoomlaCalLocale.shortDays[(i+fdow)%7];cell=cell.nextSibling}var tbody=createElement("tbody",table);this.tbody=tbody;for(i=6;i>0;--i){row=createElement("tr",tbody);if(this.params.weekNumbers){cell=createElement("td",row)}for(var j=7;j>0;--j){cell=createElement("td",row);cell.calendar=this;cell.addEventListener("mousedown",this._dayMouseDown,true)}}if(this.params.showsTime){row=createElement("tr",tbody);row.className="time";cell=createElement("td",row);cell.className="time time-title";cell.colSpan=1;cell.style.verticalAlign="middle";cell.innerHTML=" ";var cell1=createElement("td",row);cell1.className="time hours-select";cell1.colSpan=2;var cell2=createElement("td",row);cell2.className="time minutes-select";cell2.colSpan=2;(function(){function makeTimePart(className,selected,range_start,range_end,cellTml){var part=createElement("select",cellTml),num;part.calendar=self;part.className=className;part.setAttribute("data-chosen",true);part.style.width="100%";part.navtype=50;part._range=[];for(var i=range_start;i<=range_end;++i){var txt,selAttr="";if(i==selected){selAttr=true}if(i<10&&range_end>=10){num="0"+i;txt=Date.convertNumbers("0")+Date.convertNumbers(i)}else{num=""+i;txt=""+Date.convertNumbers(i)}part.options.add(new Option(txt,num,selAttr,selAttr))}return part}var hrs=self.date.getHours(),mins=self.date.getMinutes(),t12=!self.params.time24,pm=self.date.getHours()>12;if(t12&&pm){hrs-=12}var H=makeTimePart("time time-hours",hrs,t12?1:0,t12?12:23,cell1),M=makeTimePart("time time-minutes",mins,0,59,cell2),AP=null;cell=createElement("td",row);cell.className="time ampm-select";cell.colSpan=self.params.weekNumbers?1:2;if(t12){var selAttr=true,altDate=Date.parseFieldDate(self.inputField.getAttribute("data-alt-value"),self.params.dateFormat,"gregorian");pm=altDate.getHours()>12;var part=createElement("select",cell);part.className="time-ampm";part.style.width="100%";part.options.add(new Option(JoomlaCalLocale.PM,"pm",pm?selAttr:"",pm?selAttr:""));part.options.add(new Option(JoomlaCalLocale.AM,"am",pm?"":selAttr,pm?"":selAttr));AP=part;AP.addEventListener("change",function(event){self.updateTime(event.target.parentNode.parentNode.childNodes[1].childNodes[0].value,event.target.parentNode.parentNode.childNodes[2].childNodes[0].value,event.target.parentNode.parentNode.childNodes[3].childNodes[0].value)},false)}else{cell.innerHTML=" ";cell.colSpan=self.params.weekNumbers?3:2}H.addEventListener("change",function(event){self.updateTime(event.target.parentNode.parentNode.childNodes[1].childNodes[0].value,event.target.parentNode.parentNode.childNodes[2].childNodes[0].value,event.target.parentNode.parentNode.childNodes[3].childNodes[0].value)},false);M.addEventListener("change",function(event){self.updateTime(event.target.parentNode.parentNode.childNodes[1].childNodes[0].value,event.target.parentNode.parentNode.childNodes[2].childNodes[0].value,event.target.parentNode.parentNode.childNodes[3].childNodes[0].value)},false)})()}row=createElement("div",this.wrapper);row.className="buttons-wrapper btn-group";if(this.params.showsTodayBtn){this._nav_save=hh(JoomlaCalLocale.save,"",100,"a","","js-btn btn btn-clear",{"data-action":"clear"});if(!this.inputField.hasAttribute("required")){var savea=row.querySelector('[data-action="clear"]');savea.addEventListener("click",function(e){var days=self.table.querySelectorAll("td");for(var i=0;ithis.params.maxYear){year=this.params.maxYear;date.getOtherFullYear(this.params.dateType,year)}this.params.firstDayOfWeek=firstDayOfWeek;this.date=new Date(date);var month=date.getLocalMonth(this.params.dateType);var mday=date.getLocalDate(this.params.dateType);date.setLocalDate(this.params.dateType,1);var day1=(date.getLocalDay(this.params.dateType)-this.params.firstDayOfWeek)%7;if(day1<0){day1+=7}date.setLocalDate(this.params.dateType,-day1);date.setLocalDate(this.params.dateType,date.getLocalDate(this.params.dateType)+1);var row=this.tbody.firstChild,ar_days=this.ar_days=new Array,weekend=JoomlaCalLocale.weekend,monthDays=parseInt(date.getLocalWeekDays(this.params.dateType));for(var i=0;i12&&t12){hrs-=12}hrs=hrs<10?"0"+hrs:hrs;mins=mins<10?"0"+mins:mins;var hoursEl=this.table.querySelector(".time-hours"),minsEl=this.table.querySelector(".time-minutes");this.resetSelected(hoursEl);hoursEl.value=hrs;this.resetSelected(minsEl);minsEl.value=mins;if(!this.params.time24){var dateAlt=new Date(this.inputField.getAttribute("data-alt-value")),ampmEl=this.table.querySelector(".time-ampm"),hrsAlt=dateAlt.getHours();if(hrsAlt>12){this.resetSelected(ampmEl);ampmEl.value="pm"}}}if(!this.params.compressedHeader){this._nav_month.getElementsByTagName("span")[0].innerHTML=this.params.debug?month+" "+JoomlaCalLocale.months[month]:JoomlaCalLocale.months[month];this.title.getElementsByTagName("span")[0].innerHTML=this.params.debug?year+" "+Date.convertNumbers(year.toString()):Date.convertNumbers(year.toString())}else{var tmpYear=Date.convertNumbers(year.toString());this._nav_month.getElementsByTagName("span")[0].innerHTML=!this.params.monthBefore?JoomlaCalLocale.months[month]+" - "+tmpYear:tmpYear+" - "+JoomlaCalLocale.months[month]}this.table.style.visibility="visible"};JoomlaCalendar.prototype._bindEvents=function(){var self=this;this.inputField.addEventListener("blur",function(event){var elem=event.target;while(elem.parentNode){elem=elem.parentNode;if(elem.classList.contains("field-calendar")){if(event.target.value){event.target.setAttribute("data-alt-value",event.target.value)}else{event.target.setAttribute("data-alt-value","0000-00-00 00:00:00")}elem._joomlaCalendar.checkInputs();return}}self.close()},true);this.button.addEventListener("click",function(){self.show()},false)};var stopCalEvent=function(ev){ev||(ev=window.event);ev.preventDefault();ev.stopPropagation();return false};var createElement=function(type,parent){var el=null;el=document.createElement(type);if(typeof parent!="undefined"){parent.appendChild(el)}return el};var isInt=function(input){return!isNaN(input)&&function(x){return(x|0)===x}(parseFloat(input))};var getBoundary=function(input,type){var date=new Date;var y=date.getLocalFullYear(type);return y+input};if(!Array.prototype.indexOf){Array.prototype.indexOf=function(elt){var len=this.length>>>0,from=Number(arguments[1])||0;from=from<0?Math.ceil(from):Math.floor(from);if(from<0){from+=len}for(;fromt.params.minYear&&l.setOtherFullYear(t.params.dateType,i-1);break;case-1:d=l.getLocalDate(t.params.dateType);n>0?(d>(m=l.getLocalMonthDays(t.params.dateType,n-1))&&l.setLocalDate(t.params.dateType,m),l.setLocalMonth(t.params.dateType,n-1)):i-- >t.params.minYear&&(l.setOtherFullYear(t.params.dateType,i),d>(m=l.getLocalMonthDays(t.params.dateType,11))&&l.setLocalDate(t.params.dateType,m),l.setLocalMonth(t.params.dateType,11));break;case 1:var d=l.getLocalDate(t.params.dateType);if(n<11)d>(m=l.getLocalMonthDays(t.params.dateType,n+1))&&l.setLocalDate(t.params.dateType,m),l.setLocalMonth(t.params.dateType,n+1);else if(im&&l.setLocalDate(t.params.dateType,m),l.setLocalMonth(t.params.dateType,0)}break;case 2:t.params.compressedHeader||i48||t<57||186===t||189===t||190===t||32===t))return r(e)},t.prototype._create=function(){var e=this,a=this.element,t=s("table"),r=s("div");this.table=t,t.className="table",t.cellSpacing=0,t.cellPadding=0,t.style.marginBottom=0,this.dropdownElement=r,a.appendChild(r),this.params.direction&&(r.style.direction=this.params.direction),r.className="js-calendar",r.style.position="absolute",r.style.boxShadow="0px 0px 70px 0px rgba(0,0,0,0.67)",r.style.minWidth=this.inputField.width,r.style.padding="0",r.style.display="none",r.style.left="auto",r.style.top="auto",r.style.zIndex=1060,r.style.borderRadius="20px",this.wrapper=s("div"),this.wrapper.className="calendar-container",r.appendChild(this.wrapper),this.wrapper.appendChild(t);var l=s("thead",t);l.className="calendar-header";var o=null,i=null,n=this,d=function(a,t,r,l,d,m,p){l=l||"td",d=d||{},o=s(l,i),t&&(m=m?'class="'+m+'"':"",o.colSpan=t);for(var c in d)o.style[c]=d[c];for(var c in p)o.setAttribute(c,p[c]);return 0!==r&&Math.abs(r)<=2&&(o.className+=" nav"),t&&o.addEventListener("mousedown",e._dayMouseDown,!0),o.calendar=n,o.navtype=r,0!==r&&Math.abs(r)<=2?o.innerHTML=""+a+"":(o.innerHTML=t?"
"+a+"
":a,!t&&m&&(o.className=m)),o};!1===this.params.compressedHeader&&((i=s("tr",l)).className="calendar-head-row",this._nav_py=d("‹",1,-2,"",{"text-align":"center","font-size":"18px","line-height":"18px"},"js-btn btn-prev-year"),this.title=d('
',this.params.weekNumbers?6:5,300),this.title.className="title",this._nav_ny=d(" ›",1,2,"",{"text-align":"center","font-size":"18px","line-height":"18px"},"js-btn btn-next-year")),(i=s("tr",l)).className="calendar-head-row",this._nav_pm=d("‹",1,-1,"",{"text-align":"center","font-size":"2em","line-height":"1em"},"js-btn btn-prev-month"),this._nav_month=d('
',this.params.weekNumbers?6:5,888,"td",{textAlign:"center"}),this._nav_month.className="title",this._nav_nm=d(" ›",1,1,"",{"text-align":"center","font-size":"2em","line-height":"1em"},"js-btn btn-next-month"),(i=s("tr",l)).className=e.params.weekNumbers?"daynames wk":"daynames",this.params.weekNumbers&&((o=s("td",i)).className="day-name wn",o.innerHTML=JoomlaCalLocale.wk);for(c=7;c>0;--c)o=s("td",i),c||(o.calendar=e);this.firstdayname=this.params.weekNumbers?i.firstChild.nextSibling:i.firstChild;for(var m=this.params.firstDayOfWeek,o=this.firstdayname,p=JoomlaCalLocale.weekend,c=0;c<7;++c){var u=(c+m)%7;o.classList.add("day-name"),this.params.weekNumbers&&o.classList.add("day-name-week"),c&&(o.calendar=e,o.fdow=u),-1!==p.indexOf(p)&&o.classList.add("weekend"),o.innerHTML=JoomlaCalLocale.shortDays[(c+m)%7],o=o.nextSibling}var h=s("tbody",t);for(this.tbody=h,c=6;c>0;--c){i=s("tr",h),this.params.weekNumbers&&(o=s("td",i));for(var y=7;y>0;--y)(o=s("td",i)).calendar=this,o.addEventListener("mousedown",this._dayMouseDown,!0)}if(this.params.showsTime){(i=s("tr",h)).className="time",(o=s("td",i)).className="time time-title",o.colSpan=1,o.style.verticalAlign="middle",o.innerHTML=" ";var v=s("td",i);v.className="time hours-select",v.colSpan=2;var g=s("td",i);g.className="time minutes-select",g.colSpan=2,function(){function a(a,t,r,l,o){var i,n=s("select",o);n.calendar=e,n.className=a,n.setAttribute("data-chosen",!0),n.style.width="100%",n.navtype=50,n._range=[];for(var d=r;d<=l;++d){var m,p="";d===t&&(p=!0),d<10&&l>=10?(i="0"+d,m=Date.convertNumbers("0")+Date.convertNumbers(d)):(i=""+d,m=""+Date.convertNumbers(d)),n.options.add(new Option(m,i,p,p))}return n}var t=e.date.getHours(),r=e.date.getMinutes(),l=!e.params.time24,n=e.date.getHours()>12;l&&n&&(t-=12);var d=a("time time-hours",t,l?1:0,l?12:23,v),m=a("time time-minutes",r,0,59,g);if(o=s("td",i),o.className="time ampm-select",o.colSpan=e.params.weekNumbers?1:2,l){n=Date.parseFieldDate(e.inputField.getAttribute("data-alt-value"),e.params.dateFormat,"gregorian").getHours()>12;var p=s("select",o);p.className="time-ampm",p.style.width="100%",p.options.add(new Option(JoomlaCalLocale.PM,"pm",!!n||"",!!n||"")),p.options.add(new Option(JoomlaCalLocale.AM,"am",!n||"",!n||"")),p.addEventListener("change",function(a){e.updateTime(a.target.parentNode.parentNode.childNodes[1].childNodes[0].value,a.target.parentNode.parentNode.childNodes[2].childNodes[0].value,a.target.parentNode.parentNode.childNodes[3].childNodes[0].value)},!1)}else o.innerHTML=" ",o.colSpan=e.params.weekNumbers?3:2;d.addEventListener("change",function(a){e.updateTime(a.target.parentNode.parentNode.childNodes[1].childNodes[0].value,a.target.parentNode.parentNode.childNodes[2].childNodes[0].value,a.target.parentNode.parentNode.childNodes[3].childNodes[0].value)},!1),m.addEventListener("change",function(a){e.updateTime(a.target.parentNode.parentNode.childNodes[1].childNodes[0].value,a.target.parentNode.parentNode.childNodes[2].childNodes[0].value,a.target.parentNode.parentNode.childNodes[3].childNodes[0].value)},!1)}()}(i=s("div",this.wrapper)).className="buttons-wrapper btn-group",this._nav_save=d(JoomlaCalLocale.save,"",100,"button","","js-btn btn btn-clear",{"data-action":"clear"}),this.inputField.hasAttribute("required")||i.querySelector('[data-action="clear"]').addEventListener("click",function(a){a.preventDefault();for(var t=e.table.querySelectorAll("td"),r=0;rthis.params.maxYear&&(o=this.params.maxYear,a.getOtherFullYear(this.params.dateType,o)),this.params.firstDayOfWeek=e,this.date=new Date(a);var m=a.getLocalMonth(this.params.dateType),p=a.getLocalDate(this.params.dateType);a.setLocalDate(this.params.dateType,1);var c=(a.getLocalDay(this.params.dateType)-this.params.firstDayOfWeek)%7;c<0&&(c+=7),a.setLocalDate(this.params.dateType,-c),a.setLocalDate(this.params.dateType,a.getLocalDate(this.params.dateType)+1);for(var u=this.tbody.firstChild,h=this.ar_days=new Array,y=JoomlaCalLocale.weekend,v=parseInt(a.getLocalWeekDays(this.params.dateType)),g=0;g12&&d&&(i-=12),i=i<10?"0"+i:i,n=n<10?"0"+n:n;var k=this.table.querySelector(".time-hours"),F=this.table.querySelector(".time-minutes");if(this.resetSelected(k),k.value=i,this.resetSelected(F),F.value=n,!this.params.time24){var J=new Date(this.inputField.getAttribute("data-alt-value")),A=this.table.querySelector(".time-ampm");J.getHours()>12&&(this.resetSelected(A),A.value="pm")}}if(this.params.compressedHeader){var M=Date.convertNumbers(o.toString());this._nav_month.getElementsByTagName("span")[0].innerHTML=this.params.monthBefore?M+" - "+JoomlaCalLocale.months[m]:JoomlaCalLocale.months[m]+" - "+M}else this._nav_month.getElementsByTagName("span")[0].innerHTML=this.params.debug?m+" "+JoomlaCalLocale.months[m]:JoomlaCalLocale.months[m],this.title.getElementsByTagName("span")[0].innerHTML=this.params.debug?o+" "+Date.convertNumbers(o.toString()):Date.convertNumbers(o.toString());this.table.style.visibility="visible"},t.prototype._bindEvents=function(){var e=this;this.inputField.addEventListener("blur",function(a){var r=t.getCalObject(this)._joomlaCalendar;"block"!==r.dropdownElement.style.display?(r&&(r.inputField.value?("gregorian"!==r.params.dateType&&r.inputField.setAttribute("data-local-value",r.inputField.value),void 0===r.dateClicked?r.inputField.setAttribute("data-alt-value",Date.parseFieldDate(r.inputField.value,r.params.dateFormat,r.params.dateType).print(r.params.dateFormat,"gregorian",!1)):r.inputField.setAttribute("data-alt-value",r.date.print(r.params.dateFormat,"gregorian",!1))):r.inputField.setAttribute("data-alt-value","0000-00-00 00:00:00"),r.date=Date.parseFieldDate(r.inputField.getAttribute("data-alt-value"),r.params.dateFormat,r.params.dateType)),e.close()):a.preventDefault()},!0),this.button.addEventListener("click",function(){e.show()},!1)};var r=function(a){return a||(a=e.event),a.preventDefault(),a.stopPropagation(),!1},s=function(e,t){var r=null;return r=a.createElement(e),void 0!==t&&t.appendChild(r),r},l=function(e){return!isNaN(e)&&function(e){return(0|e)===e}(parseFloat(e))},o=function(e,a){return(new Date).getLocalFullYear(a)+e};Array.prototype.indexOf||(Array.prototype.indexOf=function(e){var a=this.length>>>0,t=Number(arguments[1])||0;for((t=t<0?Math.ceil(t):Math.floor(t))<0&&(t+=a);t