(function($, window, undefined){
var uniqueId=0;
$.widget('comiseo.daterangepicker', {
version: '0.6.0-beta.1',
options: {
presetRanges: [
{text: 'Today', dateStart: function(){ return moment() }, dateEnd: function(){ return moment() }},
{text: 'Yesterday', dateStart: function(){ return moment().subtract('days', 1) }, dateEnd: function(){ return moment().subtract('days', 1) }},
{text: 'Last 7 Days', dateStart: function(){ return moment().subtract('days', 6) }, dateEnd: function(){ return moment() }},
{text: 'Last Week (Mo-Su)', dateStart: function(){ return moment().subtract('days', 7).isoWeekday(1) }, dateEnd: function(){ return moment().subtract('days', 7).isoWeekday(7) }},
{text: 'Month to Date', dateStart: function(){ return moment().startOf('month') }, dateEnd: function(){ return moment() }},
{text: 'Previous Month', dateStart: function(){ return moment().subtract('month', 1).startOf('month') }, dateEnd: function(){ return moment().subtract('month', 1).endOf('month') }},
{text: 'Year to Date', dateStart: function(){ return moment().startOf('year') }, dateEnd: function(){ return moment() }}
],
initialText: 'Select date range...',
icon: 'ui-icon-triangle-1-s',
applyButtonText: 'Apply',
clearButtonText: 'Clear',
cancelButtonText: 'Cancel',
rangeSplitter: ' - ',
dateFormat: 'M d, yy', // displayed date format. Available formats: http://api.jqueryui.com/datepicker/#utility-formatDate
altFormat: 'yy-mm-dd',
verticalOffset: 0,
mirrorOnCollision: true,
autoFitCalendars: true,
applyOnMenuSelect: true,
open: null,
close: null,
change: null,
clear: null,
cancel: null,
onOpen: null,
onClose: null,
onChange: null,
onClear: null,
datepickerOptions: { // object containing datepicker options. See http://api.jqueryui.com/datepicker/#options
numberOfMonths: 3,
maxDate: 0 
}},
_create: function(){
this._dateRangePicker=buildDateRangePicker(this.element, this, this.options);
},
_destroy: function(){
this._dateRangePicker.destroy();
},
_setOptions: function(options){
this._super(options);
this._dateRangePicker.enforceOptions();
},
open: function(){
this._dateRangePicker.open();
},
close: function(){
this._dateRangePicker.close();
},
setRange: function(range){
this._dateRangePicker.setRange(range);
},
getRange: function(){
return this._dateRangePicker.getRange();
},
clearRange: function(){
this._dateRangePicker.clearRange();
},
widget: function(){
return this._dateRangePicker.getContainer();
}});
function buildTriggerButton($originalElement, classnameContext, options){
var $self, id;
function fixReferences(){
id='drp_autogen' + uniqueId++;
$('label[for="' + $originalElement.attr('id') + '"]')
.attr('for', id);
}
function fixButton(){
if($.fn.button.noConflict){
var btn=$.fn.button.noConflict();
$.fn.btn=btn;
}}
function init(){
fixReferences();
fixButton();
$self=$('<button type="button"></button>')
.addClass(classnameContext + '-triggerbutton')
.attr({'title': $originalElement.attr('title'), 'tabindex': $originalElement.attr('tabindex'), id: id})
.button({
icons: {
secondary: options.icon
},
icon: options.icon,
iconPosition: 'end',
label: options.initialText
});
}
function getLabel(){
return $self.button('option', 'label');
}
function setLabel(value){
$self.button('option', 'label', value);
}
function reset(){
$originalElement.val('').change();
setLabel(options.initialText);
}
function enforceOptions(){
$self.button('option', {
icons: {
secondary: options.icon
},
icon: options.icon,
iconPosition: 'end',
label: options.initialText
});
}
init();
return {
getElement: function(){ return $self; },
getLabel: getLabel,
setLabel: setLabel,
reset: reset,
enforceOptions: enforceOptions
};}
function buildPresetsMenu(classnameContext, options, onClick){
var $self,
$menu,
menuItemWrapper;
function init(){
$self=$('<div></div>')
.addClass(classnameContext + '-presets');
$menu=$('<ul></ul>');
if($.ui.menu.prototype.options.items===undefined){
menuItemWrapper={start: '<li><a href="#">', end: '</a></li>'};}else{
menuItemWrapper={start: '<li><div>', end: '</div></li>'};}
$.each(options.presetRanges, function(){
$(menuItemWrapper.start + this.text + menuItemWrapper.end)
.data('dateStart', this.dateStart)
.data('dateEnd', this.dateEnd)
.click(onClick)
.appendTo($menu);
});
$self.append($menu);
$menu.menu()
.data('ui-menu').delay=0;
}
init();
return {
getElement: function(){ return $self; }};}
function buildCalendar(classnameContext, options){
var $self,
range={start: null, end: null};
function init(){
$self=$('<div></div>', {'class': classnameContext + '-calendar ui-widget-content'});
$self.datepicker($.extend({}, options.datepickerOptions, {beforeShowDay: beforeShowDay, onSelect: onSelectDay}));
updateAtMidnight();
}
function enforceOptions(){
$self.datepicker('option', $.extend({}, options.datepickerOptions, {beforeShowDay: beforeShowDay, onSelect: onSelectDay}));
}
function onSelectDay(dateText, instance){
var dateFormat=options.datepickerOptions.dateFormat||$.datepicker._defaults.dateFormat,
selectedDate=$.datepicker.parseDate(dateFormat, dateText);
if(!range.start||range.end){
range.start=selectedDate;
range.end=null;
}else if(selectedDate < range.start){
range.end=range.start;
range.start=selectedDate;
}else{
range.end=selectedDate;
}
if(options.datepickerOptions.hasOwnProperty('onSelect')){
options.datepickerOptions.onSelect(dateText, instance);
}}
function beforeShowDay(date){
var result=[
true,
range.start&&((+date===+range.start)||(range.end&&range.start <=date&&date <=range.end)) ? 'ui-state-highlight':''
],
userResult=[true, '', ''];
if(options.datepickerOptions.hasOwnProperty('beforeShowDay')){
userResult=options.datepickerOptions.beforeShowDay(date);
}
return [
result[0]&&userResult[0],
result[1] + ' ' + userResult[1],
userResult[2]
];
}
function updateAtMidnight(){
setTimeout(function(){
refresh();
updateAtMidnight();
}, moment().endOf('day') - moment());
}
function scrollToRangeStart(){
if(range.start){
$self.datepicker('setDate', range.start);
}}
function refresh(){
$self.datepicker('refresh');
$self.datepicker('setDate', null);
}
function reset(){
range={start: null, end: null};
refresh();
}
init();
return {
getElement: function(){ return $self; },
scrollToRangeStart: function(){ return scrollToRangeStart(); },
getRange: function(){ return range; },
setRange: function(value){ range=value; refresh(); },
refresh: refresh,
reset: reset,
enforceOptions: enforceOptions
};}
function buildButtonPanel(classnameContext, options, handlers){
var $self,
applyButton,
clearButton,
cancelButton;
function init(){
$self=$('<div></div>')
.addClass(classnameContext + '-buttonpanel');
if(options.applyButtonText){
applyButton=$('<button type="button" class="ui-priority-primary"></button>')
.text(options.applyButtonText)
.button();
$self.append(applyButton);
}
if(options.clearButtonText){
clearButton=$('<button type="button" class="ui-priority-secondary"></button>')
.text(options.clearButtonText)
.button();
$self.append(clearButton);
}
if(options.cancelButtonText){
cancelButton=$('<button type="button" class="ui-priority-secondary"></button>')
.text(options.cancelButtonText)
.button();
$self.append(cancelButton);
}
bindEvents();
}
function enforceOptions(){
if(applyButton){
applyButton.button('option', 'label', options.applyButtonText);
}
if(clearButton){
clearButton.button('option', 'label', options.clearButtonText);
}
if(cancelButton){
cancelButton.button('option', 'label', options.cancelButtonText);
}}
function bindEvents(){
if(handlers){
if(applyButton){
applyButton.click(handlers.onApply);
}
if(clearButton){
clearButton.click(handlers.onClear);
}
if(cancelButton){
cancelButton.click(handlers.onCancel);
}}
}
init();
return {
getElement: function(){ return $self; },
enforceOptions: enforceOptions
};}
function buildDateRangePicker($originalElement, instance, options){
var classname='comiseo-daterangepicker',
$container,
$mask,
triggerButton,
presetsMenu,
calendar,
buttonPanel,
isOpen=false,
autoFitNeeded=false,
LEFT=0,
RIGHT=1,
TOP=2,
BOTTOM=3,
sides=['left', 'right', 'top', 'bottom'],
hSide=RIGHT,
vSide=null;
function init(){
triggerButton=buildTriggerButton($originalElement, classname, options);
presetsMenu=buildPresetsMenu(classname, options, usePreset);
calendar=buildCalendar(classname, options);
autoFit.numberOfMonths=options.datepickerOptions.numberOfMonths;
if(autoFit.numberOfMonths instanceof Array){
options.autoFitCalendars=false;
}
buttonPanel=buildButtonPanel(classname, options, {
onApply: function (event){
close(event);
setRange(null, event);
},
onClear: function (event){
close(event);
clearRange(event);
},
onCancel: function (event){
instance._trigger('cancel', event, {instance: instance});
close(event);
reset();
}});
render();
autoFit();
reset();
bindEvents();
}
function render(){
$container=$('<div></div>', {'class': classname + ' ' + classname + '-' + sides[hSide] + ' ui-widget ui-widget-content ui-corner-all ui-front'})
.append($('<div></div>', {'class': classname + '-main ui-widget-content'})
.append(presetsMenu.getElement())
.append(calendar.getElement()))
.append($('<div class="ui-helper-clearfix"></div>')
.append(buttonPanel.getElement()))
.hide();
$originalElement.hide().after(triggerButton.getElement());
$mask=$('<div></div>', {'class': 'ui-front ' + classname + '-mask'}).hide();
$('body').append($mask).append($container);
}
function autoFit(){
if(options.autoFitCalendars){
var maxWidth=$(window).width(),
initialWidth=$container.outerWidth(true),
$calendar=calendar.getElement(),
numberOfMonths=$calendar.datepicker('option', 'numberOfMonths'),
initialNumberOfMonths=numberOfMonths;
if(initialWidth > maxWidth){
while (numberOfMonths > 1&&$container.outerWidth(true) > maxWidth){
$calendar.datepicker('option', 'numberOfMonths', --numberOfMonths);
}
if(numberOfMonths!==initialNumberOfMonths){
autoFit.monthWidth=(initialWidth - $container.outerWidth(true)) / (initialNumberOfMonths - numberOfMonths);
}}else{
while (numberOfMonths < autoFit.numberOfMonths&&(maxWidth - $container.outerWidth(true)) >=autoFit.monthWidth){
$calendar.datepicker('option', 'numberOfMonths', ++numberOfMonths);
}}
reposition();
autoFitNeeded=false;
}}
function destroy(){
$container.remove();
triggerButton.getElement().remove();
$originalElement.show();
}
function bindEvents(){
triggerButton.getElement().click(toggle);
triggerButton.getElement().keydown(keyPressTriggerOpenOrClose);
$mask.click(function(event){
close(event);
reset();
});
$(window).resize(function(){ isOpen ? autoFit():autoFitNeeded=true; });
}
function formatRangeForDisplay(range){
var dateFormat=options.dateFormat;
return $.datepicker.formatDate(dateFormat, range.start) + (+range.end!==+range.start ? options.rangeSplitter + $.datepicker.formatDate(dateFormat, range.end):'');
}
function formatRange(range){
var dateFormat=options.altFormat,
formattedRange={};
formattedRange.start=$.datepicker.formatDate(dateFormat, range.start);
formattedRange.end=$.datepicker.formatDate(dateFormat, range.end);
return JSON.stringify(formattedRange);
}
function parseRange(text){
var dateFormat=options.altFormat,
range=null;
if(text){
try {
range=JSON.parse(text, function(key, value){
return key ? $.datepicker.parseDate(dateFormat, value):value;
});
} catch (e){
}}
return range;
}
function reset(){
var range=getRange();
if(range){
triggerButton.setLabel(formatRangeForDisplay(range));
calendar.setRange(range);
}else{
calendar.reset();
}}
function setRange(value, event){
var range=value||calendar.getRange();
if(!range.start){
return;
}
if(!range.end){
range.end=range.start;
}
value&&calendar.setRange(range);
triggerButton.setLabel(formatRangeForDisplay(range));
$originalElement.val(formatRange(range)).change();
if(options.onChange){
options.onChange();
}
instance._trigger('change', event, {instance: instance});
}
function getRange(){
return parseRange($originalElement.val());
}
function clearRange(event){
triggerButton.reset();
calendar.reset();
if(options.onClear){
options.onClear();
}
instance._trigger('clear', event, {instance: instance});
}
function usePreset(event){
var $this=$(this),
start=$this.data('dateStart')().startOf('day').toDate(),
end=$this.data('dateEnd')().startOf('day').toDate();
calendar.setRange({ start: start, end: end });
if(options.applyOnMenuSelect){
close(event);
setRange(null, event);
}
return false;
}
function reposition(){
$container.position({
my: 'left top',
at: 'left bottom' + (options.verticalOffset < 0 ? options.verticalOffset:'+' + options.verticalOffset),
of: triggerButton.getElement(),
collision:'flipfit flipfit',
using: function(coords, feedback){
var containerCenterX=feedback.element.left + feedback.element.width / 2,
triggerButtonCenterX=feedback.target.left + feedback.target.width / 2,
prevHSide=hSide,
last,
containerCenterY=feedback.element.top + feedback.element.height / 2,
triggerButtonCenterY=feedback.target.top + feedback.target.height / 2,
prevVSide=vSide,
vFit;
hSide=(containerCenterX > triggerButtonCenterX) ? RIGHT:LEFT;
if(hSide!==prevHSide){
if(options.mirrorOnCollision){
last=(hSide===LEFT) ? presetsMenu:calendar;
$container.children().first().append(last.getElement());
}
$container.removeClass(classname + '-' + sides[prevHSide]);
$container.addClass(classname + '-' + sides[hSide]);
}
$container.css({
left: coords.left,
top: coords.top
});
vSide=(containerCenterY > triggerButtonCenterY) ? BOTTOM:TOP;
if(vSide!==prevVSide){
if(prevVSide!==null){
triggerButton.getElement().removeClass(classname + '-' + sides[prevVSide]);
}
triggerButton.getElement().addClass(classname + '-' + sides[vSide]);
}
vFit=vSide===BOTTOM&&feedback.element.top - feedback.target.top!==feedback.target.height + options.verticalOffset
|| vSide===TOP&&feedback.target.top - feedback.element.top!==feedback.element.height + options.verticalOffset;
triggerButton.getElement().toggleClass(classname + '-vfit', vFit);
}});
}
function killEvent(event){
event.preventDefault();
event.stopPropagation();
}
function keyPressTriggerOpenOrClose(event){
switch (event.which){
case $.ui.keyCode.UP:
case $.ui.keyCode.DOWN:
killEvent(event);
open(event);
return;
case $.ui.keyCode.ESCAPE:
killEvent(event);
close(event);
reset();
return;
case $.ui.keyCode.TAB:
close(event);
return;
}}
function open(event){
if(!isOpen){
triggerButton.getElement().addClass(classname + '-active');
$mask.show();
isOpen=true;
autoFitNeeded&&autoFit();
calendar.scrollToRangeStart();
$container.show();
reposition();
}
if(options.onOpen){
options.onOpen();
}
instance._trigger('open', event, {instance: instance});
}
function close(event){
if(isOpen){
$container.hide();
$mask.hide();
triggerButton.getElement().removeClass(classname + '-active');
isOpen=false;
}
if(options.onClose){
options.onClose();
}
instance._trigger('close', event, {instance: instance});
}
function toggle(event){
if(isOpen){
close(event);
reset();
}else{
open(event);
}}
function getContainer(){
return $container;
}
function enforceOptions(){
var oldPresetsMenu=presetsMenu;
presetsMenu=buildPresetsMenu(classname, options, usePreset);
oldPresetsMenu.getElement().replaceWith(presetsMenu.getElement());
calendar.enforceOptions();
buttonPanel.enforceOptions();
triggerButton.enforceOptions();
var range=getRange();
if(range){
triggerButton.setLabel(formatRangeForDisplay(range));
}}
init();
return {
toggle: toggle,
destroy: destroy,
open: open,
close: close,
setRange: setRange,
getRange: getRange,
clearRange: clearRange,
reset: reset,
enforceOptions: enforceOptions,
getContainer: getContainer
};}})(jQuery, window);
(function(jQuery, undefined){
var push=Array.prototype.push,
rcheck=/^(?:radio|checkbox)$/i,
rplus=/\+/g,
rselect=/^(?:option|select-one|select-multiple)$/i,
rvalue=/^(?:button|color|date|datetime|datetime-local|email|hidden|month|number|password|range|reset|search|submit|tel|text|textarea|time|url|week)$/i;
function getElements(elements){
return elements.map(function(){
return this.elements ? jQuery.makeArray(this.elements):this;
}).filter(":input:not(:disabled)").get();
}
function getElementsByName(elements){
var current,
elementsByName={};
jQuery.each(elements, function(i, element){
current=elementsByName[ element.name ];
elementsByName[ element.name ]=current===undefined ? element :
(jQuery.isArray(current) ? current.concat(element):[ current, element ]);
});
return elementsByName;
}
jQuery.fn.deserialize=function(data, options){
var i, length,
elements=getElements(this),
normalized=[];
if(!data||!elements.length){
return this;
}
if(jQuery.isArray(data) ){
normalized=data;
}else if(jQuery.isPlainObject(data) ){
var key, value;
for(key in data){
jQuery.isArray(value=data[ key ]) ?
push.apply(normalized, jQuery.map(value, function(v){
return { name: key, value: v };})):push.call(normalized, { name: key, value: value });
}}else if(typeof data==="string"){
var parts;
data=data.split("&");
for(i=0, length=data.length; i < length; i++){
parts=data[ i ].split("=");
push.call(normalized, {
name: decodeURIComponent(parts[ 0 ].replace(rplus, "%20") ),
value: decodeURIComponent(parts[ 1 ].replace(rplus, "%20") )
});
}}
if(!(length=normalized.length) ){
return this;
}
var current, element, j, len, name, property, type, value,
change=jQuery.noop,
complete=jQuery.noop,
names={};
options=options||{};
elements=getElementsByName(elements);
if(jQuery.isFunction(options) ){
complete=options;
}else{
change=jQuery.isFunction(options.change) ? options.change:change;
complete=jQuery.isFunction(options.complete) ? options.complete:complete;
}
for(i=0; i < length; i++){
current=normalized[ i ];
name=current.name;
value=current.value;
if(!(element=elements[ name ]) ){
continue;
}
type=(len=element.length) ? element[ 0 ]:element;
type=(type.type||type.nodeName).toLowerCase();
property=null;
if(rvalue.test(type) ){
if(len){
j=names[ name ];
element=element[ names[ name ]=(j==undefined) ? 0:++j ];
}
change.call(element,(element.value=value) );
}else if(rcheck.test(type) ){
property="checked";
}else if(rselect.test(type) ){
property="selected";
}
if(property){
if(!len){
element=[ element ];
len=1;
}
for(j=0; j < len; j++){
current=element[ j ];
if(current.value==value){
change.call(current,(current[ property ]=true)&&value);
}}
}}
complete.call(this);
return this;
};})(jQuery);
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_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)
}).on("change", function(e){
EventAjaxFilters.actions.getEventListings(e);
if(e.which===13){
jQuery(this).trigger('change')
}});
}
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]);
jQuery('.event_listings').on('update_event_listings', EventAjaxFilters.actions.getEventListings);
EventAjaxFilters.actions.event_manager_store_state(target, 1);
return false;
event.preventDefault()
},
loadMoreEvents: function(event){
jQuery('.event_listings').on('update_event_listings', EventAjaxFilters.actions.getEventListings);
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;
event.preventDefault()
},
eventPagination: function(event){
Common.logInfo("EventAjaxFilters.actions.eventPagination...");
var target=jQuery(this).closest('div.event_listings');
var page=jQuery(this).data('page');
EventAjaxFilters.actions.event_manager_store_state(target, page);
EventAjaxFilters.actions.getEventListings(event, page, false, false);
},
getEventListings: function(event, page=1, append, loading_previous){
event.preventDefault();
Common.logInfo("EventAjaxFilters.actions.getEventListings...");
jQuery('.load_more_events').hide();
var data='';
var target=jQuery('.event_listings');
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);
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()
}}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')
}}
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){
jQuery('.load_more_events:not(.load_previous)', target).hide()
}else if(!loading_previous){
jQuery('.load_more_events', target).show()
}
jQuery('#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();
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){
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()
});