var EventAjaxFilters=function(){
var supportHtml5History;
var xmlHttpRequest=[];
return {
init: function(){
Common.logInfo("EventAjaxFilters.init...");
jQuery('#search_fromdate, #search_todate').each(function(){
var dateFormat=jQuery(this).attr('data-date-format')||'mm/dd/yy';
jQuery(this).datepicker({
dateFormat: dateFormat.replace('yy', 'yy').replace('mm', 'mm').replace('dd', 'dd'),
changeMonth: true,
changeYear: true
});
});
if(localStorage.getItem("layout")==="calendar-layout"){
jQuery('.event_listings').on('update_event_listings', EventAjaxFilters.actions.getEventListings);
jQuery("#wpem-event-box-layout").addClass("wpem-active-layout");
localStorage.setItem("layout", "box-layout");
}
jQuery("#wpem-event-filter-version-2-filter-action").click(function(){
jQuery("#wpem-event-filter-version-2-dropdown").toggle();
});
if(jQuery(".showing_applied_filters").hasClass("showing-applied-filters")){
jQuery(".showing_applied_filters").show();
}else{
jQuery(".showing_applied_filters").hide();
}
var form=jQuery(this).closest('form');
form.find(':input[name^="search_datetimes"]').not(':input[type="hidden"]').val(0).trigger('chosen:updated');
if(jQuery('.wpem-search-event-more-filter').length > 0){
jQuery('.wpem-event-advance-filter').hide();
jQuery('.wpem-search-event-more-filter').on('click',function(){
jQuery('.wpem-event-advance-filter').slideToggle("slow");
})
}
if(jQuery.isFunction(jQuery.fn.chosen)){
if(event_manager_ajax_filters.is_rtl==1){
jQuery('select[name^="search_datetimes"]').addClass('chosen-rtl');
jQuery('select[name^="search_categories"]').addClass('chosen-rtl');
jQuery('select[name^="search_event_types"]').addClass('chosen-rtl');
jQuery('select[name^="search_ticket_prices"]').addClass('chosen-rtl')
}
jQuery('select[name^="search_datetimes"]').chosen({
search_contains: true
});
jQuery('select[name^="search_categories"]').chosen({
search_contains: true
});
jQuery('select[name^="search_event_types"]').chosen({
search_contains: true
});
jQuery('select[name^="search_ticket_prices"]').chosen({
search_contains: true
})
}
if(window.history&&window.history.pushState){
supportHtml5History=true
}else{
supportHtml5History=false
}
jQuery(document).ready(EventAjaxFilters.actions.windowLoad);
jQuery(document.body).on('click', '.load_more_upcoming_events', EventAjaxFilters.actions.loadMoreUpcomingEvents);
jQuery(document.body).on('click', '.load_more_past_events', EventAjaxFilters.actions.loadMorePastEvents);
jQuery(document.body).on('click', '.load_more_events', EventAjaxFilters.actions.loadMoreEvents);
jQuery('#event_filters').on('click', '.reset', EventAjaxFilters.actions.eventAjaxFiltersReset);
jQuery('div.event_listings_main').on('click', '.event-manager-pagination a', EventAjaxFilters.actions.eventPagination);
jQuery('.event_listings').on('update_event_listings', EventAjaxFilters.actions.getEventListings);
if(jQuery('.event_listings_upcoming').length > 0){
jQuery('#search_keywords, #search_location, #search_datetimes, #search_categories, #search_event_types, #search_ticket_prices, .event-manager-filter').change(EventAjaxFilters.actions.getUpcomingEvents);
}else{
jQuery('#search_keywords, #search_location, #search_datetimes, #search_categories, #search_event_types, #search_ticket_prices, .event-manager-filter').change(function(){
var target=jQuery(this).closest('div.event_listings');
target.triggerHandler('update_event_listings', [1, false]);
EventAjaxFilters.actions.event_manager_store_state(target, 1)
});
}
jQuery('.wpem-event-filter-version-2-search-btn').change(function(){
var target=jQuery(this).closest('div.event_listings');
target.triggerHandler('update_event_listings', [1, false]);
EventAjaxFilters.actions.event_manager_store_state(target, 1)
}).on("click", function(e){
jQuery("#wpem-event-filter-version-2-dropdown").toggle(false);
EventAjaxFilters.actions.getEventListings(e);
if(e.which===13){
jQuery(this).trigger('change')
}});
},
actions: {
event_manager_store_state: function(target, page){
Common.logInfo("EventAjaxFilters.event_manager_store_state...");
var location=document.location.href.split('#')[0];
var url=document.location.href;
if(url.match(/\/page\/\d+/)){
url=url.replace(/(\/page\/)\d+/, '/page/' + page);
}else{
if(url.endsWith('/')){
url +='page/' + page;
}else{
url +='/page/' + page;
}}
if(supportHtml5History){
var form=target.find('.event_filters');
var data=jQuery(form).serialize();
var index=jQuery('div.event_listings').index(target);
window.history.replaceState({
id: 'event_manager_state',
page: page,
data: data,
index: index
}, '',location)
}},
windowLoad: function(event){
Common.logInfo("EventAjaxFilters.actions.windowLoad...");
jQuery('.event_filters').each(function(){
var target=jQuery(this).closest('div.event_listings');
var form=target.find('.event_filters');
var inital_page=1;
var index=jQuery('div.event_listings').index(target);
if(window.history.state&&window.location.hash){
var state=window.history.state;
if(state.id&&'event_manager_state'===state.id&&index==state.index){
inital_page=1;
form.deserialize(state.data);
form.find(':input[name^="search_datetimes"]').not(':input[type="hidden"]').trigger('chosen:updated');
form.find(':input[name^="search_categories"]').not(':input[type="hidden"]').trigger('chosen:updated');
form.find(':input[name^="search_event_types"]').not(':input[type="hidden"]').trigger('chosen:updated');
form.find(':input[name^="search_ticket_prices"]').not(':input[type="hidden"]').trigger('chosen:updated')
}}
target.triggerHandler('update_event_listings', [inital_page, false])
});
},
eventAjaxFiltersReset: function(event){
Common.logInfo("EventAjaxFilters.actions.eventAjaxFiltersReset...");
var target=jQuery(this).closest('div.event_listings');
var form=jQuery(this).closest('form');
form.find(':input[name="search_keywords"], :input[name="search_location"], .event-manager-filter').not(':input[type="hidden"]').val('').trigger('chosen:updated');
form.find(':input[name^="search_fromdate"]').not(':input[type="hidden"]').val('').trigger('chosen:updated');
form.find(':input[name^="search_todate"]').not(':input[type="hidden"]').val('').trigger('chosen:updated');
form.find(':input[name^="search_datetimes"]').not(':input[type="hidden"]').val('').trigger('chosen:updated');
form.find(':input[name^="search_categories"]').not(':input[type="hidden"]').val('').trigger('chosen:updated');
form.find(':input[name^="search_event_types"]').not(':input[type="hidden"]').val(0).trigger('chosen:updated');
form.find(':input[name^="search_ticket_prices"]').not(':input[type="hidden"]').val(0).trigger('chosen:updated');
target.triggerHandler('reset');
target.triggerHandler('update_event_listings', [1, false]);
EventAjaxFilters.actions.event_manager_store_state(target, 1);
return false;
event.preventDefault()
},
loadMoreEvents: function(event){
event.preventDefault();
var target=jQuery(this).closest('div.event_listings');
var page=parseInt(jQuery(this).data('page')||1);
var loading_previous=false;
jQuery(this).parent().addClass('wpem-loading');
page=page + 1;
jQuery(this).data('page', page);
EventAjaxFilters.actions.event_manager_store_state(target, page);
target.triggerHandler('update_event_listings', [page, true, loading_previous]);
return false;
},
eventPagination: function(event){
event.preventDefault();
var target=jQuery(this).closest('div.event_listings');
var page=jQuery(this).data('page');
EventAjaxFilters.actions.event_manager_store_state(target, page);
target.triggerHandler('update_event_listings', [page, false, false]);
},
getEventListings: function(event, page=1, append, loading_previous){
event.preventDefault();
Common.logInfo("EventAjaxFilters.actions.getEventListings...");
var data='';
var target=jQuery(event.currentTarget||this);
var form=target.find('.event_filters');
var filters_bar=target.find('.showing_applied_filters');
var results=target.find('.event_listings');
var per_page=target.data('per_page');
var orderby=target.data('orderby');
var order=target.data('order');
var featured=target.data('featured');
var cancelled=target.data('cancelled');
var event_online=target.data('event_online');
var index=jQuery('div.event_listings').index(this);
target.find('.load_more_events').hide();
if(xmlHttpRequest[index]){
xmlHttpRequest[index].abort()
}
if(!append){
jQuery(results).parent().addClass('wpem-loading');
jQuery('div.event_listing, div.no_event_listings_found', results).css('visibility', 'hidden');
target.find('.load_more_events').data('page', page);
}
if(true==target.data('show_filters')){
var filter_event_type=[];
if(form.find(':input[name^="search_datetimes"]').length > 0){
var datetimes=form.find(':input[name^="search_datetimes"]').map(function (){
return jQuery(this).val()
}).get();
}else{
var startDate=form.find('#search_fromdate').val();
var endDate=form.find('#search_todate').val();
var datetimes=(startDate||endDate) ? JSON.stringify({ start: startDate, end: endDate }):'';
var datetimes=datetimes ? { '': datetimes }:{};}
if(jQuery('input.date_range_picker').length > 0){
jQuery('input.date_range_picker').daterangepicker();
}
var categories=form.find(':input[name^="search_categories"]').map(function(){
return jQuery(this).val()
}).get();
var event_types=form.find(':input[name^="search_event_types"]').map(function(){
return jQuery(this).val()
}).get();
var ticket_prices=form.find(':input[name^="search_ticket_prices"]').map(function(){
return jQuery(this).val()
}).get();
var keywords='';
var location='';
var $keywords=form.find(':input[name="search_keywords"]');
var $location=form.find(':input[name="search_location"]');
if($keywords.val()!==$keywords.attr('placeholder')){
keywords=$keywords.val()
}
if($location.val()!==$location.attr('placeholder')){
location=$location.val()
}
if(jQuery(':input[name="event_online"]').length > 0){
if(jQuery(':input[name="event_online"]').prop("checked")==true){
var event_online='true';
}else{
var event_online='';
}}
data={
lang: event_manager_ajax_filters.lang,
search_keywords: keywords,
search_location: location,
search_datetimes: datetimes,
search_categories: categories,
search_event_types: event_types,
search_ticket_prices: ticket_prices,
per_page: per_page,
orderby: orderby,
order: order,
page: page,
featured: featured,
cancelled: cancelled,
event_online: event_online,
show_pagination: target.data('show_pagination'),
form_data: form.serialize(),
wpem_filter_nonce: form.find('input[name="wpem_filter_nonce"]').val()
}}else{
var keywords=target.data('keywords');
var location=target.data('location');
if(form.find(':input[name^="search_datetimes"]').length > 0){
var datetimes=JSON.stringify(target.data('datetimes'));
}else{
}
var categories=target.data('categories');
var event_types=target.data('event_types');
var ticket_prices=target.data('ticket_prices');
if(categories){
categories=categories.split(',')
}
if(event_types){
event_types=event_types.split(',')
}
data={
lang: event_manager_ajax_filters.lang,
search_keywords: keywords,
search_location: location,
search_datetimes: datetimes,
search_categories: categories,
search_event_types: event_types,
search_ticket_prices: ticket_prices,
per_page: per_page,
orderby: orderby,
order: order,
page: page,
featured: featured,
cancelled: cancelled,
event_online: event_online,
show_pagination: target.data('show_pagination'),
wpem_filter_nonce: form.find('input[name="wpem_filter_nonce"]').val()
}}
xmlHttpRequest[index]=jQuery.ajax({
type: 'POST',
url: event_manager_ajax_filters.ajax_url.toString().replace("%%endpoint%%", "get_listings"),
data: data,
success: function(result){
if(result){
try {
jQuery('.no_event_listings_found').remove();
if(result.filter_value){
jQuery(filters_bar).show().html('<span>' + result.filter_value + '</span>' + result.showing_links)
}else{
jQuery(filters_bar).hide()
}
if(result.showing_applied_filters){
jQuery(filters_bar).addClass('showing-applied-filters');
}else{
jQuery(filters_bar).removeClass('showing-applied-filters');
}
if(result.html){
if(append&&loading_previous){
jQuery(results).prepend(result.html);
if(jQuery('div.google-map-loadmore').length > 0){
jQuery('div .google-map-loadmore').not('div.google-map-loadmore:first').remove();
}}else if(append){
jQuery(results).append(result.html);
if(jQuery('div.google-map-loadmore').length > 0){
jQuery('div .google-map-loadmore').not('div.google-map-loadmore:first').remove();
}}else{
jQuery(results).html(result.html);
}}
if(true==target.data('show_pagination')){
if(result.pagination){
jQuery('.event-manager-pagination').html(result.pagination)
}}else{
localStorage.setItem('total_event_page', result.max_num_pages);
localStorage.setItem('current_event_page', page);
if(!result.found_events||result.max_num_pages <=page){
target.find('.load_more_events:not(.load_previous)').hide();
}else if(!loading_previous){
target.find('.load_more_events').show();
}
target.find('.load_more_events_loader').removeClass('wpem-loading');
jQuery('li.event_listing', results).css('visibility', 'visible')
}
jQuery(results).parent().removeClass('wpem-loading');
target.triggerHandler('updated_results', result)
} catch (err){
if(window.console){
Common.logError(err)
}}
}},
error: function(jqXHR, textStatus, error){
if(window.console&&'abort'!==textStatus){
Common.logError(textStatus + ': ' + error)
}},
statusCode: {
404: function(){
if(window.console){
Common.logError("Error 404: Ajax Endpoint cannot be reached. Go to Settings > Permalinks and save to resolve.")
}}
}});
event.preventDefault();
},
loadMoreUpcomingEvents: function(event){
if(jQuery('#upcoming_event_listing').length > 0){
event.preventDefault();
var target=jQuery(this).closest('div#upcoming_event_listing');
jQuery(this).parent().addClass('wpem-loading');
var search_keywords=jQuery('#search_keywords').val();
var search_location=jQuery('#search_location').val();
var search_categories=jQuery('#search_categories').val();
var search_event_types=jQuery('#search_event_types').val();
var search_datetimes=jQuery('#search_datetimes').val();
var order=jQuery('#upcoming_event_listing').data('order');
var orderby=jQuery('#upcoming_event_listing').data('orderby');
var currentPage=jQuery('.load_more_upcoming_events').attr('data-page');
var per_page=jQuery('#per-page-settings').data('per-page');
jQuery.ajax({
type: 'POST',
url: event_manager_ajax_filters.ajax_url.toString().replace("%%endpoint%%", "get_upcoming_listings"),
data: {
action: 'get_upcoming_listings',
search_keywords: search_keywords,
search_location: search_location,
search_datetimes: search_datetimes,
search_categories: search_categories,
search_event_types: search_event_types,
order: order,
orderby: orderby,
value: currentPage,
per_page: per_page,
},
success: function(response){
target.find('#load_more_events_loader').removeClass('wpem-loading');
if(response.success){
jQuery('.event_listings').append(response.data.events_html);
var nextPage=parseInt(currentPage) + 1;
jQuery('#load_more_events').attr('data-page', nextPage);
if(response.data.no_more_events===true){
jQuery('#load_more_events').hide();
}}else{
console.error('Failed to load events:', response.data.error);
if(response.data.error==='No more events found.'){
jQuery('#load_more_events').hide();
}}
},
error: function(xhr, status, error){
console.error('AJAX Error:', status, error);
}});
};},
loadMorePastEvents: function(event){
if(jQuery('.past_event_listings').length > 0){
event.preventDefault();
jQuery(this).parent().addClass('wpem-loading');
var search_keywords=jQuery('#search_keywords').val();
var search_location=jQuery('#search_location').val();
var search_categories=jQuery('#search_categories').val();
var search_event_types=jQuery('#search_event_types').val();
var search_datetimes=jQuery('#search_datetimes').val();
var currentPage=jQuery('.load_more_past_events').attr('data-page');
var per_page=jQuery('#per-page-settings').data('per-page');
jQuery.ajax({
type: 'POST',
url: event_manager_ajax_filters.ajax_url.toString().replace("%%endpoint%%", "load_more_past_listings"),
data: {
action: 'load_more_past_listings',
search_keywords: search_keywords,
search_location: search_location,
search_datetimes: search_datetimes,
search_categories: search_categories,
search_event_types: search_event_types,
value: currentPage,
per_page: per_page,
_wpnonce: event_manager_ajax_filters.nonce,
},
success: function(response){
jQuery('#load_more_events_loader').removeClass('wpem-loading');
if(response.success){
jQuery('.event_listings').append(response.data.events_html);
var nextPage=parseInt(currentPage) + 1;
jQuery('#load_more_events').attr('data-page', nextPage);
if(response.data.no_more_events===true){
jQuery('#load_more_events').hide();
}}else{
console.error('Failed to load events:', response.data.error);
if(response.data.error==='No more events found.'){
jQuery('#load_more_events').hide();
}}
},
error: function(xhr, status, error){
console.error('AJAX Error:', status, error);
}});
};},
getUpcomingEvents: function(event){
event.preventDefault();
var search_keywords=jQuery('#search_keywords').val();
var search_location=jQuery('#search_location').val();
var search_categories=jQuery('#search_categories').val();
var search_event_types=jQuery('#search_event_types').val();
var search_datetimes=jQuery('#search_datetimes').val();
var order=jQuery('#upcoming_event_listing').data('order');
var orderby=jQuery('#upcoming_event_listing').data('orderby');
var currentPage=jQuery('#upcoming_event_listing').attr('data-page');
var per_page=jQuery('#per-page-settings').data('per-page');
jQuery.ajax({
type: 'POST',
url: event_manager_ajax_filters.ajax_url.toString().replace("%%endpoint%%", "get_upcoming_listings"),
data: {
action: 'get_upcoming_listings',
search_keywords: search_keywords,
search_location: search_location,
search_datetimes: search_datetimes,
search_categories: search_categories,
search_event_types: search_event_types,
order: order,
orderby: orderby,
value: currentPage,
per_page: per_page,
},
success: function(response){
if(response.success){
jQuery('#event-listing-view').html(response.data.events_html);
jQuery('#event-listing-view').data('locked', true);
var nextPage=parseInt(currentPage)+1;
jQuery('#load_more_events').attr('data-page', nextPage);
if(response.data.no_more_events===true){
jQuery('#load_more_events').hide();
}}else{
console.error('Failed to load events:', response.data.error);
jQuery('#load_more_events').hide();
}},
error: function(xhr, status, error){
console.error('AJAX Error:', status, error);
}});
},
}}
};
EventAjaxFilters=EventAjaxFilters();
jQuery(document).ready(function($){
EventAjaxFilters.init()
});