(function($) { "use strict"; document.addEventListener('DOMContentLoaded', function() { var today = new Date(), year = today.getFullYear(), month = today.getMonth(), day = today.getDate(), // Dia atual monthTag = ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], days = document.getElementsByTagName('td'), selectedDay, setDate, daysLen = days.length; function Calendar(selector, options) { this.options = options; this.draw(); } Calendar.prototype.draw = function() { this.getCookie('selected_day'); this.getOptions(); this.loadToday(); // Carrega a agenda do dia atual this.drawHeader(); this.drawDays(); var that = this, reset = document.getElementById('reset'), pre = document.getElementsByClassName('pre-button'), next = document.getElementsByClassName('next-button'), todayBtn = document.getElementById('today'); pre[0].addEventListener('click', function() { that.preMonth(); }); next[0].addEventListener('click', function() { that.nextMonth(); }); reset.addEventListener('click', function() { that.reset(); }); todayBtn.addEventListener('click', function() { that.loadToday(); // Carrega a agenda do dia atual ao clicar em "Hoje" }); while (daysLen--) { days[daysLen].addEventListener('click', function() { that.clickDay(this); }); } }; Calendar.prototype.drawHeader = function() { var headDay = document.getElementsByClassName('head-day'), headMonth = document.getElementsByClassName('head-month'); headDay[0].innerHTML = day; // Exibe o dia atual headMonth[0].innerHTML = monthTag[month] + " - " + year; }; Calendar.prototype.drawDays = function() { var startDay = new Date(year, month, 1).getDay(), nDays = new Date(year, month + 1, 0).getDate(), n = startDay, selectDia = month + 1; for (var k = 0; k < 42; k++) { days[k].innerHTML = ''; days[k].id = (year) + '-' + (month + 1) + '-' + (k + 1); days[k].className = ''; } for (var i = 1; i <= nDays; i++) { days[n].innerHTML = i; n++; } // Destacar o dia atual no calendário var todayIndex = day + startDay - 1; if (todayIndex >= 0 && todayIndex < 42) { days[todayIndex].id = "today"; } }; Calendar.prototype.loadToday = function() { // Atualiza a data atual antes de carregar today = new Date(); year = today.getFullYear(); month = today.getMonth(); day = today.getDate(); this.drawHeader(); this.drawDays(); this.clickDay(days[day + new Date(year, month, 1).getDay() - 1]); // Carrega a agenda do dia atual ao clicar em "Hoje" }; Calendar.prototype.clickDay = function(o) { var dia = o.innerHTML; var selected = document.getElementsByClassName("selected"); var len = selected.length; if (len !== 0) { selected[0].className = ""; } o.className = "selected"; selectedDay = new Date(year, month, dia); // Cria a data selecionada this.drawHeader(); this.setCookie('selected_day', 1); // Envia a data completa no formato YYYY-MM-DD para o servidor via AJAX var dataCompleta = year + '-' + ('0' + (month + 1)).slice(-2) + '-' + ('0' + dia).slice(-2); $.ajax({ url: 'calendar_files/events.php', type: 'POST', data: { data: dataCompleta }, beforeSend: function() { $("#cod_cidades").css({ 'display': 'block' }); $("#cod_cidades").html("Carregando..."); }, success: function(data) { $("#cod_cidades").css({ 'display': 'block' }); $("#cod_cidades").html(data); }, error: function(data) { $("#cod_cidades").css({ 'display': 'block' }); $("#cod_cidades").html("Erro ao carregar"); } }); }; Calendar.prototype.preMonth = function() { if (month < 1) { month = 11; year = year - 1; } else { month = month - 1; } this.drawHeader(); this.drawDays(); }; Calendar.prototype.nextMonth = function() { if (month >= 11) { month = 0; year = year + 1; } else { month = month + 1; } this.drawHeader(); this.drawDays(); }; Calendar.prototype.getOptions = function() { if (this.options) { var sets = this.options.split('-'); setDate = new Date(sets[0], sets[1] - 1, sets[2]); day = setDate.getDate(); year = setDate.getFullYear(); month = setDate.getMonth(); } }; Calendar.prototype.reset = function() { today = new Date(); // Reinicia para o dia atual year = today.getFullYear(); month = today.getMonth(); day = today.getDate(); this.options = undefined; this.drawHeader(); this.drawDays(); }; Calendar.prototype.setCookie = function(name, expiredays) { if (expiredays) { var date = new Date(); date.setTime(date.getTime() + (expiredays * 24 * 60 * 60 * 1000)); var expires = "; expires=" + date.toGMTString(); } else { var expires = ""; } document.cookie = name + "=" + selectedDay + expires + "; path=/"; }; Calendar.prototype.getCookie = function(name) { if (document.cookie.length) { var arrCookie = document.cookie.split(';'), nameEQ = name + "="; for (var i = 0, cLen = arrCookie.length; i < cLen; i++) { var c = arrCookie[i]; while (c.charAt(0) == ' ') { c = c.substring(1, c.length); } if (c.indexOf(nameEQ) === 0) { selectedDay = new Date(c.substring(nameEQ.length, c.length)); } } } }; var calendar = new Calendar(); }, false); })(jQuery);