(function ($){
'use strict';
var quick_events=[];
var quick_events_r=[];
var today=new Date();
var today_date_g=today.getDate();
var today_month_g=today.getMonth() + 1;
var today_year_g=today.getFullYear();
var order_num=0;
var word_month=new Array(quick_events_vars.m_1, quick_events_vars.m_2, quick_events_vars.m_3, quick_events_vars.m_4, quick_events_vars.m_5, quick_events_vars.m_6, quick_events_vars.m_7, quick_events_vars.m_8, quick_events_vars.m_9, quick_events_vars.m_10, quick_events_vars.m_11, quick_events_vars.m_12);
function shortTitle(text, num){
if(text){
var text_array=text.split(' ');
if(text_array.length > num){
return text_array.slice(0, num).join(' ') + ' ...';
}
return text;
}
return '';
}
function sortEventsByDate(a,b){
if(a.date < b.date){
return -1;
}else if(a.date > b.date){
return 1;
}else{
return 0;
}}
function sortEventsByUpcoming(a,b){
var today_date=new Date(today_year_g, today_month_g - 1, today_date_g);
if(Math.abs(a.date - today_date.getTime()) < Math.abs(b.date - today_date.getTime())){
return -1;
}else if(Math.abs(a.date - today_date.getTime()) > Math.abs(b.date - today_date.getTime())){
return 1;
}else{
return 0;
}}
function getDayEventsByTime(quick_events, type){
var events=[];
var today_date=new Date(today_year_g, today_month_g - 1, today_date_g);
for (var i=0; i < quick_events.length; i++){
if(type=='upcoming'){
if(quick_events[i].date >=today_date.getTime()){
events.push(quick_events[i]);
}}else{
if(quick_events[i].date < today_date.getTime()){
events.push(quick_events[i]);
}}
}
return events;
}
function dayHasEvent(quick_events, day, month, year){
var num_events=0;
var date_check=new Date(year, Number(month) - 1, day);
for (var i=0; i < quick_events.length; i++){
var start_date=new Date(quick_events[i].year, Number(quick_events[i].month) - 1, quick_events[i].day);
var end_date=new Date(quick_events[i].year, Number(quick_events[i].month) - 1, Number(quick_events[i].day) + Number(quick_events[i].duration) - 1);
if((start_date.getTime() <=date_check.getTime())&&(date_check.getTime() <=end_date.getTime())){
num_events++;
}}
if(num_events==0){
return false;
}else{
return true;
}}
function getEventOrderNumber(quick_events, id, day, month, year){
var date_check=new Date(year, Number(month) - 1, day);
var events=[];
for (var i=0; i < quick_events.length; i++){
var start_date=new Date(quick_events[i].year, Number(quick_events[i].month) - 1, quick_events[i].day);
var end_date=new Date(quick_events[i].year, Number(quick_events[i].month) - 1, Number(quick_events[i].day) + Number(quick_events[i].duration) - 1);
if((start_date.getTime() <=date_check.getTime())&&(date_check.getTime() <=end_date.getTime())){
var first_day=(start_date.getTime()==date_check.getTime()) ? true:false;
var event={id:quick_events[i].id, title:quick_events[i].title, day:quick_events[i].day, month:quick_events[i].month, year:quick_events[i].year, first_day:first_day};
events.push(event);
}}
if(events.length){
if(events[0].id==id){
var num=order_num;
order_num=0;
return num;
}else{
order_num++;
for (var j=0; j < events.length; j++){
if(events[j].id==id){
return getEventOrderNumber(quick_events, events[j-1].id, events[j-1].day, events[j-1].month, events[j-1].year);
}}
}}
return 0;
}
function getDayEvents(quick_events, day, month, year){
var n=0;
var date_check=new Date(year, Number(month) - 1, day);
var events=[];
for (var i=0; i < quick_events.length; i++){
var start_date=new Date(quick_events[i].year, Number(quick_events[i].month) - 1, quick_events[i].day);
var end_date=new Date(quick_events[i].year, Number(quick_events[i].month) - 1, Number(quick_events[i].day) + Number(quick_events[i].duration) - 1);
if((start_date.getTime() <=date_check.getTime())&&(date_check.getTime() <=end_date.getTime())){
var first_day=(start_date.getTime()==date_check.getTime()) ? true:false;
var last_day=(end_date.getTime()==date_check.getTime()) ? true:false;
var event={id:quick_events[i].id, title:quick_events[i].title, image:quick_events[i].image, day:quick_events[i].day, month:quick_events[i].month, year:quick_events[i].year, time:quick_events[i].time, duration:quick_events[i].duration, color:quick_events[i].color, location:quick_events[i].location, description:quick_events[i].description, first_day:first_day, last_day:last_day};
if(!first_day){
n=getEventOrderNumber(quick_events, quick_events[i].id, quick_events[i].day, quick_events[i].month, quick_events[i].year);
}
events[n]=event;
n++;
}}
return events;
}
function showEventsCalendar(el, quick_events, month_num, year_num, nav_time){
var layout=el.parents('.quick-events-wrapper').find('.quick-events-option-layout').html();
var date_start=el.parents('.quick-events-wrapper').find('.quick-events-option-start').html();
if(date_start=='sunday'){
var word_day=new Array(quick_events_vars.d_7, quick_events_vars.d_1, quick_events_vars.d_2, quick_events_vars.d_3, quick_events_vars.d_4, quick_events_vars.d_5, quick_events_vars.d_6);
}else{
var word_day=new Array(quick_events_vars.d_1, quick_events_vars.d_2, quick_events_vars.d_3, quick_events_vars.d_4, quick_events_vars.d_5, quick_events_vars.d_6, quick_events_vars.d_7);
}
layout=(screen.width < 768) ? 'compact':layout;
if(nav_time=='prev-year'){
year_num--;
}else if(nav_time=='next-year'){
year_num++;
}else if(nav_time=='prev-month'){
month_num--;
}else if(nav_time=='next-month'){
month_num++;
}else if(nav_time=='current'){
month_num=today_month_g;
year_num=today_year_g;
}
if(month_num==0){
month_num=12;
year_num--;
}else if(month_num==13){
month_num=1;
year_num++;
}
var first_date_g=new Date(year_num, month_num - 1, 1);
if(date_start=='sunday'){
var first_day_g=first_date_g.getDay() + 1;
}else{
var first_day_g=(first_date_g.getDay()==0) ? 7:first_date_g.getDay();
}
var last_date_g=new Date(year_num, month_num, 0);
var num_days=last_date_g.getDate();
var calendar_string='';
var day_counter=0;
calendar_string +='<div class="events-calendar ' + layout + '">';
calendar_string +='<div class="calendar-header">';
if(layout=='full'){
calendar_string +='<h4 class="current-date">' + word_month[month_num - 1] + ' <span>' + year_num + '</span></h4>';
calendar_string +='<div class="nav-time">';
calendar_string +='<span id="prev-year" class="btn-change-date">«</span>';
calendar_string +='<span id="prev-month" class="btn-change-date">‹</span>';
calendar_string +='<span id="current" class="btn-change-date">' + quick_events_vars.today + '</span>';
calendar_string +='<span id="next-month" class="btn-change-date">›</span>';
calendar_string +='<span id="next-year" class="btn-change-date">»</span>';
calendar_string +='</div>';
}else{
calendar_string +='<div class="nav-time left">';
calendar_string +='<span id="prev-year" class="btn-change-date">«</span>';
calendar_string +='<span id="prev-month" class="btn-change-date">‹</span>';
calendar_string +='</div>';
calendar_string +='<h4 class="current-date">' + word_month[month_num - 1] + ' <span>' + year_num + '</span></h4>';
calendar_string +='<div class="nav-time right">';
calendar_string +='<span id="next-month" class="btn-change-date">›</span>';
calendar_string +='<span id="next-year" class="btn-change-date">»</span>';
calendar_string +='</div>';
}
calendar_string +='</div>';
calendar_string +='<table class="calendar-table">';
calendar_string +='<tbody>';
calendar_string +='<tr>';
for (var m=0; m < word_day.length; m++){
calendar_string +='<th>' + word_day[m].substring(0, 3) + '</th>';
}
calendar_string +='</tr>';
var this_date=1;
for (var i=1; i <=6; i++){
var k=(i - 1) * 7 + 1;
if(k < (first_day_g + num_days)){
calendar_string +='<tr>';
for (var x=1; x <=7; x++){
day_counter=(this_date - first_day_g) + 1;
this_date++;
if((day_counter > num_days)||(day_counter < 1)){
calendar_string +='<td class="calendar-day blank"></td>';
}else{
var weekend_class='';
if(date_start=='sunday'){
if((x==1)||(x==7)){
weekend_class=' weekend';
}}else{
if((x==6)||(x==7)){
weekend_class=' weekend';
}}
var today_class='';
if((today_date_g==day_counter)&&(today_month_g==month_num)&&(today_year_g==year_num)){
today_class=' today';
}
var has_events_class='';
if(dayHasEvent(quick_events, day_counter, month_num, year_num)){
has_events_class=' has-events';
}
calendar_string +='<td class="calendar-day' + weekend_class + today_class + has_events_class + '">';
calendar_string +='<span class="day-num">' + day_counter + '</span>';
if(dayHasEvent(quick_events, day_counter, month_num, year_num)){
if(layout=='full'){
var events=getDayEvents(quick_events, day_counter, month_num, year_num);
for (var t=0; t < events.length; t++){
if(typeof events[t]!="undefined"){
var color=events[t].color ? events[t].color:1;
var event_class='';
if(events[t].first_day&&!events[t].last_day){
event_class='first-day';
}else if(events[t].last_day&&!events[t].first_day){
event_class='last-day';
}else if(!events[t].first_day&&!events[t].last_day){
event_class='middle-day';
}
calendar_string +='<div class="event-title ' + event_class + ' color-' + color + '" href="#' + el.attr('id') + '-popup-' + events[t].id + '"><span>' + shortTitle(events[t].title, 2) + '</span></div>';
calendar_string +='<div id="' + el.attr('id') + '-popup-' + events[t].id + '" class="event-popup zoom-anim-dialog mfp-hide">'
+ '<div class="popup-body">'
+ showEventDetail(events[t], date_start)
+ '</div>'
+ '</div>';
}else{
var event_deputize;
if(typeof events[t+1]!="undefined"){
if(typeof quick_events[events[t+1].id - 1]!="undefined"){
event_deputize=shortTitle(quick_events[events[t+1].id - 1].title, 2);
}else{
event_deputize='hidden';
}}else{
event_deputize='hidden';
}
calendar_string +='<div class="event-title hidden-title">' + event_deputize + '</div>';
}}
}else{
var events=getDayEvents(quick_events, day_counter, month_num, year_num);
for (var t=0; t < events.length; t++){
if(typeof events[t]!="undefined"){
var color=events[t].color ? events[t].color:1;
calendar_string +='<div class="event-mark color-' + color + '" href="#' + el.attr('id') + '-popup-' + events[t].id + '"></div>';
calendar_string +='<div id="' + el.attr('id') + '-popup-' + events[t].id + '" class="event-popup zoom-anim-dialog mfp-hide">'
+ '<div class="popup-body">'
+ showEventDetail(events[t], date_start)
+ '</div>'
+ '</div>';
}}
}}
calendar_string +='</td>';
}}
calendar_string +='</tr>';
}}
calendar_string +='</tbody>';
calendar_string +='</table>';
calendar_string +='<div id="month-num" style="display:none">' + month_num + '</div>';
calendar_string +='<div id="year-num" style="display:none">' + year_num + '</div>';
calendar_string +='</div>';
el.html(calendar_string);
el.find('.event-title').magnificPopup({
type: 'inline',
removalDelay: 800,
mainClass: 'my-mfp-zoom-in'
});
el.find('.event-mark').magnificPopup({
type: 'inline',
removalDelay: 800,
mainClass: 'my-mfp-zoom-in'
});
}
function showEventsList(el, quick_events, view, layout, max_events){
var date_start=el.parents('.quick-events-wrapper').find('.quick-events-option-start').html();
var upcoming=el.parents('.quick-events-wrapper').find('.quick-events-option-upcoming').html();
if(date_start=='sunday'){
var word_day=new Array(quick_events_vars.d_7, quick_events_vars.d_1, quick_events_vars.d_2, quick_events_vars.d_3, quick_events_vars.d_4, quick_events_vars.d_5, quick_events_vars.d_6);
}else{
var word_day=new Array(quick_events_vars.d_1, quick_events_vars.d_2, quick_events_vars.d_3, quick_events_vars.d_4, quick_events_vars.d_5, quick_events_vars.d_6, quick_events_vars.d_7);
}
var upcoming_events=getDayEventsByTime(quick_events, 'upcoming');
upcoming_events.sort(sortEventsByUpcoming);
var past_events=getDayEventsByTime(quick_events, 'past');
past_events.sort(sortEventsByUpcoming);
var quick_list_events=(upcoming==1) ? upcoming_events:upcoming_events.concat(past_events);
quick_list_events=quick_list_events.slice(0, max_events);
var events_list='';
events_list +='<div class="events-list ' + layout + ' ' + view + '">';
for (var i=0; i < quick_list_events.length; i++){
var day=new Date(quick_list_events[i].year, Number(quick_list_events[i].month) - 1, quick_list_events[i].day);
if(date_start=='sunday'){
var event_day=word_day[day.getDay()];
}else{
if(day.getDay() > 0){
var event_day=word_day[day.getDay() - 1];
}else{
var event_day=word_day[6];
}}
var event_date=quick_list_events[i].day + ' ' + word_month[Number(quick_list_events[i].month) - 1] + ', ' + quick_list_events[i].year;
var event_end_time='';
if(quick_list_events[i].duration > 1){
var end_date=new Date(quick_list_events[i].year, Number(quick_list_events[i].month) - 1, Number(quick_list_events[i].day) + Number(quick_list_events[i].duration) - 1);
if(date_start=='sunday'){
var event_end_day=word_day[end_date.getDay()];
}else{
if(end_date.getDay() > 0){
var event_end_day=word_day[end_date.getDay() - 1];
}else{
var event_end_day=word_day[6];
}}
var event_end_date=('0' + end_date.getDate()).slice(-2) + ' ' + word_month[Number(end_date.getMonth())] + ', ' + end_date.getFullYear();
event_end_time=' - ' + event_end_day + ', ' + event_end_date;
}
var event_image=(quick_list_events[i].image) ? '<img src="' + quick_list_events[i].image + '" alt="' + quick_list_events[i].title + '" />':'';
var event_time=(quick_list_events[i].time) ? '<i class="icon-clock"></i>' + quick_list_events[i].time:'';
var event_location=(quick_list_events[i].location) ? '<i class="icon-location-pin"></i>' + quick_list_events[i].location:'';
var event_description=((layout=='compact')||(view=='grid')) ? shortTitle(quick_list_events[i].description, 10):shortTitle(quick_list_events[i].description, 25);
events_list +='<div class="event-item-wrap">'
+ '<div class="event-item">'
+ '<div class="event-image" href="#' + el.attr('id') + '-popup-' + quick_list_events[i].id + '">' + event_image + '</div>'
+ '<div class="event-info">'
+ '<div class="event-title" href="#' + el.attr('id') + '-popup-' + quick_list_events[i].id + '">' + quick_list_events[i].title + '</div>'
+ '<div class="event-meta">'
+ '<div class="event-date"><i class="icon-calendar"></i>' + event_day + ', ' + event_date + event_end_time + '</div>'
+ '<div class="event-time">' + event_time + '</div>'
+ '<div class="event-location">' + event_location + '</div>'
+ '</div>'
+ '<div class="event-intro">' + event_description + '</div>'
+ '</div>'
+ '</div>'
+ '</div>';
events_list +='<div id="' + el.attr('id') + '-popup-' + quick_list_events[i].id + '" class="event-popup zoom-anim-dialog mfp-hide">'
+ '<div class="popup-body">'
+ showEventDetail(quick_list_events[i], date_start)
+ '</div>'
+ '</div>';
}
events_list +='</div>';
el.html(events_list);
el.find('.event-image').magnificPopup({
type: 'inline',
removalDelay: 800,
mainClass: 'my-mfp-zoom-in'
});
el.find('.event-title').magnificPopup({
type: 'inline',
removalDelay: 800,
mainClass: 'my-mfp-zoom-in'
});
}
function showEventDetail(event, date_start){
var event_string='';
if(date_start=='sunday'){
var word_day=new Array(quick_events_vars.d_7, quick_events_vars.d_1, quick_events_vars.d_2, quick_events_vars.d_3, quick_events_vars.d_4, quick_events_vars.d_5, quick_events_vars.d_6);
}else{
var word_day=new Array(quick_events_vars.d_1, quick_events_vars.d_2, quick_events_vars.d_3, quick_events_vars.d_4, quick_events_vars.d_5, quick_events_vars.d_6, quick_events_vars.d_7);
}
var day=new Date(event.year, Number(event.month) - 1, event.day);
if(date_start=='sunday'){
var event_day=word_day[day.getDay()];
}else{
if(day.getDay() > 0){
var event_day=word_day[day.getDay() - 1];
}else{
var event_day=word_day[6];
}}
var event_date=event.day + ' ' + word_month[Number(event.month) - 1] + ', ' + event.year;
var event_end_time='';
if(event.duration > 1){
var end_date=new Date(event.year, Number(event.month) - 1, Number(event.day) + Number(event.duration) - 1);
if(date_start=='sunday'){
var event_end_day=word_day[end_date.getDay()];
}else{
if(end_date.getDay() > 0){
var event_end_day=word_day[end_date.getDay() - 1];
}else{
var event_end_day=word_day[6];
}}
var event_end_date=('0' + end_date.getDate()).slice(-2) + ' ' + word_month[Number(end_date.getMonth())] + ', ' + end_date.getFullYear();
event_end_time=' - ' + event_end_day + ', ' + event_end_date;
}
var event_image=(event.image) ? '<img src="' + event.image + '" alt="' + event.title + '" />':'';
var event_time=(event.time) ? '<i class="icon-clock"></i>' + event.time:'';
var event_location=(event.location) ? '<i class="icon-location-pin"></i>' + event.location:'';
event_string +='<div class="event-item">'
+ '<div class="event-image">' + event_image + '</div>'
+ '<div class="event-info">'
+ '<div class="event-title">' + event.title + '</div>'
+ '<div class="event-meta">'
+ '<div class="event-date"><i class="icon-calendar"></i>' + event_day + ', ' + event_date + event_end_time + '</div>'
+ '<div class="event-time">' + event_time + '</div>'
+ '<div class="event-location">' + event_location + '</div>'
+ '</div>'
+ '<div class="event-intro">' + event.description + '</div>'
+ '</div>'
+ '</div>';
return event_string;
}
function renderQuickEvents(){
$('.quick-events').each(function(index){
$(this).attr('id', 'quick-events-' + (index + 1));
var quick_events_contain=$(this);
var view=$(this).parents('.quick-events-wrapper').find('.quick-events-option-view').html();
var layout=$(this).parents('.quick-events-wrapper').find('.quick-events-option-layout').html();
var items=$(this).parents('.quick-events-wrapper').find('.quick-events-option-items').html();
var list=$(this).parents('.quick-events-wrapper').find('.quick-events-option-list').html();
$.ajax({
type: 'POST',
url: quick_events_vars.ajax_url,
dataType: 'json',
data: {action: 'get_events', list: list},
success: function(data){
quick_events=[];
for (var i=0; i < data.length; i++){
var event_date=new Date(data[i].year, Number(data[i].month) - 1, data[i].day);
data[i].date=event_date.getTime();
quick_events.push(data[i]);
}
quick_events.sort(sortEventsByDate);
for (var j=0; j < quick_events.length; j++){
quick_events[j].id=j;
if(!quick_events[j].duration){
quick_events[j].duration=1;
}}
quick_events_r[index+1]=quick_events;
if((view=='list')||(view=='grid')){
showEventsList(quick_events_contain, quick_events, view, layout, items);
}else{
showEventsCalendar(quick_events_contain, quick_events, today_month_g, today_year_g, 'current');
}}
});
});
}
$(document).ready(function(){
renderQuickEvents();
$('.quick-events').on('click', '.btn-change-date', function(){
var quick_events_contain=$(this).closest('.quick-events');
var ids=quick_events_contain.attr('id').split('quick-events-');
var id=ids[1];
var nav_time=$(this).attr('id');
var month_num=quick_events_contain.find('#month-num').text();
var year_num=quick_events_contain.find('#year-num').text();
showEventsCalendar(quick_events_contain, quick_events_r[id], month_num, year_num, nav_time);
});
$(window).on('resize', function (){
renderQuickEvents();
});
});
})(jQuery);