PageSourceSearch

https://coea.es/wp-content/cache/min/1/wp-content/plugins/mage-eve…/helper/calendar/calendar.js?ver=1790108845

js coea.es collected 2026-10-04 03:07:53 UTC 49,849 bytes, 226 lines download raw bytes

1(function($){'use strict';var MEP_CAL_DEFAULT_EVENT_COLOR='#3a87ad';var calendars={};var stockRequestCache={};var tooltipPointerState={};function normalizeCalendarLocaleCode(value){var locale=String(value||'').trim();if(!locale||locale.toLowerCase()==='auto'){return''}
2return locale.replace(/_/g,'-')}
3function resolveCalendarLocaleCode(value){var locale=normalizeCalendarLocaleCode(value);var docLocale;var browserLocale;if(locale){return locale}
4docLocale=normalizeCalendarLocaleCode(document.documentElement&&document.documentElement.lang?document.documentElement.lang:'');if(docLocale){return docLocale}
5browserLocale=normalizeCalendarLocaleCode(window.navigator&&window.navigator.language?window.navigator.language:'');return browserLocale||''}
6function getSupportedFullCalendarLocaleCode(localeCode){var normalized=normalizeCalendarLocaleCode(localeCode);var locales=window.FullCalendar&&Array.isArray(window.FullCalendar.globalLocales)?window.FullCalendar.globalLocales:[];var normalizedLower=normalized.toLowerCase();var baseCode=normalizedLower.split('-')[0];var i;var code;if(!normalized||!locales.length){return''}
7for(i=0;i<locales.length;i++){code=normalizeCalendarLocaleCode(locales[i]&&locales[i].code?locales[i].code:'');if(code&&code.toLowerCase()===normalizedLower){return code}}
8for(i=0;i<locales.length;i++){code=normalizeCalendarLocaleCode(locales[i]&&locales[i].code?locales[i].code:'');if(code&&code.toLowerCase()===baseCode){return code}}
9return''}
10function getCalendarIntlLocale(localeCode){return resolveCalendarLocaleCode(localeCode)||undefined}
11function formatIntlDate(date,localeCode,options){var d=normalizeDateInput(date);var locale=getCalendarIntlLocale(localeCode);if(!d||isNaN(d.getTime())){return''}
12try{return new Intl.DateTimeFormat(locale,options).format(d)}catch(err){return d.toLocaleDateString(undefined,options)}}
13function formatIntlTime(date,localeCode,options){var d=normalizeDateInput(date);var locale=getCalendarIntlLocale(localeCode);if(!d||isNaN(d.getTime())){return''}
14try{return new Intl.DateTimeFormat(locale,options).format(d)}catch(err){return d.toLocaleTimeString(undefined,options)}}
15function addDays(date,amount){var d=normalizeDateInput(date);if(!d||isNaN(d.getTime())){return d}
16d=new Date(d.getTime());d.setDate(d.getDate()+amount);return d}
17function formatIntlRange(startDate,endDate,localeCode,options){var locale=getCalendarIntlLocale(localeCode);var start=normalizeDateInput(startDate);var end=normalizeDateInput(endDate);var formatter;if(!start||!end||isNaN(start.getTime())||isNaN(end.getTime())){return''}
18try{formatter=new Intl.DateTimeFormat(locale,options);if(typeof formatter.formatRange==='function'){return formatter.formatRange(start,end)}
19return formatter.format(start)+' - '+formatter.format(end)}catch(err){return formatIntlDate(start,localeCode,options)+' - '+formatIntlDate(end,localeCode,options)}}
20function formatCalendarTitle(view,localeCode){var currentStart;var currentEnd;if(!view){return''}
21currentStart=normalizeDateInput(view.currentStart||view.activeStart||view.start);currentEnd=normalizeDateInput(view.currentEnd||view.activeEnd||view.end);if(view.type==='dayGridMonth'||view.type==='listMonth'){return formatIntlDate(currentStart,localeCode,{month:'long',year:'numeric'})}
22if(view.type==='timeGridWeek'){return formatIntlRange(currentStart,addDays(currentEnd,-1),localeCode,{month:'short',day:'numeric',year:'numeric'})}
23if(view.type==='timeGridDay'){return formatIntlDate(currentStart,localeCode,{weekday:'long',month:'long',day:'numeric',year:'numeric'})}
24return formatIntlDate(currentStart,localeCode,{month:'long',year:'numeric'})}
25function formatCalendarDayHeader(date,viewType,localeCode){var d=normalizeDateInput(date);var locale=normalizeCalendarLocaleCode(localeCode).toLowerCase();var baseCode=locale.split('-')[0];var localizedWeekdays={de:['So','Mo','Di','Mi','Do','Fr','Sa']};var weekdayLabel='';if(d&&!isNaN(d.getTime())&&localizedWeekdays[baseCode]){weekdayLabel=localizedWeekdays[baseCode][d.getDay()]||''}
26if(viewType==='timeGridWeek'||viewType==='timeGridDay'){if(weekdayLabel){return weekdayLabel+' '+d.getDate()+'.'+(d.getMonth()+1)+'.'}
27return formatIntlDate(date,localeCode,{weekday:'short',month:'numeric',day:'numeric'})}
28if(weekdayLabel){return weekdayLabel}
29return formatIntlDate(date,localeCode,{weekday:'short'})}
30function getLocaleUiText(localeCode,key,defaultValue){var locale=normalizeCalendarLocaleCode(localeCode).toLowerCase();var baseCode=locale.split('-')[0];var translations={bn:{today:'আজ',month:'মাস',week:'সপ্তাহ',day:'দিন',list:'তালিকা',allDay:'সারাদিন',noEvents:'কোনও ইভেন্ট নেই',viewAll:'সব {num}টি ইভেন্ট দেখুন'},de:{today:'Heute',month:'Monat',week:'Woche',day:'Tag',list:'Liste',allDay:'Ganztagig',noEvents:'Keine Ereignisse',viewAll:'Alle {num} Ereignisse anzeigen'}};if(translations[locale]&&translations[locale][key]){return translations[locale][key]}
31if(translations[baseCode]&&translations[baseCode][key]){return translations[baseCode][key]}
32return defaultValue}
33function getCalendarButtonText(localeCode,defaults){return{today:getLocaleUiText(localeCode,'today',defaults.today),month:getLocaleUiText(localeCode,'month',defaults.month),week:getLocaleUiText(localeCode,'week',defaults.week),day:getLocaleUiText(localeCode,'day',defaults.day),list:getLocaleUiText(localeCode,'list',defaults.list)}}
34function buildMoreLinkText(localeCode,num){return getLocaleUiText(localeCode,'viewAll','View all {num} events').replace('{num}',String(num))}
35function updateCalendarToolbarTitle(calendar,localeCode){var titleEl;var titleText;if(!calendar||!calendar.el||!localeCode){return}
36titleEl=calendar.el.querySelector('.fc-toolbar-title');titleText=formatCalendarTitle(calendar.view,localeCode);
36if(titleEl&&titleText){titleEl.textContent=titleText}}
37function updateCalendarDayHeaders(calendar,localeCode){var cells;var viewType;var baseDate;if(!calendar||!calendar.el||!localeCode||!calendar.view){return}
38cells=calendar.el.querySelectorAll('.fc-col-header-cell');viewType=calendar.view.type||'';baseDate=calendar.view.activeStart||calendar.view.currentStart||null;Array.prototype.forEach.call(cells,function(cell,index){var target=cell.querySelector('.fc-col-header-cell-cushion')||cell.querySelector('.fc-scrollgrid-sync-inner')||cell;var headerDate=baseDate?addDays(baseDate,index):cell.getAttribute('data-date');var label;if(!target||!headerDate){return}
39label=formatCalendarDayHeader(headerDate,viewType,localeCode);if(label){target.textContent=label}})}
40function updateCalendarListHeaders(calendar,localeCode){var rows;var visibleDates;if(!calendar||!calendar.el||!localeCode||!calendar.view||calendar.view.type!=='listMonth'){return}
41rows=calendar.el.querySelectorAll('.fc-list-day');visibleDates=getVisibleListHeaderDates(calendar);Array.prototype.forEach.call(rows,function(row){var rowIndex=Array.prototype.indexOf.call(rows,row);var dateStr=row.getAttribute('data-date')||visibleDates[rowIndex]||'';var dateEl=row.querySelector('.fc-list-day-text');var sideEl=row.querySelector('.fc-list-day-side-text');var dateText;var sideText;if(!dateStr){return}
42dateText=formatIntlDate(dateStr,localeCode,{month:'long',day:'numeric',year:'numeric'});sideText=formatIntlDate(dateStr,localeCode,{weekday:'long'});if(dateEl&&dateText){dateEl.textContent=dateText}
43if(sideEl&&sideText){sideEl.textContent=sideText}})}
44function getVisibleListHeaderDates(calendar){var map={};var viewStart;var viewEnd;var events;if(!calendar||!calendar.view||typeof calendar.getEvents!=='function'){return[]}
45viewStart=normalizeDateInput(calendar.view.currentStart||calendar.view.activeStart||calendar.view.start);viewEnd=normalizeDateInput(calendar.view.currentEnd||calendar.view.activeEnd||calendar.view.end);events=calendar.getEvents();if(!viewStart||!viewEnd||isNaN(viewStart.getTime())||isNaN(viewEnd.getTime())){return[]}
46events.forEach(function(event){var start=normalizeDateInput(event&&event.start?event.start:null);var end=normalizeDateInput(event&&event.end?event.end:event.start);var cursor;var lastDate;if(!start||!end||isNaN(start.getTime())||isNaN(end.getTime())){return}
47if(event.allDay&&end.getTime()>start.getTime()){end=new Date(end.getTime()-1000)}
48if(end<viewStart||start>=viewEnd){return}
49if(start<viewStart){start=new Date(viewStart.getTime())}
50if(end>=viewEnd){end=new Date(viewEnd.getTime()-1000)}
51cursor=new Date(start.getFullYear(),start.getMonth(),start.getDate());lastDate=new Date(end.getFullYear(),end.getMonth(),end.getDate());while(cursor<=lastDate){map[formatDateKey(cursor)]=!0;cursor.setDate(cursor.getDate()+1)}});return Object.keys(map).sort()}
52function localizeCalendarChrome(calendar,localeCode){updateCalendarToolbarTitle(calendar,localeCode);updateCalendarDayHeaders(calendar,localeCode);updateCalendarListHeaders(calendar,localeCode)}
53function applyCalendarLocaleOptions(calendarOptions,localeCode){var supportedLocale=getSupportedFullCalendarLocaleCode(localeCode);var locales=window.FullCalendar&&Array.isArray(window.FullCalendar.globalLocales)?window.FullCalendar.globalLocales:[];if(!localeCode){return}
54if(locales.length){calendarOptions.locales=locales}
55if(supportedLocale){calendarOptions.locale=supportedLocale}}
56$(document).ready(function(){if(typeof window.mepCalendar==='undefined'){return}
57initAllCalendars();initFilters()});function initAllCalendars(){$('.mep-calendar-container').each(function(){var $el=$(this);var calId=$el.attr('id');if(!calId)return;if($el.attr('data-mep-cal-rendered')==='yes')return;resetCalendarContainer($el,calId);var style=$el.data('style')||'full';if(style==='lite'){initLiteCalendar($el,calId)}else{initFullCalendar($el,calId)}})}
58function initFullCalendar($el,calId){var containerEl=document.getElementById(calId);if(!containerEl)return;if(typeof window.FullCalendar==='undefined'){renderCalendarError($el);return}
59var settings=mepCalendar.settings||{};var defaultView=$el.data('default-view')||'dayGridMonth';var firstDay=parseInt($el.data('first-day'))||0;var height=normalizeCalendarHeight($el.data('height')||'auto');var showNav=$el.data('show-navigation')!=='no';var showViewSwitcher=$el.data('show-view-switcher')!=='no';var showYearNav=$el.data('show-year-nav')!=='no';var showPrevNext=$el.data('show-prev-next')!=='no';var hideTooltip=$el.data('hide-tooltip')==='yes';var clickAction=$el.data('event-click')||settings.mep_cal_event_click||'navigate';var expiredColor=$el.data('expired-event-color')||settings.mep_cal_expired_event_c
59olor||'#999999';var expiredTextColor=$el.data('expired-text-color')||settings.mep_cal_expired_text_color||'#ffffff';var expiredOpacity=$el.data('expired-opacity')||settings.mep_cal_expired_opacity||'0.6';var locale=resolveCalendarLocaleCode(settings.mep_cal_locale||'');var explicitEventColor=resolveConfiguredEventColor($el);var headerLeftParts=[];if(showNav&&showPrevNext)headerLeftParts.push('prev,next');if(showNav&&showYearNav)headerLeftParts.push('prevYear,nextYear');if(showNav)headerLeftParts.push('today');var headerLeft=headerLeftParts.join(' ');var headerCenter='title';var headerRight=showNav&&showViewSwitcher?'dayGridMonth,timeGridWeek,timeGridDay,listMonth':'';var calendarOptions={initialView:defaultView,firstDay:firstDay,height:height,headerToolbar:{left:headerLeft,center:headerCenter,right:headerRight},buttonText:getCalendarButtonText(locale,{today:mepCalendar.i18n.today,month:mepCalendar.i18n.month,week:mepCalendar.i18n.week,day:mepCalendar.i18n.day,list:mepCalendar.i18n.list}),noEventsText:getLocaleUiText(locale,'noEvents',mepCalendar.i18n.noEvents),allDayText:getLocaleUiText(locale,'allDay',mepCalendar.i18n.allDay),editable:!1,selectable:!1,expandRows:!1,dayMaxEvents:!0,navLinks:!0,eventDisplay:'block',slotEventOverlap:!1,moreLinkClick:'popover',views:{dayGridMonth:{eventDisplay:'list-item',dayMaxEvents:4,dayMaxEventRows:4},timeGridWeek:{dayMaxEventRows:2,eventMaxStack:2},timeGridDay:{dayMaxEventRows:2,eventMaxStack:2}},moreLinkContent:function(args){return{html:'<span class="mep-cal-more-link-text">'+escapeHtml(buildMoreLinkText(locale,args.num))+'</span>'}},dayHeaderDidMount:function(info){applyCalendarDayAppearance($el,info.el,info.date,!0)},dayCellDidMount:function(info){applyCalendarDayAppearance($el,info.el,info.date,!1)},eventDidMount:function(info){var props=info.event.extendedProps||{};if(props.isExpired){info.el.classList.add('mep-cal-expired-event');info.el.style.setProperty('background-color',expiredColor,'important');info.el.style.setProperty('border-color',expiredColor,'important');info.el.style.setProperty('color',expiredTextColor,'important');info.el.style.setProperty('background-image','none','important');info.el.style.opacity=expiredOpacity;if(props.expiredBadge){info.el.title=mepCalendar.i18n.expired+': '+info.event.title}}
60styleCalendarEventCard(info,explicitEventColor);stabilizeMonthGridEvent(info);stabilizeTimeGridAllDayEvent(info)},eventsSet:function(events){var eventsSnapshot=events?events.slice():[];setTimeout(function(){renderTimeGridDaySummaryButtons($el,calId,eventsSnapshot);if(calendars[calId]){styleMonthMoreLinks($el);localizeCalendarChrome(calendars[calId],locale)}},0)},datesSet:function(){setTimeout(function(){if(calendars[calId]){if(typeof calendars[calId].getEvents==='function'){renderTimeGridDaySummaryButtons($el,calId,calendars[calId].getEvents())}
61styleMonthMoreLinks($el);localizeCalendarChrome(calendars[calId],locale)}},0)},events:function(info,successCallback,failureCallback){loadEvents($el,calId,info,successCallback,failureCallback)},eventClick:function(info){info.jsEvent.preventDefault();if(clickAction==='none'){return}
62if(clickAction==='tooltip'){showTooltip(info.event,info.jsEvent,calId);return}
63if(info.event.url){window.location.href=info.event.url}},eventMouseEnter:function(info){toggleCalendarEventHoverState(info,!0);if(hideTooltip)return;showTooltip(info.event,info.jsEvent,calId)},eventMouseLeave:function(info){toggleCalendarEventHoverState(info,!1);hideTooltipEl(calId)},eventContent:function(arg){var props=arg.event.extendedProps||{};var showBadge=$el.data('show-recurring-badge')!=='no';var hideTime=props.hideTime==='yes';var isTimeGrid=arg.view&&isTimeGridViewType(arg.view.type);var isMonthGrid=arg.view&&arg.view.type==='dayGridMonth';var html='<div class="mep-cal-event-inner'+(isTimeGrid?' mep-cal-event-inner-timegrid':'')+(isMonthGrid?' mep-cal-event-inner-month':'')+'">';if(!hideTime&&!arg.event.allDay){var displayTime=formatEventTimeText(arg);if(displayTime){html+='<span class="mep-cal-event-time">'+escapeHtml(displayTime)+' </span>'}}
64html+='<span class="mep-cal-event-title">'+escapeHtml(arg.event.title)+'</span>';if(showBadge&&!isMonthGrid){if(props.eventType==='everyday'){html+=' <sp
64an class="mep-cal-event-badge" title="'+mepCalendar.i18n.recurring+'">&#8635;</span>'}else if(props.eventType==='yes'){html+=' <span class="mep-cal-event-badge" title="'+mepCalendar.i18n.multiDate+'">&#128197;</span>'}
65if(props.eventMode==='online'){html+=' <span class="mep-cal-event-badge" title="'+mepCalendar.i18n.virtual+'">&#127760;</span>'}}
66if(!isMonthGrid&&props.showStock==='yes'&&props.regStatus==='on'&&props.totalSeats>0){if(props.availableSeats<=0){html+=' <span class="mep-cal-stock-dot mep-cal-stock-dot-soldout" title="'+mepCalendar.i18n.soldOut+'">●</span>'}}
67html+='</div>';return{html:html}}};applyCalendarLocaleOptions(calendarOptions,locale);var calendar=new FullCalendar.Calendar(containerEl,calendarOptions);calendar.render();calendars[calId]=calendar;localizeCalendarChrome(calendar,locale);$el.attr('data-mep-cal-rendered','yes')}
68function initLiteCalendar($el,calId){var containerEl=document.getElementById(calId);if(!containerEl)return;if(typeof window.FullCalendar==='undefined'){renderCalendarError($el);return}
69var firstDay=parseInt($el.data('first-day'))||0;var hideTooltip=$el.data('hide-tooltip')==='yes';var clickAction=$el.data('event-click')||'navigate';var settings=mepCalendar.settings||{};var locale=resolveCalendarLocaleCode(settings.mep_cal_locale||'');var height=normalizeCalendarHeight($el.data('height')||'auto');var calendarOptions={initialView:'dayGridMonth',firstDay:firstDay,height:height,headerToolbar:{left:'prev,next',center:'title',right:'today'},buttonText:{today:getLocaleUiText(locale,'today',mepCalendar.i18n.today)},noEventsText:getLocaleUiText(locale,'noEvents',mepCalendar.i18n.noEvents),editable:!1,selectable:!1,dayMaxEvents:3,navLinks:!1,eventDisplay:'block',dayHeaderDidMount:function(info){applyCalendarDayAppearance($el,info.el,info.date,!0)},dayCellDidMount:function(info){applyCalendarDayAppearance($el,info.el,info.date,!1)},events:function(info,successCallback,failureCallback){loadEvents($el,calId,info,successCallback,failureCallback)},eventClick:function(info){info.jsEvent.preventDefault();if(clickAction==='none'){return}
70if(clickAction==='tooltip'){showTooltip(info.event,info.jsEvent,calId);return}
71if(info.event.url){window.location.href=info.event.url}},eventMouseEnter:function(info){toggleCalendarEventHoverState(info,!0);if(hideTooltip)return;showTooltip(info.event,info.jsEvent,calId)},eventMouseLeave:function(info){toggleCalendarEventHoverState(info,!1);hideTooltipEl(calId)},datesSet:function(){setTimeout(function(){if(calendars[calId]){styleMonthMoreLinks($el);localizeCalendarChrome(calendars[calId],locale)}},0)},eventContent:function(arg){var html='<div class="mep-cal-event-inner mep-cal-lite-event">';html+='<span class="mep-cal-event-title">'+escapeHtml(arg.event.title)+'</span>';html+='</div>';return{html:html}}};applyCalendarLocaleOptions(calendarOptions,locale);var calendar=new FullCalendar.Calendar(containerEl,calendarOptions);calendar.render();calendars[calId]=calendar;localizeCalendarChrome(calendar,locale);$el.attr('data-mep-cal-rendered','yes')}
72function resetCalendarContainer($el,calId){if(calendars[calId]&&typeof calendars[calId].destroy==='function'){calendars[calId].destroy();delete calendars[calId]}
73if($el.attr('data-mep-cal-rendered')==='yes'){$el.empty();$el.removeAttr('data-mep-cal-rendered')}}
74function stripIsoTimezone(isoStr){if(typeof isoStr!=='string'||!isoStr){return isoStr||''}
75var match=isoStr.match(/^(\d{4}-\d{2}-\d{2})[T ]/);if(match){return match[1]}
76return isoStr}
77function loadEvents($el,calId,info,successCallback,failureCallback){var data={action:'mep_calendar_get_events',nonce:mepCalendar.nonce,visible_start:info&&info.startStr?stripIsoTimezone(info.startStr):'',visible_end:info&&info.endStr?stripIsoTimezone(info.endStr):'',view_type:info&&info.view&&info.view.type?info.view.type:'',cat:$el.data('cat')||'',org:$el.data('org')||'',tag:$el.data('tag')||'',city:$el.data('city')||'',country:$el.data('country')||'',status:$el.data('status')||'upcoming',event_source:$el.data('event-source')||'all',specific_events:$el.data('specific-events')||'',event_limit:$el.data('event-limit')||'-1',event_c
77olor:$el.data('event-color')||'',text_color:$el.data('text-color')||'',show_stock_details:$el.data('show-stock')||'no',hide_time:$el.data('hide-time')||'no',split_multi_day:$el.data('split-multi-day')||'no',hide_tooltip:$el.data('hide-tooltip')||'no',show_price:$el.data('show-price')||'no',show_location:$el.data('show-location')||'no',show_organizer:$el.data('show-organizer')||'no',show_expired_events:$el.data('show-expired-events')||'yes'};var $wrapper=$el.closest('.mep-calendar-wrapper');var $searchInput=$wrapper.find('.mep-cal-search-input');if($searchInput.length&&$searchInput.val()){data.search=$searchInput.val()}
78var $catSelect=$wrapper.find('.mep-cal-category-select');if($catSelect.length&&$catSelect.val()){data.cat_filter=$catSelect.val()}
79var $orgSelect=$wrapper.find('.mep-cal-organizer-select');if($orgSelect.length&&$orgSelect.val()){data.org_filter=$orgSelect.val()}
80var $locationInput=$wrapper.find('.mep-cal-location-input');if($locationInput.length&&$locationInput.val()){data.location_filter=$locationInput.val()}
81var $dateStart=$wrapper.find('.mep-cal-date-start');if($dateStart.length&&$dateStart.val()){data.date_start=$dateStart.val()}
82var $dateEnd=$wrapper.find('.mep-cal-date-end');if($dateEnd.length&&$dateEnd.val()){data.date_end=$dateEnd.val()}
83$.ajax({url:mepCalendar.ajaxurl,type:'POST',data:data,dataType:'json',timeout:30000,success:function(response){if(response.success&&response.data){successCallback(response.data)}else{successCallback([])}},error:function(){successCallback([])}})}
84function showTooltip(event,jsEvent,calId){var $tooltip=$('#'+calId+'-tooltip');if(!$tooltip.length)return;var props=event.extendedProps||{};tooltipPointerState[calId]={clientX:jsEvent.clientX,clientY:jsEvent.clientY};var html=buildTooltipHtml(event,props);$tooltip.html(html).show();positionTooltip($tooltip,jsEvent);maybeLoadStockDetails(event,calId)}
85function buildTooltipHtml(event,props){var html='';html+='<div class="mep-cal-tooltip-header">';if(props.thumbnail){html+='<img class="mep-cal-tooltip-thumb" src="'+escapeHtml(props.thumbnail)+'" alt="" />'}
86html+='<div>';html+='<div class="mep-cal-tooltip-title">'+escapeHtml(event.title)+'</div>';html+='<div class="mep-cal-tooltip-badges">';if(props.eventType==='everyday'){html+='<span class="mep-cal-tooltip-badge mep-cal-badge-recurring">'+mepCalendar.i18n.recurring+'</span>'}else if(props.eventType==='yes'){html+='<span class="mep-cal-tooltip-badge mep-cal-badge-multidate">'+mepCalendar.i18n.multiDate+'</span>'}
87if(props.eventMode==='online'){html+='<span class="mep-cal-tooltip-badge mep-cal-badge-virtual">'+mepCalendar.i18n.virtual+'</span>'}
88if(props.regStatus==='on'&&props.totalSeats>0&&props.availableSeats<=0){html+='<span class="mep-cal-tooltip-badge mep-cal-badge-soldout">'+mepCalendar.i18n.soldOut+'</span>'}
89html+='</div>';html+='</div>';html+='</div>';html+='<div class="mep-cal-tooltip-body">';if(event.start){var dateStr=formatDate(event.start);if(props.hideTime!=='yes'&&!event.allDay){dateStr+=' '+formatTime(event.start);if(event.end){dateStr+=' - '+formatTime(event.end)}}
90html+='<div class="mep-cal-tooltip-row"><i class="far fa-calendar-alt"></i> <span>'+escapeHtml(dateStr)+'</span></div>'}
91if(props.showLocation==='yes'&&props.location){html+='<div class="mep-cal-tooltip-row"><i class="fas fa-map-marker-alt"></i> <span>'+escapeHtml(props.location)+'</span></div>'}
92if(props.showOrganizer==='yes'&&props.organizer){html+='<div class="mep-cal-tooltip-row"><i class="far fa-user"></i> <span>'+escapeHtml(props.organizer)+'</span></div>'}
93if(props.categories&&props.categories.length>0){html+='<div class="mep-cal-tooltip-row"><i class="fas fa-tags"></i> <span>'+escapeHtml(props.categories.join(', '))+'</span></div>'}
94if(props.showPrice==='yes'){html+=buildPriceHtml(props)}
95if(props.showStock==='yes'){if(props.stockLoaded==='no'){html+='<div class="mep-cal-tooltip-row"><span>'+escapeHtml((mepCalendar.i18n&&mepCalendar.i18n.loadingSeats)?mepCalendar.i18n.loadingSeats:'Loading seat details...')+'</span></div>'}else if((props.totalSeats>0)||(props.ticketTypes&&props.ticketTypes.length>0)){html+=buildStockHtml(props)}}
96html+='</div>';return html}
97function buildStockHtml(props){var html='<div class="mep-cal-tooltip-stock">';var stockClass='mep-cal-stock-available';var settings=mepCalendar.settings||{};var threshold=parseInt(settings.mep_cal_low_stock_threshold)||5;if(props.availableSeats<=0){stockClass='mep-cal-stock-soldout'}else if(props.availableSeats<=threshold){stockClass='mep-cal-stock-low'}
98html+='<div class="mep-cal-tooltip-stock-header">';
98html+='<span>'+mepCalendar.i18n.seats+'</span>';html+='<span class="mep-cal-tooltip-stock-summary '+stockClass+'">';html+=props.availableSeats+' / '+props.totalSeats+' '+mepCalendar.i18n.available;html+='</span>';html+='</div>';var fillPercent=props.totalSeats>0?((props.totalSeats-props.availableSeats)/props.totalSeats*100):0;var barColor='#28a745';if(props.availableSeats<=0){barColor=settings.mep_cal_sold_out_color||'#dc3545'}else if(props.availableSeats<=threshold){barColor=settings.mep_cal_low_stock_color||'#ffc107'}
99html+='<div class="mep-cal-stock-bar"><div class="mep-cal-stock-bar-fill" style="width:'+fillPercent+'%;background:'+barColor+';"></div></div>';if(props.ticketTypes&&props.ticketTypes.length>0){html+='<div class="mep-cal-tooltip-ticket-types">';for(var i=0;i<props.ticketTypes.length;i++){var t=props.ticketTypes[i];html+='<div class="mep-cal-ticket-row">';html+='<span class="ticket-name">'+escapeHtml(t.name)+'</span>';html+='<span class="ticket-avail">'+t.available+'/'+t.total;if(props.showPrice==='yes'&&t.priceHtml){html+=' ('+escapeHtml(t.priceHtml)+')'}
100html+='</span>';html+='</div>'}
101html+='</div>'}
102html+='</div>';return html}
103function buildPriceHtml(props){var html='';if(props.ticketTypes&&props.ticketTypes.length>0){html+='<div class="mep-cal-tooltip-price-block">';html+='<div class="mep-cal-tooltip-price-heading">'+escapeHtml(mepCalendar.i18n.price)+'</div>';for(var i=0;i<props.ticketTypes.length;i++){var ticket=props.ticketTypes[i];if(!ticket.priceHtml){continue}
104html+='<div class="mep-cal-tooltip-price-row">';html+='<span class="price-ticket-name">'+escapeHtml(ticket.name)+'</span>';html+='<span class="price-ticket-value">'+escapeHtml(ticket.priceHtml)+'</span>';html+='</div>'}
105html+='</div>';return html}
106if(props.minPriceHtml){html+='<div class="mep-cal-tooltip-row"><i class="fas fa-tag"></i> <span><strong>'+mepCalendar.i18n.price+':</strong> '+escapeHtml(props.minPriceHtml)+'</span></div>'}
107return html}
108function positionTooltip($tooltip,jsEvent){var x=jsEvent.clientX;var y=jsEvent.clientY;var tooltipW=$tooltip.outerWidth();var tooltipH=$tooltip.outerHeight();var winW=$(window).width();var winH=$(window).height();var left=x+15;var top=y-10;if(left+tooltipW>winW-10){left=x-tooltipW-15}
109if(top+tooltipH>winH-10){top=winH-tooltipH-10}
110if(top<10){top=10}
111if(left<10){left=10}
112$tooltip.css({left:left+'px',top:top+'px'})}
113function maybeLoadStockDetails(event,calId){var props=event.extendedProps||{};var cacheKey;if(props.showStock!=='yes'||!props.eventId||!props.eventDate){return}
114if(props.stockLoaded==='yes'){return}
115cacheKey=String(props.eventId)+'|'+String(props.eventDate);if(stockRequestCache[cacheKey]){applyStockDataToEvent(event,stockRequestCache[cacheKey]);refreshTooltipContent(event,calId);return}
116$.ajax({url:mepCalendar.ajaxurl,type:'POST',dataType:'json',data:{action:'mep_calendar_get_event_stock',nonce:mepCalendar.nonce,event_id:props.eventId,event_date:props.eventDate,show_price:props.showPrice||'no'},success:function(response){if(!response||!response.success||!response.data){return}
117stockRequestCache[cacheKey]=response.data;applyStockDataToEvent(event,response.data);refreshTooltipContent(event,calId)}})}
118function applyStockDataToEvent(event,stockData){if(!event||!stockData){return}
119var mappedProps={totalSeats:parseInt(stockData.totalSeats,10)||0,availableSeats:parseInt(stockData.availableSeats,10)||0,soldSeats:parseInt(stockData.soldSeats,10)||0,reservedSeats:parseInt(stockData.reservedSeats,10)||0,ticketTypes:Array.isArray(stockData.ticketTypes)?stockData.ticketTypes:[],stockLoaded:stockData.stockLoaded||'yes'};if(typeof stockData.minPriceHtml!=='undefined'&&stockData.minPriceHtml!==null&&stockData.minPriceHtml!==''){mappedProps.minPriceHtml=stockData.minPriceHtml}
120Object.keys(mappedProps).forEach(function(key){if(typeof event.setExtendedProp==='function'){event.setExtendedProp(key,mappedProps[key])}else{event.extendedProps[key]=mappedProps[key]}});applyStockStylesToEvent(event,$.extend({},event.extendedProps||{},mappedProps))}
121function refreshTooltipContent(event,calId){var $tooltip=$('#'+calId+'-tooltip');var pointer=tooltipPointerState[calId];if(!$tooltip.length||!$tooltip.is(':visible')){return}
122$tooltip.html(buildTooltipHtml(event,event.extendedProps||{}));if(pointer){positionTooltip($tooltip,pointer)}}
123function applyStockStylesToEvent(event,props){if(!event||!props||props.isExpired||props.showStock!=='yes'||props.regStatus!=='on'){return}
124var settings=mepCalendar.settings||{};var threshold=parseInt(settings.mep_cal_low_stock_threshold,10)||5;
124var defaultBg=props.defaultBackgroundColor||'';var defaultBorder=props.defaultBorderColor||defaultBg;var defaultText=props.defaultTextColor||'#ffffff';var nextBg=defaultBg;var nextBorder=defaultBorder;var nextText=defaultText;if(parseInt(props.totalSeats,10)>0){if(parseInt(props.availableSeats,10)<=0){nextBg=settings.mep_cal_sold_out_color||'#dc3545';nextBorder=nextBg}else if(parseInt(props.availableSeats,10)<=threshold){nextBg=settings.mep_cal_low_stock_color||'#ffc107';nextBorder=nextBg;nextText='#333333'}}
125if(typeof event.setProp==='function'){event.setProp('backgroundColor',nextBg);event.setProp('borderColor',nextBorder);event.setProp('textColor',nextText)}}
126function styleCalendarEventCard(info,explicitEventColor){if(!info||!info.el||!info.event||!info.view){return}
127if(info.view.type==='dayGridMonth'){return}
128var props=info.event.extendedProps||{};if(props.isExpired){return}
129var isTimeGrid=isTimeGridViewType(info.view.type);var baseColor=explicitEventColor||props.paletteAccent||info.event.backgroundColor||props.defaultBackgroundColor||MEP_CAL_DEFAULT_EVENT_COLOR;if(!explicitEventColor){baseColor=props.paletteAccent||getEventPaletteColor(info.event,baseColor)}
130var palette=buildSoftEventPalette(baseColor);var mainEl=info.el.querySelector('.fc-event-main');info.el.style.setProperty('--mep-cal-event-accent',palette.accent);info.el.style.setProperty('--mep-cal-event-soft-bg',palette.softBackground);info.el.style.setProperty('--mep-cal-event-soft-border',palette.softBorder);info.el.style.setProperty('--mep-cal-event-soft-text',palette.text);info.el.style.setProperty('--mep-cal-event-dot',palette.accent);info.el.style.backgroundColor=palette.softBackground;info.el.style.borderColor=palette.softBorder;info.el.style.color=palette.text;info.el.style.borderLeftColor=palette.accent;if(mainEl){mainEl.style.color=palette.text}
131if(!isTimeGrid){return}}
132function isTimeGridViewType(viewType){return viewType==='timeGridWeek'||viewType==='timeGridDay'}
133function stabilizeTimeGridAllDayEvent(info){var nodes=[];var innerEl;var titleEl;var harnessEl;if(!info||!info.el||!info.view||!isTimeGridViewType(info.view.type)||!info.event||!info.event.allDay){return}
134harnessEl=info.el.closest('.fc-daygrid-event-harness');innerEl=info.el.querySelector('.mep-cal-event-inner');titleEl=info.el.querySelector('.mep-cal-event-title');nodes.push(info.el);if(harnessEl){nodes.push(harnessEl)}[info.el.querySelector('.fc-event-main'),info.el.querySelector('.fc-event-main-frame'),info.el.querySelector('.fc-event-title-container'),info.el.querySelector('.fc-event-title'),innerEl,titleEl].forEach(function(node){if(node){nodes.push(node)}});nodes.forEach(function(node){node.style.maxWidth='100%';node.style.minWidth='0';node.style.overflow='hidden';node.style.boxSizing='border-box'});if(innerEl){innerEl.style.display='flex';innerEl.style.alignItems='center';innerEl.style.gap='4px';innerEl.style.whiteSpace='nowrap'}
135if(titleEl){titleEl.style.display='block';titleEl.style.whiteSpace='nowrap';titleEl.style.textOverflow='ellipsis'}}
136function resolveConfiguredEventColor($el){var shortcodeColor=normalizeHexColor($el&&$el.data?$el.data('event-color'):'');return shortcodeColor||resolveSettingsEventColor()}
137function resolveSettingsEventColor(){var settings=(typeof mepCalendar!=='undefined'&&mepCalendar.settings)?mepCalendar.settings:{};var settingColor=normalizeHexColor(settings.mep_cal_event_color||'');if(settingColor&&settingColor!==MEP_CAL_DEFAULT_EVENT_COLOR){return settingColor}
138return''}
139function getEventPaletteColor(event,fallbackColor){var props=event&&event.extendedProps?event.extendedProps:{};var configuredColor=resolveSettingsEventColor();var seed;if(configuredColor){return configuredColor}
140seed=String((props.eventId||event.id||'')+'|'+(event.title||'')+'|'+((props.categories&&props.categories[0])?props.categories[0]:''));var hash=Math.abs(hashString(seed||fallbackColor||'mep-calendar-event'));var hue=hash%360;var saturation=62+(hash%12);var lightness=44+(hash%8);return hslToHex(hue,saturation,lightness)}
141function buildSoftEventPalette(color){var accent=normalizeHexColor(color)||MEP_CAL_DEFAULT_EVENT_COLOR;
141return{accent:accent,softBackground:hexToRgba(accent,0.18),softBorder:hexToRgba(accent,0.92),text:shadeHexColor(accent,-0.42)||accent}}
142function normalizeHexColor(color){if(!color){return''}
143color=String(color).trim();if(!/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(color)){return''}
144if(color.length===4){return'#'+color.charAt(1)+color.charAt(1)+color.charAt(2)+color.charAt(2)+color.charAt(3)+color.charAt(3)}
145return color.toLowerCase()}
146function hexToRgba(color,alpha){var hex=normalizeHexColor(color);if(!hex){return color}
147var r=parseInt(hex.substr(1,2),16);var g=parseInt(hex.substr(3,2),16);var b=parseInt(hex.substr(5,2),16);return'rgba('+r+', '+g+', '+b+', '+alpha+')'}
148function shadeHexColor(color,percent){var hex=normalizeHexColor(color);if(!hex){return color}
149var factor=typeof percent==='number'?percent:0;var r=parseInt(hex.substr(1,2),16);var g=parseInt(hex.substr(3,2),16);var b=parseInt(hex.substr(5,2),16);r=clampColorChannel(Math.round(r*(1+factor)));g=clampColorChannel(Math.round(g*(1+factor)));b=clampColorChannel(Math.round(b*(1+factor)));return'#'+toHex(r)+toHex(g)+toHex(b)}
150function clampColorChannel(value){return Math.max(0,Math.min(255,value))}
151function toHex(value){return value.toString(16).padStart(2,'0')}
152function hslToHex(h,s,l){var hue=((h%360)+360)%360;var sat=Math.max(0,Math.min(100,s))/100;var light=Math.max(0,Math.min(100,l))/100;var c=(1-Math.abs(2*light-1))*sat;var x=c*(1-Math.abs((hue/60)%2-1));var m=light-c/2;var r=0;var g=0;var b=0;if(hue<60){r=c;g=x;b=0}else if(hue<120){r=x;g=c;b=0}else if(hue<180){r=0;g=c;b=x}else if(hue<240){r=0;g=x;b=c}else if(hue<300){r=x;g=0;b=c}else{r=c;g=0;b=x}
153return'#'+toHex(Math.round((r+m)*255))+toHex(Math.round((g+m)*255))+toHex(Math.round((b+m)*255))}
154function hashString(value){var str=String(value);var hash=0;var i;for(i=0;i<str.length;i++){hash=((hash<<5)-hash)+str.charCodeAt(i);hash|=0}
155return hash}
156function renderTimeGridDaySummaryButtons($el,calId,events){var calendar=calendars[calId];var viewType;var $existingButtons;if(!calendar||!calendar.view){return}
157viewType=calendar.view.type;$existingButtons=$el.find('.mep-cal-day-summary-button');$existingButtons.remove();if(!isTimeGridViewType(viewType)){hideDayEventsPopover(calId);return}
158$el.find('.fc-timegrid-col').each(function(){var colEl=this;var dateStr=colEl.getAttribute('data-date');var dayEvents;var buttonText;var buttonEl;if(!dateStr){return}
159dayEvents=getEventsForDate(events,dateStr);if(!dayEvents.length){return}
160buttonText='View all '+dayEvents.length+' events';buttonEl=document.createElement('button');buttonEl.type='button';buttonEl.className='mep-cal-day-summary-button';buttonEl.setAttribute('data-calendar-id',calId);buttonEl.setAttribute('data-date',dateStr);buttonEl.textContent=buttonText;colEl.appendChild(buttonEl)})}
161function styleMonthMoreLinks($el){var calendarEl;var moreLinks;if(!$el||!$el.length){return}
162calendarEl=$el.get(0);if(!calendarEl){return}
163moreLinks=calendarEl.querySelectorAll('.fc-dayGridMonth-view .fc-daygrid-day-bottom a, .fc-dayGridMonth-view .fc-daygrid-day-bottom .fc-more-link, .fc-dayGridMonth-view .fc-daygrid-day-bottom .fc-daygrid-more-link');moreLinks.forEach(function(linkEl){var textNodes=linkEl.querySelectorAll('.fc-sticky, .mep-cal-more-link-text');linkEl.classList.add('mep-cal-more-link-button');linkEl.style.setProperty('display','inline-flex','important');linkEl.style.setProperty('align-items','center','important');linkEl.style.setProperty('justify-content','center','important');linkEl.style.setProperty('width','auto','important');linkEl.style.setProperty('max-width','100%','important');linkEl.style.setProperty('padding','5px 10px','important');linkEl.style.setProperty('border','1px solid rgba(44, 62, 80, 0.22)','important');linkEl.style.setProperty('border-radius','999px','important');linkEl.style.setProperty('background','#34495e','important');linkEl.style.setProperty('color','#ffffff','important');linkEl.style.setProperty('font-size','12px','important');linkEl.style.setProperty('font-weight','600','important');linkEl.style.setProperty('line-height','1.2','important');linkEl.style.setProperty('text-decoration','none','important');linkEl.style.setProperty('box-shadow','0 2px 8px rgba(15, 23, 42, 0.12)','
163important');linkEl.style.setProperty('cursor','pointer','important');textNodes.forEach(function(textNode){textNode.style.setProperty('display','inline-flex','important');textNode.style.setProperty('align-items','center','important');textNode.style.setProperty('justify-content','center','important');textNode.style.setProperty('position','static','important');textNode.style.setProperty('color','inherit','important');textNode.style.setProperty('white-space','nowrap','important')})})}
164function stabilizeMonthGridEvent(info){var nodes=[];var harnessEl;var titleEl;var innerEl;var isDotEvent;if(!info||!info.el||!info.view||info.view.type!=='dayGridMonth'){return}
165harnessEl=info.el.closest('.fc-daygrid-event-harness');titleEl=info.el.querySelector('.mep-cal-event-title');innerEl=info.el.querySelector('.mep-cal-event-inner, .mep-cal-event-inner-month');isDotEvent=info.el.classList.contains('fc-daygrid-dot-event');[harnessEl,info.el,info.el.querySelector('.fc-event-main'),info.el.querySelector('.fc-event-main-frame'),info.el.querySelector('.fc-event-title-container'),info.el.querySelector('.fc-event-title'),info.el.querySelector('.fc-event-time'),titleEl,innerEl].forEach(function(node){if(node){nodes.push(node)}});nodes.forEach(function(node){node.style.maxWidth='100%';node.style.minWidth='0';node.style.overflow='hidden';node.style.boxSizing='border-box'});if(harnessEl){harnessEl.style.left='0';harnessEl.style.right='0';harnessEl.style.width='100%';harnessEl.style.maxWidth='100%';harnessEl.style.top='auto';harnessEl.style.bottom='auto'}
166info.el.style.width='100%';info.el.style.maxWidth='100%';info.el.style.display='flex';info.el.style.alignItems='center';if(isDotEvent){if(harnessEl){harnessEl.style.position='static';harnessEl.style.marginTop='2px'}
167info.el.style.background='transparent';info.el.style.border='none';info.el.style.boxShadow='none';info.el.style.padding='2px 4px'}
168if(titleEl){titleEl.style.display='block';titleEl.style.width='100%';titleEl.style.whiteSpace='nowrap';titleEl.style.textOverflow='ellipsis'}}
169function toggleCalendarEventHoverState(info,isActive){var harnessEl;var innerEl;var mainEl;var highlightEl;var textNodes;if(!info||!info.el){return}
170harnessEl=info.el.closest('.fc-daygrid-event-harness, .fc-daygrid-event-harness-abs');innerEl=info.el.querySelector('.mep-cal-event-inner, .mep-cal-event-inner-month');mainEl=info.el.querySelector('.fc-event-main');highlightEl=innerEl||mainEl||info.el;textNodes=info.el.querySelectorAll('.mep-cal-event-time, .mep-cal-event-title, .fc-event-time, .fc-event-title');info.el.classList.toggle('mep-cal-event-hovered',!!isActive);if(harnessEl){harnessEl.classList.toggle('mep-cal-event-hovered-wrap',!!isActive);if(isActive){harnessEl.style.setProperty('z-index','4','important')}else{harnessEl.style.removeProperty('z-index')}}
171if(innerEl){innerEl.classList.toggle('mep-cal-event-hovered-inner',!!isActive)}
172if(mainEl){mainEl.classList.toggle('mep-cal-event-hovered-main',!!isActive)}
173if(highlightEl){if(isActive){highlightEl.style.setProperty('background','rgba(58, 135, 173, 0.16)','important');highlightEl.style.setProperty('box-shadow','inset 0 0 0 1px rgba(58, 135, 173, 0.42)','important');highlightEl.style.setProperty('border-radius','6px','important');highlightEl.style.setProperty('padding','2px 4px','important')}else{highlightEl.style.removeProperty('background');highlightEl.style.removeProperty('box-shadow');highlightEl.style.removeProperty('border-radius');highlightEl.style.removeProperty('padding')}}
174textNodes.forEach(function(node){if(isActive){node.style.setProperty('color','#b71c1c','important');node.style.setProperty('font-weight','600','important')}else{node.style.removeProperty('color');node.style.removeProperty('font-weight')}})}
175function getEventsForDate(events,dateStr){var list=Array.isArray(events)?events.slice():[];return list.filter(function(event){return eventOccursOnDate(event,dateStr)}).sort(function(a,b){var startA=a&&a.start?a.start.getTime():0;var startB=b&&b.start?b.start.getTime():0;return startA-startB})}
176function eventOccursOnDate(event,dateStr){var start;var end;var dateStart;var dateEnd;if(!event||!event.start||!dateStr){return!1}
177start=new Date(event.start);
177end=event.end?new Date(event.end):new Date(event.start);dateStart=new Date(dateStr+'T00:00:00');dateEnd=new Date(dateStr+'T23:59:59');if(event.allDay&&end.getTime()>start.getTime()){end=new Date(end.getTime()-1000)}
178return start<=dateEnd&&end>=dateStart}
179function ensureDayEventsPopover($el,calId){var $popover=$('#'+calId+'-day-events-popover');if($popover.length){return $popover}
180$popover=$('<div/>',{id:calId+'-day-events-popover',class:'mep-cal-day-events-popover',css:{display:'none'}});$el.closest('.mep-calendar-wrapper').append($popover);return $popover}
181function showDayEventsPopover($el,calId,dateStr,triggerEl){var calendar=calendars[calId];var $popover=ensureDayEventsPopover($el,calId);var events;var html;if(!calendar||!calendar.view){return}
182events=getEventsForDate(calendar.getEvents(),dateStr);if(!events.length){hideDayEventsPopover(calId);return}
183html=buildDayEventsPopoverHtml(events,dateStr);$popover.html(html).show();positionDayEventsPopover($popover,triggerEl)}
184function hideDayEventsPopover(calId){$('#'+calId+'-day-events-popover').hide()}
185function buildDayEventsPopoverHtml(events,dateStr){var html='';var i;html+='<div class="mep-cal-day-popover-header">';html+='<span class="mep-cal-day-popover-title">All Events</span>';html+='<button type="button" class="mep-cal-day-popover-close" aria-label="Close">&times;</button>';html+='</div>';html+='<div class="mep-cal-day-popover-date">'+escapeHtml(formatDate(dateStr))+'</div>';html+='<div class="mep-cal-day-popover-list">';for(i=0;i<events.length;i++){html+=buildDayEventsPopoverItem(events[i])}
186html+='</div>';return html}
187function buildDayEventsPopoverItem(event){var props=event&&event.extendedProps?event.extendedProps:{};var accent=props.paletteAccent||getEventPaletteColor(event,event.backgroundColor||MEP_CAL_DEFAULT_EVENT_COLOR);var timeText=getEventSummaryTimeText(event);var url=event&&event.url?String(event.url):'';var wrapperTag=url?'a':'div';var wrapperAttr=url?' href="'+escapeHtml(url)+'"':'';var html='';html+='<'+wrapperTag+' class="mep-cal-day-popover-item"'+wrapperAttr+'>';html+='<span class="mep-cal-day-popover-dot" style="background:'+escapeHtml(accent)+';"></span>';html+='<span class="mep-cal-day-popover-content">';html+='<span class="mep-cal-day-popover-item-title">'+escapeHtml(event.title)+'</span>';if(timeText){html+='<span class="mep-cal-day-popover-item-time">'+escapeHtml(timeText)+'</span>'}
188html+='</span>';html+='</'+wrapperTag+'>';return html}
189function positionDayEventsPopover($popover,triggerEl){var rect;var popoverW;var popoverH;var left;var top;var viewportW=$(window).width();var viewportH=$(window).height();if(!$popover.length||!triggerEl||!triggerEl.getBoundingClientRect){return}
190rect=triggerEl.getBoundingClientRect();popoverW=$popover.outerWidth();popoverH=$popover.outerHeight();left=rect.right-popoverW;top=rect.bottom-popoverH-12;if(left<12){left=12}
191if(left+popoverW>viewportW-12){left=viewportW-popoverW-12}
192if(top<12){top=rect.top+12}
193if(top+popoverH>viewportH-12){top=viewportH-popoverH-12}
194$popover.css({left:left+'px',top:top+'px'})}
195function getEventSummaryTimeText(event){if(!event||!event.start){return''}
196if(event.allDay||(event.extendedProps&&event.extendedProps.hideTime==='yes')){return mepCalendar.i18n&&mepCalendar.i18n.allDay?mepCalendar.i18n.allDay:'All day'}
197if(event.end){return formatTime(event.start)+' - '+formatTime(event.end)}
198return formatTime(event.start)}
199function hideTooltipEl(calId){$('#'+calId+'-tooltip').hide()}
200function renderCalendarError($el){$el.addClass('mep-cal-init-error');if(!$el.children().length){$el.html('<div class="mep-cal-error-message">Calendar could not load. Please check the FullCalendar script and refresh the page.</div>')}}
201function applyCalendarDayAppearance($el,cellEl,date,isHeader){if(!cellEl||!date){return}
202var appearance=getCalendarDayAppearance(date);var targetEl=getCalendarDayTarget(cellEl,isHeader);if(!appearance.color&&!appearance.image){return}
203if(appearance.color){targetEl.style.setProperty('background-color',appearance.color,'important')}
204if(appearance.image&&!isHeader){targetEl.classList.add('mep-cal-day-has-bg-image');targetEl.style.setProperty('background-image','linear-gradient(rgba(255,255,255,0.76), rgba(255,255,255,0.76)), url("'+appearance.image.replace(/"/g,'\\"')+'")');targetEl.style.setProperty('background-size','cover');targetEl.style.setProperty('background-position','center center');targetEl.style.setProperty('background-repeat','no-repeat')}
205if(appearance.color||appearance.image){targetEl.classList.add('mep-cal-day-customized')}}
206function getCalendarDayTarget(cellEl,isHeader){if(isHeader){return cellEl.querySelector('.fc-scrollgrid-sync-inner')||cellEl}
207return cellEl.querySelector('.fc-daygrid-day-frame')||cellEl.querySelector('.fc-timegrid-col-frame')||cellEl}
208function getCalendarDayAppearance(date){var settings=mepCalendar.settings||{};var weekdayKey=getWeekdayKey(date);var dateKey=formatDateKey(date);var rules=Array.isArray(settings.mep_cal_day_background_rules)?settings.mep_cal_day_background_rules:[];var appearance={color:settings['mep_cal_weekday_bg_'+weekdayKey]||'',image:''};for(var i=0;i<rules.length;i++){if(rules[i]&&rules[i].type==='weekday'&&rules[i].value===weekdayKey&&rules[i].image){appearance.image=rules[i].image}}
209for(var j=0;j<rules.length;j++){if(rules[j]&&rules[j].type==='date'&&rules[j].value===dateKey&&rules[j].image){appearance.image=rules[j].image;break}}
210return appearance}
211function getWeekdayKey(date){var day=new Date(date).getDay();var map=['sun','mon','tue','wed','thu','fri','sat'];return map[day]||'sun'}
212function formatDateKey(date){var d=new Date(date);var year=d.getFullYear();var month=String(d.getMonth()+1).padStart(2,'0');var day=String(d.getDate()).padStart(2,'0');return year+'-'+month+'-'+day}
213function initFilters(){var searchTimer;$(document).on('input','.mep-cal-search-input',function(){var $input=$(this);var calId=$input.data('calendar-id');clearTimeout(searchTimer);searchTimer=setTimeout(function(){if(calendars[calId]){calendars[calId].refetchEvents()}},400)});$(document).on('change','.mep-cal-category-select',function(){var calId=$(this).data('calendar-id');if(calendars[calId]){calendars[calId].refetchEvents()}});$(document).on('change','.mep-cal-organizer-select, .mep-cal-date-start, .mep-cal-date-end',function(){var calId=$(this).data('calendar-id');if(calendars[calId]){calendars[calId].refetchEvents()}});$(document).on('input','.mep-cal-location-input',function(){var $input=$(this);var calId=$input.data('calendar-id');clearTimeout(searchTimer);searchTimer=setTimeout(function(){if(calendars[calId]){calendars[calId].refetchEvents()}},400)});$(document).on('click','.mep-cal-reset-button',function(){var calId=$(this).data('calendar-id');var $wrapper=$(this).closest('.mep-calendar-wrapper');$wrapper.find('.mep-cal-search-input').val('');$wrapper.find('.mep-cal-category-select').val('');$wrapper.find('.mep-cal-organizer-select').val('');$wrapper.find('.mep-cal-location-input').val('');$wrapper.find('.mep-cal-date-start').val('');$wrapper.find('.mep-cal-date-end').val('');if(calendars[calId]){calendars[calId].refetchEvents()}});$(document).on('click','.mep-cal-day-summary-button',function(e){var $button=$(this);var calId=$button.data('calendar-id');var dateStr=$button.data('date');var $calendarEl=$('#'+calId);var $popover=$('#'+calId+'-day-events-popover');e.preventDefault();e.stopPropagation();if($popover.length&&$popover.is(':visible')&&$popover.data('activeDate')===dateStr){hideDayEventsPopover(calId);$popover.removeData('activeDate');return}
214showDayEventsPopover($calendarEl,calId,dateStr,this);$('#'+calId+'-day-events-popover').data('activeDate',dateStr)});$(document).on('click','.mep-cal-day-popover-close',function(e){var $popover=$(this).closest('.mep-cal-day-events-popover');e.preventDefault();$popover.hide().removeData('activeDate')});$(document).on('click',function(e){if(!$(e.target).closest('.mep-cal-day-events-popover, .mep-cal-day-summary-button').length){$('.mep-cal-day-events-popover').hide().removeData('activeDate')}})}
215function formatDate(date){if(!date)return'';return formatIntlDate(date,'',{year:'numeric',month:'short',day:'numeric'})}
216function formatTime(date){if(!date)return'';return formatIntlTime(date,'',{hour:'2-digit',minute:'2-digit'})}
217function normalizeDateInput(date){if(date instanceof Date){return date}
218if(typeof date==='string'&&/^\d{4}-\d{2}-\d{2}$/.test(date)){return new Date(date+'T00:00:00')}
219return new Date(date)}
220function formatEventTimeText(arg){if(!arg||!arg.event||!arg.event.start)return'';var startText=formatTime(arg.event.start);if(!startText)return'';if(arg.view&&arg.view.type==='timeGridDay'&&arg.event.end){return startText+' - '+formatTime(arg.event.end)}
221return startText}
222function normalizeCalendarHeight(value){if(!value)return'auto';value=String(value).trim();if(!value||value==='auto'||value==='parent'){return value||'auto'}
223if(/^\d+$/.test(value)){return parseInt(value,10)}
224return value}
225function escapeHtml(text){if(!text)return'';text=String(text);var map={'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#039;'};return text.replace(/[&<>"']/g,function(m){return map[m]})}
226window.mepCalendarInit=initAllCalendars})(jQuery)

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.