PageSourceSearch

https://www.richmondshiretoday.co.uk/wp-content/plugins/events-manager/includes/js/events-manager.js?ver=6.3

js richmondshiretoday.co.uk collected 2026-10-02 12:09:14 UTC 319,037 bytes, 2,987 lines download raw bytes

1jQuery(document).ready( function($){
2
3	// backcompat changes 6.x to 5.x
4	if( $('#recurrence-frequency').length > 0  ){
5		$('#recurrence-frequency').addClass('em-recurrence-frequency');
6		$('.event-form-when .interval-desc').each( function(){
7			this.classList.add(this.id);
8		});
9		$('.event-form-when .alternate-selector').each( function(){
10			this.classList.add('em-' + this.id);
11		});
12		$('#recurrence-interval').addClass('em-recurrence-interval');
13	}
14	$('#em-wrapper').addClass('em');
15
16
17	var load_ui_css = false; //load jquery ui css?
18	/* Time Entry */
19	$('#start-time').each(function(i, el){
20		$(el).addClass('em-time-input em-time-start').next('#end-time').addClass('em-time-input em-time-end').parent().addClass('em-time-range');
21	});
22	if( $(".em-time-input").length > 0 ){
23		em_setup_timepicker('body');
24	}
25
26	/*
27	 * ADMIN AREA AND PUBLIC FORMS (Still polishing this section up, note that form ids and classes may change accordingly)
28	 */
29	//Events List
30		//Approve/Reject Links
31		$('.events-table').on('click', '.em-event-delete', function(){
32			if( !confirm("Are you sure you want to delete?") ){ return false; }
33			window.location.href = this.href;
34		});
35	//Forms
36	$('#event-form #event-image-delete, #location-form #location-image-delete').on('click', function(){
37		var el = $(this);
38		if( el.is(':checked') ){
39			el.closest('.event-form-image, .location-form-image').find('#event-image-img, #location-image-img').hide();
40		}else{
41			el.closest('.event-form-image, .location-form-image').find('#event-image-img, #location-image-img').show();
42		}
43	});
44	//Event Editor
45	    //Recurrence Date Patterns
46		$('.event-form-with-recurrence').each( function(){
47		    let recurring_form = $(this);
48		    recurring_form.on('change', '.em-recurrence-checkbox', function(){
49                if( this.checked ){
50                    recurring_form.find('.em-recurring-text').each( function(){
51                        this.style.removeProperty('display');
52                    });
53                    recurring_form.find('.em-event-text').each( function(){
54                        this.style.setProperty('display', 'none', 'important');
55                    });
56                }else{
57                    recurring_form.find('.em-recurring-text').each( function(){
58                        this.style.setProperty('display', 'none', 'important');
59                    });
60                    recurring_form.find('.em-event-text').each( function(){
61                        this.style.removeProperty('display');
62                    });
63                }
64            });
65		});
66		$('.event-form-with-recurrence .em-recurrence-checkbox').trigger('change');
67		//Recurrence Warnings
68		$('#event-form.em-event-admin-recurring').on('submit', function(event){
69			var form = $(this);
70			if( form.find('input[name="event_reschedule"]').first().val() == 1 ){
71				var warning_text = EM.event_reschedule_warning;
72			}else if( form.find('input[name="event_recreate_tickets"]').first().val() == 1 ){
73				var warning_text = EM.event_recurrence_bookings;
74			}else{
75				var warning_text = EM.event_recurrence_overwrite;
76			}
77			confirmation = confirm(warning_text);
78			if( confirmation == false ){
79				event.preventDefault();
80			}
81		});
82		//Buttons for recurrence warnings within event editor forms
83		$('.em-reschedule-trigger').on('click', function(e){
84			e.preventDefault();
85			var trigger = $(this);
86			trigger.closest('.em-recurrence-reschedule').find(trigger.data('target')).removeClass('reschedule-hidden');
87			trigger.siblings('.em-reschedule-value').val(1);
88			trigger.addClass('reschedule-hidden').siblings('a').removeClass('reschedule-hidden');
89		});
90		$('.em-reschedule-cancel').on('click', function(e){
91			e.preventDefault();
92			var trigger = $(this);
93			trigger.closest('.em-recurrence-reschedule').find(trigger.data('target')).addClass('reschedule-hidden');
94			trigger.siblings('.em-reschedule-value').val(0);
95			trigger.addClass('reschedule-hidden').siblings('a').removeClass('reschedule-hidden');
96		});
97	//Tickets & Bookings
98	if( $("#em-tickets-form").length > 0 ){
99		//Enable/Disable Bookings
100		$('#event-rsvp').on('click', function(event){
101			if( !this.checked ){
102				confirmation = confirm(EM.disable_bookings_warning);
103				if( confirmation == false ){
104					event.preventDefault();
105				}else{
106					$('#event-rsvp-options').hide();
107				}
108			}else{
109				$('#event-rsvp-options').fadeIn();
110			}
111		});
112		if($('input#event-rsvp').is(":checked")) {
113			$("div#rsvp-data").fadeIn();
114		} else {
115			$("div#rsvp-data").hide();
116		}
117		//Ticket(s) UI
118		var reset_ticket_forms = function(){
119			$('#em-tickets-form table tbody tr.em-tickets-row').show();
120			$('#em-tickets-form table tbody tr.em-tickets-row-form').hide();
121		};
122		//recurrences and cut-off logic for ticket availability
123		if( $('#em-recurrence-checkbox').length > 0 ){
124			$('#em-recurrence-checkbox').on('change', function(){
125				if( $('#em-recurrence-checkbox').is(':checked') ){
126					$('#em-tickets-form .ticket-dates-from-recurring, #em-tickets-form .ticket-dates-to-recurring, #event-rsvp-options .em-booking-date-recurring').show();
127					$('#em-tickets-form .ticket-dates-from-normal, #em-tickets-form .ticket-dates-to-normal, #event-rsvp-options .em-booking-date-normal, #em-tickets-form .hidden').hide();
128				}else{
129					$('#em-tickets-form .ticket-dates-from-normal, #em-tickets-form .ticket-dates-to-normal, #event-rsvp-options .em-booking-date-normal').show();
130					$('#em-tickets-form .ticket-dates-from-recurring, #em-tickets-form .ticket-dates-to-recurring, #event-rsvp-options .em-booking-date-recurring, #em-tickets-form .hidden').hide();
131				}
132			}).trigger('change');
133		}else if( $('#em-form-recurrence').length > 0 ){
134			$('#em-tickets-form .ticket-dates-from-recurring, #em-tickets-form .ticket-dates-to-recurring, #event-rsvp-options .em-booking-date-recurring').show();
135			$('#em-tickets-form .ticket-dates-from-normal, #em-tickets-form .ticket-dates-to-normal, #event-rsvp-options .em-booking-date-normal, #em-tickets-form .hidden').hide();
136		}else{
137			$('#em-tickets-form .ticket-dates-from-recurring, #em-tickets-form .ticket-dates-to-recurring, #event-rsvp-options .em-booking-date-recurring, #em-tickets-form .hidden').hide();
138		}
139		//Add a new ticket
140		$("#em-tickets-add").on('click', function(e){
141			e.preventDefault();
142			reset_ticket_forms();
143			//create copy of template slot, insert so ready for population
144			var tickets = $('#em-tickets-form table tbody');
145			tickets.first('.em-ticket-template').find('input.em-date-input.flatpickr-input').each(function(){
146			    if( '_flatpickr' in this ){
147			        this._flatpickr.destroy();
148			    }
149			}); //clear all datepickers, should be done first time only, next times it'd be ignored
150			var rowNo = tickets.length+1;
151			var slot = tickets.first('.em-ticket-template').clone(true).attr('id','em-ticket-'+ rowNo).removeClass('em-ticket-template').addClass('em-ticket').appendTo($('#em-tickets-form table'));
152			//change the index of the form element names
153			slot.find('*[name]').each( function(index,el){
154				el = $(el);
155				el.attr('name', el.attr('name').replace('em_tickets[0]','em_tickets['+rowNo+']'));
156			});
157			// sort out until datepicker ids
158			let start_datepicker = slot.find('.ticket-dates-from-normal').first();
159			if( start_datepicker.attr('data-until-id') ){
160				let until_id = start_datepicker.attr('data-until-id').replace('-0', '-'+ rowNo);
161				start_datepicker.attr('data-until-id', until_id);
162				slot.find('.ticket-dates-to-normal').attr('id', start_datepicker.attr('data-until-id'));
163
164			}
165			//show ticket and switch to editor
166			slot.show().find('.ticket-actions-edit').trigger('click');
167			//refresh datepicker and values
168			slot.find('.em-time-input').off().each(function(index, el){
169				if( typeof this.em_timepickerObj == 'object' ){
170					this.em_timepicker('remove');
171				}
172			}); //clear all em_timepickers - consequently, also other click/blur/change events, recreate the further down
173			em_setup_datepicker(slot);
174			em_setup_timepicker(slot);
175		    $('html, body').animate({ scrollTop: slot.offset().top - 30 }); //sends user to form
176			check_ticket_sortability();
177		});
178		//Edit a Ticket
179		$(document).on('click', '.ticket-actions-edit', function(e){
180			e.preventDefault();
181			reset_ticket_forms();
182			var tbody = $(this).closest('tbody');
183			tbody.find('tr.em-tickets-row').hide();
184			tbody.find('tr.em-tickets-row-form').fadeIn();
185			return false;
186		});
187		$(document).on('click', '.ticket-actions-edited', function(e){
188			e.preventDefault();
189			var tbody = $(this).closest('tbody');
190			var rowNo = tbody.attr('id').replace('em-ticket-','');
191			tbody.find('.em-tickets-row').fadeIn();
192			tbody.find('.em-tickets-row-form').hide();
193			tbody.find('*[name]').each(function(index,el){
194				el = $(el);
195				if( el.attr('name') == 'ticket_start_pub'){
196					tbody.find('span.ticket_start').text(el.val());
197				}else if( el.attr('name') == 'ticket_end_pub' ){
198					tbody.find('span.ticket_end').text(el.val());
199				}else if( el.attr('name') == 'em_tickets['+rowNo+'][ticket_type]' ){
200					if( el.find(':selected').val() == 'members' ){
201						tbody.find('span.ticket_name').prepend('* ');
202					}
203				}else if( el.attr('name') == 'em_tickets['+rowNo+'][ticket_start_recurring_days]' ){
204					var text = tbody.find('select.ticket-dates-from-recurring-when').val() == 'before' ? '-'+el.val():el.val();
205					if( el.val() != '' ){
206						tbody.find('span.ticket_start_recurring_days').text(text);
207						tbody.find('span.ticket_start_recurring_days_text, span.ticket_start_time').removeClass('hidden').show();
208					}else{
209						tbody.find('span.ticket_start_recurring_days').text(' - ');
210						tbody.find('span.ticket_start_recurring_days_text, span.ticket_start_time').removeClass('hidden').hide();
211					}
212				}else if( el.attr('name') == 'em_tickets['+rowNo+'][ticket_end_recurring_days]' ){
213					var text = tbody.find('select.ticket-dates-to-recurring-when').val() == 'before' ? '-'+el.val():el.val();
214					if( el.val() != '' ){
215						tbody.find('span.ticket_end_recurring_days').text(text);
216						tbody.find('span.ticket_end_recurring_days_text, span.ticket_end_time').removeClass('hidden').show();
217					}else{
218						tbody.find('span.ticket_end_recurring_days').text(' - ');
219						tbody.find('span.ticket_end_recurring_days_text, span.ticket_end_time').removeClass('hidden').hide();
220					}
221				}else{
222					var classname = el.attr('name').replace('em_tickets['+rowNo+'][','').replace(']','').replace('[]','');
223					tbody.find('.em-tickets-row .'+classname).text(el.val());
224				}
225			});
226			//allow for others to hook into this
227			$(document).triggerHandler('em_maps_tickets_edit', [tbody, rowNo, true]);
228		    $('html, body').animate({ scrollTop: tbody.parent().offset().top - 30 }); //sends user back to top of form
229			return false;
230		});
231		$(document).on('change', '.em-ticket-form select.ticket_type', function(e){
232			//check if ticket is for all users or members, if members, show roles to limit the ticket to
233			var el = $(this);
234			if( el.find('option:selected').val() == 'members' ){
235				el.closest('.em-ticket-form').find('.ticket-roles').fadeIn();
236			}else{
237				el.closest('.em-ticket-form').find('.ticket-roles').hide();
238			}
239		});
240		$(document).on('click', '.em-ticket-form .ticket-options-advanced', function(e){
241			//show or hide advanced tickets, hidden by default
242			e.preventDefault();
243			var el = $(this);
244			if( el.hasClass('show') ){
245				el.closest('.em-ticket-form').find('.em-ticket-form-advanced').fadeIn();
246				el.find('.show,.show-advanced').hide();
247				el.find('.hide,.hide-advanced').show();
248			}else{
249				el.closest('.em-ticket-form').find('.em-ticket-form-advanced').hide();
250				el.find('.show,.show-advanced').show();
251				el.find('.hide,.hide-advanced').hide();
252			}
253			el.toggleClass('show');
254		});
255		$('.em-ticket-form').each( function(){
256			//check whether to show advanced options or not by default for each ticket
257			var show_advanced = false;
258			var el = $(this); 
259			el.find('.em-ticket-form-advanced input[type="text"]').each(function(){ if(this.value != '') show_advanced = true; });
260			if( el.find('.em-ticket-form-advanced input[type="checkbox"]:checked').length > 0 ){ show_advanced = true; }
261			el.find('.em-ticket-form-advanced option:selected').each(function(){ if(this.value != '') show_advanced = true; });
262			if( show_advanced ) el.find('.ticket-options-advanced').trigger('click');
263		});
264		//Delete a ticket
265		$(document).on('click', '.ticket-actions-delete', function(e){
266			e.preventDefault();
267			var el = $(this);
268			var tbody = el.closest('tbody');
269			if( tbody.find('input.ticket_id').val() > 0 ){
270				//only will happen if no bookings made
271				el.text('Deleting...');	
272				$.getJSON( $(this).attr('href'), {'em_ajax_action':'delete_ticket', 'id':tbody.find('input.ticket_id').val()}, function(data){
273					if(data.result){
274						tbody.remove();
275					}else{
276						el.text('Delete');
277						alert(data.error);
278					}
279				});
280			}else{
281				//not saved to db yet, so just remove
282				tbody.remove();
283			}
284			check_ticket_sortability();
285			return false;
286		});
287		//Sort Tickets
288		$('#em-tickets-form.em-tickets-sortable table').sortable({
289			items: '> tbody',
290			placeholder: "em-ticket-sortable-placeholder",
291			handle:'.ticket-status',
292			helper: function( event, el ){
293				var helper = $(el).clone().addClass('em-ticket-sortable-helper');
294				var tds = helper.find('.em-tickets-row td').length;
295				helper.children().remove();
296				helper.append('<tr class="em-tickets-row"><td colspan="'+tds+'" style="text-align:left; padding-left:15px;"><span class="dashicons dashicons-tickets-alt"></span></td></tr>');
297				return helper;
298			},
299		});
300		var check_ticket_sortability = function(){
301			var em_tickets = $('#em-tickets-form table tbody.em-ticket');
302			if( em_tickets.length == 1 ){
303				em_tickets.find('.ticket-status').addClass('single');
304				$('#em-tickets-form.em-tickets-sortable table').sortable( "option", "disabled", true );
305			}else{
306				em_tickets.find('.ticket-status').removeClass('single');
307				$('#em-tickets-form.em-tickets-sortable table').sortable( "option", "disabled", false );
308			}
309		};
310		check_ticket_sortability();
311	}
312	//Manageing Bookings
313	let bookings_tables = $('.em-bookings-table');
314	if( bookings_tables.length > 0 ){
315		load_ui_css = true;
316		//Pagination link clicks
317		$(document).on('click', '.em-bookings-table .tablenav-pages a', function(){
318			var el = $(this);
319			var form = el.closest('.em-bookings-table form.bookings-filter');
320			//get page no from url, change page, submit form
321			var match = el.attr('href').match(/#[0-9]+/);
322			if( match != null && match.length > 0){
323				var pno = match[0].replace('#','');
324				form.find('input[name=pno]').val(pno);
325			}else{
326				// new way
327				let url = new URL(el.attr('href'));
328				if( url.searchParams.has('paged') ){
329					form.find('input[name=pno]').val( url.searchParams.get('paged'));
330					form.find('input[name=paged]').val( url.searchParams.get('paged') );
331				}else{
332					form.find('input[name=pno]').val(1);
333					form.find('input[name=paged]').val(1);
334				}
335			}
336			form.trigger('submit');
337			return false;
338		});
339		$(document).on('change', '.em-bookings-table .tablenav-pages input[name=paged]', function(e){
340			var el = $(this);
341			var form = el.closest('.em-bookings-table form.bookings-filter');
342			var last = form.find('.tablenav-pages a.last-page');
343			if( last.length > 0 ){
344				// check val isn't more than last page
345				let url = new URL(last.attr('href'));
346				if( url.searchParams.has('paged') ){
347					let lastPage = parseInt(url.searchParams.get('paged'));
348					if( parseInt(this.value) > lastPage ){
349						this.value = lastPage;
350					}
351				}
352			}else{
353				// make sure it's less than current page, we're on last page already
354				let lastPage = form.find('input[name=pno]').val();
355				if( lastPage && parseInt(this.value) > parseInt(lastPage) ){
356					this.value = lastPage;
357					e.preventDefault();
358					return false;
359				}
360			}
361			form.find('input[name=pno]').val(this.value);
362			form.trigger('submit');
363		});
364
365		//Settings & Export Modal
366		$(document).on('click', '.em-bookings-table-trigger', function(e){
367			e.preventDefault();
368			let modal = $(this.getAttribute('rel'));
369			modal.find('input[name=show_tickets]').each(check_tickets_columns_export);
370			openModal( modal );
371		});
372		$(document).on('submit', '.em-bookings-table-settings form', function(e){
373			e.preventDefault();
374			//we know we'll deal with cols, so wipe hidden value from main
375			let $form = $(this);
376			let modal = $form.closest('.em-modal');
377			let form = $($form.attr('rel'));
378			let match = form.find("[name=cols]").val('');
379			let booking_form_cols = $form.find('.em-bookings-cols-selected .item');
380			$.each( booking_form_cols, function(i,item_match){
381				//item_match = $(item_match);
382				if( !item_match.classList.contains('hidden') ){
383					if( match.val() !== ''){
384						match.val(match.val()+','+item_match.getAttribute('data-value'));
385					}else{
386						match.val(item_match.getAttribute('data-value'));
387					}
388				}
389			});
390			//sync row count
391			let limit = $form.find('select[name="limit"]').val();
392			form.find('[name="limit"]').val(limit);
393			//submit main form
394			modal.trigger('submitted'); //hook into this with bind()
395			form.trigger('submit');
396			closeModal(modal);
397		});
398		$(document).on('submit', '.em-bookings-table-export form', function(e){
399			let $table_form = $(this.getAttribute('rel'));
400			var $form_filters = $(this).find('.em-bookings-table-filters').empty();
401			let filters = $table_form.find('.em-bookings-table-filter').clone();
402			filters.appendTo($form_filters);
403		});
404		let check_tickets_columns_export = function(){
405			let $this = $(this);
406			let form = $this.closest('form');
407			let ticket_data = form.find('[data-type="ticket"]');
408			if( $this.is(':checked') ){
409				ticket_data.show().find('input').val(1);
410			}else{
411				ticket_data.hide().find('input').val(0);
412			}
413		}
414		$(document).on('click', '.em-bookings-table-export input[name=show_tickets]', check_tickets_columns_export);
415
416		// Sortables - selectize and sorting
417		$(document).on('em_selectize_loaded', function( e, container ){
418			container.find('.em-bookings-table-modal .em-bookings-table-cols').each( function(){
419				let parent = $(this);
420				let sortables = $(this).find('.em-bookings-cols-sortable');
421				container.find('.em-selectize.always-open').each( function() {
422					//extra behaviour for selectize column picker
423					if ('selectize' in this) {
424						let selectize = this.selectize;
425						// add event listener to fix remove button issues due to above hacks
426						selectize.on('item_add', function (value, item) {
427							let col = item.clone();
428							let option  = selectize.getOption(value);
429							let type = option.attr('data-type');
430							col.appendTo(sortables);
431							col.attr('data-type', type);
432							$('<input type="hidden" name="cols[' + value + ']" value="1">').appendTo(col);
433						});
434						selectize.on('item_remove', function (value) {
435							parent.find('.item[data-value="'+ value +'"]').remove();
436						});
437						parent.on('click', '.em-bookings-cols-selected .item .remove', function(){
438							let value = this.parentElement.getAttribute('data-value');
439							selectize.removeItem(value, true);
440						});
441					}
442				});
443			});
444		});
445
446		$(document).on('keypress', '.em-bookings-table .tablenav .actions input[type="text"]', function(e){
447			let keycode = (e.keyCode ? e.keyCode : e.which);
448			if( keycode === 13 ){
449				$(this).closest('form').submit();
450			}
451		});
452
453		$(document).on('click', '.em-bookings-table button.em-bookings-table-bulk-action', function( e ){
454			e.preventDefault();
455			let $form = $(this).closest('form');
456			let action = $form.find('select.bulk-action-selector').val();
457			EM.bulk_action = true;
458			if( action === 'delete' ){
459				if( !confirm(EM.booking_delete) ){ return false; }
460			}
461			let rows = $form.find('tbody .check-column input:checked');
462			// find all checked items and perform action on them. future interations can check if action is available to row.
463			rows.each( function(){
464				// check if sibling has the relevant action
465				let actions = $(this.parentElement).find('a.em-bookings-'+ action);
466				actions.trigger('click');
467			});
468			EM.bulk_action = false;
469		})
470
471		// Sorting
472		$(document).on('click', '.em-bookings-table th[scope="col"].sortable a, .em-bookings-table th[scope="col"].sorted a', function(e){
473			e.preventDefault();
474			// add args to form and submit it
475			let params = (new URL(this.href)).searchParams;
476			let $form = $(this).closest('form');
477			if( params.get('orderby') ){
478				$form.find('input[name="orderby"]').val( params.get('orderby') );
479				let order = params.get('order') ? params.get('order') : 'asc';
480				$form.find('input[name="order"]').val( order );
481				$form.submit();
482			}
483		});
484
485		// anything requiring extra setup
486		let resetup_bookings_table = function( table ){
487			em_setup_tippy(table);
488			em_setup_selectize(table);
489		}
490		let setup_bookings_table = function( table ) {
491			table.find(".em-bookings-cols-sortable").sortable().disableSelection();
492			let breakpoints = {
493				'small' : 600,
494				'large' : false,
495			}
496			const bookings_table_ro = EM_ResizeObserver( breakpoints, table.toArray() );
497		}
498
499		bookings_tables.each( function(){
500			setup_bookings_table( $(this) );
501		});
502
503		//Widgets and filter submissions
504		$(document).on('submit', '.em-bookings-table form.bookings-filter', function(e){
505			var el = $(this);			
506			//append loading spinner
507			let root = el.parents('.em-bookings-table').first();
508			root.find('.table-wrap').first().append('<div id="em-loading" />');
509			//ajax call
510			$.post( EM.ajaxurl, el.serializeArray(), function(data){
511				let $data = $(data);
512				root.find('.em-bookings-table-trigger').each( function(){
513					let modal = $(this.getAttribute('rel'));
514					modal.remove();
515				});
516				root.replaceWith($data);
517				// re-setup bookings table
518				setup_bookings_table($data);
519				resetup_bookings_table($data);
520				// fire hook
521				jQuery(document).triggerHandler('em_bookings_filtered', [$data, root, el]);
522			});
523			return false;
524		});
525		// Action links (approve/reject etc.)
526		$(document).on('click', '.em-bookings-approve,.em-bookings-reject,.em-bookings-unapprove,.em-bookings-delete,.em-bookings-ajax-action', function(){
527			let el = $(this);
528			if( el.hasClass('em-bookings-delete') && (!('bulk_action' in EM) || !EM.bulk_action) ){
529				if( !confirm(EM.booking_delete) ){ return false; }
530			}
531			let url = em_ajaxify( el.attr('href') );
532			let td = el.parents('td').first();
533			if( td.length > 0 && (td.hasClass('column-actions') || td.hasClass('em-bt-col-actions')) ){
534				td.html(EM.txt_loading);
535				td.load( url );
536			}else{
537				// set up a custom url action to retrieve a row afterwards
538				let dropdown = el.closest('[data-tippy-root], .em-tooltip-ddm-content');
539				if( dropdown.length > 0 ) {
540					if( '_tippy' in dropdown[0] ) {
541						dropdown[0]._tippy.hide();
542					}
543					let tr = el.closest('tr');
544					let params = (new URL(url)).searchParams;
545					let formData = new FormData(tr.closest('form')[0]);
546					formData.set('action', 'em_bookings_table_row');
547					formData.set('row_action', params.get('action'));
548					formData.set('booking_id', params.get('booking_id'));
549					let cols = el.closest('form').find('[name="cols"]').val();
550					tr.addClass('loading');
551					$.ajax({
552						url: EM.ajaxurl,
553						data: formData,
554						processData: false,
555						contentType: false,
556						type: 'POST',
557						success: function (data) {
558							let $data = $(data);
559							$data.addClass('faded-out');
560							tr.replaceWith( $data ).delay(200);
561							resetup_bookings_table( $data );
562							$data.fadeIn();
563							$data.removeClass('faded-out');
564						}
565					});
566				}
567			}
568			return false;
569		});
570	}
571	//Old Bookings Table - depreciating soon
572	if( $('.em_bookings_events_table').length > 0 ){
573		//Widgets and filter submissions
574		$(document).on('submit', '.em_bookings_events_table form', function(e){
575			var el = $(this);
576			var url = em_ajaxify( el.attr('action') );		
577			el.parents('.em_bookings_events_table').find('.table-wrap').first().append('<div id="em-loading" />');
578			$.get( url, el.serializeArray(), function(data){
579				el.parents('.em_bookings_events_table').first().replaceWith(data);
580			});
581			return false;
582		});
583		//Pagination link clicks
584		$(document).on('click', '.em_bookings_events_table .tablenav-pages a', function(){
585			var el = $(this);
586			var url = em_ajaxify( el.attr('href') );	
587			el.parents('.em_bookings_events_table').find('.table-wrap').first().append('<div id="em-loading" />');
588			$.get( url, function(data){
589				el.parents('.em_bookings_events_table').first().replaceWith(data);
590			});
591
592			return false;
593		});
594	}
595	
596	//Manual Booking
597	$(document).on('click', 'a.em-booking-button', function(e){
598		e.preventDefault();
599		var button = $(this);
600		if( button.text() != EM.bb_booked && $(this).text() != EM.bb_booking){
601			button.text(EM.bb_booking);
602			var button_data = button.attr('id').split('_'); 
603			$.ajax({
604				url: EM.ajaxurl,
605				dataType: 'jsonp',
606				data: {
607					event_id : button_data[1],
608					_wpnonce : button_data[2],
609					action : 'booking_add_one'
610				},
611				success : function(response, statusText, xhr, $form) {
612					if(response.result){
613						button.text(EM.bb_booked);
614					    button.addClass('disabled');
615					}else{
616						button.text(EM.bb_error);
617					}
618					if(response.message != '') alert(response.message);
619					$(document).triggerHandler('em_booking_button_response', [response, button]);
620				},
621				error : function(){ button.text(EM.bb_error); }
622			});
623		}
624		return false;
625	});	
626	$(document).on('click', 'a.em-cancel-button', function(e){
627		e.preventDefault();
628		var button = $(this);
629		if( button.text() != EM.bb_cancelled && button.text() != EM.bb_canceling){
630			button.text(EM.bb_canceling);
631			var button_data = button.attr('id').split('_'); 
632			$.ajax({
633				url: EM.ajaxurl,
634				dataType: 'jsonp',
635				data: {
636					booking_id : button_data[1],
637					_wpnonce : button_data[2],
638					action : 'booking_cancel'
639				},
640				success : function(response, statusText, xhr, $form) {
641					if(response.result){
642						button.text(EM.bb_cancelled);
643					    button.addClass('disabled');
644					}else{
645						button.text(EM.bb_cancel_error);
646					}
647				},
648				error : function(){ button.text(EM.bb_cancel_error); }
649			});
650		}
651		return false;
652	});
653	$(document).on('click', 'a.em-booking-button-action', function(e){
654		e.preventDefault();
655		var button = $(this);
656		var button_data = {
657            _wpnonce : button.attr('data-nonce'),
658            action : button.attr('data-action'),
659        }
660        if( button.attr('data-event-id') ) button_data.event_id =  button.attr('data-event-id');
661        if( button.attr('data-booking-id') ) button_data.booking_id =  button.attr('data-booking-id');
662		if( button.text() != EM.bb_booked && $(this).text() != EM.bb_booking){
663		    if( button.attr('data-loading') ){
664    			button.text(button.attr('data-loading'));
665    		}else{
666    			button.text(EM.bb_booking);
667    		}
668			$.ajax({
669				url: EM.ajaxurl,
670				dataType: 'jsonp',
671				data: button_data,
672				success : function(response, statusText, xhr, $form) {
673					if(response.result){
674					    if( button.attr('data-success') ){
675					        button.text(button.attr('data-success'));
676					    }else{
677						    button.text(EM.bb_booked);
678						}
679					    button.addClass('disabled');
680					}else{
681					    if( button.attr('data-error') ){
682					        button.text(button.attr('data-error'));
683					    }else{
684						    button.text(EM.bb_error);
685						}
686					}
687					if(response.message != '') alert(response.message);
688					$(document).triggerHandler('em_booking_button_action_response', [response, button]);
689				},
690				error : function(){
691                    if( button.attr('data-error') ){
692                        button.text(button.attr('data-error'));
693                    }else{
694                        button.text(EM.bb_error);
695                    }
696				}
697			});
698		}
699		return false;
700	});
701
702	//Datepicker - legacy
703	if( $('.em-date-single, .em-date-range, #em-date-start').length > 0 ){
704		load_ui_css = true;
705		em_setup_datepicker('body');
706	}
707	if( load_ui_css ) em_load_jquery_css();
708	// Datepicker - new
709	if( $('.em-datepicker').length > 0 ){
710		em_setup_datepicker('body');
711	}
712	
713	//previously in em-admin.php
714	$('#em-wrapper input.select-all').on('change', function(){
715	 	if($(this).is(':checked')){
716			$('input.row-selector').prop('checked', true);
717			$('input.select-all').prop('checked', true);
718	 	}else{
719			$('input.row-selector').prop('checked', false);
720			$('input.select-all').prop('checked', false);
721		}
722	}); 
723
724
725	// recurrence stuff
726	// recurrency descriptor
727	function updateIntervalDescriptor () {
728		$(".interval-desc").hide();
729		var number = "-plural";
730		if ($('input.em-recurrence-interval').val() == 1 || $('input.em-recurrence-interval').val() == "") number = "-singular";
731		var descriptor = "span.interval-desc.interval-"+$("select.em-recurrence-frequency").val()+number;
732		$(descriptor).show();
733	}
734	function updateIntervalSelectors () {
735		$('.alternate-selector').hide();
736		$('.em-'+ $('select.em-recurrence-frequency').val() + "-selector").show();
737	}
738	// recurrency elements
739	updateIntervalDescriptor();
740	updateIntervalSelectors();
741	$('input.em-recurrence-interval').on('keyup', updateIntervalDescriptor);
742	$('select.em-recurrence-frequency').on('change', updateIntervalDescriptor);
743	$('select.em-recurrence-frequency').on('change', updateIntervalSelectors);
744
745	/* Load any maps */	
746	if( $('.em-location-map').length > 0 || $('.em-locations-map').length > 0 || $('#em-map').length > 0 || $('.em-search-geo').length > 0 ){
747		em_maps_load();
748	}
749
750	/* Location Type Selection */
751	$('.em-location-types .em-location-types-select').on('change', function(){
752		let el = $(this);
753		if( el.val() == 0 ){
754			$('.em-location-type').hide();
755		}else{
756			let location_type = el.find('option:selected').data('display-class');
757			$('.em-location-type').hide();
758			$('.em-location-type.'+location_type).show();
759			if( location_type != 'em-location-type-place' ){
760				jQuery('#em-location-reset a').trigger('click');
761			}
762		}
763		if( el.data('active') !== '' && el.val() !== el.data('active') ){
764			$('.em-location-type-delete-active-alert').hide();
765			$('.em-location-type-delete-active-alert').show();
766		}else{
767			$('.em-location-type-delete-active-alert').hide();
768		}
769	}).trigger('change');
770	
771	//Finally, add autocomplete here
772	if( jQuery( 'div.em-location-data [name="location_name"]' ).length > 0 ){
773		$('div.em-location-data [name="location_name"]').selectize({
774			plugins: ["restore_on_backspace"],
775			valueField: "id",
776			labelField: "label",
777			searchField: "label",
778			create:true,
779			createOnBlur: true,
780			maxItems:1,
781			persist: false,
782			addPrecedence : true,
783			selectOnTab : true,
784			diacritics : true,
785			render: {
786				item: function (item, escape) {
787					return "<div>" + item.label + "</div>";
788				},
789				option: function (item, escape) {
790					let meta = '';
791					if( typeof(item.address) !== 'undefined' ) {
792						if (item.address !== '' && item.town !== '') {
793							meta = escape(item.address) + ', ' + escape(item.town);
794						} else if (item.address !== '') {
795							meta = escape(item.address);
796						} else if (item.town !== '') {
797							meta = escape(item.town);
798						}
799					}
800					return  '<div class="em-locations-autocomplete-item">' +
801								'<div class="em-locations-autocomplete-label">' + escape(item.label) + '</div>' +
802								'<div style="font-size:11px; text-decoration:italic;">' + meta + '</div>' +
803							'</div>';
804
805				},
806			},
807			load: function (query, callback) {
808				if (!query.length) return callback();
809				$.ajax({
810					url: EM.locationajaxurl,
811					data: {
812						q : query,
813						method : 'selectize'
814					},
815					dataType : 'json',
816					type: "POST",
817					error: function () {
818						callback();
819					},
820					success: function ( data ) {
821						callback( data );
822					},
823				});
824			},
825			onItemAdd : function (value, data) {
826				this.clearCache();
827				var option = this.options[value];
828				if( value === option.label ){
829					jQuery('input#location-address').focus();
830					return;
831				}
832				jQuery("input#location-name" ).val(option.value);
833				jQuery('input#location-address').val(option.address);
834				jQuery('input#location-town').val(option.town);
835				jQuery('input#location-state').val(option.state);
836				jQuery('input#location-region').val(option.region);
837				jQuery('input#location-postcode').val(option.postcode);
838				jQuery('input#location-latitude').val(option.latitude);
839				jQuery('input#location-longitude').val(option.longitude);
840				if( typeof(option.country) === 'undefined' || option.country === '' ){
841					jQuery('select#location-country option:selected').removeAttr('selected');
842				}else{
843					jQuery('select#location-country option[value="'+option.country+'"]').attr('selected', 'selected');
844				}
845				jQuery("input#location-id" ).val(option.id).trigger('change');
846				jQuery('div.em-location-data input, div.em-location-data select').prop('readonly', true).css('opacity', '0.5');
847				jQuery('#em-location-reset').show();
848				jQuery('#em-location-search-tip').hide();
849				// selectize stuff
850				this.disable();
851				this.$control.blur();
852				jQuery('div.em-location-data [class^="em-selectize"]').each( function(){
853					this.selectize.disable();
854				})
855				// trigger hook
856				jQuery(document).triggerHandler('em_locations_autocomplete_selected', [event, option]);
857			}
858		});
859		jQuery('#em-location-reset a').on('click', function(){
860			jQuery('div.em-location-data input, div.em-location-data select').each( function(){
861			    this.style.removeProperty('opacity')
862			    this.readOnly = false;
863			    if( this.type == 'text' ) this.value = '';
864			});
865			jQuery('div.em-location-data option:selected').removeAttr('selected');
866			jQuery('input#location-id').val('');
867			jQuery('#em-location-reset').hide();
868			jQuery('#em-location-search-tip').show();
869			jQuery('#em-map').hide();
870			jQuery('#em-map-404').show();
871			if(typeof(marker) !== 'undefined'){
872				marker.setPosition(new google.maps.LatLng(0, 0));
873				infoWindow.close();
874				marker.setDraggable(true);
875			}
876			// clear selectize autocompleter values, re-enable any selectize ddms
877			let $selectize = $("div.em-location-data input#location-name")[0].selectize;
878			$selectize.enable();
879			$selectize.clear(true);
880			$selectize.clearOptions();
881			jQuery('div.em-location-data select.em-selectize').each( function(){
882				if( 'selectize' in this ){
883    				this.selectize.enable();
884	    			this.selectize.clear(true);
885	    		}
886			});
887			// return true
888			return false;
889		});
890		if( jQuery('input#location-id').val() != '0' && jQuery('input#location-id').val() != '' ){
891			jQuery('div.em-location-data input, div.em-location-data select').each( function(){
892			    this.style.setProperty('opacity','0.5', 'important')
893			    this.readOnly = true;
894			});
895			jQuery('#em-location-reset').show();
896			jQuery('#em-location-search-tip').hide();
897			jQuery('div.em-location-data select.em-selectize, div.em-location-data input.em-selectize-autocomplete').each( function(){
898				if( 'selectize' in this ) this.selectize.disable();
899			});
900		}
901	}
902	
903	// trigger selectize loader
904	em_setup_selectize(document);
905
906	/* Local JS Timezone related placeholders */
907	/* Moment JS Timzeone PH */
908	if( window.moment ){
909		var replace_specials = function( day, string ){
910			// replace things not supported by moment
911			string = string.replace(/##T/g, Intl.DateTimeFormat().resolvedOptions().timeZone);
912			string = string.replace(/#T/g, "GMT"+day.format('Z'));
913			string = string.replace(/###t/g, day.utcOffset()*-60);
914			string = string.replace(/##t/g, day.isDST());
915			string = string.replace(/#t/g, day.daysInMonth());
916			return string;
917		};
918		$('.em-date-momentjs').each( function(){
919			// Start Date
920			var el = $(this);
921			var day_start = moment.unix(el.data('date-start'));
922			var date_start_string = replace_specials(day_start, day_start.format(el.data('date-format')));
923			if( el.data('date-start') !== el.data('date-end') ){
924				// End Date
925				var day_end = moment.unix(el.data('date-end'));
926				var day_end_string = replace_specials(day_start, day_end.format(el.data('date-format')));
927				// Output
928				var date_string = date_start_string + el.data('date-separator') + day_end_string;
929			}else{
930				var date_string = date_start_string;
931			}
932			el.text(date_string);
933		});
934		var get_date_string = function(ts, format){
935			let date = new Date(ts * 1000);
936			let minutes = date.getMinutes();
937			if( format == 24 ){
938				let hours = date.getHours();
939				hours = hours < 10 ? '0' + hours : hours;
940				minutes = minutes < 10 ? '0' + minutes : minutes;
941				return hours + ':' + minutes;
942			}else{
943				let hours = date.getHours() % 12;
944				let ampm = hours >= 12 ? 'PM' : 'AM';
945				if( hours === 0 ) hours = 12; // the hour '0' should be '12'
946				minutes = minutes < 10 ? '0'+minutes : minutes;
947				return hours + ':' + minutes + ' ' + ampm;
948			}
949		}
950		$('.em-time-localjs').each( function(){
951			var el = $(this);
952			var strTime = get_date_string( el.data('time'), el.data('time-format') );
953			if( el.data('time-end') ){
954				var separator = el.data('time-separator') ? el.data('time-separator') : ' - ';
955				strTime = strTime + separator + get_date_string( el.data('time-end'), el.data('time-format') );
956			}
957			el.text(strTime);
958		});
959	}
960	// Set up Tippy generic
961	let $document = jQuery(document);
962	em_setup_tippy($document);
963
964	/* Done! */
965	$document.triggerHandler('em_javascript_loaded');
966});
967
968function em_load_jquery_css( wrapper = false ){
969	if( EM.ui_css && jQuery('link#jquery-ui-em-css').length == 0 ){
970		var script = document.createElement("link");
971		script.id = 'jquery-ui-em-css';
972		script.rel = "stylesheet";
973		script.href = EM.ui_css;
974		document.body.appendChild(script);
975		if( wrapper ){
976			em_setup_jquery_ui_wrapper();
977		}
978	}
979}
980
981function em_setup_tippy( container ){
982	var tooltip_vars = {
983		theme : 'light-border',
984		appendTo : 'parent',
985		content(reference) {
986			return reference.getAttribute('aria-label');
987		},
988		'touch' : ['hold', 300]
989	};
990	jQuery(document).trigger('em-tippy-vars',[tooltip_vars, container]);
991	tippy('.em-tooltip', tooltip_vars);
992	// Set up Tippy DDMs
993	let tippy_ddm_options = {
994		theme : 'light-border',
995		arrow : false,
996		allowHTML : true,
997		interactive : true,
998		trigger : 'manual',
999		placement : 'bottom',
1000		zIndex : 1000000,
1001		touch : true,
1002	};
1003	jQuery(document).trigger('em-tippy-ddm-vars',[tippy_ddm_options, container]);
1004	container.find('.em-tooltip-ddm').each( function(){
1005		let ddm_content, ddm_content_sibling;
1006		if( this.getAttribute('data-content') ){
1007			ddm_content = document.getElementById(this.getAttribute('data-content'))
1008			ddm_content_sibling = ddm_content.previousElementSibling;
1009		}else{
1010			ddm_content = this.nextElementSibling;
1011			ddm_content_sibling = ddm_content.previousElementSibling;
1012		}
1013		let tippy_content = document.createElement('div');
1014		// allow for custom width
1015		let button_width = this.getAttribute('data-button-width');
1016		if( button_width ){
1017			if( button_width == 'match' ){
1018				tippy_ddm_options.maxWidth = this.clientWidth;
1019			}else{
1020				tippy_ddm_options.maxWidth = this.getAttribute('data-button-width');
1021			}
1022		}
1023		tippy_ddm_options.content = tippy_content;
1024		let tippy_ddm = tippy(this, tippy_ddm_options);
1025		tippy_ddm.props.distance = 50;
1026		tippy_ddm.setProps({
1027			onShow(instance){
1028				if( instance.reference.getAttribute('data-tooltip-class') ) {
1029					instance.popper.classList.add( instance.reference.getAttribute('data-tooltip-class') );
1030				}
1031				instance.popper.classList.add( 'em-tooltip-ddm-display' );
1032				tippy_content.append(ddm_content);
1033				ddm_content.classList.remove('em-tooltip-ddm-content');
1034			},
1035			onShown(instance){ // keyboard support
1036				ddm_content.firstElementChild.focus();
1037			},
1038			onHidden(instance){
1039				if( ddm_content.previousElementSibling !== ddm_content_sibling ) {
1040					ddm_content_sibling.after(ddm_content);
1041					ddm_content.classList.add('em-tooltip-ddm-content');
1042				}
1043			},
1044		});
1045		let tippy_listener = function(e){
1046			if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false;
1047			e.preventDefault();
1048			e.stopPropagation();
1049			this._tippy.show();
1050		}
1051		this.addEventListener('click', tippy_listener);
1052		this.addEventListener('keydown', tippy_listener);
1053		tippy_content.addEventListener('blur', function(){
1054			tippy_content.hide();
1055		});
1056		tippy_content.addEventListener('mouseover', function(){
1057			ddm_content.firstElementChild.blur();
1058		});
1059	});
1060}
1061
1062function em_setup_selectize( container ){
1063	container = jQuery(container); // in case we were given a dom object
1064	// Selectize General
1065	container.find('select:not([multiple]).em-selectize, .em-selectize select:not([multiple])').selectize();
1066	container.find('select[multiple].em-selectize, .em-selectize select[multiple]').selectize({
1067		hideSelected : false,
1068		plugins: ["remove_button", 'click2deselect'],
1069		diacritics : true,
1070		render: {
1071			item: function (item, escape) {
1072				return '<div class="item"><span>' + item.text.replace(/^\s+/i, '') + '</span></div>';
1073			},
1074			option : function (item, escape) {
1075				let html = '<div class="option"';
1076				if( 'data' in item ){
1077					// any key/value object pairs wrapped in a 'data' key within JSON object in the data-data attribute is added automatically as a data-key="value" attribute
1078					Object.entries(item.data).forEach( function( item_data ){
1079						html += ' data-'+ escape(item_data[0]) + '="'+ escape(item_data[1]) +'"';
1080					});
1081				}
1082				html +=	'>';
1083				if( this.$input.hasClass('checkboxes') ){
1084					html += item.text.replace(/^(\s+)?/i, '$1<span></span> ');
1085				}else{
1086					html += item.text;
1087				}
1088				html += '</div>';
1089				return html;
1090			},
1091			optgroup : function (item, escape) {
1092				let html = '<div class="optgroup" data-group="' + escape(item.label) + '"';
1093				if( 'data' in item ){
1094					// any key/value object pairs wrapped in a 'data' key within JSON object in the data-data attribute is added automatically as a data-key="value" attribute
1095					Object.entries(item.data).forEach( function( item_data ){
1096						html += ' data-'+ escape(item_data[0]) + '="'+ escape(item_data[1]) +'"';
1097					});
1098				}
1099				html +=	'>';
1100				return html + item.html + '</div>';
1101			}
1102
1103		},
1104	});
1105	container.find('.em-selectize.always-open').each( function(){
1106		//extra behaviour for selectize "always open mode"
1107		if( 'selectize' in this ){
1108			let s = this.selectize;
1109			s.open();
1110			s.advanceSelection = function(){}; // remove odd item shuffling
1111			s.setActiveItem = function(){}; // remove odd item shuffling
1112			// add event listener to fix remove button issues due to above hacks
1113			this.selectize.$control.on('click', '.remove', function(e) {
1114				e.preventDefault();
1115				if (s.isLocked) return;
1116				var $item = jQuery(e.currentTarget).parent();
1117				s.removeItem($item.attr('data-value'));
1118				s.refreshOptions();
1119				return false;
1120			});
1121
1122		}
1123	});
1124	jQuery(document).triggerHandler('em_selectize_loaded', [container]);
1125}
1126
1127function em_setup_jquery_ui_wrapper(){
1128	if( jQuery('#em-jquery-ui').length === 0 ){
1129		jQuery('body').append('<div id="em-jquery-ui" class="em">');
1130	}
1131}
1132
1133function em_setup_datepicker(wrap){	
1134	wrap = jQuery(wrap);
1135
1136	//apply datepickers - jQuery UI (backcompat)
1137	let dateDivs = wrap.find('.em-date-single, .em-date-range');
1138	if( dateDivs.length > 0 ){
1139		//default picker vals
1140		var datepicker_vals = {
1141			dateFormat: "yy-mm-dd",
1142			changeMonth: true,
1143			changeYear: true,
1144			firstDay : EM.firstDay,
1145			yearRange:'c-100:c+15',
1146			beforeShow : function( el, inst ){
1147				em_setup_jquery_ui_wrapper();
1148				inst.dpDiv.appendTo('#em-jquery-ui');
1149			}
1150		};
1151		if( EM.dateFormat ) datepicker_vals.dateFormat = EM.dateFormat;
1152		if( EM.yearRange ) datepicker_vals.yearRange = EM.yearRange;
1153		jQuery(document).triggerHandler('em_datepicker', datepicker_vals);
1154		//apply datepickers to elements
1155		dateDivs.find('input.em-date-input-loc').each(function(i,dateInput){
1156			//init the datepicker
1157			var dateInput = jQuery(dateInput);
1158			var dateValue = dateInput.nextAll('input.em-date-input').first();
1159			var dateValue_value = dateValue.val();
1160			dateInput.datepicker(datepicker_vals);
1161			dateInput.datepicker('option', 'altField', dateValue);
1162			//now set the value
1163			if( dateValue_value ){
1164				var this_date_formatted = jQuery.datepicker.formatDate( EM.dateFormat, jQuery.datepicker.parseDate('yy-mm-dd', dateValue_value) );
1165				dateInput.val(this_date_formatted);
1166				dateValue.val(dateValue_value);
1167			}
1168			//add logic for texts
1169			dateInput.on('change', function(){
1170				if( jQuery(this).val() == '' ){
1171					jQuery(this).nextAll('.em-date-input').first().val('');
1172				}
1173			});
1174		});
1175		//deal with date ranges
1176		dateDivs.filter('.em-date-range').find('input.em-date-input-loc[type="text"]').each(function(i,dateInput){
1177			//finally, apply start/end logic to this field
1178			dateInput = jQuery(dateInput);
1179			if( dateInput.hasClass('em-date-start') ){
1180				dateInput.datepicker('option','onSelect', function( selectedDate ) {
1181					//get corresponding end date input, we expect ranges to be contained in .em-date-range with a start/end input element
1182					var startDate = jQuery(this);
1183					var endDate = startDate.parents('.em-date-range').find('.em-date-end').first();
1184					var startValue = startDate.nextAll('input.em-date-input').first().val();
1185					var endValue = endDate.nextAll('input.em-date-input').first().val();
1186					startDate.trigger('em_datepicker_change');
1187					if( startValue > endValue && endValue != '' ){
1188						endDate.datepicker( "setDate" , selectedDate );
1189						endDate.trigger('change').trigger('em_datepicker_change');
1190					}
1191					endDate.datepicker( "option", 'minDate', selectedDate );
1192				});
1193			}else if( dateInput.hasClass('em-date-end') ){
1194				var startInput = dateInput.parents('.em-date-range').find('.em-date-start').first();
1195				if( startInput.val() != '' ){
1196					dateInput.datepicker('option', 'minDate', startInput.val());
1197				}
1198			}
1199		});
1200	}
1201
1202	// datpicker - new format
1203	let datePickerDivs = wrap.find('.em-datepicker, .em-datepicker-range');
1204	if( datePickerDivs.length > 0 ){
1205		// wrappers and locale
1206		let datepicker_wrapper = jQuery('#em-flatpickr');
1207		if( datepicker_wrapper.length === 0 ){
1208			datepicker_wrapper = jQuery('<div class="em pixelbones em-flatpickr" id="em-flatpickr"></div>').appendTo('body');
1209		}
1210		// locale
1211		if( 'locale' in EM.datepicker ){
1212			flatpickr.localize(flatpickr.l10ns[EM.datepicker.locale]);
1213			flatpickr.l10ns.default.firstDayOfWeek = EM.firstDay;
1214		}
1215		//default picker vals
1216		let datepicker_options = {
1217			appendTo : datepicker_wrapper[0],
1218			dateFormat: "Y-m-d",
1219			disableMoble : "true",
1220			allowInput : true,
1221			onChange : [function( selectedDates, dateStr, instance ){
1222				let wrapper = jQuery(instance.input).closest('.em-datepicker');
1223				let data_wrapper = wrapper.find('.em-datepicker-data');
1224				let inputs = data_wrapper.find('input');
1225				let dateFormat = function(d) {
1226					let month = '' + (d.getMonth() + 1),
1227						day = '' + d.getDate(),
1228						year = d.getFullYear();
1229					if (month.length < 2) month = '0' + month;
1230					if (day.length < 2) day = '0' + day;
1231					return [year, month, day].join('-');
1232				}
1233				if( selectedDates.length === 0 ){
1234					inputs.attr('value', '');
1235				}else{
1236					if( instance.config.mode === 'range' && selectedDates[1] !== undefined ) {
1237						// deal with end date
1238						inputs[0].setAttribute('value', dateFormat(selectedDates[0]));
1239						inputs[1].setAttribute('value', dateFormat(selectedDates[1]));
1240					}else if( instance.config.mode === 'single' && wrapper.hasClass('em-datepicker-until') ){
1241						if( instance.input.classList.contains('em-date-input-start') ){
1242							inputs[0].setAttribute('value', dateFormat(selectedDates[0]));
1243							// set min-date of other datepicker
1244							let fp;
1245							if( wrapper.attr('data-until-id') ){
1246								let fp_input = jQuery('#' + wrapper.attr('data-until-id') + ' .em-date-input-end');
1247								fp = fp_input[0]._flatpickr;
1248							}else {
1249								fp = wrapper.find('.em-date-input-end')[0]._flatpickr;
1250							}
1251							if( fp.selectedDates[0] !== undefined && fp.selectedDates[0] < selectedDates[0] ){
1252								fp.setDate(selectedDates[0], false);
1253								inputs[1].setAttribute('value', dateFormat(fp.selectedDates[0]));
1254							}
1255							fp.set('minDate', selectedDates[0]);
1256						}else{
1257							inputs[1].setAttribute('value', dateFormat(selectedDates[0]));
1258						}
1259					}else{
1260						inputs[0].setAttribute('value', dateFormat(selectedDates[0]));
1261					}
1262				}
1263				inputs.trigger('change');
1264				let current_date = data_wrapper.attr('date-value');
1265				data_wrapper.attr('data-value', dateStr);
1266				if( current_date === dateStr ) data_wrapper.trigger('change');
1267			}],
1268			onClose : function( selectedDates, dateStr, instance ){
1269				// deal with single date choice and clicking out
1270				if( instance.config.mode === 'range' && selectedDates[1] !== undefined ){
1271					if(selectedDates.length === 1){
1272						instance.setDate([selectedDates[0],selectedDates[0]], true); // wouldn't have been triggered with a single date selection
1273					}
1274				}
1275			},
1276			locale : {},
1277		};
1278		if( EM.datepicker.format !== datepicker_options.dateFormat ){
1279			datepicker_options.altFormat = EM.datepicker.format;
1280			datepicker_options.altInput = true;
1281		}
1282		jQuery(document).triggerHandler('em_datepicker_options', datepicker_options);
1283		//apply datepickers to elements
1284		datePickerDivs.each( function(i,datePickerDiv) {
1285			// hide fallback fields, show range or single
1286			datePickerDiv = jQuery(datePickerDiv);
1287			datePickerDiv.find('.em-datepicker-data').addClass('hidden');
1288			let isRange = datePickerDiv.hasClass('em-datepicker-range');
1289			let altOptions = {};
1290			if( datePickerDiv.attr('data-datepicker') ){
1291				altOptions = JSON.parse(datePickerDiv.attr('data-datepicker'));
1292				if( typeof altOptions !== 'object' ){
1293					altOptions = {};
1294				}
1295			}
1296			let options = Object.assign({}, datepicker_options, altOptions); // clone, mainly shallow concern for 'mode'
1297			options.mode = isRange ? 'range' : 'single';
1298			if( isRange && 'onClose' in options ){
1299				options.onClose = [function( selectedDates, dateStr, instance ){
1300					if(selectedDates.length === 1){ // deal with single date choice and clicking out
1301						instance.setDate([selectedDates[0],selectedDates[0]], true);
1302					}
1303				}];
1304			}
1305			if( datePickerDiv.attr('data-separator') ) options.locale.rangeSeparator = datePickerDiv.attr('data-separator');
1306			if( datePickerDiv.attr('data-format') ) options.altFormat = datePickerDiv.attr('data-format');
1307			let FPs = datePickerDiv.find('.em-date-input');
1308			FPs.attr('type', 'text').flatpickr(options);
1309		});
1310		// add values to elements, done once all datepickers instantiated so we don't get errors with date range els in separate divs
1311		datePickerDivs.each( function(i,datePickerDiv) {
1312			datePickerDiv = jQuery(datePickerDiv);
1313			let FPs = datePickerDiv.find('.em-date-input');
1314			let inputs = datePickerDiv.find('.em-datepicker-data input');
1315			inputs.attr('type', 'hidden'); // hide so not tabbable
1316			if( datePickerDiv.hasClass('em-datepicker-until') ){
1317				let start_fp, end_fp;
1318				if( datePickerDiv.attr('data-until-id') ){
1319					end_fp = jQuery('#' + datePickerDiv.attr('data-until-id') + ' .em-date-input-end')[0]._flatpickr;
1320				}else{
1321					end_fp = FPs.filter('.em-date-input-end')[0]._flatpickr;
1322					if( inputs[1] && inputs[1].value ) {
1323						end_fp.setDate(inputs[1].value, false, 'Y-m-d');
1324					}
1325				}
1326				if( inputs[0] && inputs[0].value ){
1327					start_fp = FPs.filter('.em-date-input-start')[0]._flatpickr;
1328					start_fp.setDate(inputs[0].value, false, 'Y-m-d');
1329					end_fp.set('minDate', inputs[0].value);
1330				}
1331			}else{
1332				let dates = [];
1333				inputs.each( function( i, input ){
1334					if( input.value ){
1335						dates.push(input.value);
1336					}
1337				});
1338				FPs[0]._flatpickr.setDate(dates, false, 'Y-m-d');
1339			}
1340		});
1341		// fire trigger
1342		jQuery(document).triggerHandler('em_flatpickr_loaded', [wrap]);
1343	}
1344}
1345function em_setup_timepicker(wrap){
1346	wrap = jQuery(wrap);
1347	var timepicker_options = {
1348		step:15
1349	}
1350	timepicker_options.timeFormat = EM.show24hours == 1 ? 'G:i':'g:i A';
1351	jQuery(document).triggerHandler('em_timepicker_options', timepicker_options);
1352	wrap.find(".em-time-input").em_timepicker(timepicker_options);
1353
1354	// Keep the duration between the two inputs.
1355	wrap.find(".em-time-range input.em-time-start").each( function(i, el){
1356		var time = jQuery(el);
1357		time.data('oldTime', time.em_timepicker('getSecondsFromMidnight'));
1358	}).on('change', function() {
1359		var start = jQuery(this);
1360		var end = start.nextAll('.em-time-end');
1361		if (end.val()) { // Only update when second input has a value.
1362			// Calculate duration.
1363			var oldTime = start.data('oldTime');
1364			var duration = (end.em_timepicker('getSecondsFromMidnight') - oldTime) * 1000;
1365			var time = start.em_timepicker('getSecondsFromMidnight');
1366			if( end.em_timepicker('getSecondsFromMidnight') >= oldTime ){
1367				// Calculate and update the time in the second input.
1368				end.em_timepicker('setTime', new Date(start.em_timepicker('getTime').getTime() + duration));
1369			}
1370			start.data('oldTime', time);
1371		}
1372	});
1373	// Validate.
1374	wrap.find(".event-form-when .em-time-range input.em-time-end").on('change', function() {
1375		var end = jQuery(this);
1376		var start = end.prevAll('.em-time-start');
1377		var wrapper = end.closest('.event-form-when');
1378		var start_date = wrapper.find('.em-date-end').val();
1379		var end_date = wrapper.find('.em-date-start').val();
1380		if( start.val() ){
1381			if( start.em_timepicker('getTime') > end.em_timepicker('getTime') && ( end_date.length == 0 || start_date == end_date ) ) { end.addClass("error"); }
1382			else { end.removeClass("error"); }
1383		}
1384	});
1385	wrap.find(".event-form-when .em-date-end").on('change', function(){
1386		jQuery(this).closest('.event-form-when').find('.em-time-end').trigger('change');
1387	});
1388	//Sort out all day checkbox
1389	wrap.find('.em-time-range input.em-time-all-day').on('change', function(){
1390		var allday = jQuery(this);
1391		if( allday.is(':checked') ){
1392			allday.closest('.em-time-range').find('.em-time-input').each( function(){
1393			    this.style.setProperty('background-color','#ccc', 'important');
1394			    this.readOnly = true;
1395			});
1396		}else{
1397		    allday.closest('.em-time-range').find('.em-time-input').each( function(){
1398		        this.style.removeProperty('background-color');
1399			    this.readOnly = false;
1400		    });
1401		}
1402	}).trigger('change');
1403}
1404
1405/* Useful function for adding the em_ajax flag to a url, regardless of querystring format */
1406var em_ajaxify = function(url){
1407	if ( url.search('em_ajax=0') != -1){
1408		url = url.replace('em_ajax=0','em_ajax=1');
1409	}else if( url.search(/\?/) != -1 ){
1410		url = url + "&em_ajax=1";
1411	}else{
1412		url = url + "?em_ajax=1";
1413	}
1414	return url;
1415};
1416
1417/*
1418 * MAP FUNCTIONS
1419 */
1420var em_maps_loaded = false;
1421var maps = {};
1422var maps_markers = {};
1423var infoWindow;
1424//loads maps script if not already loaded and executes EM maps script
1425function em_maps_load(){
1426	if( !em_maps_loaded ){
1427		if ( jQuery('script#google-maps').length == 0 && ( typeof google !== 'object' || typeof google.maps !== 'object' ) ){ 
1428			var script = document.createElement("script");
1429			script.type = "text/javascript";
1430			script.id = "google-maps";
1431			var proto = (EM.is_ssl) ? 'https:' : 'http:';
1432			if( typeof EM.google_maps_api !== 'undefined' ){
1433				script.src = proto + '//maps.google.com/maps/api/js?v=quarterly&libraries=places&callback=em_maps&key='+EM.google_maps_api;
1434			}else{
1435				script.src = proto + '//maps.google.com/maps/api/js?v=quarterly&libraries=places&callback=em_maps';
1436			}
1437			document.body.appendChild(script);
1438		}else if( typeof google === 'object' && typeof google.maps === 'object' && !em_maps_loaded ){
1439			em_maps();
1440		}else if( jQuery('script#google-maps').length > 0 ){
1441			jQuery(window).load(function(){ if( !em_maps_loaded ) em_maps(); }); //google isn't loaded so wait for page to load resources
1442		}
1443	}
1444}
1445jQuery(document).on('em_view_loaded_map', function( e, view, form ){
1446	if( !em_maps_loaded ){
1447		em_maps_load();
1448	}else{
1449		let map = view.find('.em-locations-map');
1450		em_maps_load_locations( map );
1451	}
1452});
1453//re-usable function to load global location maps
1454function em_maps_load_locations(el){
1455	var el = jQuery(el);
1456	var map_id = el.attr('id').replace('em-locations-map-','');
1457	var em_data = jQuery.parseJSON( el.nextAll('.em-locations-map-coords').first().text() );
1458	if( em_data == null ){
1459		var em_data = jQuery.parseJSON( jQuery('#em-locations-map-coords-'+map_id).text() );
1460	}
1461	jQuery.getJSON(document.URL, em_data , function(data){
1462		if(data.length > 0){
1463			//define default options and allow option for extension via event triggers
1464			  var map_options = { mapTypeId: google.maps.MapTypeId.ROADMAP };
1465			  if( typeof EM.google_map_id_styles == 'object' && typeof EM.google_map_id_styles[map_id] !== 'undefined' ){ console.log(EM.google_map_id_styles[map_id]); map_options.styles = EM.google_map_id_styles[map_id]; }
1466			  else if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; }
1467			  jQuery(document).triggerHandler('em_maps_locations_map_options', map_options);
1468			  var marker_options = {};
1469			  jQuery(document).triggerHandler('em_maps_location_marker_options', marker_options);
1470			  
1471			  maps[map_id] = new google.maps.Map(el[0], map_options);
1472			  maps_markers[map_id] = [];
1473
1474			  var bounds = new google.maps.LatLngBounds();
1475			  
1476			  jQuery.map( data, function( location, i ){
1477				  if( !(location.location_latitude == 0 && location.location_longitude == 0) ){
1478					var latitude = parseFloat( location.location_latitude );
1479					var longitude = parseFloat( location.location_longitude );
1480					var location_position = new google.maps.LatLng( latitude, longitude );
1481					//extend the default marker options
1482					jQuery.extend(marker_options, {
1483					    position: location_position, 
1484					    map: maps[map_id]
1485					})
1486					var marker = new google.maps.Marker(marker_options);
1487					maps_markers[map_id].push(marker);
1488					marker.setTitle(location.location_name);
1489					var myContent = '<div class="em-map-balloon"><div id="em-map-balloon-'+map_id+'" class="em-map-balloon-content">'+ location.location_balloon +'</div></div>';
1490					em_map_infobox(marker, myContent, maps[map_id]);
1491					//extend bounds
1492					bounds.extend(new google.maps.LatLng(latitude,longitude))
1493				  }
1494			  });
1495			  // Zoom in to the bounds
1496			  maps[map_id].fitBounds(bounds);
1497			  
1498			//Call a hook if exists
1499			jQuery(document).triggerHandler('em_maps_locations_hook', [maps[map_id], data, map_id, maps_markers[map_id]]);
1500		}else{
1501			el.children().first().html('No locations found');
1502			jQuery(document).triggerHandler('em_maps_locations_hook_not_found', [el]);
1503		}
1504	});
1505}
1506function em_maps_load_location(el){
1507	el = jQuery(el);
1508	var map_id = el.attr('id').replace('em-location-map-','');
1509	em_LatLng = new google.maps.LatLng( jQuery('#em-location-map-coords-'+map_id+' .lat').text(), jQuery('#em-location-map-coords-'+map_id+' .lng').text());
1510	//extend map and markers via event triggers
1511	var map_options = {
1512	    zoom: 14,
1513	    center: em_LatLng,
1514	    mapTypeId: google.maps.MapTypeId.ROADMAP,
1515	    mapTypeControl: false,
1516	    gestureHandling: 'cooperative'
1517	};
1518	if( typeof EM.google_map_id_styles == 'object' && typeof EM.google_map_id_styles[map_id] !== 'undefined' ){ console.log(EM.google_map_id_styles[map_id]); map_options.styles = EM.google_map_id_styles[map_id]; }
1519	else if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; }
1520	jQuery(document).triggerHandler('em_maps_location_map_options', map_options);
1521	maps[map_id] = new google.maps.Map( document.getElementById('em-location-map-'+map_id), map_options);
1522	var marker_options = {
1523	    position: em_LatLng,
1524	    map: maps[map_id]
1525	};
1526	jQuery(document).triggerHandler('em_maps_location_marker_options', marker_options);
1527	maps_markers[map_id] = new google.maps.Marker(marker_options);
1528	infoWindow = new google.maps.InfoWindow({ content: jQuery('#em-location-map-info-'+map_id+' .em-map-balloon').get(0) });
1529	infoWindow.open(maps[map_id],maps_markers[map_id]);
1530	maps[map_id].panBy(40,-70);
1531	
1532	//JS Hook for handling map after instantiation
1533	//Example hook, which you can add elsewhere in your theme's JS - jQuery(document).on('em_maps_location_hook', function(){ alert('hi');} );
1534	jQuery(document).triggerHandler('em_maps_location_hook', [maps[map_id], infoWindow, maps_markers[map_id], map_id]);
1535	//map resize listener
1536	jQuery(window).on('resize', function(e) {
1537		google.maps.event.trigger(maps[map_id], "resize");
1538		maps[map_id].setCenter(maps_markers[map_id].getPosition());
1539		maps[map_id].panBy(40,-70);
1540	});
1541}
1542jQuery(document).on('em_search_ajax', function(e, vars, wrapper){
1543	if( em_maps_loaded ){
1544		wrapper.find('.em-location-map').each( function(index, el){ em_maps_load_location(el); } );
1545		wrapper.find('.em-locations-map').each( function(index, el){ em_maps_load_locations(el); });
1546	}
1547});
1548//Load single maps (each map is treated as a seperate map).
1549function em_maps() {
1550	//Find all the maps on this page and load them
1551	jQuery('.em-location-map').each( function(index, el){ em_maps_load_location(el); } );	
1552	jQuery('.em-locations-map').each( function(index, el){ em_maps_load_locations(el); } );
1553	
1554	//Location stuff - only needed if inputs for location exist
1555	if( jQuery('select#location-select-id, input#location-address').length > 0 ){
1556		var map, marker;
1557		//load map info
1558		var refresh_map_location = function(){
1559			var location_latitude = jQuery('#location-latitude').val();
1560			var location_longitude = jQuery('#location-longitude').val();
1561			if( !(location_latitude == 0 && location_longitude == 0) ){
1562				var position = new google.maps.LatLng(location_latitude, location_longitude); //the location coords
1563				marker.setPosition(position);
1564				var mapTitle = (jQuery('input#location-name').length > 0) ? jQuery('input#location-name').val():jQuery('input#title').val();
1565				mapTitle = em_esc_attr(mapTitle);
1566				marker.setTitle( mapTitle );
1567				jQuery('#em-map').show();
1568				jQuery('#em-map-404').hide();
1569				google.maps.event.trigger(map, 'resize');
1570				map.setCenter(position);
1571				map.panBy(40,-55);
1572				infoWindow.setContent( 
1573					'<div id="location-balloon-content"><strong>' + mapTitle + '</strong><br>' + 
1574					em_esc_attr(jQuery('#location-address').val()) + 
1575					'<br>' + em_esc_attr(jQuery('#location-town').val()) + 
1576					'</div>'
1577				);
1578				infoWindow.open(map, marker);
1579				jQuery(document).triggerHandler('em_maps_location_hook', [map, infoWindow, marker, 0]);
1580			} else {
1581    			jQuery('#em-map').hide();
1582    			jQuery('#em-map-404').show();
1583			}
1584		};
1585		
1586		//Add listeners for changes to address
1587		var get_map_by_id = function(id){
1588			if(jQuery('#em-map').length > 0){
1589                jQuery('#em-map-404 .em-loading-maps').show();
1590				jQuery.getJSON(document.URL,{ em_ajax_action:'get_location', id:id }, function(data){
1591					if( data.location_latitude!=0 && data.location_longitude!=0 ){
1592						loc_latlng = new google.maps.LatLng(data.location_latitude, data.location_longitude);
1593						marker.setPosition(loc_latlng);
1594						marker.setTitle( data.location_name );
1595						marker.setDraggable(false);
1596						jQuery('#em-map').show();
1597						jQuery('#em-map-404').hide();
1598                        jQuery('#em-map-404 .em-loading-maps').hide();
1599						map.setCenter(loc_latlng);
1600						map.panBy(40,-55);
1601						infoWindow.setContent( '<div id="location-balloon-content">'+ data.location_balloon +'</div>');
1602						infoWindow.open(map, marker);
1603						google.maps.event.trigger(map, 'resize');
1604						jQuery(document).triggerHandler('em_maps_location_hook', [map, infoWindow, marker, 0]);
1605					}else{
1606						jQuery('#em-map').hide();
1607						jQuery('#em-map-404').show();
1608                        jQuery('#em-map-404 .em-loading-maps').hide();
1609					}
1610				});
1611			}
1612		};
1613		jQuery('#location-select-id, input#location-id').on('change', function(){get_map_by_id(jQuery(this).val());} );
1614		jQuery('#location-name, #location-town, #location-address, #location-state, #location-postcode, #location-country').on('change', function(){
1615			//build address
1616			if( jQuery(this).prop('readonly') === true ) return;
1617			var addresses = [ jQuery('#location-address').val(), jQuery('#location-town').val(), jQuery('#location-state').val(), jQuery('#location-postcode').val() ];
1618			var address = '';
1619			jQuery.each( addresses, function(i, val){
1620				if( val != '' ){
1621					address = ( address == '' ) ? address+val:address+', '+val;
1622				}
1623			});
1624			if( address == '' ){ //in case only name is entered, no address
1625				jQuery('#em-map').hide();
1626				jQuery('#em-map-404').show();
1627				return false;
1628			}
1629			//do country last, as it's using the text version
1630			if( jQuery('#location-country option:selected').val() != 0 ){
1631				address = ( address == '' ) ? address+jQuery('#location-country option:selected').text():address+', '+jQuery('#location-country option:selected').text();
1632			}
1633			//add working indcator whilst we search
1634            jQuery('#em-map-404 .em-loading-maps').show();
1635			//search!
1636			if( address != '' && jQuery('#em-map').length > 0 ){
1637				geocoder.geocode( { 'address': address }, function(results, status) {
1638				    if (status == google.maps.GeocoderStatus.OK) {
1639						jQuery('#location-latitude').val(results[0].geometry.location.lat());
1640						jQuery('#location-longitude').val(results[0].geometry.location.lng());
1641					}
1642				    refresh_map_location();
1643				});
1644			}
1645		});
1646		
1647		//Load map
1648		if(jQuery('#em-map').length > 0){
1649			var em_LatLng = new google.maps.LatLng(0, 0);
1650			var map_options = {
1651				    zoom: 14,
1652				    center: em_LatLng,
1653				    mapTypeId: google.maps.MapTypeId.ROADMAP,
1654				    mapTypeControl: false,
1655				    gestureHandling: 'cooperative'
1656			};
1657			if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; }
1658			map = new google.maps.Map( document.getElementById('em-map'), map_options);
1659			var marker = new google.maps.Marker({
1660			    position: em_LatLng,
1661			    map: map,
1662			    draggable: true
1663			});
1664			infoWindow = new google.maps.InfoWindow({
1665			    content: ''
1666			});
1667			var geocoder = new google.maps.Geocoder();
1668			google.maps.event.addListener(infoWindow, 'domready', function() { 
1669				document.getElementById('location-balloon-content').parentNode.style.overflow=''; 
1670				document.getElementById('location-balloon-content').parentNode.parentNode.style.overflow=''; 
1671			});
1672			google.maps.event.addListener(marker, 'dragend', function() {
1673				var position = marker.getPosition();
1674				jQuery('#location-latitude').val(position.lat());
1675				jQuery('#location-longitude').val(position.lng());
1676				map.setCenter(position);
1677				map.panBy(40,-55);
1678			});
1679			if( jQuery('#location-select-id').length > 0 ){
1680				jQuery('#location-select-id').trigger('change');
1681			}else{
1682				refresh_map_location();
1683			}
1684			jQuery(document).triggerHandler('em_map_loaded', [map, infoWindow, marker]);
1685		}
1686		//map resize listener
1687		jQuery(window).on('resize', function(e) {
1688			google.maps.event.trigger(map, "resize");
1689			map.setCenter(marker.getPosition());
1690			map.panBy(40,-55);
1691		});
1692	}
1693	em_maps_loaded = true; //maps have been loaded
1694	jQuery(document).triggerHandler('em_maps_loaded');
1695}
1696  
1697function em_map_infobox(marker, message, map) {
1698  var iw = new google.maps.InfoWindow({ content: message });
1699  google.maps.event.addListener(marker, 'click', function() {
1700	if( infoWindow ) infoWindow.close();
1701	infoWindow = iw;
1702    iw.open(map,marker);
1703  });
1704}
1705
1706function em_esc_attr( str ){
1707	if( typeof str !== 'string' ) return '';
1708	return str.replace(/</gi,'&lt;').replace(/>/gi,'&gt;');
1709}
1710
1711
1712// Modal Open/Close
1713let openModal = function( modal, onOpen = null ){
1714    modal = jQuery(modal);
1715	modal.appendTo(document.body);
1716	setTimeout( function(){
1717        modal.addClass('active').find('.em-modal-popup').addClass('active');
1718		jQuery(document).triggerHandler('em_modal_open', [modal]);
1719		if( typeof onOpen === 'function' ){
1720			setTimeout( onOpen, 200); // timeout allows css transition
1721		}
1722	}, 100); // timeout allows css transition
1723};
1724let closeModal = function( modal, onClose = null ){
1725	modal = jQuery(modal);
1726	modal.removeClass('active').find('.em-modal-popup').removeClass('active');
1727	setTimeout( function(){
1728        if( modal.attr('data-parent') ){
1729            let wrapper = jQuery('#' + modal.attr('data-parent') );
1730            if( wrapper.length ) {
1731                modal.appendTo(wrapper);
1732            }
1733        }
1734		modal.triggerHandler('em_modal_close');
1735		if( typeof onClose === 'function' ){
1736			onClose();
1737		}
1738	}, 500); // timeout allows css transition
1739}
1740jQuery(document).on('click', '.em-modal .em-close-modal', function(e){
1741	let modal = jQuery(this).closest('.em-modal');
1742	if( !modal.attr('data-prevent-close') ) {
1743		closeModal(modal);
1744	}
1745});
1746jQuery(document).on('click', '.em-modal', function(e){
1747	var target = jQuery(e.target);
1748	if( target.hasClass('em-modal') ) {
1749		let modal = jQuery(this);
1750		if( !modal.attr('data-prevent-close') ){
1751			closeModal(modal);
1752		}
1753	}
1754});
1755
1756//Events Search
1757jQuery(document).ready( function($){
1758
1759	// handle the views tip/ddm
1760	let views_ddm_options = {
1761		theme : 'light-border',
1762		allowHTML : true,
1763		interactive : true,
1764		trigger : 'manual',
1765		placement : 'bottom',
1766		zIndex : 1000000,
1767		touch: true,
1768	};
1769	$(document).trigger('em-search-views-trigger-vars',[views_ddm_options]);
1770	let tooltip_vars = { theme : 'light-border', appendTo : 'parent', touch : false, };
1771	$(document).trigger('em-tippy-vars',[tooltip_vars]);
1772
1773	// sync main search texts to advanced search
1774	let search_forms = $('.em-search');
1775	search_forms.each( function(){
1776		/*
1777		 * Important references we'll reuse in scope
1778		 */
1779		let search = $(this);
1780		let search_id = search.attr('id').replace('em-search-', '');
1781		let search_form = search.find('.em-search-form').first();
1782		let search_advanced = search.find('.em-search-advanced'); // there should only be one anyway
1783
1784		/* 
1785		 * Counter functions
1786		 */
1787		const update_input_count = function( input, qty = 1 ){
1788			let el = jQuery(input);
1789			let total = qty > 0 ? qty : null;
1790			el.attr('data-advanced-total-input', total);
1791			update_search_totals();
1792		};
1793
1794		const update_search_totals = function( applied = false ){
1795			// set everything to 0, recount
1796			search.find('span.total-count').remove();
1797			// find all fields with total attributes and sum them up
1798			let total = 0;
1799			search_advanced.find('[data-advanced-total-input]').each( function(){
1800				let total_input = this.getAttribute('data-advanced-total-input');
1801				total += Math.abs( total_input );
1802			});
1803			search.attr('data-advanced-total', total);
1804			update_trigger_count( applied );
1805			// find all sections with totals and display them (added above)
1806			search_advanced.find('.em-search-advanced-section').each( function(){
1807				let section = $(this);
1808				let section_total = 0;
1809				section.attr('data-advanced-total', 0);
1810				// go through all set qtys and calculate
1811				section.find('[data-advanced-total-input]').each( function(){
1812					let total_input = this.getAttribute('data-advanced-total-input');
1813					section_total += Math.abs( total_input );
1814				});
1815				section.attr('data-advanced-total', section_total);
1816				update_section_count(section);
1817			});
1818			// update triggers, search, clear button etc.
1819			if( total > 0 || !search.attr('data-advanced-previous-total') || total != search.attr('data-advanced-previous-total') ){
1820				update_submit_buttons( true );
1821			}
1822			update_clear_button_count();
1823		}
1824
1825		const update_trigger_count = function( applied = false ){
1826			let triggers = jQuery('.em-search-advanced-trigger[data-search-advanced-id="em-search-advanced-'+ search_id +'"]'); // search like this ato apply to external triggers
1827			triggers.find('span.total-count').remove();
1828			let total = search.attr('data-advanced-total');
1829			if( total > 0 ){
1830				let trigger_count = jQuery('<span class="total-count">'+ total + '</span>').appendTo(triggers);
1831				if( !applied ){
1832					trigger_count.addClass('tentative');
1833				}
1834			}
1835		};
1836
1837		const update_submit_buttons = function( disabled = false ){
1838			// update the clear link
1839			let submit_button = search_advanced.find('button[type="submit"]');
1840			let main_submit_button = search.find('.em-search-main-bar button[type="submit"]');
1841			let submit_buttons = submit_button.add( main_submit_button ); // merge together to apply chanegs
1842			if( disabled ){
1843				submit_buttons.removeClass('disabled').attr('aria-disabled', 'false');
1844			}else{
1845				submit_buttons.addClass('disabled').attr('aria-disabled', 'true');
1846			}
1847		};
1848
1849		const update_section_count = function( section ){
1850			let section_total = section.attr('data-advanced-total');
1851			section.find('header span.total-count').remove();
1852			if( section_total > 0 ){
1853				$('<span class="total-count">'+ section_total +'</span>').appendTo( section.find('header') );
1854			}
1855		};
1856
1857		const update_clear_button_count = function(){
1858			// update the clear link
1859			let clear_link = search_advanced.find('button[type="reset"]');
1860			if( !clear_link.attr('data-placeholder') ){
1861				clear_link.attr('data-placeholder', clear_link.text());
1862			}
1863			let total = search.attr('data-advanced-total');
1864			if( total > 0 ){
1865				clear_link.text( clear_link.attr('data-placeholder') + ' (' + total + ')' ).prop('disabled', false);
1866				clear_link.removeClass('disabled').attr('aria-disabled', 'false');
1867			}else{
1868				clear_link.text( clear_link.attr('data-placeholder') );
1869				clear_link.addClass('disabled').attr('aria-disabled', 'true');
1870			}
1871		};
1872
1873		/*
1874		 * Triggers
1875		 */
1876		search.find('.em-search-views-trigger').each( function(){
1877			tooltip_vars.content = this.parentElement.getAttribute('aria-label');
1878			let views_tooltip = tippy(this.parentElement, tooltip_vars);
1879			let views_content = this.parentElement.querySelector('.em-search-views-options');
1880			let views_content_parent = views_content.parentElement;
1881			let tippy_content = document.createElement('div');
1882			views_ddm_options.content = tippy_content;
1883			let views_ddm = tippy(this, views_ddm_options);
1884			views_ddm.setProps({
1885				onShow(instance){
1886					views_tooltip.disable();
1887					tippy_content.append(views_content);
1888				},
1889				onShown(instance){ // keyboard support
1890					views_content.querySelector('input:checked').focus();
1891				},
1892				onHidden(instance){
1893					views_tooltip.enable();
1894					if( views_content.parentElement !== views_content_parent ) {
1895						views_content_parent.append(views_content);
1896					}
1897				}
1898			});
1899			let tippy_listener = function(e){
1900				if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false;
1901				e.preventDefault();
1902				e.stopPropagation();
1903				this._tippy.show();
1904				views_tooltip.hide();
1905			}
1906			this.addEventListener('click', tippy_listener);
1907			this.addEventListener('keydown', tippy_listener);
1908			this.firstElementChild.addEventListener('focus', function(e){
1909				views_ddm.hide();
1910				views_tooltip.enable();
1911				views_tooltip.show();
1912			});
1913			this.firstElementChild.addEventListener('blur', function(){
1914				views_tooltip.hide();
1915			});
1916
1917			search.on('focus blur', '.em-search-views-options input', function(){
1918				if( document.activeElement === this ){
1919					this.parentElement.classList.add('focused');
1920				}else{
1921					this.parentElement.classList.remove('focused');
1922				}
1923			});
1924
1925			search.on('keydown click', '.em-search-views-options input', function( e ){
1926				// get relevant vars
1927				if( e.type === 'keydown' && e.which !== 13 ){
1928					if ( [37, 38, 39, 40].indexOf(e.which) !== -1 ) {
1929						if (e.which === 38) {
1930							if (this.parentElement.previousElementSibling) {
1931								this.parentElement.previousElementSibling.focus();
1932							}
1933						} else if (e.which === 40) {
1934							if (this.parentElement.nextElementSibling) {
1935								this.parentElement.nextElementSibling.focus();
1936							}
1937						}
1938						return false;
1939					} else if ( e.which === 9 ) {
1940						// focus out
1941						views_ddm.hide();
1942					}
1943					return true;
1944				}
1945				this.checked = true;
1946				let input = $(this);
1947				// mark label selected
1948				input.closest('fieldset').find('label').removeClass('checked');
1949				input.parent().addClass('checked');
1950				// get other reference elements we need
1951				let views_wrapper = $(this).closest('.em-search-views');
1952				let view_type = this.value;
1953				let trigger = views_wrapper.children('.em-search-views-trigger');
1954				let trigger_option = trigger.children('.em-search-view-option');
1955				// change view, if different
1956				if( view_type !== trigger_option.attr('data-view') ){
1957					trigger_option.attr('data-view', this.value).text(this.parentElement.innerText);
1958					// remove custom search vals from current view so it's not used into another view
1959					$('#em-view-'+search_id).find('#em-view-custom-data-search-'+search_id).remove();
1960					// trigger custom event in case form disabled due to no search vals
1961					search_form.find('button[type="submit"]').focus();
1962					search_form.trigger('forcesubmit');
1963				}
1964				views_ddm.hide();
1965			});
1966		});
1967
1968		// add trigger logic for advanced popup modal
1969		search.on('click', 'button.em-search-advanced-trigger', function(){
1970			if( search.hasClass('advanced-mode-inline') ){
1971				// inline
1972				if( !search_advanced.hasClass('visible') ){
1973					search_advanced.slideDown().addClass('visible');
1974				}else{
1975					search_advanced.slideUp().removeClass('visible');
1976				}
1977			}else{
1978				// wrap modal popup element in a form, so taht it's 'accessible' with keyboard
1979				if( !search_advanced.hasClass('active') ) {
1980					let form_wrapper = $('<form action="" method="post" class="em-search-advanced-form" id="em-search-form-advanced-' + search_id + '"></form>');
1981					form_wrapper.appendTo(search_advanced);
1982					search_advanced.find('.em-modal-popup').appendTo(form_wrapper);
1983					// open modal
1984					let button = this;
1985					openModal(search_advanced, function () {
1986						// Do this instead
1987						button.blur();
1988						search_advanced.find('input.em-search-text').focus();
1989					});
1990				}
1991			}
1992		});
1993		search_advanced.on('em_modal_close', function(){
1994			search_advanced.find('.em-modal-popup').appendTo(search_advanced);
1995			search_advanced.children('form').remove();
1996			let trigger = search.find('button.em-search-advanced-trigger').focus();
1997			if( '_tippy' in trigger[0] ){
1998				trigger[0]._tippy.hide();
1999			}
2000		});
2001
2002		// add header toggle logic to expand/collapse sections - add directly to elements since they move around the DOM due to modal
2003		search_advanced.find('.em-search-advanced-section > header').on('click', function(){
2004			let header = $(this);
2005			let section = header.closest('section');
2006			let content = header.siblings('.em-search-section-content');
2007			if( section.hasClass('active') ){
2008				content.slideUp();
2009				section.removeClass('active');
2010			}else{
2011				content.slideDown();
2012				section.addClass('active');
2013			}
2014		});
2015
2016		/*
2017		 *  Advanced Search Field Listeners - Main Search Form
2018		 */
2019
2020		let search_form_advanced_calculate_totals_inputs = function( input ){
2021			// for textboxes we only need to add or remove 1 advanced
2022			let el = $(input);
2023			let qty = el.val() !== '' ? 1:0;
2024			update_input_count( el, qty );
2025		};
2026
2027		// These are for the main search bar, syncing information back into the advanced form
2028		search.on('change input', '.em-search-main-bar input.em-search-text', function( e ){
2029			// sync advanced input field with same text
2030			let advanced_search_input = search_advanced.find('input.em-search-text');
2031			advanced_search_input.val( this.value );
2032			// recalculate totals from here
2033			search_form_advanced_calculate_totals_inputs(advanced_search_input[0]);
2034		});
2035		search.on('change', '.em-search-main-bar input.em-search-geo-coords', function(){
2036			let el = $(this);
2037			let advanced_geo = search_advanced.find('div.em-search-geo');
2038			// copy over value and class names
2039			let advanced_geo_coords = advanced_geo.find('input.em-search-geo-coords');
2040			advanced_geo_coords.val( el.val() ).attr('class', el.attr('class'));
2041			let geo_text = el.siblings('input.em-search-geo').first();
2042			advanced_geo.find('input.em-search-geo').val(geo_text.val()).attr('class', geo_text.attr('class'));
2043			// calculate totals from here
2044			search_form_advanced_calculate_totals_inputs(advanced_geo_coords);
2045		});
2046		search.find('.em-search-main-bar .em-datepicker input.em-search-scope.flatpickr-input').each( function(){
2047			if( !('_flatpickr' in this) ) return;
2048            this._flatpickr.config.onClose.push( function( selectedDates, dateStr, instance ) {
2049                // update advanced search form datepicker values, trigger a close for it to handle the rest
2050                let advanced_datepicker = search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input');
2051                advanced_datepicker[0]._flatpickr.setDate( selectedDates, true );
2052                advanced_datepicker[0]._flatpickr.close();
2053            });
2054		});
2055
2056		/*
2057		 *  Advanced Search Field Listeners - Advanced Search Form
2058		 */
2059
2060		// regular text advanced or hidden inputs that represent another ui
2061		search_advanced.on('change input', 'input.em-search-text', function( e ){
2062			if( e.type === 'change' ){
2063				// copy over place info on change only, not on each keystroke
2064				search.find('.em-search-main input.em-search-text').val( this.value );
2065			}else{
2066				search_form_advanced_calculate_totals_inputs(this);
2067			}
2068		});
2069		search_advanced.on('change', 'input.em-search-geo-coords', function( e ){
2070			search_form_advanced_calculate_totals_inputs(this);
2071			//update values in main search
2072			let el = $(this);
2073			let main = search.find('.em-search-main div.em-search-geo');
2074			if( main.length > 0 ){
2075				// copy over value and class names
2076				main.find('input.em-search-geo-coords').val( el.val() ).attr('class', el.attr('class'));
2077				let geo_text = el.siblings('input.em-search-geo');
2078				main.find('input.em-search-geo').val(geo_text.val()).attr('class', geo_text.attr('class'));
2079			}
2080		});
2081		/* Not sure we should be calculating this... since it's always set to something.
2082		search_advanced.on('change', 'select.em-search-geo-unit, select.em-search-geo-distance', function( e ){
2083			// combine both values into parent, if value set then it's a toggle
2084			let el = jQuery(this);
2085			let qty = el.val() ? 1 : null;
2086			el.closest('.em-search-geo-units').attr('data-advanced-total-input', qty);
2087			update_search_totals();
2088		});
2089		 */
2090		search_advanced.on('change', 'input.em-search-eventful', function( e ){
2091			let el = $(this);
2092			let qty = el.prop('checked') ? 1:0;
2093			update_input_count( el, qty );
2094		});
2095		search_advanced.on('calculate_totals', function(){
2096			$(this).find('input.em-search-text, input.em-search-geo-coords').each( function(){
2097				search_form_advanced_calculate_totals_inputs(this);
2098			});
2099			$(this).find('input.em-search-eventful').trigger('change');
2100		});
2101		search_advanced.on('clear_search', function(){
2102			$(this).find('input.em-search-geo').removeClass('off').removeClass('on').val('');
2103		});
2104
2105		// datepicker advanced logic
2106		search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input').each( function(){
2107			if( !('_flatpickr' in this) ) return;
2108			this._flatpickr.config.onClose.push( function( selectedDates, dateStr, instance ) {
2109				// check previous value against current value, no change, no go
2110				let previous_value = instance.input.getAttribute('data-previous-value');
2111				if( previous_value !== dateStr ){
2112					// update counter
2113					let qty = dateStr ? 1:0;
2114					update_input_count(instance.input, qty);
2115					// update main search form datepicker values
2116					let main_datepicker = search.find('.em-search-main-bar .em-datepicker input.em-search-scope.flatpickr-input');
2117					main_datepicker[0]._flatpickr.setDate( selectedDates, true );
2118					// set for next time
2119					instance.input.setAttribute('data-previous-value', dateStr);
2120				}
2121			});
2122		});
2123		search_advanced.on('calculate_totals', function(){
2124			search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input').first().each( function(){
2125				let qty = this._flatpickr.selectedDates.length > 0 ? 1 : 0;
2126				update_input_count(this, qty);
2127			});
2128		});
2129		search_advanced.on('clear_search', function(){
2130			search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input').each( function() {
2131				this._flatpickr.clear();
2132				update_input_count(this, 0);
2133			});
2134		});
2135		// clear the date total for calendars, before anything is done
2136		let scope_calendar_check = function(){
2137			search.find('.em-datepicker input.em-search-scope.flatpickr-input').each( function(){
2138				if( search.attr('data-view') == 'calendar' ){
2139					this.setAttribute('data-advanced-total-input', 0);
2140					this._flatpickr.input.disabled = true;
2141				}else{
2142					this._flatpickr.input.disabled = false;
2143					let qty = this._flatpickr.selectedDates.length > 0 ? 1 : 0;
2144					this.setAttribute('data-advanced-total-input', qty);
2145				}
2146			});
2147		};
2148		$(document).on('em_search_loaded', scope_calendar_check);
2149		scope_calendar_check();
2150
2151
2152		// selectize advanced
2153		search_advanced.find('select.em-selectize').each(function () {
2154			this.selectize.on('change', function(){
2155				search_advanced_selectize_change(this);
2156			});
2157		});
2158		search_advanced.on('calculate_totals', function(){
2159			$(this).find('select.em-selectize').each( function(){
2160				search_advanced_selectize_change(this.selectize);
2161			});
2162		});
2163		search_advanced.on('clear_search', function(){
2164			search_advanced.find('select.em-selectize').each( function(){
2165				this.selectize.clear();
2166				this.selectize.refreshItems();
2167				this.selectize.refreshOptions();
2168				if( !this.classList.contains('always-open') ){
2169					this.selectize.close();
2170					this.selectize.$dropdown.hide();
2171				}
2172			});
2173		});
2174
2175		let search_advanced_selectize_change = function( selectize ){
2176			let qty = selectize.items.length;
2177			// handle 'all' default values
2178			if( qty == 1 && !selectize.items[0] ){
2179				qty = 0;
2180			}
2181			update_input_count( selectize.$input, qty );
2182		};
2183
2184		// location-specific stuff for dropdowns (powered by selectize)
2185		let locations_selectize_load_complete = function(){
2186			if( 'selectize' in this ) {
2187				this.selectize.settings.placeholder = this.selectize.settings.original_placeholder;
2188				this.selectize.updatePlaceholder();
2189				// get options from select again
2190				let options = [];
2191				this.selectize.$input.find('option').each( function(){
2192					let value = this.value !== null ? this.value : this.innerHTML;
2193					options.push({ value : value, text: this.innerHTML});
2194				});
2195				this.selectize.addOption(options);
2196				this.selectize.refreshOptions(false);
2197			}
2198		};
2199		let locations_selectize_load_start = function(){
2200			if( 'selectize' in this ){
2201				this.selectize.clearOptions();
2202				if( !('original_placeholder' in this.selectize.settings) ) this.selectize.settings.original_placeholder = this.selectize.settings.placeholder;
2203				this.selectize.settings.placeholder = EM.txt_loading;
2204				this.selectize.updatePlaceholder();
2205			}
2206		};
2207		$('.em-search-advanced select[name=country], .em-search select[name=country]').on('change', function(){
2208			var el = $(this);
2209			let wrapper = el.closest('.em-search-location');
2210			wrapper.find('select[name=state]').html('<option value="">'+EM.txt_loading+'</option>');
2211			wrapper.find('select[name=region]').html('<option value="">'+EM.txt_loading+'</option>');
2212			wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>');
2213			wrapper.find('select[name=state], select[name=region], select[name=town]').each( locations_selectize_load_start );
2214			if( el.val() != '' ){
2215				wrapper.find('.em-search-location-meta').slideDown();
2216				var data = {
2217					action : 'search_states',
2218					country : el.val(),
2219					return_html : true,
2220				};
2221				wrapper.find('select[name=state]').load( EM.ajaxurl, data, locations_selectize_load_complete );
2222				data.action = 'search_regions';
2223				wrapper.find('select[name=region]').load( EM.ajaxurl, data, locations_selectize_load_complete );
2224				data.action = 'search_towns';
2225				wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete );
2226			}else{
2227				wrapper.find('.em-search-location-meta').slideUp();
2228			}
2229		});
2230		$('.em-search-advanced select[name=region], .em-search select[name=region]').on('change', function(){
2231			var el = $(this);
2232			let wrapper = el.closest('.em-search-location');
2233			wrapper.find('select[name=state]').html('<option value="">'+EM.txt_loading+'</option>');
2234			wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>');
2235			wrapper.find('select[name=state], select[name=town]').each( locations_selectize_load_start );
2236			var data = {
2237				action : 'search_states',
2238				region : el.val(),
2239				country : wrapper.find('select[name=country]').val(),
2240				return_html : true
2241			};
2242			wrapper.find('select[name=state]').load( EM.ajaxurl, data, locations_selectize_load_complete );
2243			data.action = 'search_towns';
2244			wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete );
2245		});
2246		$('.em-search-advanced select[name=state], .em-search select[name=state]').on('change', function(){
2247			var el = $(this);
2248			let wrapper = el.closest('.em-search-location');
2249			wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>').each( locations_selectize_load_start );
2250			var data = {
2251				action : 'search_towns',
2252				state : el.val(),
2253				region : wrapper.find('select[name=region]').val(),
2254				country : wrapper.find('select[name=country]').val(),
2255				return_html : true
2256			};
2257			wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete );
2258		});
2259
2260		/*
2261		 *  Clear & Search Actions
2262		 */
2263		// handle clear link for advanced
2264		search_advanced.on( 'click', 'button[type="reset"]', function(){
2265			// clear text search advanced, run clear hook for other parts to hook into
2266			if( search.attr('data-advanced-total') == 0 ) return;
2267			// search text and geo search
2268			search_advanced.find('input.em-search-text, input.em-search-geo').val('').attr('data-advanced-total-input', null).trigger('change');
2269			// other implementations hook here and do what you need
2270			search.trigger('clear_search');
2271			search_advanced.trigger('clear_search');
2272			// remove counters, set data counters to 0, hide section and submit form without search settings
2273			update_search_totals(true); // in theory, this is 0 and removes everything
2274			search_advanced.find('.em-search-advanced-section').removeClass('active').children('.em-search-section-content').slideUp();
2275			search_advanced.find('button[type="submit"]').trigger('forceclick');
2276			update_clear_button_count();
2277		}).each( function(){
2278			search_advanced.trigger('calculate_totals');
2279			update_search_totals(true);
2280		});
2281		const on_update_trigger_count = function(e, applied = true){
2282			update_trigger_count( applied );
2283		};
2284		search.on('update_trigger_count', on_update_trigger_count);
2285		search_advanced.on('update_trigger_count', on_update_trigger_count);
2286
2287		// handle submission for advanced
2288		search_advanced.on( 'click forceclick', 'button[type="submit"]', function(e){
2289			e.preventDefault();
2290			if( this.classList.contains('disabled') && e.type !== 'forceclick' ) return false;
2291			// close attach back to search form
2292			closeModal(search_advanced, function(){
2293				// submit for search
2294				search_form.submit();
2295			});
2296			return false; // we handled it
2297		});
2298
2299		search.on('submit forcesubmit', '.em-search-form', function(e){
2300			e.preventDefault();
2301			let form = $(this);
2302			let submit_buttons = form.find('button[type="submit"]');
2303			if( e.type !== 'forcesubmit' && submit_buttons.hasClass('disabled') ) return false;
2304			let wrapper = form.closest('.em-search');
2305			if( wrapper.hasClass('em-search-legacy') ){
2306				em_submit_legacy_search_form(form);
2307			}else{
2308				let view = $('#em-view-'+search_id);
2309				let view_type = form.find('[name="view"]:checked').val();
2310				if( Array.isArray(view_type) ) view_type = view_type.shift();
2311				// copy over custom view information, remove it further down
2312				let custom_view_data = view.find('#em-view-custom-data-search-'+search_id).clone();
2313				let custom_view_data_container = $('<div class="em-view-custom-data"></div>');
2314				custom_view_data.children().appendTo(custom_view_data_container);
2315				custom_view_data.remove();
2316				custom_view_data_container.appendTo(form);
2317				// add loading stuff
2318				view.append('<div class="em-loading"></div>');
2319				submit_buttons.each( function(){
2320					if( EM.txt_searching !== this.innerHTML ) {
2321						this.setAttribute('data-button-text', this.innerHTML);
2322						this.innerHTML = EM.txt_searching;
2323					}
2324				});
2325				var vars = form.serialize();
2326				$.ajax( EM.ajaxurl, {
2327					type : 'POST',
2328					dataType : 'html',
2329					data : vars,
2330					success : function(responseText){
2331						submit_buttons.each( function(){
2332							this.innerHTML = this.getAttribute('data-button-text');
2333						});
2334    				    view = EM_View_Updater( view, responseText );
2335						// update view definitions
2336						view.attr('data-view', view_type);
2337						search.attr('data-view', view_type);
2338						search_advanced.attr('data-view', view_type);
2339						jQuery(document).triggerHandler('em_view_loaded_'+view_type, [view, form, e]);
2340						jQuery(document).triggerHandler('em_search_loaded', [view, form, e]); // ajax has loaded new results
2341						jQuery(document).triggerHandler('em_search_result', [vars, view, e]); // legacy for backcompat, use the above
2342						wrapper.find('.count.tentative').removeClass('tentative');
2343						// deactivate submit button until changes are made again
2344						submit_buttons.addClass('disabled').attr('aria-disabled', 'true');
2345						// update search totals
2346						update_search_totals(true);
2347						search.attr('data-advanced-previous-total', search.attr('data-advanced-total')); // so we know if filters were used in previous search
2348						update_submit_buttons(false);
2349						custom_view_data_container.remove(); // remove data so it's reloaded again later
2350					}
2351				});
2352			}
2353			return false;
2354		});
2355
2356		// observe resizing
2357		EM_ResizeObserver( EM.search.breakpoints, [search[0]]);
2358	});
2359
2360	// handle external triggers, e.g. a calendar shortcut for a hidden search form
2361	$(document).on('click', '.em-search-advanced-trigger[data-search-advanced-id]', function(){
2362		if( this.getAttribute('data-parent-trigger') ) {
2363			document.getElementById(this.getAttribute('data-parent-trigger')).click();
2364		}
2365	});
2366
2367    $(document).on('click', '.em-view-container .em-ajax.em-pagination a.page-numbers', function(e){
2368        let a = $(this);
2369        let view = a.closest('.em-view-container');
2370	    let href = a.attr('href');
2371	    //add data-em-ajax att if it exists
2372	    let data = a.closest('.em-pagination').attr('data-em-ajax');
2373	    if( data ){
2374		    href += '&' + data;
2375	    }
2376		// build querystring from url
2377	    let url_params = new URL(href, window.location.origin).searchParams;
2378		if( view.attr('data-view') ) {
2379			url_params.set('view', view.attr('data-view'));
2380		}
2381		// start ajax
2382	    view.append('<div class="loading" id="em-loading"></div>');
2383        $.ajax( EM.ajaxurl, {
2384            type : 'POST',
2385            dataType : 'html',
2386            data : url_params.toString(),
2387            success : function(responseText) {
2388                view = EM_View_Updater( view, responseText );
2389				view.find('.em-pagination').each( function(){
2390					paginationObserver.observe(this);
2391				});
2392				jQuery(document).triggerHandler('em_page_loaded', [view]);
2393            }
2394        });
2395        e.preventDefault();
2396        return false;
2397    });
2398
2399    const paginationObserver = new ResizeObserver( function( entries ){
2400        for (let entry of entries) {
2401            let el = entry.target;
2402	        if( !el.classList.contains('observing') ) {
2403		        el.classList.add('observing'); // prevent endless loop on resizing within this check
2404				// check if any pagination parts are overflowing
2405				let overflowing = false;
2406				el.classList.remove('overflowing');
2407	            for ( const item of el.querySelectorAll('.not-current')) {
2408		            if( item.scrollHeight > item.clientHeight || item.scrollWidth > item.clientWidth ){
2409			            overflowing = true;
2410						break; // break if one has overflown
2411		            }
2412	            };
2413				// add or remove overflow classes
2414                if( overflowing ){
2415                    el.classList.add('overflowing')
2416                }
2417		        el.classList.remove('observing');
2418            }
2419        }
2420    });
2421    $('.em-pagination').each( function(){
2422          paginationObserver.observe(this);
2423    });
2424
2425	/* START Legacy */
2426	// deprecated - hide/show the advanced search advanced link - relevant for old template overrides
2427	$(document).on('click change', '.em-search-legacy .em-toggle', function(e){
2428		e.preventDefault();
2429		//show or hide advanced search, hidden by default
2430		var el = $(this);
2431		var rel = el.attr('rel').split(':');
2432		if( el.hasClass('show-search') ){
2433			if( rel.length > 1 ){ el.closest(rel[1]).find(rel[0]).slideUp(); }
2434			else{ $(rel[0]).slideUp(); }
2435			el.find('.show, .show-advanced').show();
2436			el.find('.hide, .hide-advanced').hide();
2437			el.removeClass('show-search');
2438		}else{
2439			if( rel.length > 1 ){ el.closest(rel[1]).find(rel[0]).slideDown(); }
2440			else{ $(rel[0]).slideDown(); }
2441			el.find('.show, .show-advanced').hide();
2442			el.find('.hide, .hide-advanced').show();
2443			el.addClass('show-search');
2444		}
2445	});
2446	// handle search form submission
2447	let em_submit_legacy_search_form = function( form ){
2448		if( this.em_search && this.em_search.value == EM.txt_search){ this.em_search.value = ''; }
2449		var results_wrapper = form.closest('.em-search-wrapper').find('.em-search-ajax');
2450		if( results_wrapper.length == 0 ) results_wrapper = $('.em-search-ajax');
2451		if( results_wrapper.length > 0 ){
2452			results_wrapper.append('<div class="loading" id="em-loading"></div>');
2453			var submitButton = form.find('.em-search-submit button');
2454			submitButton.attr('data-button-text', submitButton.val()).val(EM.txt_searching);
2455			var img = submitButton.children('img');
2456			if( img.length > 0 ) img.attr('src', img.attr('src').replace('search-mag.png', 'search-loading.gif'));
2457			var vars = form.serialize();
2458			$.ajax( EM.ajaxurl, {
2459				type : 'POST',
2460				dataType : 'html',
2461				data : vars,
2462				success : function(responseText){
2463					submitButton.val(submitButton.attr('data-button-text'));
2464					if( img.length > 0 ) img.attr('src', img.attr('src').replace('search-loading.gif', 'search-mag.png'));
2465					results_wrapper.replaceWith(responseText);
2466					if( form.find('input[name=em_search]').val() == '' ){ form.find('input[name=em_search]').val(EM.txt_search); }
2467					//reload results_wrapper
2468					results_wrapper = form.closest('.em-search-wrapper').find('.em-search-ajax');
2469					if( results_wrapper.length == 0 ) results_wrapper = $('.em-search-ajax');
2470					jQuery(document).triggerHandler('em_search_ajax', [vars, results_wrapper, e]); //ajax has loaded new results
2471				}
2472			});
2473			e.preventDefault();
2474			return false;
2475		}
2476	};
2477	if( $('.em-search-ajax').length > 0 ){
2478		$(document).on('click', '.em-search-ajax a.page-numbers', function(e){
2479			var a = $(this);
2480			var data = a.closest('.em-pagination').attr('data-em-ajax');
2481			var wrapper = a.closest('.em-search-ajax');
2482			var wrapper_parent = wrapper.parent();
2483			var qvars = a.attr('href').split('?');
2484			var vars = qvars[1];
2485			//add data-em-ajax att if it exists
2486			if( data != '' ){
2487				vars = vars != '' ? vars+'&'+data : data;
2488			}
2489			vars += '&legacy=1';
2490			wrapper.append('<div class="loading" id="em-loading"></div>');
2491			$.ajax( EM.ajaxurl, {
2492				type : 'POST',
2493				dataType : 'html',
2494				data : vars,
2495				success : function(responseText) {
2496					wrapper.replaceWith(responseText);
2497					wrapper = wrapper_parent.find('.em-search-ajax');
2498					jQuery(document).triggerHandler('em_search_ajax', [vars, wrapper, e]); //ajax has loaded new results
2499				}
2500			});
2501			e.preventDefault();
2502			return false;
2503		});
2504	}
2505	/* END Legacy */
2506});
2507
2508/*
2509* CALENDAR
2510*/
2511jQuery(document).ready( function($){
2512
2513	const em_calendar_init = function( calendar ){
2514		calendar = $(calendar);
2515		if( !calendar.attr('id') || !calendar.attr('id').match(/^em-calendar-[0-9+]$/) ){
2516		    calendar.attr('id', 'em-calendar-' + Math.floor(Math.random() * 10000)); // retroactively add id to old templates
2517		}
2518		calendar.find('a').off("click");
2519		calendar.on('click', 'a.em-calnav, a.em-calnav-today', function(e){
2520			e.preventDefault();
2521			const el = $(this);
2522			if( el.data('disabled') == 1 || el.attr('href') === '') return; // do nothing if disabled or no link provided
2523			el.closest('.em-calendar').prepend('<div class="loading" id="em-loading"></div>');
2524			let url = em_ajaxify(el.attr('href'));
2525			const calendar_id = calendar.attr('id').replace('em-calendar-', '');
2526			const custom_data = $('form#em-view-custom-data-calendar-'+ calendar_id);
2527			let form_data = new FormData();
2528			if( custom_data.length > 0 ){
2529				form_data = new FormData(custom_data[0]);
2530				let url_params = new URL(url, window.location.origin).searchParams;
2531				for (const [key, value] of url_params.entries()) {
2532					form_data.set(key, value);
2533				}
2534			}
2535			// check advanced trigger
2536			if( calendar.hasClass('with-advanced') ){
2537				form_data.set('has_advanced_trigger', 1);
2538			}
2539			$.ajax({
2540				url: url,
2541				data: form_data,
2542				processData: false,
2543				contentType: false,
2544				method: 'POST',
2545				success: function( data ){
2546				    let view = EM_View_Updater( calendar, data );
2547					if( view.hasClass('em-view-container') ){
2548						calendar = view.find('.em-calendar');
2549					}else{
2550						calendar = view;
2551					}
2552					calendar.trigger('em_calendar_load');
2553				},
2554				dataType: 'html'
2555			});
2556		} );
2557		let calendar_trigger_ajax = function( calendar, year, month ){
2558			let link = calendar.find('.em-calnav-next');
2559			let url = new URL(link.attr('href'), window.location.origin);
2560			url.searchParams.set('mo', month);
2561			url.searchParams.set('yr', year);
2562			link.attr('href', url.toString()).trigger('click');
2563		};
2564		let calendar_resize_monthpicker = function( instance, text ){
2565			let span = $('<span class="marker">'+ text +'</span>');
2566			span.insertAfter(instance);
2567			let width = span.width() + 40;
2568			span.remove();
2569			instance.style.setProperty('width', width+'px', 'important');
2570		}
2571		let calendar_month_init = function(){
2572			let month_form = calendar.find('.month form');
2573			calendar.find('.event-style-pill .em-cal-event').on('click', function( e ){
2574				e.preventDefault();
2575				if( !(calendar.hasClass('preview-tooltips') && calendar.data('preview-tooltips-trigger')) && !(calendar.hasClass('preview-modal')) ) {
2576					let link = this.getAttribute('data-event-url');
2577					if (link !== null) {
2578						//window.location.href = link;
2579					}
2580				}
2581			});
2582			if( month_form.length > 0 ){
2583				month_form.find('input[type="submit"]').hide();
2584				let select = $('<select style="display:none;visibility:hidden;"></select>').appendTo(month_form);
2585				let option = $('<option></option>').appendTo(select);
2586				let current_datetime = calendar.find('select[name="month"]').val() + calendar.find('select[name="year"]').val();
2587				let month = calendar.find('select[name="month"]');
2588				let year = calendar.find('select[name="year"]');
2589				let monthpicker = calendar.find('.em-month-picker');
2590				let month_value = monthpicker.data('month-value');
2591				monthpicker.prop('type', 'text').prop('value', month_value);
2592				calendar_resize_monthpicker( monthpicker[0], month_value );
2593				let monthpicker_wrapper = $('#em-flatpickr');
2594				if( monthpicker_wrapper.length === 0 ) {
2595					monthpicker_wrapper = $('<div class="em pixelbones" id="em-flatpickr"></div>').appendTo('body');
2596				}
2597				let minDate = null;
2598				if( calendar.data('scope') === 'future' ){
2599					minDate = new Date();
2600					minDate.setMonth(minDate.getMonth()-1);
2601				}
2602				// locale
2603				if( 'locale' in EM.datepicker ){
2604					flatpickr.localize(flatpickr.l10ns[EM.datepicker.locale]);
2605					flatpickr.l10ns.default.firstDayOfWeek = EM.firstDay;
2606				}
2607				monthpicker.flatpickr({
2608					appendTo : monthpicker_wrapper[0],
2609					dateFormat : 'F Y',
2610					minDate : minDate,
2611					disableMobile: "true",
2612					plugins: [
2613						new monthSelectPlugin({
2614							shorthand: true, //defaults to false
2615							dateFormat: "F Y", //defaults to "F Y"
2616							altFormat: "F Y", //defaults to "F Y"
2617						})
2618					],
2619					onChange: function(selectedDates, dateStr, instance) {
2620						calendar_resize_monthpicker( instance.input, dateStr );
2621						calendar_trigger_ajax( calendar, selectedDates[0].getFullYear(), selectedDates[0].getMonth()+1);
2622					},
2623				});
2624				monthpicker.addClass('select-toggle')
2625				/* Disabling native picker at the moment, too quriky cross-browser
2626			}
2627			*/
2628			}
2629			if( calendar.hasClass('preview-tooltips') ){
2630				var tooltip_vars = {
2631					theme : 'light-border',
2632					allowHTML : true,
2633					interactive : true,
2634					trigger : 'mouseenter focus click',
2635					content(reference) {
2636						return document.createElement('div');
2637					},
2638					onShow( instance ){
2639						const id = instance.reference.getAttribute('data-event-id');
2640						const template = calendar.find('section.em-cal-events-content .em-cal-event-content[data-event-id="'+id+'"]');
2641					    instance.props.content.append(template.first().clone()[0]);
2642					},
2643					onHide( instance ){
2644					    instance.props.content.innerHTML = '';
2645					}
2646				};
2647				if( calendar.data('preview-tooltips-trigger') ) {
2648					tooltip_vars.trigger = calendar.data('preview-tooltips-trigger');
2649				}
2650				$(document).trigger('em-tippy-cal-event-vars',[tooltip_vars]);
2651				tippy(calendar.find('.em-cal-event').toArray(), tooltip_vars);
2652			}else if( calendar.hasClass('preview-modal') ){
2653				// Modal
2654				calendar.find('.em-cal-event').on('click', function(){
2655					const id = this.getAttribute('data-event-id');
2656					const modal = calendar.find('section.em-cal-events-content .em-cal-event-content[data-event-id="'+id+'"]');
2657					modal.attr('data-calendar-id', calendar.attr('id'));
2658					openModal(modal);
2659				});
2660			}
2661			// responsive mobile view for date clicks
2662			if( calendar.hasClass('responsive-dateclick-modal') ){
2663				calendar.find('.eventful .em-cal-day-date, .eventful-post .em-cal-day-date, .eventful-pre .em-cal-day-date').on('click', function( e ){
2664					//if( calendar.hasClass('size-small') || calendar.hasClass('size-medium') ){
2665						e.preventDefault();
2666						const id = this.getAttribute('data-calendar-date');
2667						const modal = calendar.find('.em-cal-date-content[data-calendar-date="'+id+'"]');
2668						modal.attr('data-calendar-id', calendar.attr('id'));
2669						openModal(modal);
2670					//}
2671				});
2672			}
2673			// observe resizing if not fixed
2674			if( !calendar.hasClass('size-fixed') ){
2675    			EM_ResizeObserver( EM.calendar.breakpoints, [calendar[0], calendar[0]]);
2676    		}
2677			// even aspect, because aspect ratio can screw up widths vs row template heights
2678			let calendar_body = calendar.find('.em-cal-body');
2679			if( calendar_body.hasClass('even-aspect') ) {
2680				let ro_function = function (el) {
2681					let width = el.firstElementChild.getBoundingClientRect().width;
2682					if (width > 0) {
2683						el.style.setProperty('--grid-auto-rows', 'minmax(' + width + 'px, auto)');
2684					}
2685				}
2686				let ro = new ResizeObserver(function (entries) {
2687					for (let entry of entries) {
2688						ro_function(entry.target);
2689					}
2690				});
2691				ro.observe(calendar_body[0]);
2692				ro_function(calendar_body[0]);
2693			}
2694
2695			// figure out colors
2696			calendar.find('.date-day-colors').each( function(){
2697				let colors = JSON.parse(this.getAttribute('data-colors'));
2698				let day = $(this).siblings('.em-cal-day-date.colored');
2699				let sides = {
2700					1 : { 1 : '--date-border-color', 'class' : 'one' },
2701					2 : { 1 : '--date-border-color-top', 2 : '--date-border-color-bottom', 'class' : 'two' },
2702					3 : { 1 : '--date-border-color-top', 2 : '--date-border-color-right', 3 : '--date-border-color-bottom', 'class' : 'three' },
2703					4 : { 1 : '--date-border-color-top', 2 : '--date-border-color-right', 3 : '--date-border-color-bottom', 4 : '--date-border-color-left', 'class' : 'four' },
2704				};
2705				for (let i = 0; i < colors.length; i += 4) {
2706					const ring_colors = colors.slice(i, i + 4);
2707					// add a ring
2708					let outer_ring = day.children().first();
2709					let new_ring = $('<div class="ring"></div>').prependTo(day);
2710					outer_ring.appendTo(new_ring);
2711					new_ring.addClass( sides[ring_colors.length].class );
2712					for ( let it = 0; it < ring_colors.length; it++ ){
2713						new_ring.css(sides[ring_colors.length][it+1], ring_colors[it]);
2714					}
2715				}
2716			});
2717			
2718			if( calendar.hasClass('with-advanced') ){
2719				const trigger = calendar.find('.em-search-advanced-trigger');
2720				const search_advanced = $('#'+trigger.attr('data-search-advanced-id'));
2721				search_advanced.triggerHandler('update_trigger_count');
2722			}
2723		}
2724		calendar_month_init();
2725		$(document).triggerHandler('em_calendar_loaded', [calendar]);
2726	};
2727	$('.em-calendar').each( function(){
2728		let calendar = $(this);
2729		em_calendar_init( calendar );
2730	});
2731	$(document).on('em_calendar_load', '.em-calendar', function(){
2732		em_calendar_init( this );
2733	});
2734	$(document).on('em_view_loaded_calendar', function( e, view, form ){
2735		let calendar;
2736		if( view.hasClass('em-calendar') ){
2737			calendar = view;
2738		}else {
2739			calendar = view.find('.em-calendar').first();
2740		}
2741		em_calendar_init( calendar );
2742	});
2743});
2744
2745let EM_View_Updater = function( element, html ){
2746	let content = jQuery(html);
2747	let view = element.hasClass('em-view-container') ? element : element.parent('.em-view-container');
2748    if( view.length > 0 ){
2749        if( content.hasClass('em-view-container') ){
2750            view.replaceWith(content);
2751			view = content;
2752        }else{
2753            view.empty().append(content);
2754        }
2755    }else{
2756        // create a view if possible
2757        if( content.hasClass('em-view-container') ){
2758	        element.replaceWith(content);
2759			view = content;
2760        }else if( content.attr('data-view-id') ){
2761            let view = jQuery('<div class="em em-view-container"></div>');
2762            let view_id = content.attr('data-view-id');
2763            view.attr('data-view-id', view_id);
2764            view.attr('id', 'em-view-'+ view_id);
2765            view.attr('data-view-type', content.attr('data-view-type'));
2766            view.append(content);
2767            element.replaceWith(view);
2768        }
2769    }
2770    return view;
2771}
2772
2773/**
2774 * Resize watcher for EM elements. Supply an object (localized array) of name > breakpoint, in order of least to largest and it'll add size-{name} class name according to the breakpoint.
2775 * An object item with value false will represent any screensize, i.e. it should be the last value when all breakpoints aren't met.
2776 * @param breakpoints
2777 * @param elements
2778 * @constructor
2779 */
2780let EM_ResizeObserver = function( breakpoints, elements ){
2781	const ro = new ResizeObserver( function( entries ){
2782		for (let entry of entries) {
2783			let el = entry.target;
2784			if( !el.classList.contains('size-fixed') ) {
2785				for (const [name, breakpoint] of Object.entries(breakpoints)) {
2786					if (el.offsetWidth <= breakpoint || breakpoint === false) {
2787						for (let breakpoint_name of Object.keys(breakpoints)) {
2788							if (breakpoint_name !== name) el.classList.remove('size-' + breakpoint_name);
2789						}
2790						el.classList.add('size-' + name);
2791						break;
2792					}
2793				}
2794			}
2795		}
2796	});
2797    elements.forEach( function( el ){
2798        if( typeof el !== 'undefined' ){
2799            ro.observe(el);
2800        }
2801    });
2802	return ro;
2803};
2804
2805// event list and event page (inc. some extra booking form logic) - todo/cleanup
2806jQuery(document).ready( function($){
2807	// Events List
2808	let breakpoints = {
2809		'small' : 600,
2810		'large' : false,
2811	}
2812	const events_ro = EM_ResizeObserver( breakpoints, $('.em-list').toArray() );
2813	$(document).on('em_page_loaded em_view_loaded_list em_view_loaded_list-grouped em_view_loaded_grid', function( e, view ){
2814		let new_elements = view.find('.em-list').each( function(){
2815			if( !this.classList.contains('size-fixed') ){
2816				events_ro.observe( this );
2817			}
2818		});
2819	});
2820
2821	$(document).on('click', '.em-grid .em-item[data-href]', function(e){
2822		if( e.target.type !== 'a' ){
2823			window.location.href = this.getAttribute('data-href');
2824		}
2825	});
2826
2827	// Single event area
2828	breakpoints = {
2829		'small' : 600,
2830		'medium' : 900,
2831		'large' : false,
2832	}
2833	const event_ro = EM_ResizeObserver( breakpoints, $('.em-item-single').toArray() );
2834	$(document).on('em_view_loaded', function( e, view ){
2835		let new_elements = view.find('.em-event-single').each( function(){
2836			if( !this.classList.contains('size-fixed') ){
2837				event_ro.observe( this );
2838			}
2839		});
2840	});
2841	// booking form area (WIP)
2842	$(document).on("click", ".em-event-booking-form .em-login-trigger a", function( e ){
2843		e.preventDefault();
2844		var parent = $(this).closest('.em-event-booking-form');
2845		parent.find('.em-login-trigger').hide();
2846		parent.find('.em-login-content').fadeIn();
2847		let login_form = parent.find('.em-login');
2848		login_form[0].scrollIntoView({
2849			behavior: 'smooth'
2850		});
2851		login_form.first().find('input[name="log"]').focus();
2852
2853	});
2854	$(document).on("click", ".em-event-booking-form .em-login-cancel", function( e ){
2855		e.preventDefault();
2856		let parent = $(this).closest('.em-event-booking-form');
2857		parent.find('.em-login-content').hide();
2858		parent.find('.em-login-trigger').show();
2859	});
2860	EM_ResizeObserver( {'small': 500, 'large' : false}, $('.em-login').toArray());
2861
2862});
2863
2864// handle generic ajax submission forms vanilla style
2865document.addEventListener('DOMContentLoaded', function () {
2866    document.querySelectorAll('form.em-ajax-form').forEach( function(el){
2867        el.addEventListener('submit', function(e){
2868            e.preventDefault();
2869            let form = e.currentTarget;
2870            let formData =  new FormData(form);
2871            let button = form.querySelector('button[type="submit"]');
2872            let loader;
2873
2874            if( form.classList.contains('no-overlay-spinner') ){
2875                form.classList.add('loading');
2876            }else{
2877                let loader = document.createElement('div');
2878                loader.id = 'em-loading';
2879                form.append(loader);
2880            }
2881
2882            var request = new XMLHttpRequest();
2883            if( form.getAttribute('data-api-url') ){
2884                request.open('POST', form.getAttribute('data-api-url'), true);
2885                request.setRequestHeader('X-WP-Nonce', EM.api_nonce);
2886            }else{
2887                request.open('POST', EM.ajaxurl, true);
2888            }
2889
2890            request.onload = function() {
2891                if( loader ) loader.remove();
2892                if (this.status >= 200 && this.status < 400) {
2893                    // Success!
2894                    try {
2895                        let data = JSON.parse(this.response);
2896                        let notice;
2897                        if( !form.classList.contains('no-inline-notice') ){
2898                            notice = form.querySelector('.em-notice');
2899                            if( !notice ){
2900                                notice = document.createElement('li');
2901                                form.prepend(notice);
2902                                if( formData.get('action') ){
2903                                    form.dispatchEvent( new CustomEvent( 'em_ajax_form_success_' + formData.get('action'), {
2904                                        detail : {
2905                                            form : form,
2906                                            notice : notice,
2907                                            response : data,
2908                                        }
2909                                    }) );
2910                                }
2911                            }
2912                            notice.innerHTML = '';
2913                            notice.setAttribute('class', 'em-notice');
2914                        }
2915                        if( data.result ){
2916                            if( !form.classList.contains('no-inline-notice') ){
2917                                notice.classList.add('em-notice-success');
2918                                notice.innerHTML = data.message;
2919                                form.replaceWith(notice);
2920                            }else{
2921                                form.classList.add('load-successful');
2922                                form.classList.remove('loading');
2923                                if( data.message ){
2924                                    EM_Alert(data.message);
2925                                }
2926                            }
2927                        }else{
2928                            if( !form.classList.contains('no-inline-notice') ){
2929                                notice.classList.add('em-notice-error');
2930                                notice.innerHTML = data.errors;
2931                            }else{
2932                                EM_Alert(data.errors);
2933                            }
2934                        }
2935                    } catch(e) {
2936                        alert( 'Error Encountered : ' + e);
2937                    }
2938                } else {
2939                    alert('Error encountered... please see debug logs or contact support.');
2940                }
2941                form.classList.remove('loading');
2942            };
2943
2944            request.onerror = function() {
2945                alert('Connection error encountered... please see debug logs or contact support.');
2946            };
2947
2948            request.send( formData );
2949            return false;
2950        });
2951    });
2952});
2953
2954function EM_Alert( content ){
2955    // find the alert modal, create if not
2956    let modal = document.getElementById('em-alert-modal');
2957    if( modal === null ){
2958        modal = document.createElement('div');
2959        modal.setAttribute('class', "em pixelbones em-modal");
2960        modal.id = 'em-alert-modal';
2961        modal.innerHTML = '<div class="em-modal-popup"><header><a class="em-close-modal"></a><div class="em-modal-title">&nbsp;</div></header><div class="em-modal-content" id="em-alert-modal-content"></div></div>';
2962        document.body.append(modal);
2963     }
2964     document.getElementById('em-alert-modal-content').innerHTML = content;
2965     openModal(modal);
2966};
2967
2968/*!
2969 * jquery-timepicker v1.13.16 - Copyright (c) 2020 Jon Thornton - https://www.jonthornton.com/jquery-timepicker/
2970 * Did a search/replace of timepicker to em_timepicker to prevent conflicts.
2971 */
2972(function(){"use strict";function _typeof(obj){"@babel/helpers - typeof";if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function(obj){return typeof obj}}else{_typeof=function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj}}return _typeof(obj)}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly)symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable});keys.push.apply(keys,symbols)}return keys}function _objectSpread2(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};if(i%2){ownKeys(Object(source),true).forEach(function(key){_defineProperty(target,key,source[key])})}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source))}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))})}}return target}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _createForOfIteratorHelper(o){if(typeof Symbol==="undefined"||o[Symbol.iterator]==null){if(Array.isArray(o)||(o=_unsupportedIterableToArray(o))){var i=0;var F=function(){};return{s:F,n:function(){if(i>=o.length)return{done:true};return{done:false,value:o[i++]}},e:function(e){throw e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var it,normalCompletion=true,didErr=false,err;return{s:function(){it=o[Symbol.iterator]()},n:function(){var step=it.next();normalCompletion=step.done;return step},e:function(e){didErr=true;err=e},f:function(){try{if(!normalCompletion&&it.return!=null)it.return()}finally{if(didErr)throw err}}}}var ONE_DAY=86400;var roundingFunction=function roundingFunction(seconds,settings){if(seconds===null){return null}else if(typeof settings.step!=="number"){return seconds}else{var offset=seconds%(settings.step*60);
2972var start=settings.minTime||0;offset-=start%(settings.step*60);if(offset>=settings.step*30){seconds+=settings.step*60-offset}else{seconds-=offset}return _moduloSeconds(seconds,settings)}};function _moduloSeconds(seconds,settings){if(seconds==ONE_DAY&&settings.show2400){return seconds}return seconds%ONE_DAY}var DEFAULT_SETTINGS={appendTo:"body",className:null,closeOnWindowScroll:false,disableTextInput:false,disableTimeRanges:[],disableTouchKeyboard:false,durationTime:null,forceRoundTime:false,lang:{},listWidth:null,maxTime:null,minTime:null,noneOption:false,orientation:"l",roundingFunction:roundingFunction,scrollDefault:null,selectOnBlur:false,show2400:false,showDuration:false,showOn:["click","focus"],showOnFocus:true,step:30,stopScrollPropagation:false,timeFormat:"g:ia",typeaheadHighlight:true,useSelect:false,wrapHours:true};var DEFAULT_LANG={am:"am",pm:"pm",AM:"AM",PM:"PM",decimal:".",mins:"mins",hr:"hr",hrs:"hrs"};var Timepicker=function(){function Timepicker(targetEl){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};_classCallCheck(this,Timepicker);this._handleFormatValue=this._handleFormatValue.bind(this);this._handleKeyUp=this._handleKeyUp.bind(this);this.targetEl=targetEl;var attrOptions=Timepicker.extractAttrOptions(targetEl,Object.keys(DEFAULT_SETTINGS));this.settings=this.parseSettings(_objectSpread2(_objectSpread2(_objectSpread2({},DEFAULT_SETTINGS),options),attrOptions))}_createClass(Timepicker,[{key:"hideMe",value:function hideMe(){if(this.settings.useSelect){this.targetEl.blur();return}if(!this.list||!Timepicker.isVisible(this.list)){return}if(this.settings.selectOnBlur){this._selectValue()}this.list.hide();var hideTimepickerEvent=new CustomEvent("hideTimepicker");this.targetEl.dispatchEvent(hideTimepickerEvent)}},{key:"_findRow",value:function _findRow(value){if(!value&&value!==0){return false}var out=false;var value=this.settings.roundingFunction(value,this.settings);if(!this.list){return false}this.list.find("li").each(function(i,obj){var parsed=Number.parseInt(obj.dataset.time);if(Number.isNaN(parsed)){return}if(parsed==value){out=obj;return false}});return out}},{key:"_hideKeyboard",value:function _hideKeyboard(){return(window.navigator.msMaxTouchPoints||"ontouchstart"in document)&&this.settings.disableTouchKeyboard}},{key:"_setTimeValue",value:function _setTimeValue(value,source){if(this.targetEl.nodeName==="INPUT"){if(value!==null||this.targetEl.value!=""){this.targetEl.value=value}var tp=this;var settings=tp.settings;if(settings.useSelect&&source!="select"&&tp.list){tp.list.val(tp._roundAndFormatTime(tp.time2int(value)))}}var selectTimeEvent=new Event("selectTime");if(this.selectedValue!=value){this.selectedValue=value;var changeTimeEvent=new Event("changeTime");
2972var changeEvent=new CustomEvent("change",{detail:"em_timepicker"});if(source=="select"){this.targetEl.dispatchEvent(selectTimeEvent);this.targetEl.dispatchEvent(changeTimeEvent);this.targetEl.dispatchEvent(changeEvent)}else if(["error","initial"].indexOf(source)==-1){this.targetEl.dispatchEvent(changeTimeEvent)}return true}else{if(["error","initial"].indexOf(source)==-1){this.targetEl.dispatchEvent(selectTimeEvent)}return false}}},{key:"_getTimeValue",value:function _getTimeValue(){if(this.targetEl.nodeName==="INPUT"){return this.targetEl.value}else{return this.selectedValue}}},{key:"_selectValue",value:function _selectValue(){var tp=this;var settings=tp.settings;var list=tp.list;var cursor=list.find(".ui-em_timepicker-selected");if(cursor.hasClass("ui-em_timepicker-disabled")){return false}if(!cursor.length){return true}var timeValue=cursor.get(0).dataset.time;if(timeValue){var parsedTimeValue=Number.parseInt(timeValue);if(!Number.isNaN(parsedTimeValue)){timeValue=parsedTimeValue}}if(timeValue!==null){if(typeof timeValue!="string"){timeValue=tp._int2time(timeValue)}tp._setTimeValue(timeValue,"select")}return true}},{key:"time2int",value:function time2int(timeString){if(timeString===""||timeString===null||timeString===undefined)return null;if(timeString instanceof Date){return timeString.getHours()*3600+timeString.getMinutes()*60+timeString.getSeconds()}if(typeof timeString!="string"){return timeString}timeString=timeString.toLowerCase().replace(/[\s\.]/g,"");if(timeString.slice(-1)=="a"||timeString.slice(-1)=="p"){timeString+="m"}var pattern=/^(([^0-9]*))?([0-9]?[0-9])(([0-5][0-9]))?(([0-5][0-9]))?(([^0-9]*))$/;var hasDelimetersMatch=timeString.match(/\W/);if(hasDelimetersMatch){pattern=/^(([^0-9]*))?([0-9]?[0-9])(\W+([0-5][0-9]?))?(\W+([0-5][0-9]))?(([^0-9]*))$/}var time=timeString.match(pattern);if(!time){return null}var hour=parseInt(time[3]*1,10);var ampm=time[2]||time[9];var hours=hour;var minutes=time[5]*1||0;var seconds=time[7]*1||0;if(!ampm&&time[3].length==2&&time[3][0]=="0"){ampm="am"}if(hour<=12&&ampm){ampm=ampm.trim();var isPm=ampm==this.settings.lang.pm||ampm==this.settings.lang.PM;if(hour==12){hours=isPm?12:0}else{hours=hour+(isPm?12:0)}}else{var t=hour*3600+minutes*60+seconds;if(t>=ONE_DAY+(this.settings.show2400?1:0)){if(this.settings.wrapHours===false){return null}hours=hour%24}}var timeInt=hours*3600+minutes*60+seconds;if(hour<12&&!ampm&&this.settings._twelveHourTime&&this.settings.scrollDefault){var delta=timeInt-this.settings.scrollDefault();if(delta<0&&delta>=ONE_DAY/-2){timeInt=(timeInt+ONE_DAY/2)%ONE_DAY}}return timeInt}},{key:"parseSettings",value:function parseSettings(settings){var _this=this;settings.lang=_objectSpread2(_objectSpread2({},DEFAULT_LANG),settings.lang);this.settings=settings;if(settings.minTime){settings.minTime=this.time2int(settings.minTime)}if(settings.maxTime){settings.maxTime=this.time2int(settings.maxTime)}if(settings.listWidth){settings.listWidth=this.time2int(settings.listWidth)}if(settings.durationTime&&typeof settings.durationTime!=="function"){settings.durationTime=this.time2int(settings.durationTime)}if(settings.scrollDefault=="now"){settings.scrollDefault=function(){return settings.roundingFunction(_this.time2int(new Date),settings)}}else if(settings.scrollDefault&&typeof settings.scrollDefault!="function"){var val=settings.scrollDefault;settings.scrollDefault=function(){return settings.roundingFunction(_this.time2int(val),settings)}}else if(settings.minTime){settings.scrollDefault=function(){return settings.roundingFunction(settings.minTime,settings)}}if(typeof settings.timeFormat==="string"&&settings.timeFormat.match(/[gh]/)){settings._twelveHourTime=true}if(settings.showOnFocus===false&&settings.showOn.indexOf("focus")!=-1){settings.showOn.splice(settings.showOn.indexOf("focus"),1)}if(!settings.disableTimeRanges){settings.disableTimeRanges=[]}if(settings.disableTimeRanges.length>0){for(var i in settings.disableTimeRanges){settings.disableTimeRanges[i]=[this.time2int(settings.disableTimeRanges[i][0]),this.time2int(settings.disableTimeRanges[i][1])]}settings.disableTimeRanges=settings.disableTimeRanges.sort(function(a,b){return a[0]-b[0]});for(var i=settings.disableTimeRanges.length-1;i>0;i--){if(settings.disableTimeRanges[i][0]<=settings.disableTimeRanges[i-1][1]){settings.disableTimeRanges[i-1]=[Math.min(settings.disableTimeRanges[i][0],settings.disableTimeRanges[i-1][0]),Math.max(settings.disableTimeRanges[i][1],settings.disableTimeRanges[i-1][1])];settings.disableTimeRanges.splice(i,1)}}}return settings}},{key:"_disableTextInputHandler",value:function _disableTextInputHandler(e){switch(e.keyCode){case 13:case 9:return;default:e.preventDefault()}}},{key:"_int2duration",value:function _int2duration(seconds,step){seconds=Math.abs(seconds);var minutes=Math.round(seconds/60),duration=[],hours,mins;
2972if(minutes<60){duration=[minutes,this.settings.lang.mins]}else{hours=Math.floor(minutes/60);mins=minutes%60;if(step==30&&mins==30){hours+=this.settings.lang.decimal+5}duration.push(hours);duration.push(hours==1?this.settings.lang.hr:this.settings.lang.hrs);if(step!=30&&mins){duration.push(mins);duration.push(this.settings.lang.mins)}}return duration.join(" ")}},{key:"_roundAndFormatTime",value:function _roundAndFormatTime(seconds){seconds=this.settings.roundingFunction(seconds,this.settings);if(seconds!==null){return this._int2time(seconds)}}},{key:"_int2time",value:function _int2time(timeInt){if(typeof timeInt!="number"){return null}var seconds=parseInt(timeInt%60),minutes=parseInt(timeInt/60%60),hours=parseInt(timeInt/(60*60)%24);var time=new Date(1970,0,2,hours,minutes,seconds,0);if(isNaN(time.getTime())){return null}if(typeof this.settings.timeFormat==="function"){return this.settings.timeFormat(time)}var output="";var hour,code;for(var i=0;i<this.settings.timeFormat.length;i++){code=this.settings.timeFormat.charAt(i);switch(code){case"a":output+=time.getHours()>11?this.settings.lang.pm:this.settings.lang.am;break;case"A":output+=time.getHours()>11?this.settings.lang.PM:this.settings.lang.AM;break;case"g":hour=time.getHours()%12;output+=hour===0?"12":hour;break;case"G":hour=time.getHours();if(timeInt===ONE_DAY)hour=this.settings.show2400?24:0;output+=hour;break;case"h":hour=time.getHours()%12;if(hour!==0&&hour<10){hour="0"+hour}output+=hour===0?"12":hour;break;case"H":hour=time.getHours();if(timeInt===ONE_DAY)hour=this.settings.show2400?24:0;output+=hour>9?hour:"0"+hour;break;case"i":var minutes=time.getMinutes();output+=minutes>9?minutes:"0"+minutes;break;case"s":seconds=time.getSeconds();output+=seconds>9?seconds:"0"+seconds;break;case"\\":i++;output+=this.settings.timeFormat.charAt(i);break;default:output+=code}}return output}},{key:"_setSelected",value:function _setSelected(){var list=this.list;list.find("li").removeClass("ui-em_timepicker-selected");var timeValue=this.time2int(this._getTimeValue());if(timeValue===null){return}var selected=this._findRow(timeValue);if(selected){var selectedRect=selected.getBoundingClientRect();var listRect=list.get(0).getBoundingClientRect();var topDelta=selectedRect.top-listRect.top;if(topDelta+selectedRect.height>listRect.height||topDelta<0){var newScroll=list.scrollTop()+(selectedRect.top-listRect.top)-selectedRect.height;list.scrollTop(newScroll)}var parsed=Number.parseInt(selected.dataset.time);if(this.settings.forceRoundTime||parsed===timeValue){selected.classList.add("ui-em_timepicker-selected")}}}},{key:"_isFocused",value:function _isFocused(el){return el===document.activeElement}},{key:"_handleFormatValue",value:function _handleFormatValue(e){if(e&&e.detail=="em_timepicker"){return}this._formatValue(e)}},{key:"_formatValue",value:function _formatValue(e,origin){if(this.targetEl.value===""){this._setTimeValue(null,origin);return}if(this._isFocused(this.targetEl)&&(!e||e.type!="change")){return}var settings=this.settings;var seconds=this.time2int(this.targetEl.value);if(seconds===null){var timeFormatErrorEvent=new CustomEvent("timeFormatError");this.targetEl.dispatchEvent(timeFormatErrorEvent);return}var rangeError=false;if(settings.minTime!==null&&settings.maxTime!==null&&(seconds<settings.minTime||seconds>settings.maxTime)){rangeError=true}var _iterator=_createForOfIteratorHelper(settings.disableTimeRanges),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var range=_step.value;if(seconds>=range[0]&&seconds<range[1]){rangeError=true;break}}}catch(err){_iterator.e(err)}finally{_iterator.f()}if(settings.forceRoundTime){var roundSeconds=settings.roundingFunction(seconds,settings);if(roundSeconds!=seconds){seconds=roundSeconds;origin=null}}var prettyTime=this._int2time(seconds);if(rangeError){this._setTimeValue(prettyTime);var timeRangeErrorEvent=new CustomEvent("timeRangeError");this.targetEl.dispatchEvent(timeRangeErrorEvent)}else{this._setTimeValue(prettyTime,origin)}}},{key:"_generateNoneElement",value:function _generateNoneElement(optionValue,useSelect){var label,className,value;if(_typeof(optionValue)=="object"){label=optionValue.label;className=optionValue.className;value=optionValue.value}else if(typeof optionValue=="string"){label=optionValue;value=""}else{$.error("Invalid noneOption value")}var el;
2972if(useSelect){el=document.createElement("option");el.value=value}else{el=document.createElement("li");el.dataset.time=String(value)}el.innerText=label;el.classList.add(className);return el}},{key:"_handleKeyUp",value:function _handleKeyUp(e){if(!this.list||!Timepicker.isVisible(this.list)||this.settings.disableTextInput){return true}if(e.type==="paste"||e.type==="cut"){setTimeout(function(){if(this.settings.typeaheadHighlight){this._setSelected()}else{this.list.hide()}},0);return}switch(e.keyCode){case 96:case 97:case 98:case 99:case 100:case 101:case 102:case 103:case 104:case 105:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 65:case 77:case 80:case 186:case 8:case 46:if(this.settings.typeaheadHighlight){this._setSelected()}else{this.list.hide()}break}}}],[{key:"extractAttrOptions",value:function extractAttrOptions(element,keys){var output={};var _iterator2=_createForOfIteratorHelper(keys),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var key=_step2.value;if(key in element.dataset){output[key]=element.dataset[key]}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}return output}},{key:"isVisible",value:function isVisible(elem){var el=elem[0];return el.offsetWidth>0&&el.offsetHeight>0}},{key:"hideAll",value:function hideAll(){var _iterator3=_createForOfIteratorHelper(document.getElementsByClassName("ui-em_timepicker-input")),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var el=_step3.value;var tp=el.em_timepickerObj;if(tp){tp.hideMe()}}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}}]);return Timepicker}();(function(factory){if((typeof exports==="undefined"?"undefined":_typeof(exports))==="object"&&exports&&(typeof module==="undefined"?"undefined":_typeof(module))==="object"&&module&&module.exports===exports){factory(require("jquery"))}else if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else{factory(jQuery)}})(function($){var _lang={};var methods={init:function init(options){return this.each(function(){var self=$(this);var tp=new Timepicker(this,options);var settings=tp.settings;_lang=settings.lang;this.em_timepickerObj=tp;self.addClass("ui-em_timepicker-input");if(settings.useSelect){_render(self)}else{self.prop("autocomplete","off");if(settings.showOn){for(var i in settings.showOn){self.on(settings.showOn[i]+".em_timepicker",methods.show)}}self.on("change.em_timepicker",tp._handleFormatValue);self.on("keydown.em_timepicker",_keydownhandler);self.on("keyup.em_timepicker",tp._handleKeyUp);if(settings.disableTextInput){self.on("keydown.em_timepicker",tp._disableTextInputHandler)}self.on("cut.em_timepicker",tp._handleKeyUp);self.on("paste.em_timepicker",tp._handleKeyUp);tp._formatValue(null,"initial")}})},show:function show(e){var self=$(this);var tp=self[0].em_timepickerObj;var settings=tp.settings;if(e){e.preventDefault()}if(settings.useSelect){tp.list.trigger("focus");return}if(tp._hideKeyboard()){self.trigger("blur")}var list=tp.list;if(self.prop("readonly")){return}if(!list||list.length===0||typeof settings.durationTime==="function"){_render(self);list=tp.list}if(Timepicker.isVisible(list)){return}if(self.is("input")){tp.selectedValue=self.val()}tp._setSelected();Timepicker.hideAll();if(typeof settings.listWidth=="number"){list.width(self.outerWidth()*settings.listWidth)}list.show();var listOffset={};if(settings.orientation.match(/r/)){listOffset.left=self.offset().left+self.outerWidth()-list.outerWidth()+parseInt(list.css("marginLeft").replace("px",""),10)}else if(settings.orientation.match(/l/)){listOffset.left=self.offset().left+parseInt(list.css("marginLeft").replace("px",""),10)}else if(settings.orientation.match(/c/)){listOffset.left=self.offset().left+(self.outerWidth()-list.outerWidth())/2+parseInt(list.css("marginLeft").replace("px",""),10)}var verticalOrientation;if(settings.orientation.match(/t/)){verticalOrientation="t"}else if(settings.orientation.match(/b/)){verticalOrientation="b"}else if(self.offset().top+self.outerHeight(true)+list.outerHeight()>$(window).height()+$(window).scrollTop()){verticalOrientation="t"}else{verticalOrientation="b"}if(verticalOrientation=="t"){list.addClass("ui-em_timepicker-positioned-top");listOffset.top=self.offset().top-list.outerHeight()+parseInt(list.css("marginTop").replace("px",""),10)}else{list.removeClass("ui-em_timepicker-positioned-top");listOffset.top=self.offset().top+self.outerHeight()+parseInt(list.css("marginTop").replace("px",""),10)}list.offset(listOffset);var selected=list.find(".ui-em_timepicker-selected");if(!selected.length){var timeInt=tp.time2int(tp._getTimeValue());if(timeInt!==null){selected=$(tp._findRow(timeInt))}else if(settings.scrollDefault){selected=$(tp._findRow(settings.scrollDefault()))}}if(!selected.length||selected.hasClass("ui-em_timepicker-disabled")){selected=list.find("li:not(.ui-em_timepicker-disabled):first")}if(selected&&selected.length){var topOffset=list.scrollTop()+selected.position().top-selected.outerHeight();list.scrollTop(topOffset)}else{list.scrollTop(0)}if(settings.stopScrollPropagation){$(document).on("wheel.ui-em_timepicker",".ui-em_timepicker-wrapper",function(e){e.preventDefault();var currentScroll=$(this).scrollTop();$(this).scrollTop(currentScroll+e.originalEvent.deltaY)})}$(document).on("mousedown.ui-em_timepicker",_closeHandler);$(window).on("resize.ui-em_timepicker",_closeHandler);if(settings.closeOnWindowScroll){$(document).on("scroll.ui-em_timepicker",_closeHandler)}self.trigger("showTimepicker");return this},hide:function hide(e){var tp=this[0].em_timepickerObj;if(tp){tp.hideMe()}Timepicker.hideAll();return this},option:function option(key,value){if(typeof key=="string"&&typeof value=="undefined"){var tp=this[0].em_timepickerObj;return tp.settings[key]}return this.each(function(){var self=$(this);var tp=self[0].em_timepickerObj;var settings=tp.settings;var list=tp.list;
2972if(_typeof(key)=="object"){settings=$.extend(settings,key)}else if(typeof key=="string"){settings[key]=value}settings=tp.parseSettings(settings);tp.settings=settings;tp._formatValue({type:"change"},"initial");if(list){list.remove();tp.list=null}if(settings.useSelect){_render(self)}})},getSecondsFromMidnight:function getSecondsFromMidnight(){var tp=this[0].em_timepickerObj;return tp.time2int(tp._getTimeValue())},getTime:function getTime(relative_date){var tp=this[0].em_timepickerObj;var time_string=tp._getTimeValue();if(!time_string){return null}var offset=tp.time2int(time_string);if(offset===null){return null}if(!relative_date){relative_date=new Date}var time=new Date(relative_date);time.setHours(offset/3600);time.setMinutes(offset%3600/60);time.setSeconds(offset%60);time.setMilliseconds(0);return time},isVisible:function isVisible(){var tp=this[0].em_timepickerObj;return!!(tp&&tp.list&&Timepicker.isVisible(tp.list))},setTime:function setTime(value){var tp=this[0].em_timepickerObj;var settings=tp.settings;if(settings.forceRoundTime){var prettyTime=tp._roundAndFormatTime(tp.time2int(value))}else{var prettyTime=tp._int2time(tp.time2int(value))}if(value&&prettyTime===null&&settings.noneOption){prettyTime=value}tp._setTimeValue(prettyTime,"initial");tp._formatValue({type:"change"},"initial");if(tp&&tp.list){tp._setSelected()}return this},remove:function remove(){var self=this;if(!self.hasClass("ui-em_timepicker-input")){return}var tp=self[0].em_timepickerObj;var settings=tp.settings;self.removeAttr("autocomplete","off");self.removeClass("ui-em_timepicker-input");self.removeData("em_timepicker-obj");self.off(".em_timepicker");if(tp.list){tp.list.remove()}if(settings.useSelect){self.show()}tp.list=null;return this}};function _render(self){var tp=self[0].em_timepickerObj;var list=tp.list;var settings=tp.settings;if(list&&list.length){list.remove();tp.list=null}if(settings.useSelect){list=$("<select></select>",{class:"ui-em_timepicker-select"});if(self.attr("name")){list.attr("name","ui-em_timepicker-"+self.attr("name"))}var wrapped_list=list}else{list=$("<ul></ul>",{class:"ui-em_timepicker-list"});var wrapped_list=$("<div></div>",{class:"ui-em_timepicker-wrapper",tabindex:-1});wrapped_list.css({display:"none",position:"absolute"}).append(list)}if(settings.noneOption){if(settings.noneOption===true){settings.noneOption=settings.useSelect?"Time...":"None"}if($.isArray(settings.noneOption)){for(var i in settings.noneOption){if(parseInt(i,10)==i){var noneElement=tp._generateNoneElement(settings.noneOption[i],settings.useSelect);list.append(noneElement)}}}else{var noneElement=tp._generateNoneElement(settings.noneOption,settings.useSelect);list.append(noneElement)}}if(settings.className){wrapped_list.addClass(settings.className)}if((settings.minTime!==null||settings.durationTime!==null)&&settings.showDuration){var stepval=typeof settings.step=="function"?"function":settings.step;wrapped_list.addClass("ui-em_timepicker-with-duration");wrapped_list.addClass("ui-em_timepicker-step-"+settings.step)}var durStart=settings.minTime;if(typeof settings.durationTime==="function"){durStart=tp.time2int(settings.durationTime())}else if(settings.durationTime!==null){durStart=settings.durationTime}var start=settings.minTime!==null?settings.minTime:0;var end=settings.maxTime!==null?settings.maxTime:start+ONE_DAY-1;if(end<start){end+=ONE_DAY}if(end===ONE_DAY-1&&$.type(settings.timeFormat)==="string"&&settings.show2400){end=ONE_DAY}var dr=settings.disableTimeRanges;var drCur=0;var drLen=dr.length;var stepFunc=settings.step;if(typeof stepFunc!="function"){stepFunc=function stepFunc(){return settings.step}}for(var i=start,j=0;i<=end;j++,i+=stepFunc(j)*60){var timeInt=i;var timeString=tp._int2time(timeInt);if(settings.useSelect){var row=$("<option></option>",{value:timeString});row.text(timeString)}else{var row=$("<li></li>");row.addClass(timeInt%ONE_DAY<ONE_DAY/2?"ui-em_timepicker-am":"ui-em_timepicker-pm");row.attr("data-time",roundingFunction(timeInt,settings));row.text(timeString)}if((settings.minTime!==null||settings.durationTime!==null)&&settings.showDuration){var durationString=tp._int2duration(i-durStart,settings.step);if(settings.useSelect){row.text(row.text()+" ("+durationString+")")}else{var duration=$("<span></span>",{class:"ui-em_timepicker-duration"});duration.text(" ("+durationString+")");row.append(duration)}}if(drCur<drLen){if(timeInt>=dr[drCur][1]){drCur+=1}if(dr[drCur]&&timeInt>=dr[drCur][0]&&timeInt<dr[drCur][1]){if(settings.useSelect){row.prop("disabled",true)}else{row.addClass("ui-em_timepicker-disabled")}}}list.append(row)}wrapped_list.data("em_timepicker-input",self);tp.list=wrapped_list;if(settings.useSelect){if(self.val()){list.val(tp._roundAndFormatTime(tp.time2int(self.val())))}list.on("focus",function(){$(this).data("em_timepicker-input").trigger("showTimepicker")});list.on("blur",function(){$(this).data("em_timepicker-input").trigger("hideTimepicker")});list.on("change",function(){tp._setTimeValue($(this).val(),"select")});tp._setTimeValue(list.val(),"initial");self.hide().after(list)}else{var appendTo=settings.appendTo;if(typeof appendTo==="string"){appendTo=$(appendTo)}else if(typeof appendTo==="function"){appendTo=appendTo(self)}appendTo.append(wrapped_list);tp._setSelected();list.on("mousedown click","li",function(e){self.off("focus.em_timepicker");self.on("focus.em_timepicker-ie-hack",function(){self.off("focus.em_timepicker-ie-hack");self.on("focus.em_timepicker",methods.show)});if(!tp._hideKeyboard()){self[0].focus()}list.find("li").removeClass("ui-em_timepicker-selected");$(this).addClass("ui-em_timepicker-selected");if(tp._selectValue()){self.trigger("hideTimepicker");list.on("mouseup.em_timepicker click.em_timepicker","li",function(e){list.off("mouseup.em_timepicker click.em_timepicker");wrapped_list.hide()})}})}}function _closeHandler(e){if(e.target==window){return}var target=$(e.target);if(target.closest(".ui-em_timepicker-input").length||target.closest(".ui-em_timepicker-wrapper").length){return}Timepicker.hideAll();$(document).off(".ui-em_timepicker");$(window).off(".ui-em_timepicker")}function _keydownhandler(e){var self=$(this);var tp=self[0].em_timepickerObj;var list=tp.list;if(!list||!Timepicker.isVisible(list)){if(e.keyCode==40){methods.show.call(self.get(0));list=tp.list;if(!tp._hideKeyboard()){self.trigger("focus")}}else{return true}}switch(e.keyCode){case 13:if(tp._selectValue()){tp._formatValue({type:"change"});tp.hideMe()}e.preventDefault();return false;case 38:var selected=list.find(".ui-em_timepicker-selected");if(!selected.length){list.find("li").each(function(i,obj){if($(obj).position().top>0){selected=$(obj);return false}});selected.addClass("ui-em_timepicker-selected")}else if(!selected.is(":first-child")){selected.removeClass("ui-em_timepicker-selected");selected.prev().addClass("ui-em_timepicker-selected");if(selected.prev().position().top<selected.outerHeight()){list.scrollTop(list.scrollTop()-selected.outerHeight())}}return false;case 40:selected=list.find(".ui-em_timepicker-selected");if(selected.length===0){list.find("li").each(function(i,obj){if($(obj).position().top>0){selected=$(obj);return false}});selected.addClass("ui-em_timepicker-selected")}else if(!selected.is(":last-child")){selected.removeClass("ui-em_timepicker-selected");selected.next().addClass("ui-em_timepicker-selected");if(selected.next().position().top+2*selected.outerHeight()>list.outerHeight()){list.scrollTop(list.scrollTop()+selected.outerHeight())}}return false;case 27:list.find("li").removeClass("ui-em_timepicker-selected");tp.hideMe();break;case 9:tp.hideMe();break;default:return true}}$.fn.em_timepicker=function(method){if(!this.length)return this;if(methods[method]){if(!this.hasClass("ui-em_timepicker-input")){return this}return methods[method].apply(this,Array.prototype.slice.call(arguments,1
2972))}else if(_typeof(method)==="object"||!method){return methods.init.apply(this,arguments)}else{$.error("Method "+method+" does not exist on jQuery.em_timepicker")}};$.fn.em_timepicker.defaults=DEFAULT_SETTINGS})})();
2973
2974/* flatpickr v4.6.13,, @license MIT */�
vendor: 50,641 bytes, lines 2974-2975
2974
2975!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).flatpickr=n()}(this,(function(){"use strict";var e=function(){return(e=Object.assign||function(e){for(var n,t=1,a=arguments.length;t<a;t++)for(var i in n=arguments[t])Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i]);return e}).apply(this,arguments)};function n(){for(var e=0,n=0,t=arguments.length;n<t;n++)e+=arguments[n].length;var a=Array(e),i=0;for(n=0;n<t;n++)for(var o=arguments[n],r=0,l=o.length;r<l;r++,i++)a[i]=o[r];return a}var t=["onChange","onClose","onDayCreate","onDestroy","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition"],a={_disable:[],allowInput:!1,allowInvalidPreload:!1,altFormat:"F j, Y",altInput:!1,altInputClass:"form-control input",animate:"object"==typeof window&&-1===window.navigator.userAgent.indexOf("MSIE"),ariaDateFormat:"F j, Y",autoFillDefaultTime:!0,clickOpens:!0,closeOnSelect:!0,conjunction:", ",dateFormat:"Y-m-d",defaultHour:12,defaultMinute:0,defaultSeconds:0,disable:[],disableMobile:!1,enableSeconds:!1,enableTime:!1,errorHandler:function(e){return"undefined"!=typeof console&&console.warn(e)},getWeek:function(e){var n=new Date(e.getTime());n.setHours(0,0,0,0),n.setDate(n.getDate()+3-(n.getDay()+6)%7);var t=new Date(n.getFullYear(),0,4);return 1+Math.round(((n.getTime()-t.getTime())/864e5-3+(t.getDay()+6)%7)/7)},hourIncrement:1,ignoredFocusElements:[],inline:!1,locale:"default",minuteIncrement:5,mode:"single",monthSelectorType:"dropdown",nextArrow:"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},i={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var n=e%100;if(n>3&&n<21)return"th";switch(n%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"],yearAriaLabel:"Year",monthAriaLabel:"Month",hourAriaLabel:"Hour",minuteAriaLabel:"Minute",time_24hr:!1},o=function(e,n){return void 0===n&&(n=2),("000"+e).slice(-1*n)},r=function(e){return!0===e?1:0};function l(e,n){var t;return function(){var a=this,i=arguments;clearTimeout(t),t=setTimeout((function(){return e.apply(a,i)}),n)}}var c=function(e){return e instanceof Array?e:[e]};function s(e,n,t){if(!0===t)return e.classList.add(n);e.classList.remove(n)}function d(e,n,t){var a=window.document.createElement(e);return n=n||"",t=t||"",a.className=n,void 0!==t&&(a.textContent=t),a}function u(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function f(e,n){return n(e)?e:e.parentNode?f(e.parentNode,n):void 0}function m(e,n){var t=d("div","numInputWrapper"),a=d("input","numInput "+e),i=d("span","arrowUp"),o=d("span","arrowDown");if(-1===navigator.userAgent.indexOf("MSIE 9.0")?a.type="number":(a.type="text",a.pattern="\\d*"),void 0!==n)for(var r in n)a.setAttribute(r,n[r]);return t.appendChild(a),t.appendChild(i),t.appendChild(o),t}function g(e){try{return"function"==typeof e.composedPath?e.composedPath()[0]:e.target}catch(n){return e.target}}var p=function(){},h=function(e,n,t){return t.months[n?"shorthand":"longhand"][e]},v={D:p,F:function(e,n,t){e.setMonth(t.months.longhand.indexOf(n))},G:function(e,n){e.setHours((e.getHours()>=12?12:0)+parseFloat(n))},H:function(e,n){e.setHours(parseFloat(n))},J:function(e,n){e.setDate(parseFloat(n))},K:function(e,n,t){e.setHours(e.getHours()%12+12*r(new RegExp(t.amPM[1],"i").test(n)))},M:function(e,n,t){e.setMonth(t.months.shorthand.indexOf(n))},S:function(e,n){e.setSeconds(parseFloat(n))},U:function(e,n){return new Date(1e3*parseFloat(n))},W:function(e,n,t){var a=parseInt(n),i=new Date(e.getFullYear(),0,2+7*(a-1),0,0,0,0);return i.setDate(i.getDate()-i.getDay()+t.firstDayOfWeek),i},Y:function(e,n){e.setFullYear(parseFloat(n))},Z:function(e,n){return new Date(n)},d:function(e,n){e.setDate(parseFloat(n))},h:function(e,n){e.setHours((e.getHours()>=12?12:0)+parseFloat(n))},i:function(e,n){e.setMinutes(parseFloat(n))},j:function(e,n){e.setDate(parseFloat(n))},l:p,m:function(e,n){e.setMonth(parseFloat(n)-1)},n:function(e,n){e.setMonth(parseFloat(n)-1)},s:function(e,n){e.setSeconds(parseFloat(n))},u:function(e,n){return new Date(parseFloat(n))},w:p,y:function(e,n){e.setFullYear(2e3+parseFloat(n))}},D={D:"",F:"",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",u:"(.+)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},w={Z:function(e){return e.toISOString()},D:function(e,n,t){return n.weekdays.shorthand[w.w(e,n,t)]},F:function(e,n,t){return h(w.n(e,n,t)-1,!1,n)},G:function(e,n,t){return o(w.h(e,n,t))},H:function(e){return o(e.getHours())},J:function(e,n){return void 0!==n.ordinal?e.getDate()+n.ordinal(e.getDate()):e.getDate()},K:function(e,n){return n.amPM[r(e.getHours()>11)]},M:function(e,n){return h(e.getMonth(),!0,n)},S:function(e){return o(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,n,t){return t.getWeek(e)},Y:function(e){return o(e.getFullYear(),4)},d:function(e){return o(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return o(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,n){return n.weekdays.longhand[e.getDay()]},m:function(e){return o(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},u:function(e){return e.getTime()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}},b=function(e){var n=e.config,t=void 0===n?a:n,o=e.l10n,r=void 0===o?i:o,l=e.isMobile,c=void 0!==l&&l;return function(e,n,a){var i=a||r;return void 0===t.formatDate||c?n.split("").map((function(n,a,o){return w[n]&&"\\"!==o[a-1]?w[n](e,i,t):"\\"!==n?n:""})).join(""):t.formatDate(e,n,i)}},C=function(e){var n=e.config,t=void 0===n?a:n,o=e.l10n,r=void 0===o?i:o;return function(e,n,i,o){if(0===e||e){var l,c=o||r,s=e;if(e instanceof Date)l=new Date(e.getTime());else if("string"!=typeof e&&void 0!==e.toFixed)l=new Date(e);else if("string"==typeof e){var d=n||(t||a).dateFormat,u=String(e).trim();if("today"===u)l=new Date,i=!0;else if(t&&t.parseDate)l=t.parseDate(e,d);else if(/Z$/.test(u)||/GMT$/.test(u))l=new Date(e);else{for(var f=void 0,m=[],g=0,p=0,h="";g<d.length;g++){var w=d[g],b="\\"===w,C="\\"===d[g-1]||b;if(D[w]&&!C){h+=D[w];var M=new RegExp(h).exec(e);M&&(f=!0)&&m["Y"!==w?"push":"unshift"]({fn:v[w],val:M[++p]})}else b||(h+=".")}l=t&&t.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0),m.forEach((function(e){var n=e.fn,t=e.val;return l=n(l,t,c)||l})),l=f?l:void 0}}if(l instanceof Date&&!isNaN(l.getTime()))return!0===i&&l.setHours(0,0,0,0),l;t.errorHandler(new Error("Invalid date provided: "+s))}}};function M(e,n,t){return void 0===t&&(t=!0),!1!==t?new Date(e.getTime()).setHours(0,0,0,0)-new Date(n.getTime()).setHours(0,0,0,0):e.getTime()-n.getTime()}var y=function(e,n,t){return 3600*e+60*n+t},x=864e5;function E(e){var n=e.defaultHour,t=e.defaultMinute,a=e.defaultSeconds;if(void 0!==e.minDate){var i=e.minDate.getHours(),o=e.minDate.getMinutes(),r=e.minDate.getSeconds();n<i&&(n=i),n===i&&t<o&&(t=o),n===i&&t===o&&a<r&&(a=e.minDate.getSeconds())}if(void 0!==e.maxDate){var l=e.maxDate.getHours(),c=e.maxDate.getMinutes();(n=Math.min(n,l))===l&&(t=Math.min(c,t)),n===l&&t===c&&(a=e.maxDate.getSeconds())}return{hours:n,minutes:t,seconds:a}}"function"!=typeof Object.assign&&(Object.assign=function(e){for(var n=[],t=1;t<arguments.length;t++)n[t-1]=arguments[t];if(!e)throw TypeError("Cannot convert undefined or null to object");for(var a=function(n){n&&Object.keys(n).forEach((function(t){return e[t]=n[t]}))},i=0,o=n;i<o.length;i++){var r=o[i];a(r)}return e});function k(p,v){var w={config:e(e({},a),I.defaultConfig),l10n:i};function k(){var e;return(null===(e=w.calendarContainer)||void 0===e?void 0:e.getRootNode()).activeElement||document.activeElement}function T(e){return e.bind(w)}function S(){var e=w.config;!1===e.weekNumbers&&1===e.showMonths||!0!==e.noCalendar&&window.requestAnimationFrame((function(){if(void 0!==w.calendarContainer&&(w.calendarContainer.style.visibility="hidden",w.calendarContainer.style.display="block"),void 0!==w.daysContainer){var n=(w.days.offsetWidth+1)*e.showMonths;w.daysContainer.style.width=n+"px",w.calendarContainer.style.width=n+(void 0!==w.weekWrapper?w.weekWrapper.offsetWidth:0)+"px",w.calendarContainer.style.removeProperty("visibility"),w.calendarContainer.style.removeProperty("display")}}))}function _(e){if(0===w.selectedDates.length){var n=void 0===w.config.minDate||M(new Date,w.config.minDate)>=0?new Date:new Date(w.config.minDate.getTime()),t=E(w.config);n.setHours(t.hours,t.minutes,t.seconds,n.getMilliseconds()),w.selectedDates=[n],w.latestSelectedDateObj=n}void 0!==e&&"blur"!==e.type&&function(e){e.preventDefault();var n="keydown"===e.type,t=g(e),a=t;void 0!==w.amPM&&t===w.amPM&&(w.amPM.textContent=w.l10n.amPM[r(w.amPM.textContent===w.l10n.amPM[0])]);var i=parseFloat(a.getAttribute("min")),l=parseFloat(a.getAttribute("max")),c=parseFloat(a.getAttribute("step")),s=parseInt(a.value,10),d=e.delta||(n?38===e.which?1:-1:0),u=s+c*d;if(void 0!==a.value&&2===a.value.length){var f=a===w.hourElement,m=a===w.minuteElement;u<i?(u=l+u+r(!f)+(r(f)&&r(!w.amPM)),m&&L(void 0,-1,w.hourElement)):u>l&&(u=a===w.hourElement?u-l-r(!w.amPM):i,m&&L(void 0,1,w.hourElement)),w.amPM&&f&&(1===c?u+s===23:Math.abs(u-s)>c)&&(w.amPM.textContent=w.l10n.amPM[r(w.amPM.textContent===w.l10n.amPM[0])]),a.value=o(u)}}(e);var a=w._input.value;O(),ye(),w._input.value!==a&&w._debouncedChange()}function O(){if(void 0!==w.hourElement&&void 0!==w.minuteElement){var e,n,t=(parseInt(w.hourElement.value.slice(-2),10)||0)%24,a=(parseInt(w.minuteElement.value,10)||0)%60,i=void 0!==w.secondElement?(parseInt(w.secondElement.value,10)||0)%60:0;void 0!==w.amPM&&(e=t,n=w.amPM.textContent,t=e%12+12*r(n===w.l10n.amPM[1]));var o=void 0!==w.config.minTime||w.config.minDate&&w.minDateHasTime&&w.latestSelectedDateObj&&0===M(w.latestSelectedDateObj,w.config.minDate,!0),l=void 0!==w.config.maxTime||w.config.maxDate&&w.maxDateHasTime&&w.latestSelectedDateObj&&0===M(w.latestSelectedDateObj,w.config.maxDate,!0);if(void 0!==w.config.maxTime&&void 0!==w.config.minTime&&w.config.minTime>w.config.maxTime){var c=y(w.config.minTime.getHours(),w.config.minTime.getMinutes(),w.config.minTime.getSeconds()),s=y(w.config.maxTime.getHours(),w.config.maxTime.getMinutes(),w.config.maxTime.getSeconds()),d=y(t,a,i);if(d>s&&d<c){var u=function(e){var n=Math.floor(e/3600),t=(e-3600*n)/60;return[n,t,e-3600*n-60*t]}(c);t=u[0],a=u[1],i=u[2]}}else{if(l){var f=void 0!==w.config.maxTime?w.config.maxTime:w.config.maxDate;(t=Math.min(t,f.getHours()))===f.getHours()&&(a=Math.min(a,f.getMinutes())),a===f.getMinutes()&&(i=Math.min(i,f.getSeconds()))}if(o){var m=void 0!==w.config.minTime?w.config.minTime:w.config.minDate;(t=Math.max(t,m.getHours()))===m.getHours()&&a<m.getMinutes()&&(a=m.getMinutes()),a===m.getMinutes()&&(i=Math.max(i,m.getSeconds()))}}A(t,a,i)}}function F(e){var n=e||w.latestSelectedDateObj;n&&n instanceof Date&&A(n.getHours(),n.getMinutes(),n.getSeconds())}function A(e,n,t){void 0!==w.latestSelectedDateObj&&w.latestSelectedDateObj.setHours(e%24,n,t||0,0),w.hourElement&&w.minuteElement&&!w.isMobile&&(w.hourElement.value=o(w.config.time_24hr?e:(12+e)%12+12*r(e%12==0)),w.minuteElement.value=o(n),void 0!==w.amPM&&(w.amPM.textContent=w.l10n.amPM[r(e>=12)]),void 0!==w.secondElement&&(w.secondElement.value=o(t)))}function N(e){var n=g(e),t=parseInt(n.value)+(e.delta||0);(t/1e3>1||"Enter"===e.key&&!/[^\d]/.test(t.toString()))&&ee(t)}function P(e,n,t,a){return n instanceof Array?n.forEach((function(n){return P(e,n,t,a)})):e instanceof Array?e.forEach((function(e){return P(e,n,t,a)})):(e.addEventListener(n,t,a),void w._handlers.push({remove:function(){return e.removeEventListener(n,t,a)}}))}function Y(){De("onChange")}function j(e,n){var t=void 0!==e?w.parseDate(e):w.latestSelectedDateObj||(w.config.minDate&&w.config.minDate>w.now?w.config.minDate:w.config.maxDate&&w.config.maxDate<w.now?w.config.maxDate:w.now),a=w.currentYear,i=w.currentMonth;try{void 0!==t&&(w.currentYear=t.getFullYear(),w.currentMonth=t.getMonth())}catch(e){e.message="Invalid date supplied: "+t,w.config.errorHandler(e)}n&&w.currentYear!==a&&(De("onYearChange"),q()),!n||w.currentYear===a&&w.currentMonth===i||De("onMonthChange"),w.redraw()}function H(e){var n=g(e);~n.className.indexOf("arrow")&&L(e,n.classList.contains("arrowUp")?1:-1)}function L(e,n,t){var a=e&&g(e),i=t||a&&a.parentNode&&a.parentNode.firstChild,o=we("increment");o.delta=n,i&&i.dispatchEvent(o)}function R(e,n,t,a){var i=ne(n,!0),o=d("span",e,n.getDate().toString());return o.dateObj=n,o.$i=a,o.setAttribute("aria-label",w.formatDate(n,w.config.ariaDateFormat)),-1===e.indexOf("hidden")&&0===M(n,w.now)&&(w.todayDateElem=o,o.classList.add("today"),o.setAttribute("aria-current","date")),i?(o.tabIndex=-1,be(n)&&(o.classList.add("selected"),w.selectedDateElem=o,"range"===w.config.mode&&(s(o,"startRange",w.selectedDates[0]&&0===M(n,w.selectedDates[0],!0)),s(o,"endRange",w.selectedDates[1]&&0===M(n,w.selectedDates[1],!0)),"nextMonthDay"===e&&o.classList.add("inRange")))):o.classList.add("flatpickr-disabled"),"range"===w.config.mode&&function(e){return!("range"!==w.config.mode||w.selectedDates.length<2)&&(M(e,w.selectedDates[0])>=0&&M(e,w.selectedDates[1])<=0)}(n)&&!be(n)&&o.classList.add("inRange"),w.weekNumbers&&1===w.config.showMonths&&"prevMonthDay"!==e&&a%7==6&&w.weekNumbers.insertAdjacentHTML("beforeend","<span class='flatpickr-day'>"+w.config.getWeek(n)+"</span>"),De("onDayCreate",o),o}function W(e){e.focus(),"range"===w.config.mode&&oe(e)}function B(e){for(var n=e>0?0:w.config.showMonths-1,t=e>0?w.config.showMonths:-1,a=n;a!=t;a+=e)for(var i=w.daysContainer.children[a],o=e>0?0:i.children.length-1,r=e>0?i.children.length:-1,l=o;l!=r;l+=e){var c=i.children[l];if(-1===c.className.indexOf("hidden")&&ne(c.dateObj))return c}}function J(e,n){var t=k(),a=te(t||document.body),i=void 0!==e?e:a?t:void 0!==w.selectedDateElem&&te(w.selectedDateElem)?w.selectedDateElem:void 0!==w.todayDateElem&&te(w.todayDateElem)?w.todayDateElem:B(n>0?1:-1);void 0===i?w._input.focus():a?function(e,n){for(var t=-1===e.className.indexOf("Month")?e.dateObj.getMonth():w.currentMonth,a=n>0?w.config.showMonths:-1,i=n>0?1:-1,o=t-w.currentMonth;o!=a;o+=i)for(var r=w.daysContainer.children[o],l=t-w.currentMonth===o?e.$i+n:n<0?r.children.length-1:0,c=r.children.length,s=l;s>=0&&s<c&&s!=(n>0?c:-1);s+=i){var d=r.children[s];if(-1===d.className.indexOf("hidden")&&ne(d.dateObj)&&Math.abs(e.$i-s)>=Math.abs(n))return W(d)}w.changeMonth(i),J(B(i),0)}(i,n):W(i)}function K(e,n){for(var t=(new Date(e,n,1).getDay()-w.l10n.firstDayOfWeek+7)%7,a=w.utils.getDaysInMonth((n-1+12)%12,e),i=w.utils.getDaysInMonth(n,e),o=window.document.createDocumentFragment(),r=w.config.showMonths>1,l=r?"prevMonthDay hidden":"prevMonthDay",c=r?"nextMonthDay hidden":"nextMonthDay",s=a+1-t,u=0;s<=a;s++,u++)o.appendChild(R("flatpickr-day "+l,new Date(e,n-1,s),0,u));for(s=1;s<=i;s++,u++)o.appendChild(R("flatpickr-day",new Date(e,n,s),0,u));for(var f=i+1;f<=42-t&&(1===w.config.showMonths||u%7!=0);f++,u++)o.appendChild(R("flatpickr-day "+c,new Date(e,n+1,f%i),0,u));var m=d("div","dayContainer");return m.appendChild(o),m}function U(){if(void 0!==w.daysContainer){u(w.daysContainer),w.weekNumbers&&u(w.weekNumbers);for(var e=document.createDocumentFragment(),n=0;n<w.config.showMonths;n++){var t=new Date(w.currentYear,w.currentMonth,1);t.setMonth(w.currentMonth+n),e.appendChild(K(t.getFullYear(),t.getMonth()))}w.daysContainer.appendChild(e),w.days=w.daysContainer.firstChild,"range"===w.config.mode&&1===w.selectedDates.length&&oe()}}function q(){if(!(w.config.showMonths>1||"dropdown"!==w.config.monthSelectorType)){var e=function(e){return!(void 0!==w.config.minDate&&w.currentYear===w.config.minDate.getFullYear()&&e<w.config.minDate.getMonth())&&!(void 0!==w.config.maxDate&&w.currentYear===w.config.maxDate.getFullYear()&&e>w.config.maxDate.getMonth())};w.monthsDropdownContainer.tabIndex=-1,w.monthsDropdownContainer.innerHTML="";for(var n=0;n<12;n++)if(e(n)){var t=d("option","flatpickr-monthDropdown-month");t.value=new Date(w.currentYear,n).getMonth().toString(),t.textContent=h(n,w.config.shorthandCurrentMonth,w.l10n),t.tabIndex=-1,w.currentMonth===n&&(t.selected=!0),w.monthsDropdownContainer.appendChild(t)}}}function $(){var e,n=d("div","flatpickr-month"),t=window.document.createDocumentFragment();w.config.showMonths>1||"static"===w.config.monthSelectorType?e=d("span","cur-month"):(w.monthsDropdownContainer=d("select","flatpickr-monthDropdown-months"),w.monthsDropdownContainer.setAttribute("aria-label",w.l10n.monthAriaLabel),P(w.monthsDropdownContainer,"change",(function(e){var n=g(e),t=parseInt(n.value,10);w.changeMonth(t-w.currentMonth),De("onMonthChange")})),q(),e=w.monthsDropdownContainer);var a=m("cur-year",{tabindex:"-1"}),i=a.getElementsByTagName("input")[0];i.setAttribute("aria-label",w.l10n.yearAriaLabel),w.config.minDate&&i.setAttribute("min",w.config.minDate.getFullYear().toString()),w.config.maxDate&&(i.setAttribute("max",w.config.maxDate.getFullYear().toString()),i.disabled=!!w.config.minDate&&w.config.minDate.getFullYear()===w.config.maxDate.getFullYear());var o=d("div","flatpickr-current-month");return o.appendChild(e),o.appendChild(a),t.appendChild(o),n.appendChild(t),{container:n,yearElement:i,monthElement:e}}function V(){u(w.monthNav),w.monthNav.appendChild(w.prevMonthNav),w.config.showMonths&&(w.yearElements=[],w.monthElements=[]);for(var e=w.config.showMonths;e--;){var n=$();w.yearElements.push(n.yearElement),w.monthElements.push(n.monthElement),w.monthNav.appendChild(n.container)}w.monthNav.appendChild(w.nextMonthNav)}function z(){w.weekdayContainer?u(w.weekdayContainer):w.weekdayContainer=d("div","flatpickr-weekdays");for(var e=w.config.showMonths;e--;){var n=d("div","flatpickr-weekdaycontainer");w.weekdayContainer.appendChild(n)}return G(),w.weekdayContainer}function G(){if(w.weekdayContainer){var e=w.l10n.firstDayOfWeek,t=n(w.l10n.weekdays.shorthand);e>0&&e<t.length&&(t=n(t.splice(e,t.length),t.splice(0,e)));for(var a=w.config.showMonths;a--;)w.weekdayContainer.children[a].innerHTML="\n      <span class='flatpickr-weekday'>\n        "+t.join("</span><span class='flatpickr-weekday'>")+"\n      </span>\n      "}}function Z(e,n){void 0===n&&(n=!0);var t=n?e:e-w.currentMonth;t<0&&!0===w._hidePrevMonthArrow||t>0&&!0===w._hideNextMonthArrow||(w.currentMonth+=t,(w.currentMonth<0||w.currentMonth>11)&&(w.currentYear+=w.currentMonth>11?1:-1,w.currentMonth=(w.currentMonth+12)%12,De("onYearChange"),q()),U(),De("onMonthChange"),Ce())}function Q(e){return w.calendarContainer.contains(e)}function X(e){if(w.isOpen&&!w.config.inline){var n=g(e),t=Q(n),a=!(n===w.input||n===w.altInput||w.element.contains(n)||e.path&&e.path.indexOf&&(~e.path.indexOf(w.input)||~e.path.indexOf(w.altInput)))&&!t&&!Q(e.relatedTarget),i=!w.config.ignoredFocusElements.some((function(e){return e.contains(n)}));a&&i&&(w.config.allowInput&&w.setDate(w._input.value,!1,w.config.altInput?w.config.altFormat:w.config.dateFormat),void 0!==w.timeContainer&&void 0!==w.minuteElement&&void 0!==w.hourElement&&""!==w.input.value&&void 0!==w.input.value&&_(),w.close(),w.config&&"range"===w.config.mode&&1===w.selectedDates.length&&w.clear(!1))}}function ee(e){if(!(!e||w.config.minDate&&e<w.config.minDate.getFullYear()||w.config.maxDate&&e>w.config.maxDate.getFullYear())){var n=e,t=w.currentYear!==n;w.currentYear=n||w.currentYear,w.config.maxDate&&w.currentYear===w.config.maxDate.getFullYear()?w.currentMonth=Math.min(w.config.maxDate.getMonth(),w.currentMonth):w.config.minDate&&w.currentYear===w.config.minDate.getFullYear()&&(w.currentMonth=Math.max(w.config.minDate.getMonth(),w.currentMonth)),t&&(w.redraw(),De("onYearChange"),q())}}function ne(e,n){var t;void 0===n&&(n=!0);var a=w.parseDate(e,void 0,n);if(w.config.minDate&&a&&M(a,w.config.minDate,void 0!==n?n:!w.minDateHasTime)<0||w.config.maxDate&&a&&M(a,w.config.maxDate,void 0!==n?n:!w.maxDateHasTime)>0)return!1;if(!w.config.enable&&0===w.config.disable.length)return!0;if(void 0===a)return!1;for(var i=!!w.config.enable,o=null!==(t=w.config.enable)&&void 0!==t?t:w.config.disable,r=0,l=void 0;r<o.length;r++){if("function"==typeof(l=o[r])&&l(a))return i;if(l instanceof Date&&void 0!==a&&l.getTime()===a.getTime())return i;if("string"==typeof l){var c=w.parseDate(l,void 0,!0);return c&&c.getTime()===a.getTime()?i:!i}if("object"==typeof l&&void 0!==a&&l.from&&l.to&&a.getTime()>=l.from.getTime()&&a.getTime()<=l.to.getTime())return i}return!i}function te(e){return void 0!==w.daysContainer&&(-1===e.className.indexOf("hidden")&&-1===e.className.indexOf("flatpickr-disabled")&&w.daysContainer.contains(e))}function ae(e){var n=e.target===w._input,t=w._input.value.trimEnd()!==Me();!n||!t||e.relatedTarget&&Q(e.relatedTarget)||w.setDate(w._input.value,!0,e.target===w.altInput?w.config.altFormat:w.config.dateFormat)}function ie(e){var n=g(e),t=w.config.wrap?p.contains(n):n===w._input,a=w.config.allowInput,i=w.isOpen&&(!a||!t),o=w.config.inline&&t&&!a;if(13===e.keyCode&&t){if(a)return w.setDate(w._input.value,!0,n===w.altInput?w.config.altFormat:w.config.dateFormat),w.close(),n.blur();w.open()}else if(Q(n)||i||o){var r=!!w.timeContainer&&w.timeContainer.contains(n);switch(e.keyCode){case 13:r?(e.preventDefault(),_(),fe()):me(e);break;case 27:e.preventDefault(),fe();break;case 8:case 46:t&&!w.config.allowInput&&(e.preventDefault(),w.clear());break;case 37:case 39:if(r||t)w.hourElement&&w.hourElement.focus();else{e.preventDefault();var l=k();if(void 0!==w.daysContainer&&(!1===a||l&&te(l))){var c=39===e.keyCode?1:-1;e.ctrlKey?(e.stopPropagation(),Z(c),J(B(1),0)):J(void 0,c)}}break;case 38:case 40:e.preventDefault();var s=40===e.keyCode?1:-1;w.daysContainer&&void 0!==n.$i||n===w.input||n===w.altInput?e.ctrlKey?(e.stopPropagation(),ee(w.currentYear-s),J(B(1),0)):r||J(void 0,7*s):n===w.currentYearElement?ee(w.currentYear-s):w.config.enableTime&&(!r&&w.hourElement&&w.hourElement.focus(),_(e),w._debouncedChange());break;case 9:if(r){var d=[w.hourElement,w.minuteElement,w.secondElement,w.amPM].concat(w.pluginElements).filter((function(e){return e})),u=d.indexOf(n);if(-1!==u){var f=d[u+(e.shiftKey?-1:1)];e.preventDefault(),(f||w._input).focus()}}else!w.config.noCalendar&&w.daysContainer&&w.daysContainer.contains(n)&&e.shiftKey&&(e.preventDefault(),w._input.focus())}}if(void 0!==w.amPM&&n===w.amPM)switch(e.key){case w.l10n.amPM[0].charAt(0):case w.l10n.amPM[0].charAt(0).toLowerCase():w.amPM.textContent=w.l10n.amPM[0],O(),ye();break;case w.l10n.amPM[1].charAt(0):case w.l10n.amPM[1].charAt(0).toLowerCase():w.amPM.textContent=w.l10n.amPM[1],O(),ye()}(t||Q(n))&&De("onKeyDown",e)}function oe(e,n){if(void 0===n&&(n="flatpickr-day"),1===w.selectedDates.length&&(!e||e.classList.contains(n)&&!e.classList.contains("flatpickr-disabled"))){for(var t=e?e.dateObj.getTime():w.days.firstElementChild.dateObj.getTime(),a=w.parseDate(w.selectedDates[0],void 0,!0).getTime(),i=Math.min(t,w.selectedDates[0].getTime()),o=Math.max(t,w.selectedDates[0].getTime()),r=!1,l=0,c=0,s=i;s<o;s+=x)ne(new Date(s),!0)||(r=r||s>i&&s<o,s<a&&(!l||s>l)?l=s:s>a&&(!c||s<c)&&(c=s));Array.from(w.rContainer.querySelectorAll("*:nth-child(-n+"+w.config.showMonths+") > ."+n)).forEach((function(n){var i,o,s,d=n.dateObj.getTime(),u=l>0&&d<l||c>0&&d>c;if(u)return n.classList.add("notAllowed"),void["inRange","startRange","endRange"].forEach((function(e){n.classList.remove(e)}));r&&!u||(["startRange","inRange","endRange","notAllowed"].forEach((function(e){n.classList.remove(e)})),void 0!==e&&(e.classList.add(t<=w.selectedDates[0].getTime()?"startRange":"endRange"),a<t&&d===a?n.classList.add("startRange"):a>t&&d===a&&n.classList.add("endRange"),d>=l&&(0===c||d<=c)&&(o=a,s=t,(i=d)>Math.min(o,s)&&i<Math.max(o,s))&&n.classList.add("inRange")))}))}}function re(){!w.isOpen||w.config.static||w.config.inline||de()}function le(e){return function(n){var t=w.config["_"+e+"Date"]=w.parseDate(n,w.config.dateFormat),a=w.config["_"+("min"===e?"max":"min")+"Date"];void 0!==t&&(w["min"===e?"minDateHasTime":"maxDateHasTime"]=t.getHours()>0||t.getMinutes()>0||t.getSeconds()>0),w.selectedDates&&(w.selectedDates=w.selectedDates.filter((function(e){return ne(e)})),w.selectedDates.length||"min"!==e||F(t),ye()),w.daysContainer&&(ue(),void 0!==t?w.currentYearElement[e]=t.getFullYear().toString():w.currentYearElement.removeAttribute(e),w.currentYearElement.disabled=!!a&&void 0!==t&&a.getFullYear()===t.getFullYear())}}function ce(){return w.config.wrap?p.querySelector("[data-input]"):p}function se(){"object"!=typeof w.config.locale&&void 0===I.l10ns[w.config.locale]&&w.config.errorHandler(new Error("flatpickr: invalid locale "+w.config.locale)),w.l10n=e(e({},I.l10ns.default),"object"==typeof w.config.locale?w.config.locale:"default"!==w.config.locale?I.l10ns[w.config.locale]:void 0),D.D="("+w.l10n.weekdays.shorthand.join("|")+")",D.l="("+w.l10n.weekdays.longhand.join("|")+")",D.M="("+w.l10n.months.shorthand.join("|")+")",D.F="("+w.l10n.months.longhand.join("|")+")",D.K="("+w.l10n.amPM[0]+"|"+w.l10n.amPM[1]+"|"+w.l10n.amPM[0].toLowerCase()+"|"+w.l10n.amPM[1].toLowerCase()+")",void 0===e(e({},v),JSON.parse(JSON.stringify(p.dataset||{}))).time_24hr&&void 0===I.defaultConfig.time_24hr&&(w.config.time_24hr=w.l10n.time_24hr),w.formatDate=b(w),w.parseDate=C({config:w.config,l10n:w.l10n})}function de(e){if("function"!=typeof w.config.position){if(void 0!==w.calendarContainer){De("onPreCalendarPosition");var n=e||w._positionElement,t=Array.prototype.reduce.call(w.calendarContainer.children,(function(e,n){return e+n.offsetHeight}),0),a=w.calendarContainer.offsetWidth,i=w.config.position.split(" "),o=i[0],r=i.length>1?i[1]:null,l=n.getBoundingClientRect(),c=window.innerHeight-l.bottom,d="above"===o||"below"!==o&&c<t&&l.top>t,u=window.pageYOffset+l.top+(d?-t-2:n.offsetHeight+2);if(s(w.calendarContainer,"arrowTop",!d),s(w.calendarContainer,"arrowBottom",d),!w.config.inline){var f=window.pageXOffset+l.left,m=!1,g=!1;"center"===r?(f-=(a-l.width)/2,m=!0):"right"===r&&(f-=a-l.width,g=!0),s(w.calendarContainer,"arrowLeft",!m&&!g),s(w.calendarContainer,"arrowCenter",m),s(w.calendarContainer,"arrowRight",g);var p=window.document.body.offsetWidth-(window.pageXOffset+l.right),h=f+a>window.document.body.offsetWidth,v=p+a>window.document.body.offsetWidth;if(s(w.calendarContainer,"rightMost",h),!w.config.static)if(w.calendarContainer.style.top=u+"px",h)if(v){var D=function(){for(var e=null,n=0;n<document.styleSheets.length;n++){var t=document.styleSheets[n];if(t.cssRules){try{t.cssRules}catch(e){continue}e=t;break}}return null!=e?e:(a=document.createElement("style"),document.head.appendChild(a),a.sheet);var a}();if(void 0===D)return;var b=window.document.body.offsetWidth,C=Math.max(0,b/2-a/2),M=D.cssRules.length,y="{left:"+l.left+"px;right:auto;}";s(w.calendarContainer,"rightMost",!1),s(w.calendarContainer,"centerMost",!0),D.insertRule(".flatpickr-calendar.centerMost:before,.flatpickr-calendar.centerMost:after"+y,M),w.calendarContainer.style.left=C+"px",w.calendarContainer.style.right="auto"}else w.calendarContainer.style.left="auto",w.calendarContainer.style.right=p+"px";else w.calendarContainer.style.left=f+"px",w.calendarContainer.style.right="auto"}}}else w.config.position(w,e)}function ue(){w.config.noCalendar||w.isMobile||(q(),Ce(),U())}function fe(){w._input.focus(),-1!==window.navigator.userAgent.indexOf("MSIE")||void 0!==navigator.msMaxTouchPoints?setTimeout(w.close,0):w.close()}function me(e){e.preventDefault(),e.stopPropagation();var n=f(g(e),(function(e){return e.classList&&e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled")&&!e.classList.contains("notAllowed")}));if(void 0!==n){var t=n,a=w.latestSelectedDateObj=new Date(t.dateObj.getTime()),i=(a.getMonth()<w.currentMonth||a.getMonth()>w.currentMonth+w.config.showMonths-1)&&"range"!==w.config.mode;if(w.selectedDateElem=t,"single"===w.config.mode)w.selectedDates=[a];else if("multiple"===w.config.mode){var o=be(a);o?w.selectedDates.splice(parseInt(o),1):w.selectedDates.push(a)}else"range"===w.config.mode&&(2===w.selectedDates.length&&w.clear(!1,!1),w.latestSelectedDateObj=a,w.selectedDates.push(a),0!==M(a,w.selectedDates[0],!0)&&w.selectedDates.sort((function(e,n){return e.getTime()-n.getTime()})));if(O(),i){var r=w.currentYear!==a.getFullYear();w.currentYear=a.getFullYear(),w.currentMonth=a.getMonth(),r&&(De("onYearChange"),q()),De("onMonthChange")}if(Ce(),U(),ye(),i||"range"===w.config.mode||1!==w.config.showMonths?void 0!==w.selectedDateElem&&void 0===w.hourElement&&w.selectedDateElem&&w.selectedDateElem.focus():W(t),void 0!==w.hourElement&&void 0!==w.hourElement&&w.hourElement.focus(),w.config.closeOnSelect){var l="single"===w.config.mode&&!w.config.enableTime,c="range"===w.config.mode&&2===w.selectedDates.length&&!w.config.enableTime;(l||c)&&fe()}Y()}}w.parseDate=C({config:w.config,l10n:w.l10n}),w._handlers=[],w.pluginElements=[],w.loadedPlugins=[],w._bind=P,w._setHoursFromDate=F,w._positionCalendar=de,w.changeMonth=Z,w.changeYear=ee,w.clear=function(e,n){void 0===e&&(e=!0);void 0===n&&(n=!0);w.input.value="",void 0!==w.altInput&&(w.altInput.value="");void 0!==w.mobileInput&&(w.mobileInput.value="");w.selectedDates=[],w.latestSelectedDateObj=void 0,!0===n&&(w.currentYear=w._initialDate.getFullYear(),w.currentMonth=w._initialDate.getMonth());if(!0===w.config.enableTime){var t=E(w.config),a=t.hours,i=t.minutes,o=t.seconds;A(a,i,o)}w.redraw(),e&&De("onChange")},w.close=function(){w.isOpen=!1,w.isMobile||(void 0!==w.calendarContainer&&w.calendarContainer.classList.remove("open"),void 0!==w._input&&w._input.classList.remove("active"));De("onClose")},w.onMouseOver=oe,w._createElement=d,w.createDay=R,w.destroy=function(){void 0!==w.config&&De("onDestroy");for(var e=w._handlers.length;e--;)w._handlers[e].remove();if(w._handlers=[],w.mobileInput)w.mobileInput.parentNode&&w.mobileInput.parentNode.removeChild(w.mobileInput),w.mobileInput=void 0;else if(w.calendarContainer&&w.calendarContainer.parentNode)if(w.config.static&&w.calendarContainer.parentNode){var n=w.calendarContainer.parentNode;if(n.lastChild&&n.removeChild(n.lastChild),n.parentNode){for(;n.firstChild;)n.parentNode.insertBefore(n.firstChild,n);n.parentNode.removeChild(n)}}else w.calendarContainer.parentNode.removeChild(w.calendarContainer);w.altInput&&(w.input.type="text",w.altInput.parentNode&&w.altInput.parentNode.removeChild(w.altInput),delete w.altInput);w.input&&(w.input.type=w.input._type,w.input.classList.remove("flatpickr-input"),w.input.removeAttribute("readonly"));["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach((function(e){try{delete w[e]}catch(e){}}))},w.isEnabled=ne,w.jumpToDate=j,w.updateValue=ye,w.open=function(e,n){void 0===n&&(n=w._positionElement);if(!0===w.isMobile){if(e){e.preventDefault();var t=g(e);t&&t.blur()}return void 0!==w.mobileInput&&(w.mobileInput.focus(),w.mobileInput.click()),void De("onOpen")}if(w._input.disabled||w.config.inline)return;var a=w.isOpen;w.isOpen=!0,a||(w.calendarContainer.classList.add("open"),w._input.classList.add("active"),De("onOpen"),de(n));!0===w.config.enableTime&&!0===w.config.noCalendar&&(!1!==w.config.allowInput||void 0!==e&&w.timeContainer.contains(e.relatedTarget)||setTimeout((function(){return w.hourElement.select()}),50))},w.redraw=ue,w.set=function(e,n){if(null!==e&&"object"==typeof e)for(var a in Object.assign(w.config,e),e)void 0!==ge[a]&&ge[a].forEach((function(e){return e()}));else w.config[e]=n,void 0!==ge[e]?ge[e].forEach((function(e){return e()})):t.indexOf(e)>-1&&(w.config[e]=c(n));w.redraw(),ye(!0)},w.setDate=function(e,n,t){void 0===n&&(n=!1);void 0===t&&(t=w.config.dateFormat);if(0!==e&&!e||e instanceof Array&&0===e.length)return w.clear(n);pe(e,t),w.latestSelectedDateObj=w.selectedDates[w.selectedDates.length-1],w.redraw(),j(void 0,n),F(),0===w.selectedDates.length&&w.clear(!1);ye(n),n&&De("onChange")},w.toggle=function(e){if(!0===w.isOpen)return w.close();w.open(e)};var ge={locale:[se,G],showMonths:[V,S,z],minDate:[j],maxDate:[j],positionElement:[ve],clickOpens:[function(){!0===w.config.clickOpens?(P(w._input,"focus",w.open),P(w._input,"click",w.open)):(w._input.removeEventListener("focus",w.open),w._input.removeEventListener("click",w.open))}]};function pe(e,n){var t=[];if(e instanceof Array)t=e.map((function(e){return w.parseDate(e,n)}));else if(e instanceof Date||"number"==typeof e)t=[w.parseDate(e,n)];else if("string"==typeof e)switch(w.config.mode){case"single":case"time":t=[w.parseDate(e,n)];break;case"multiple":t=e.split(w.config.conjunction).map((function(e){return w.parseDate(e,n)}));break;case"range":t=e.split(w.l10n.rangeSeparator).map((function(e){return w.parseDate(e,n)}))}else w.config.errorHandler(new Error("Invalid date supplied: "+JSON.stringify(e)));w.selectedDates=w.config.allowInvalidPreload?t:t.filter((function(e){return e instanceof Date&&ne(e,!1)})),"range"===w.config.mode&&w.selectedDates.sort((function(e,n){return e.getTime()-n.getTime()}))}function he(e){return e.slice().map((function(e){return"string"==typeof e||"number"==typeof e||e instanceof Date?w.parseDate(e,void 0,!0):e&&"object"==typeof e&&e.from&&e.to?{from:w.parseDate(e.from,void 0),to:w.parseDate(e.to,void 0)}:e})).filter((function(e){return e}))}function ve(){w._positionElement=w.config.positionElement||w._input}function De(e,n){if(void 0!==w.config){var t=w.config[e];if(void 0!==t&&t.length>0)for(var a=0;t[a]&&a<t.length;a++)t[a](w.selectedDates,w.input.value,w,n);"onChange"===e&&(w.input.dispatchEvent(we("change")),w.input.dispatchEvent(we("input")))}}function we(e){var n=document.createEvent("Event");return n.initEvent(e,!0,!0),n}function be(e){for(var n=0;n<w.selectedDates.length;n++){var t=w.selectedDates[n];if(t instanceof Date&&0===M(t,e))return""+n}return!1}function Ce(){w.config.noCalendar||w.isMobile||!w.monthNav||(w.yearElements.forEach((function(e,n){var t=new Date(w.currentYear,w.currentMonth,1);t.setMonth(w.currentMonth+n),w.config.showMonths>1||"static"===w.config.monthSelectorType?w.monthElements[n].textContent=h(t.getMonth(),w.config.shorthandCurrentMonth,w.l10n)+" ":w.monthsDropdownContainer.value=t.getMonth().toString(),e.value=t.getFullYear().toString()})),w._hidePrevMonthArrow=void 0!==w.config.minDate&&(w.currentYear===w.config.minDate.getFullYear()?w.currentMonth<=w.config.minDate.getMonth():w.currentYear<w.config.minDate.getFullYear()),w._hideNextMonthArrow=void 0!==w.config.maxDate&&(w.currentYear===w.config.maxDate.getFullYear()?w.currentMonth+1>w.config.maxDate.getMonth():w.currentYear>w.config.maxDate.getFullYear()))}function Me(e){var n=e||(w.config.altInput?w.config.altFormat:w.config.dateFormat);return w.selectedDates.map((function(e){return w.formatDate(e,n)})).filter((function(e,n,t){return"range"!==w.config.mode||w.config.enableTime||t.indexOf(e)===n})).join("range"!==w.config.mode?w.config.conjunction:w.l10n.rangeSeparator)}function ye(e){void 0===e&&(e=!0),void 0!==w.mobileInput&&w.mobileFormatStr&&(w.mobileInput.value=void 0!==w.latestSelectedDateObj?w.formatDate(w.latestSelectedDateObj,w.mobileFormatStr):""),w.input.value=Me(w.config.dateFormat),void 0!==w.altInput&&(w.altInput.value=Me(w.config.altFormat)),!1!==e&&De("onValueUpdate")}function xe(e){var n=g(e),t=w.prevMonthNav.contains(n),a=w.nextMonthNav.contains(n);t||a?Z(t?-1:1):w.yearElements.indexOf(n)>=0?n.select():n.classList.contains("arrowUp")?w.changeYear(w.currentYear+1):n.classList.contains("arrowDown")&&w.changeYear(w.currentYear-1)}return function(){w.element=w.input=p,w.isOpen=!1,function(){var n=["wrap","weekNumbers","allowInput","allowInvalidPreload","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],i=e(e({},JSON.parse(JSON.stringify(p.dataset||{}))),v),o={};w.config.parseDate=i.parseDate,w.config.formatDate=i.formatDate,Object.defineProperty(w.config,"enable",{get:function(){return w.config._enable},set:function(e){w.config._enable=he(e)}}),Object.defineProperty(w.config,"disable",{get:function(){return w.config._disable},set:function(e){w.config._disable=he(e)}});var r="time"===i.mode;if(!i.dateFormat&&(i.enableTime||r)){var l=I.defaultConfig.dateFormat||a.dateFormat;o.dateFormat=i.noCalendar||r?"H:i"+(i.enableSeconds?":S":""):l+" H:i"+(i.enableSeconds?":S":"")}if(i.altInput&&(i.enableTime||r)&&!i.altFormat){var s=I.defaultConfig.altFormat||a.altFormat;o.altFormat=i.noCalendar||r?"h:i"+(i.enableSeconds?":S K":" K"):s+" h:i"+(i.enableSeconds?":S":"")+" K"}Object.defineProperty(w.config,"minDate",{get:function(){return w.config._minDate},set:le("min")}),Object.defineProperty(w.config,"maxDate",{get:function(){return w.config._maxDate},set:le("max")});var d=function(e){return function(n){w.config["min"===e?"_minTime":"_maxTime"]=w.parseDate(n,"H:i:S")}};Object.defineProperty(w.config,"minTime",{get:function(){return w.config._minTime},set:d("min")}),Object.defineProperty(w.config,"maxTime",{get:function(){return w.config._maxTime},set:d("max")}),"time"===i.mode&&(w.config.noCalendar=!0,w.config.enableTime=!0);Object.assign(w.config,o,i);for(var u=0;u<n.length;u++)w.config[n[u]]=!0===w.config[n[u]]||"true"===w.config[n[u]];t.filter((function(e){return void 0!==w.config[e]})).forEach((function(e){w.config[e]=c(w.config[e]||[]).map(T)})),w.isMobile=!w.config.disableMobile&&!w.config.inline&&"single"===w.config.mode&&!w.config.disable.length&&!w.config.enable&&!w.config.weekNumbers&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);for(u=0;u<w.config.plugins.length;u++){var f=w.config.plugins[u](w)||{};for(var m in f)t.indexOf(m)>-1?w.config[m]=c(f[m]).map(T).concat(w.config[m]):void 0===i[m]&&(w.config[m]=f[m])}i.altInputClass||(w.config.altInputClass=ce().className+" "+w.config.altInputClass);De("onParseConfig")}(),se(),function(){if(w.input=ce(),!w.input)return void w.config.errorHandler(new Error("Invalid input element specified"));w.input._type=w.input.type,w.input.type="text",w.input.classList.add("flatpickr-input"),w._input=w.input,w.config.altInput&&(w.altInput=d(w.input.nodeName,w.config.altInputClass),w._input=w.altInput,w.altInput.placeholder=w.input.placeholder,w.altInput.disabled=w.input.disabled,w.altInput.required=w.input.required,w.altInput.tabIndex=w.input.tabIndex,w.altInput.type="text",w.input.setAttribute("type","hidden"),!w.config.static&&w.input.parentNode&&w.input.parentNode.insertBefore(w.altInput,w.input.nextSibling));w.config.allowInput||w._input.setAttribute("readonly","readonly");ve()}(),function(){w.selectedDates=[],w.now=w.parseDate(w.config.now)||new Date;var e=w.config.defaultDate||("INPUT"!==w.input.nodeName&&"TEXTAREA"!==w.input.nodeName||!w.input.placeholder||w.input.value!==w.input.placeholder?w.input.value:null);e&&pe(e,w.config.dateFormat);w._initialDate=w.selectedDates.length>0?w.selectedDates[0]:w.config.minDate&&w.config.minDate.getTime()>w.now.getTime()?w.config.minDate:w.config.maxDate&&w.config.maxDate.getTime()<w.now.getTime()?w.config.maxDate:w.now,w.currentYear=w._initialDate.getFullYear(),w.currentMonth=w._initialDate.getMonth(),w.selectedDates.length>0&&(w.latestSelectedDateObj=w.selectedDates[0]);void 0!==w.config.minTime&&(w.config.minTime=w.parseDate(w.config.minTime,"H:i"));void 0!==w.config.maxTime&&(w.config.maxTime=w.parseDate(w.config.maxTime,"H:i"));w.minDateHasTime=!!w.config.minDate&&(w.config.minDate.getHours()>0||w.config.minDate.getMinutes()>0||w.config.minDate.getSeconds()>0),w.maxDateHasTime=!!w.config.maxDate&&(w.config.maxDate.getHours()>0||w.config.maxDate.getMinutes()>0||w.config.maxDate.getSeconds()>0)}(),w.utils={getDaysInMonth:function(e,n){return void 0===e&&(e=w.currentMonth),void 0===n&&(n=w.currentYear),1===e&&(n%4==0&&n%100!=0||n%400==0)?29:w.l10n.daysInMonth[e]}},w.isMobile||function(){var e=window.document.createDocumentFragment();if(w.calendarContainer=d("div","flatpickr-calendar"),w.calendarContainer.tabIndex=-1,!w.config.noCalendar){if(e.appendChild((w.monthNav=d("div","flatpickr-months"),w.yearElements=[],w.monthElements=[],w.prevMonthNav=d("span","flatpickr-prev-month"),w.prevMonthNav.innerHTML=w.config.prevArrow,w.nextMonthNav=d("span","flatpickr-next-month"),w.nextMonthNav.innerHTML=w.config.nextArrow,V(),Object.defineProperty(w,"_hidePrevMonthArrow",{get:function(){return w.__hidePrevMonthArrow},set:function(e){w.__hidePrevMonthArrow!==e&&(s(w.prevMonthNav,"flatpickr-disabled",e),w.__hidePrevMonthArrow=e)}}),Object.defineProperty(w,"_hideNextMonthArrow",{get:function(){return w.__hideNextMonthArrow},set:function(e){w.__hideNextMonthArrow!==e&&(s(w.nextMonthNav,"flatpickr-disabled",e),w.__hideNextMonthArrow=e)}}),w.currentYearElement=w.yearElements[0],Ce(),w.monthNav)),w.innerContainer=d("div","flatpickr-innerContainer"),w.config.weekNumbers){var n=function(){w.calendarContainer.classList.add("hasWeeks");var e=d("div","flatpickr-weekwrapper");e.appendChild(d("span","flatpickr-weekday",w.l10n.weekAbbreviation));var n=d("div","flatpickr-weeks");return e.appendChild(n),{weekWrapper:e,weekNumbers:n}}(),t=n.weekWrapper,a=n.weekNumbers;w.innerContainer.appendChild(t),w.weekNumbers=a,w.weekWrapper=t}w.rContainer=d("div","flatpickr-rContainer"),w.rContainer.appendChild(z()),w.daysContainer||(w.daysContainer=d("div","flatpickr-days"),w.daysContainer.tabIndex=-1),U(),w.rContainer.appendChild(w.daysContainer),w.innerContainer.appendChild(w.rContainer),e.appendChild(w.innerContainer)}w.config.enableTime&&e.appendChild(function(){w.calendarContainer.classList.add("hasTime"),w.config.noCalendar&&w.calendarContainer.classList.add("noCalendar");var e=E(w.config);w.timeContainer=d("div","flatpickr-time"),w.timeContainer.tabIndex=-1;var n=d("span","flatpickr-time-separator",":"),t=m("flatpickr-hour",{"aria-label":w.l10n.hourAriaLabel});w.hourElement=t.getElementsByTagName("input")[0];var a=m("flatpickr-minute",{"aria-label":w.l10n.minuteAriaLabel});w.minuteElement=a.getElementsByTagName("input")[0],w.hourElement.tabIndex=w.minuteElement.tabIndex=-1,w.hourElement.value=o(w.latestSelectedDateObj?w.latestSelectedDateObj.getHours():w.config.time_24hr?e.hours:function(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}(e.hours)),w.minuteElement.value=o(w.latestSelectedDateObj?w.latestSelectedDateObj.getMinutes():e.minutes),w.hourElement.setAttribute("step",w.config.hourIncrement.toString()),w.minuteElement.setAttribute("step",w.config.minuteIncrement.toString()),w.hourElement.setAttribute("min",w.config.time_24hr?"0":"1"),w.hourElement.setAttribute("max",w.config.time_24hr?"23":"12"),w.hourElement.setAttribute("maxlength","2"),w.minuteElement.setAttribute("min","0"),w.minuteElement.setAttribute("max","59"),w.minuteElement.setAttribute("maxlength","2"),w.timeContainer.appendChild(t),w.timeContainer.appendChild(n),w.timeContainer.appendChild(a),w.config.time_24hr&&w.timeContainer.classList.add("time24hr");if(w.config.enableSeconds){w.timeContainer.classList.add("hasSeconds");var i=m("flatpickr-second");w.secondElement=i.getElementsByTagName("input")[0],w.secondElement.value=o(w.latestSelectedDateObj?w.latestSelectedDateObj.getSeconds():e.seconds),w.secondElement.setAttribute("step",w.minuteElement.getAttribute("step")),w.secondElement.setAttribute("min","0"),w.secondElement.setAttribute("max","59"),w.secondElement.setAttribute("maxlength","2"),w.timeContainer.appendChild(d("span","flatpickr-time-separator",":")),w.timeContainer.appendChild(i)}w.config.time_24hr||(w.amPM=d("span","flatpickr-am-pm",w.l10n.amPM[r((w.latestSelectedDateObj?w.hourElement.value:w.config.defaultHour)>11)]),w.amPM.title=w.l10n.toggleTitle,w.amPM.tabIndex=-1,w.timeContainer.appendChild(w.amPM));return w.timeContainer}());s(w.calendarContainer,"rangeMode","range"===w.config.mode),s(w.calendarContainer,"animate",!0===w.config.animate),s(w.calendarContainer,"multiMonth",w.config.showMonths>1),w.calendarContainer.appendChild(e);var i=void 0!==w.config.appendTo&&void 0!==w.config.appendTo.nodeType;if((w.config.inline||w.config.static)&&(w.calendarContainer.classList.add(w.config.inline?"inline":"static"),w.config.inline&&(!i&&w.element.parentNode?w.element.parentNode.insertBefore(w.calendarContainer,w._input.nextSibling):void 0!==w.config.appendTo&&w.config.appendTo.appendChild(w.calendarContainer)),w.config.static)){var l=d("div","flatpickr-wrapper");w.element.parentNode&&w.element.parentNode.insertBefore(l,w.element),l.appendChild(w.element),w.altInput&&l.appendChild(w.altInput),l.appendChild(w.calendarContainer)}w.config.static||w.config.inline||(void 0!==w.config.appendTo?w.config.appendTo:window.document.body).appendChild(w.calendarContainer)}(),function(){w.config.wrap&&["open","close","toggle","clear"].forEach((function(e){Array.prototype.forEach.call(w.element.querySelectorAll("[data-"+e+"]"),(function(n){return P(n,"click",w[e])}))}));if(w.isMobile)return void function(){var e=w.config.enableTime?w.config.noCalendar?"time":"datetime-local":"date";w.mobileInput=d("input",w.input.className+" flatpickr-mobile"),w.mobileInput.tabIndex=1,w.mobileInput.type=e,w.mobileInput.disabled=w.input.disabled,w.mobileInput.required=w.input.required,w.mobileInput.placeholder=w.input.placeholder,w.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",w.selectedDates.length>0&&(w.mobileInput.defaultValue=w.mobileInput.value=w.formatDate(w.selectedDates[0],w.mobileFormatStr));w.config.minDate&&(w.mobileInput.min=w.formatDate(w.config.minDate,"Y-m-d"));w.config.maxDate&&(w.mobileInput.max=w.formatDate(w.config.maxDate,"Y-m-d"));w.input.getAttribute("step")&&(w.mobileInput.step=String(w.input.getAttribute("step")));w.input.type="hidden",void 0!==w.altInput&&(w.altInput.type="hidden");try{w.input.parentNode&&w.input.parentNode.insertBefore(w.mobileInput,w.input.nextSibling)}catch(e){}P(w.mobileInput,"change",(function(e){w.setDate(g(e).value,!1,w.mobileFormatStr),De("onChange"),De("onClose")}))}();var e=l(re,50);w._debouncedChange=l(Y,300),w.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&P(w.daysContainer,"mouseover",(function(e){"range"===w.config.mode&&oe(g(e))}));P(w._input,"keydown",ie),void 0!==w.calendarContainer&&P(w.calendarContainer,"keydown",ie);w.config.inline||w.config.static||P(window,"resize",e);void 0!==window.ontouchstart?P(window.document,"touchstart",X):P(window.document,"mousedown",X);P(window.document,"focus",X,{capture:!0}),!0===w.config.clickOpens&&(P(w._input,"focus",w.open),P(w._input,"click",w.open));void 0!==w.daysContainer&&(P(w.monthNav,"click",xe),P(w.monthNav,["keyup","increment"],N),P(w.daysContainer,"click",me));if(void 0!==w.timeContainer&&void 0!==w.minuteElement&&void 0!==w.hourElement){var n=function(e){return g(e).select()};P(w.timeContainer,["increment"],_),P(w.timeContainer,"blur",_,{capture:!0}),P(w.timeContainer,"click",H),P([w.hourElement,w.minuteElement],["focus","click"],n),void 0!==w.secondElement&&P(w.secondElement,"focus",(function(){return w.secondElement&&w.secondElement.select()})),void 0!==w.amPM&&P(w.amPM,"click",(function(e){_(e)}))}w.config.allowInput&&P(w._input,"blur",ae)}(),(w.selectedDates.length||w.config.noCalendar)&&(w.config.enableTime&&F(w.config.noCalendar?w.latestSelectedDateObj:void 0),ye(!1)),S();var n=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!w.isMobile&&n&&de(),De("onReady")}(),w}function T(e,n){for(var t=Array.prototype.slice.call(e).filter((function(e){return e instanceof HTMLElement})),a=[],i=0;i<t.length;i++){var o=t[i];try{if(null!==o.getAttribute("data-fp-omit"))continue;void 0!==o._flatpickr&&(o._flatpickr.destroy(),o._flatpickr=void 0),o._flatpickr=k(o,n||{}),a.push(o._flatpickr)}catch(e){console.error(e)}}return 1===a.length?a[0]:a}"undefined"!=typeof HTMLElement&&"undefined"!=typeof HTMLCollection&&"undefined"!=typeof NodeList&&(HTMLCollection.prototype.flatpickr=NodeList.prototype.flatpickr=function(e){return T(this,e)},HTMLElement.prototype.flatpickr=function(e){return T([this],e)});var I=function(e,n){return"string"==typeof e?T(window.document.querySelectorAll(e),n):e instanceof Node?T([e],n):T(e,n)};return I.defaultConfig={},I.l10ns={en:e({},i),default:e({},i)},I.localize=function(n){I.l10ns.default=e(e({},I.l10ns.default),n)},I.setDefaults=function(n){I.defaultConfig=e(e({},I.defaultConfig),n)},I.parseDate=C({}),I.formatDate=b({}),I.compareDates=M,"undefined"!=typeof jQuery&&void 0!==jQuery.fn&&(jQuery.fn.flatpickr=function(e){return T(this,e)}),Date.prototype.fp_incr=function(e){return new Date(this.getFullYear(),this.getMonth(),this.getDate()+("string"==typeof e?parseInt(e,10):e))},"undefined"!=typeof window&&(window.flatpickr=I),I}));
vendor: 3,346 bytes, lines 2975-2976
2975
2976(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory():typeof define==="function"&&define.amd?define(factory):(global=typeof globalThis!=="undefined"?globalThis:global||self,global.monthSelectPlugin=factory())})(this,function(){"use strict";var __assign=function(){__assign=Object.assign||function __assign(t){for(var s,i=1,n=arguments.length;i<n;i++){s=arguments[i];for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))t[p]=s[p]}return t};return __assign.apply(this,arguments)};var monthToStr=function(monthNumber,shorthand,locale){return locale.months[shorthand?"shorthand":"longhand"][monthNumber]};function clearNode(node){while(node.firstChild)node.removeChild(node.firstChild)}function getEventTarget(event){try{if(typeof event.composedPath==="function"){var path=event.composedPath();return path[0]}return event.target}catch(error){return event.target}}var defaultConfig={shorthand:false,dateFormat:"F Y",altFormat:"F Y",theme:"light"};function monthSelectPlugin(pluginConfig){var config=__assign(__assign({},defaultConfig),pluginConfig);return function(fp){fp.config.dateFormat=config.dateFormat;fp.config.altFormat=config.altFormat;var self={monthsContainer:null};function clearUnnecessaryDOMElements(){if(!fp.rContainer)return;clearNode(fp.rContainer);for(var index=0;index<fp.monthElements.length;index++){var element=fp.monthElements[index];if(!element.parentNode)continue;element.parentNode.removeChild(element)}}function build(){if(!fp.rContainer)return;self.monthsContainer=fp._createElement("div","flatpickr-monthSelect-months");self.monthsContainer.tabIndex=-1;buildMonths();fp.rContainer.appendChild(self.monthsContainer);fp.calendarContainer.classList.add("flatpickr-monthSelect-theme-"+config.theme)}function buildMonths(){if(!self.monthsContainer)return;clearNode(self.monthsContainer);var frag=document.createDocumentFragment();for(var i=0;i<12;i++){var month=fp.createDay("flatpickr-monthSelect-month",new Date(fp.currentYear,i),0,i);if(month.dateObj.getMonth()===(new Date).getMonth()&&month.dateObj.getFullYear()===(new Date).getFullYear())month.classList.add("today");month.textContent=monthToStr(i,config.shorthand,fp.l10n);month.addEventListener("click",selectMonth);frag.appendChild(month)}self.monthsContainer.appendChild(frag);if(fp.config.minDate&&fp.currentYear===fp.config.minDate.getFullYear())fp.prevMonthNav.classList.add("flatpickr-disabled");else fp.prevMonthNav.classList.remove("flatpickr-disabled");if(fp.config.maxDate&&fp.currentYear===fp.config.maxDate.getFullYear())fp.nextMonthNav.classList.add("flatpickr-disabled");else fp.nextMonthNav.classList.remove("flatpickr-disabled")}function bindEvents(){fp._bind(fp.prevMonthNav,"click",function(e){e.preventDefault();e.stopPropagation();fp.changeYear(fp.currentYear-1);selectYear();buildMonths()});fp._bind(fp.nextMonthNav,"click",function(e){e.preventDefault();e.stopPropagation();fp.changeYear(fp.currentYear+1);selectYear();buildMonths()});fp._bind(self.monthsContainer,"mouseover",function(e){if(fp.config.mode==="range")fp.onMouseOver(getEventTarget(e),"flatpickr-monthSelect-month")})}function setCurrentlySelected(){if(!fp.rContainer)return;if(!fp.selectedDates.length)return;var currentlySelected=fp.rContainer.querySelectorAll(".flatpickr-monthSelect-month.selected");for(var index=0;
2976index<currentlySelected.length;index++){currentlySelected[index].classList.remove("selected")}var targetMonth=fp.selectedDates[0].getMonth();var month=fp.rContainer.querySelector(".flatpickr-monthSelect-month:nth-child("+(targetMonth+1)+")");if(month){month.classList.add("selected")}}function selectYear(){var selectedDate=fp.selectedDates[0];if(selectedDate){selectedDate=new Date(selectedDate);selectedDate.setFullYear(fp.currentYear);if(fp.config.minDate&&selectedDate<fp.config.minDate){selectedDate=fp.config.minDate}if(fp.config.maxDate&&selectedDate>fp.config.maxDate){selectedDate=fp.config.maxDate}fp.currentYear=selectedDate.getFullYear()}fp.currentYearElement.value=String(fp.currentYear);if(fp.rContainer){var months=fp.rContainer.querySelectorAll(".flatpickr-monthSelect-month");months.forEach(function(month){month.dateObj.setFullYear(fp.currentYear);if(fp.config.minDate&&month.dateObj<fp.config.minDate||fp.config.maxDate&&month.dateObj>fp.config.maxDate){month.classList.add("flatpickr-disabled")}else{month.classList.remove("flatpickr-disabled")}})}setCurrentlySelected()}function selectMonth(e){e.preventDefault();e.stopPropagation();var eventTarget=getEventTarget(e);if(!(eventTarget instanceof Element))return;if(eventTarget.classList.contains("flatpickr-disabled"))return;if(eventTarget.classList.contains("notAllowed"))return;setMonth(eventTarget.dateObj);if(fp.config.closeOnSelect){var single=fp.config.mode==="single";var range=fp.config.mode==="range"&&fp.selectedDates.length===2;if(single||range)fp.close()}}function setMonth(date){var selectedDate=new Date(fp.currentYear,date.getMonth(),date.getDate());var selectedDates=[];switch(fp.config.mode){case"single":selectedDates=[selectedDate];break;case"multiple":selectedDates.push(selectedDate);break;case"range":if(fp.selectedDates.length===2){selectedDates=[selectedDate]}else{selectedDates=fp.selectedDates.concat([selectedDate]);selectedDates.sort(function(a,b){return a.getTime()-b.getTime()})}break}fp.setDate(selectedDates,true);setCurrentlySelected()}var shifts={37:-1,39:1,40:3,38:-3};function onKeyDown(_,__,___,e){var shouldMove=shifts[e.keyCode]!==undefined;if(!shouldMove&&e.keyCode!==13){return}if(!fp.rContainer||!self.monthsContainer)return;var currentlySelected=fp.rContainer.querySelector(".flatpickr-monthSelect-month.selected");var index=Array.prototype.indexOf.call(self.monthsContainer.children,document.activeElement);if(index===-1){var target=currentlySelected||self.monthsContainer.firstElementChild;target.focus();index=target.$i}if(shouldMove){self.monthsContainer.children[(12+index+shifts[e.keyCode])%12].focus()}else if(e.keyCode===13&&self.monthsContainer.contains(document.activeElement)){setMonth(document.activeElement.dateObj)}}function closeHook(){var _a;if(((_a=fp.config)===null||_a===void 0?void 0:_a.mode)==="range"&&fp.selectedDates.length===1)fp.clear(false);if(!fp.selectedDates.length)buildMonths()}function stubCurrentMonth(){config._stubbedCurrentMonth=fp._initialDate.getMonth();fp._initialDate.setMonth(config._stubbedCurrentMonth);fp.currentMonth=config._stubbedCurrentMonth}function unstubCurrentMonth(){if(!config._stubbedCurrentMonth)return;fp._initialDate.setMonth(config._stubbedCurrentMonth);fp.currentMonth=config._stubbedCurrentMonth;delete config._stubbedCurrentMonth}function destroyPluginInstance(){if(self.monthsContainer!==null){var months=self.monthsContainer.querySelectorAll(".flatpickr-monthSelect-month");for(var index=0;index<months.length;index++){months[index].removeEventListener("click",selectMonth)}}}return{onParseConfig:function(){fp.config.enableTime=false},onValueUpdate:setCurrentlySelected,onKeyDown:onKeyDown,onReady:[stubCurrentMonth,clearUnnecessaryDOMElements,build,bindEvents,setCurrentlySelected,function(){fp.config.onClose.push(closeHook);fp.loadedPlugins.push("monthSelect")}],onDestroy:[unstubCurrentMonth,destroyPluginInstance,function(){fp.config.onClose=fp.config.onClose.filter(function(hook){return hook!==closeHook})}]}}}return monthSelectPlugin});
2977
2978// tippy.js
2979// popperjs v2.11.5 - MIT License - https://github.com/popperjs/popper-core
2980!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(e,t){void 0===t&&(t=!1);var n=e.getBoundingClientRect(),o=1,i=1;if(r(e)&&t){var a=e.offsetHeight,f=e.offsetWidth;f>0&&(o=s(n.width)/f||1),a>0&&(i=s(n.height)/a||1)}return{width:n.width/o,height:n.height/i,top:n.top/i,right:n.right/o,bottom:n.bottom/i,left:n.left/o,x:n.left/o,y:n.top/i}}function c(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function p(e){return e?(e.nodeName||"").toLowerCase():null}function u(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function l(e){return f(u(e)).left+c(e).scrollLeft}function d(e){return t(e).getComputedStyle(e)}function h(e){var t=d(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function m(e,n,o){void 0===o&&(o=!1);var i,a,d=r(n),m=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),v=u(n),g=f(e,m),y={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(d||!d&&!o)&&(("body"!==p(n)||h(v))&&(y=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:c(i)),r(n)?((b=f(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):v&&(b.x=l(v))),{x:g.left+y.scrollLeft-b.x,y:g.top+y.scrollTop-b.y,width:g.width,height:g.height}}function v(e){var t=f(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function g(e){return"html"===p(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||u(e)}function y(e){return["html","body","#document"].indexOf(p(e))>=0?e.ownerDocument.body:r(e)&&h(e)?e:y(g(e))}function b(e,n){var r;void 0===n&&(n=[]);var o=y(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualVie
vendor: 4,539 bytes, line 2980
2980wport||[],h(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(b(g(s)))}function x(e){return["table","td","th"].indexOf(p(e))>=0}function w(e){return r(e)&&"fixed"!==d(e).position?e.offsetParent:null}function O(e){for(var n=t(e),i=w(e);i&&x(i)&&"static"===d(i).position;)i=w(i);return i&&("html"===p(i)||"body"===p(i)&&"static"===d(i).position)?n:i||function(e){var t=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&r(e)&&"fixed"===d(e).position)return null;var n=g(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(p(n))<0;){var i=d(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var j="top",E="bottom",D="right",A="left",L="auto",P=[j,E,D,A],M="start",k="end",W="viewport",B="popper",H=P.reduce((function(e,t){return e.concat([t+"-"+M,t+"-"+k])}),[]),T=[].concat(P,[L]).reduce((function(e,t){return e.concat([t,t+"-"+M,t+"-"+k])}),[]),R=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function S(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e){return e.split("-")[0]}function q(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function V(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function N(e,r){return r===W?V(function(e){var n=t(e),r=u(e),o=n.visualViewport,i=r.clientWidth,a=r.clientHeight,s=0,f=0;return o&&(i=o.width,a=o.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(s=o.offsetLeft,f=o.offsetTop)),{width:i,height:a,x:s+l(e),y:f}}(e)):n(r)?function(e){var t=f(e);return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}(r):V(function(e){var t,n=u(e),r=c(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+l(e),p=-r.scrollTop;return"rtl"===d(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:p}}(u(e)))}function I(e,t,o){var s="clippingParents"===t?function(e){var t=b(g(e)),o=["absolute","fixed"].indexOf(d(e).position)>=0&&r(e)?O(e):e;return n(o)?t.filter((function(e){return n(e)&&q(e,o)&&"body"!==p(e)})):[]}(e):[].concat(t),f=[].concat(s,[o]),c=f[0],u=f.reduce((function(t,n){var r=N(e,n);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),N(e,c));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function _(e){return e.split("-")[1]}function F(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function U(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?C(o):null,a=o?_(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case j:t={x:s,y:n.y-r.height};break;case E:t={x:s,y:n.y+n.height};break;case D:t={x:n.x+n.width,y:f};break;case A:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?F(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case M:t[c]=t[c]-(n[p]/2-r[p]/2);break;case k:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function z(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function X(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function Y(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.boundary,s=void 0===a?"clippingParents":a,c=r.rootBoundary,p=void 0===c?W:c,l=r.elementContext,d=void 0===l?B:l,h=r.altBoundary,m=void 0!==h&&h,v=r.padding,g=void 0===v?0:v,y=z("number"!=typeof g?g:X(g,P)),b=d===B?"reference":B,x=e.rects.popper,w=e.elements[m?b:d],O=I(n(w)?w:w.contextElement||u(e.elements.popper),s,p),A=f(e.elements.reference),L=U({reference:A,element:x,strategy:"absolute",placement:i}),M=V(Object.assign({},x,L)),k=d===B?M:A,H={top:O.top-k.top+y.top,bottom:k.bottom-O.bottom+y.bottom,left:O.left-k.left+y.left,right:k.right-O.right+y.right},T=e.modifiersData.offset;if(d===B&&T){var R=T[i];
vendor: 12,767 bytes, lines 2980-2981
2980Object.keys(H).forEach((function(e){var t=[D,E].indexOf(e)>=0?1:-1,n=[j,E].indexOf(e)>=0?"y":"x";H[e]+=R[n]*t}))}return H}var G={placement:"bottom",modifiers:[],strategy:"absolute"};function J(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some((function(e){return!(e&&"function"==typeof e.getBoundingClientRect)}))}function K(e){void 0===e&&(e={});var t=e,r=t.defaultModifiers,o=void 0===r?[]:r,i=t.defaultOptions,a=void 0===i?G:i;return function(e,t,r){void 0===r&&(r=a);var i,s,f={placement:"bottom",orderedModifiers:[],options:Object.assign({},G,a),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},c=[],p=!1,u={state:f,setOptions:function(r){var i="function"==typeof r?r(f.options):r;l(),f.options=Object.assign({},a,f.options,i),f.scrollParents={reference:n(e)?b(e):e.contextElement?b(e.contextElement):[],popper:b(t)};var s,p,d=function(e){var t=S(e);return R.reduce((function(e,n){return e.concat(t.filter((function(e){return e.phase===n})))}),[])}((s=[].concat(o,f.options.modifiers),p=s.reduce((function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e}),{}),Object.keys(p).map((function(e){return p[e]}))));return f.orderedModifiers=d.filter((function(e){return e.enabled})),f.orderedModifiers.forEach((function(e){var t=e.name,n=e.options,r=void 0===n?{}:n,o=e.effect;if("function"==typeof o){var i=o({state:f,name:t,instance:u,options:r}),a=function(){};c.push(i||a)}})),u.update()},forceUpdate:function(){if(!p){var e=f.elements,t=e.reference,n=e.popper;if(J(t,n)){f.rects={reference:m(t,O(n),"fixed"===f.options.strategy),popper:v(n)},f.reset=!1,f.placement=f.options.placement,f.orderedModifiers.forEach((function(e){return f.modifiersData[e.name]=Object.assign({},e.data)}));for(var r=0;r<f.orderedModifiers.length;r++)if(!0!==f.reset){var o=f.orderedModifiers[r],i=o.fn,a=o.options,s=void 0===a?{}:a,c=o.name;"function"==typeof i&&(f=i({state:f,options:s,name:c,instance:u})||f)}else f.reset=!1,r=-1}}},update:(i=function(){return new Promise((function(e){u.forceUpdate(),e(f)}))},function(){return s||(s=new Promise((function(e){Promise.resolve().then((function(){s=void 0,e(i())}))}))),s}),destroy:function(){l(),p=!0}};if(!J(e,t))return u;function l(){c.forEach((function(e){return e()})),c=[]}return u.setOptions(r).then((function(e){!p&&r.onFirstUpdate&&r.onFirstUpdate(e)})),u}}var Q={passive:!0};var Z={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var n=e.state,r=e.instance,o=e.options,i=o.scroll,a=void 0===i||i,s=o.resize,f=void 0===s||s,c=t(n.elements.popper),p=[].concat(n.scrollParents.reference,n.scrollParents.popper);return a&&p.forEach((function(e){e.addEventListener("scroll",r.update,Q)})),f&&c.addEventListener("resize",r.update,Q),function(){a&&p.forEach((function(e){e.removeEventListener("scroll",r.update,Q)})),f&&c.removeEventListener("resize",r.update,Q)}},data:{}};var $={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=U({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},ee={top:"auto",right:"auto",bottom:"auto",left:"auto"};function te(e){var n,r=e.popper,o=e.popperRect,i=e.placement,a=e.variation,f=e.offsets,c=e.position,p=e.gpuAcceleration,l=e.adaptive,h=e.roundOffsets,m=e.isFixed,v=f.x,g=void 0===v?0:v,y=f.y,b=void 0===y?0:y,x="function"==typeof h?h({x:g,y:b}):{x:g,y:b};g=x.x,b=x.y;var w=f.hasOwnProperty("x"),L=f.hasOwnProperty("y"),P=A,M=j,W=window;if(l){var B=O(r),H="clientHeight",T="clientWidth";if(B===t(r)&&"static"!==d(B=u(r)).position&&"absolute"===c&&(H="scrollHeight",T="scrollWidth"),B=B,i===j||(i===A||i===D)&&a===k)M=E,b-=(m&&B===W&&W.visualViewport?W.visualViewport.height:B[H])-o.height,b*=p?1:-1;if(i===A||(i===j||i===E)&&a===k)P=D,g-=(m&&B===W&&W.visualViewport?W.visualViewport.width:B[T])-o.width,g*=p?1:-1}var R,S=Object.assign({position:c},l&&ee),C=!0===h?function(e){var t=e.x,n=e.y,r=window.devicePixelRatio||1;return{x:s(t*r)/r||0,y:s(n*r)/r||0}}({x:g,y:b}):{x:g,y:b};return g=C.x,b=C.y,p?Object.assign({},S,((R={})[M]=L?"0":"",R[P]=w?"0":"",R.transform=(W.devicePixelRatio||1)<=1?"translate("+g+"px, "+b+"px)":"translate3d("+g+"px, "+b+"px, 0)",R)):Object.assign({},S,((n={})[M]=L?b+"px":"",n[P]=w?g+"px":"",n.transform="",n))}var ne={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=void 0===r||r,i=n.adaptive,a=void 0===i||i,s=n.roundOffsets,f=void 0===s||s,c={placement:C(t.placement),variation:_(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,te(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:a,roundOffsets:f})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,te(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:f})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}};var re={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},o=t.attributes[e]||{},i=t.elements[e];r(i)&&p(i)&&(Object.assign(i.style,n),Object.keys(o).forEach((function(e){var t=o[e];!1===t?i.removeAttribute(e):i.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var o=t.elements[e],i=t.attributes[e]||{},a=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});r(o)&&p(o)&&(Object.assign(o.style,a),Object.keys(i).forEach((function(e){o.removeAttribute(e)})))}))}},requires:["computeStyles"]};var oe={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.offset,i=void 0===o?[0,0]:o,a=T.reduce((function(e,n){return e[n]=function(e,t,n){var r=C(e),o=[A,j].indexOf(r)>=0?-1:1,i="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[A,D].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},ie={left:"right",right:"left",bottom:"top",top:"bottom"};function ae(e){return e.replace(/left|right|bottom|top/g,(function(e){return ie[e]}))}var se={start:"end",end:"start"};function fe(e){return e.replace(/start|end/g,(function(e){return se[e]}))}function ce(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?T:f,p=_(r),u=p?s?H:H.filter((function(e){return _(e)===p})):P,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=Y(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[C(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var pe={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,g=C(v),y=f||(g===v||!h?[ae(v)]:function(e){if(C(e)===L)return[];var t=ae(e);return[fe(e),t,fe(t)]}(v)),b=[v].concat(y).reduce((function(e,n){return e.concat(C(n)===L?ce(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),x=t.rects.reference,w=t.rects.popper,O=new Map,P=!0,k=b[0],W=0;W<b.length;W++){var B=b[W],H=C(B),T=_(B)===M,R=[j,E].indexOf(H)>=0,S=R?"width":"height",q=Y(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),V=R?T?D:A:T?E:j;x[S]>w[S]&&(V=ae(V));var N=ae(V),I=[];if(i&&I.push(q[H]<=0),s&&I.push(q[V]<=0,q[N]<=0),I.every((function(e){return e}))){k=B,P=!1;break}O.set(B,I)}if(P)for(var F=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return k=t,"break"},U=h?3:1;U>0;U--){if("break"===F(U))break}t.placement!==k&&(t.modifiersData[r]._skip=!0,t.placement=k,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function ue(e,t,n){return i(e,a(t,n))}var le={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,g=n.tetherOffset,y=void 0===g?0:g,b=Y(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),x=C(t.placement),w=_(t.placement),L=!w,P=F(x),k="x"===P?"y":"x",W=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,q={x:0,y:0};if(W){if(s){var V,N="y"===P?j:A,I="y"===P?E:D,U="y"===P?"height":"width",z=W[P],X=z+b[N],G=z-b[I],J=m?-H[U]/2:0,K=w===M?B[U]:H[U],Q=w===M?-H[U]:-B[U],Z=t.elements.arrow,$=m&&Z?v(Z):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[N],ne=ee[I],re=ue(0,B[U],$[U]),oe=L?B[U]/2-J-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=L?-B[U]/2+J+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&O(t.elements.arrow),se=ae?"y"===P?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(V=null==S?void 0:S[P])?V:0,ce=z+ie-fe,pe=ue(m?a(X,z+oe-fe-se):X,z,m?i(G,ce):G);W[P]=pe,q[P]=pe-z}if(c){var le,de="x"===P?j:A,he="x"===P?E:D,me=W[k],ve="y"===k?"height":"width",ge=me+b[de],ye=me-b[he],be=-1!==[j,A].indexOf(x),xe=null!=(le=null==S?void 0:S[k])?le:0,we=be?ge:me-B[ve]-H[ve]-xe+R.altAxis,Oe=be?me+B[ve]+H[ve]-xe-R.altAxis:ye,je=m&&be?function(e,t,n){var r=ue(e,t,n);return r>n?n:r}(we,me,Oe):ue(m?we:ge,me,m?Oe:ye);W[k]=je,q[k]=je-me}t.modifiersData[r]=q}},requiresIfExists:["offset"]};var de={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=C(n.placement),f=F(s),c=[A,D].indexOf(s)>=0?"height":"width";if(i&&a){var p=function(e,t){return z("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:X(e,P))}(o.padding,n),u=v(i),l="y"===f?j:A,d="y"===f?E:D,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],g=O(i),y=g?"y"===f?g.clientHeight||0:g.clientWidth||0:0,b=h/2-m/2,x=p[l],w=y-u[c]-p[d],L=y/2-u[c]/2+b,M=ue(x,L,w),k=f;n.modifiersData[r]=((t={})[k]=M,t.centerOffset=M-L,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&q(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function he(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function me(e){return[j,D,E,A].some((function(t){return e[t]>=0}))}var ve={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=Y(t,{elementContext:"reference"}),s=Y(t,{altBoundary:!0}),f=he(a,r),c=he(s,o,i),p=me(f),u=me(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":u})}},ge=K({defaultModifiers:[Z,$,ne,re]}),ye=[Z,$,ne,re,oe,pe,le,de,ve],be=K({defaultModifiers:ye});e.applyStyles=re,e.arrow=de,e.computeStyles=ne,e.createPopper=be,e.createPopperLite=ge,e.defaultModifiers=ye,e.detectOverflow=Y,e.eventListeners=Z,e.flip=pe,e.hide=ve,e.offset=oe,e.popperGenerator=K,e.popperOffsets=$,e.preventOverflow=le,Object.defineProperty(e,"__esModule",{value:!0})}));
2981// tippy.js v6.3.7 - MIT License - https://github.com/atomiks/tippyjs
vendor: 25,667 bytes, line 2982
2982!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],e):(t=t||self).tippy=e(t.Popper)}(this,(function(t){"use strict";var e="undefined"!=typeof window&&"undefined"!=typeof document,n=!!e&&!!window.msCrypto,r={passive:!0,capture:!0},o=function(){return document.body};function i(t,e,n){if(Array.isArray(t)){var r=t[e];return null==r?Array.isArray(n)?n[e]:n:r}return t}function a(t,e){var n={}.toString.call(t);return 0===n.indexOf("[object")&&n.indexOf(e+"]")>-1}function s(t,e){return"function"==typeof t?t.apply(void 0,e):t}function u(t,e){return 0===e?t:function(r){clearTimeout(n),n=setTimeout((function(){t(r)}),e)};var n}function p(t,e){var n=Object.assign({},t);return e.forEach((function(t){delete n[t]})),n}function c(t){return[].concat(t)}function f(t,e){-1===t.indexOf(e)&&t.push(e)}function l(t){return t.split("-")[0]}function d(t){return[].slice.call(t)}function v(t){return Object.keys(t).reduce((function(e,n){return void 0!==t[n]&&(e[n]=t[n]),e}),{})}function m(){return document.createElement("div")}function g(t){return["Element","Fragment"].some((function(e){return a(t,e)}))}function h(t){return a(t,"MouseEvent")}function b(t){return!(!t||!t._tippy||t._tippy.reference!==t)}function y(t){return g(t)?[t]:function(t){return a(t,"NodeList")}(t)?d(t):Array.isArray(t)?t:d(document.querySelectorAll(t))}function w(t,e){t.forEach((function(t){t&&(t.style.transitionDuration=e+"ms")}))}function x(t,e){t.forEach((function(t){t&&t.setAttribute("data-state",e)}))}function E(t){var e,n=c(t)[0];return null!=n&&null!=(e=n.ownerDocument)&&e.body?n.ownerDocument:document}function O(t,e,n){var r=e+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(e){t[r](e,n)}))}function C(t,e){for(var n=e;n;){var r;if(t.contains(n))return!0;n=null==n.getRootNode||null==(r=n.getRootNode())?void 0:r.host}return!1}var T={isTouch:!1},A=0;function L(){T.isTouch||(T.isTouch=!0,window.performance&&document.addEventListener("mousemove",D))}function D(){var t=performance.now();t-A<20&&(T.isTouch=!1,document.removeEventListener("mousemove",D)),A=t}function k(){var t=document.activeElement;if(b(t)){var e=t._tippy;t.blur&&!e.state.isVisible&&t.blur()}}var R=Object.assign({appendTo:o,aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},{animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),P=Object.keys(R);function j(t){var e=(t.plugins||[]).reduce((function(e,n){var r,o=n.name,i=n.defaultValue;o&&(e[o]=void 0!==t[o]?t[o]:null!=(r=R[o])?r:i);return e}),{});return Object.assign({},t,e)}function M(t,e){var n=Object.assign({},e,{content:s(e.content,[t])},e.ignoreAttributes?{}:function(t,e){return(e?Object.keys(j(Object.assign({},R,{plugins:e}))):P).reduce((function(e,n){var r=(t.getAttribute("data-tippy-"+n)||"").trim();if(!r)return e;if("content"===n)e[n]=r;else try{e[n]=JSON.parse(r)}catch(t){e[n]=r}return e}),{})}(t,e.plugins));return n.aria=Object.assign({},R.aria,n.aria),n.aria={expanded:"auto"===n.aria.expanded?e.interactive:n.aria.expanded,content:"auto"===n.aria.content?e.interactive?null:"describedby":n.aria.content},n}function V(t,e){t.innerHTML=e}function I(t){var e=m();return!0===t?e.className="tippy-arrow":(e.className="tippy-svg-arrow",g(t)?e.appendChild(t):V(e,t)),e}function S(t,e){g(e.content)?(V(t,""),t.appendChild(e.content)):"function"!=typeof e.content&&(e.allowHTML?V(t,e.content):t.textContent=e.content)}function B(t){var e=t.firstElementChild,n=d(e.children);return{box:e,content:n.find((function(t){return t.classList.contains("tippy-content")})),arrow:n.find((function(t){return t.classList.contains("tippy-arrow")||t.classList.contains("tippy-svg-arrow")})),backdrop:n.find((function(t){return t.classList.contains("tippy-backdrop")}))}}function N(t){var e=m(),n=m();n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var r=m();function o(n,r){var o=B(e),i=o.box,a=o.content,s=o.arrow;r.theme?i.setAttribute("data-theme",r.theme):i.removeAttribute("data-theme"),"string"==typeof r.animation?i.setAttribute("data-animation",r.animation):i.removeAttribute("data-animation"),r.inertia?i.setAttribute("data-inertia",""):i.removeAttribute("data-inertia"),i.style.maxWidth="number"==typeof r.maxWidth?r.maxWidth+"px":r.maxWidth,r.role?i.setAttribute("role",r.role):i.removeAttribute("role"),n.content===r.content&&n.allowHTML===r.allowHTML||S(a,t.props),r.arrow?s?n.arrow!==r.arrow&&(i.removeChild(s),i.appendChild(I(r.arrow))):i.appendChild(I(r.arrow)):s&&i.removeChild(s)}return r.className="tippy-content",r.setAttribute("data-state","hidden"),S(r,t.props),e.appendChild(n),n.appendChild(r),o(t.props,t.props),{popper:e,onUpdate:o}}N.$$tippy=!0;var H=1,U=[],_=[];function z(e,a){var p,g,b,y,A,L,D,k,P=M(e,Object.assign({},R,j(v(a)))),V=!1,I=!1,S=!1,N=!1,z=[],F=u(wt,P.interactiveDebounce),W=H++,X=(k=P.plugins).filter((function(t,e){return k.indexOf(t)===e})),Y={id:W,reference:e,popper:m(),popperInstance:null,props:P,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:X,clearDelayTimeouts:function(){clearTimeout(p),clearTimeout(g),cancelAnimationFrame(b)},setProps:function(t){if(Y.state.isDestroyed)return;at("onBeforeUpdate",[Y,t]),bt();var n=Y.props,r=M(e,Object.assign({},n,v(t),{ignoreAttributes:!0}));Y.props=r,ht(),n.interactiveDebounce!==r.interactiveDebounce&&(pt(),F=u(wt,r.interactiveDebounce));n.triggerTarget&&!r.triggerTarget?c(n.triggerTarget).forEach((function(t){t.removeAttribute("aria-expanded")})):r.triggerTarget&&e.removeAttribute("aria-expanded");ut(),it(),J&&J(n,r);Y.popperInstance&&(Ct(),At().forEach((function(t){requestAnimationFrame(t._tippy.popperInstance.forceUpdate)})));at("onAfterUpdate",[Y,t])},setContent:function(t){Y.setProps({content:t})},show:function(){var t=Y.state.isVisible,e=Y.state.isDestroyed,n=!Y.state.isEnabled,r=T.isTouch&&!Y.props.touch,a=i(Y.props.duration,0,R.duration);if(t||e||n||r)return;if(et().hasAttribute("disabled"))return;if(at("onShow",[Y],!1),!1===Y.props.onShow(Y))return;Y.state.isVisible=!0,tt()&&($.style.visibility="visible");it(),dt(),Y.state.isMounted||($.style.transition="none");if(tt()){var u=rt(),p=u.box,c=u.content;w([p,c],0)}L=function(){var t;if(Y.state.isVisible&&!N){if(N=!0,$.offsetHeight,$.style.transition=Y.props.moveTransition,tt()&&Y.props.animation){var e=rt(),n=e.box,r=e.content;w([n,r],a),x([n,r],"visible")}st(),ut(),f(_,Y),null==(t=Y.popperInstance)||t.forceUpdate(),at("onMount",[Y]),Y.props.animation&&tt()&&function(t,e){mt(t,e)}(a,(function(){Y.state.isShown=!0,at("onShown",[Y])}))}},function(){var t,e=Y.props.appendTo,n=et();t=Y.props.interactive&&e===o||"parent"===e?n.parentNode:s(e,[n]);t.contains($)||t.appendChild($);Y.state.isMounted=!0,Ct()}()},hide:function(){var t=!Y.state.isVisible,e=Y.state.isDestroyed,n=!Y.state.isEnabled,r=i(Y.props.duration,1,R.duration);if(t||e||n)return;if(at("onHide",[Y],!1),!1===Y.props.onHide(Y))return;Y.state.isVisible=!1,Y.state.isShown=!1,N=!1,V=!1,tt()&&($.style.visibility="hidden");if(pt(),vt(),it(!0),tt()){var o=rt(),a=o.box,s=o.content;Y.props.animation&&(w([a,s],r),x([a,s],"hidden"))}st(),ut(),Y.props.animation?tt()&&function(t,e){mt(t,(function(){!Y.state.isVisible&&$.parentNode&&$.parentNode.contains($)&&e()}))}(r,Y.unmount):Y.unmount()},hideWithInteractivity:function(t){nt().addEventListener("mousemove",F),f(U,F),F(t)},enable:function(){Y.state.isEnabled=!0},disable:function(){Y.hide(),Y.state.isEnabled=!1},unmount:function(){Y.state.isVisible&&Y.hide();if(!Y.state.isMounted)return;Tt(),At().forEach((function(t){t._tippy.unmount()})),$.parentNode&&$.parentNode.removeChild($);_=_.filter((function(t){return t!==Y})),Y.state.isMounted=!1,at("onHidden",[Y])},destroy:function(){if(Y.state.isDestroyed)return;Y.clearDelayTimeouts(),Y.unmount(),bt(),delete e._tippy,Y.state.isDestroyed=!0,at("onDestroy",[Y])}};if(!P.render)return Y;var q=P.render(Y),$=q.popper,J=q.onUpdate;$.setAttribute("data-tippy-root",""),$.id="tippy-"+Y.id,Y.popper=$,e._tippy=Y,$._tippy=Y;var G=X.map((function(t){return t.fn(Y)})),K=e.hasAttribute("aria-expanded");return ht(),ut(),it(),at("onCreate",[Y]),P.showOnCreate&&Lt(),$.addEventListener("mouseenter",(function(){Y.props.interactive&&Y.state.isVisible&&Y.clearDelayTimeouts()})),$.addEventListener("mouseleave",(function(){Y.props.interactive&&Y.props.trigger.indexOf("mouseenter")>=0&&nt().addEventListener("mousemove",F)})),Y;function Q(){var t=Y.props.touch;return Array.isArray(t)?t:[t,0]}function Z(){return"hold"===Q()[0]}function tt(){var t;return!(null==(t=Y.props.render)||!t.$$tippy)}function et(){return D||e}function nt(){var t=et().parentNode;return t?E(t):document}function rt(){return B($)}function ot(t){return Y.state.isMounted&&!Y.state.isVisible||T.isTouch||y&&"focus"===y.type?0:i(Y.props.delay,t?0:1,R.delay)}function it(t){void 0===t&&(t=!1),$.style.pointerEvents=Y.props.interactive&&!t?"":"none",$.style.zIndex=""+Y.props.zIndex}function at(t,e,n){var r;(void 0===n&&(n=!0),G.forEach((function(n){n[t]&&n[t].apply(n,e)})),n)&&(r=Y.props)[t].apply(r,e)}function st(){var t=Y.props.aria;if(t.content){var n="aria-"+t.content,r=$.id;c(Y.props.triggerTarget||e).forEach((function(t){var e=t.getAttribute(n);if(Y.state.isVisible)t.setAttribute(n,e?e+" "+r:r);else{var o=e&&e.replace(r,"").trim();o?t.setAttribute(n,o):t.removeAttribute(n)}}))}}function ut(){!K&&Y.props.aria.expanded&&c(Y.props.triggerTarget||e).forEach((function(t){Y.props.interactive?t.setAttribute("aria-expanded",Y.state.isVisible&&t===et()?"true":"false"):t.removeAttribute("aria-expanded")}))}function pt(){nt().removeEventListener("mousemove",F),U=U.filter((function(t){return t!==F}))}function ct(t){if(!T.isTouch||!S&&"mousedown"!==t.type){var n=t.composedPath&&t.composedPath()[0]||t.target;if(!Y.props.interactive||!C($,n)){if(c(Y.props.triggerTarget||e).some((function(t){return C(t,n)}))){if(T.isTouch)return;if(Y.state.isVisible&&Y.props.trigger.indexOf("click")>=0)return}else at("onClickOutside",[Y,t]);!0===Y.props.hideOnClick&&(Y.clearDelayTimeouts(),Y.hide(),I=!0,setTimeout((function(){I=!1})),Y.state.isMounted||vt())}}}function ft(){S=!0}function lt(){S=!1}function dt(){var t=nt();t.addEventListener("mousedown",ct,!0),t.addEventListener("touchend",ct,r),t.addEventListener("touchstart",lt,r),t.addEventListener("touchmove",ft,r)}function vt(){var t=nt();t.removeEventListener("mousedown",ct,!0),t.removeEventListener("touchend",ct,r),t.removeEventListener("touchstart",lt,r),t.removeEventListener("touchmove",ft,r)}function mt(t,e){var n=rt().box;function r(t){t.target===n&&(O(n,"remove",r),e())}if(0===t)return e();O(n,"remove",A),O(n,"add",r),A=r}function gt(t,n,r){void 0===r&&(r=!1),c(Y.props.triggerTarget||e).forEach((function(e){e.addEventListener(t,n,r),z.push({node:e,eventType:t,handler:n,options:r})}))}function ht(){var t;Z()&&(gt("touchstart",yt,{passive:!0}),gt("touchend",xt,{passive:!0})),(t=Y.props.trigger,t.split(/\s+/).filter(Boolean)).forEach((function(t){if("manual"!==t)switch(gt(t,yt),t){case"mouseenter":gt("mouseleave",xt);break;case"focus":gt(n?"focusout":"blur",Et);break;case"focusin":gt("focusout",Et)}}))}function bt(){z.forEach((function(t){var e=t.node,n=t.eventType,r=t.handler,o=t.options;e.removeEventListener(n,r,o)})),z=[]}function yt(t){var e,n=!1;if(Y.state.isEnabled&&!Ot(t)&&!I){var r="focus"===(null==(e=y)?void 0:e.type);y=t,D=t.currentTarget,ut(),!Y.state.isVisible&&h(t)&&U.forEach((function(e){return e(t)})),"click"===t.type&&(Y.props.trigger.indexOf("mouseenter")<0||V)&&!1!==Y.props.hideOnClick&&Y.state.isVisible?n=!0:Lt(t),"click"===t.type&&(V=!n),n&&!r&&Dt(t)}}function wt(t){var e=t.target,n=et().contains(e)||$.contains(e);"mousemove"===t.type&&n||function(t,e){var n=e.clientX,r=e.clientY;return t.every((function(t){var e=t.popperRect,o=t.popperState,i=t.props.interactiveBorder,a=l(o.placement),s=o.modifiersData.offset;if(!s)return!0;var u="bottom"===a?s.top.y:0,p="top"===a?s.bottom.y:0,c="right"===a?s.left.x:0,f="left"===a?s.right.x:0,d=e.top-r+u>i,v=r-e.bottom-p>i,m=e.left-n+c>i,g=n-e.right-f>i;return d||v||m||g}))}(At().concat($).map((function(t){var e,n=null==(e=t._tippy.popperInstance)?void 0:e.state;return n?{popperRect:t.getBoundingClientRect(),popperState:n,props:P}:null})).filter(Boolean),t)&&(pt(),Dt(t))}function xt(t){Ot(t)||Y.props.trigger.indexOf("click")>=0&&V||(Y.props.interactive?Y.hideWithInteractivity(t):Dt(t))}function Et(t){Y.props.trigger.indexOf("focusin")<0&&t.target!==et()||Y.props.interactive&&t.relatedTarget&&$.contains(t.relatedTarget)||Dt(t)}function Ot(t){return!!T.isTouch&&Z()!==t.type.indexOf("touch")>=0}function Ct(){Tt();var n=Y.props,r=n.popperOptions,o=n.placement,i=n.offset,a=n.getReferenceClientRect,s=n.moveTransition,u=tt()?B($).arrow:null,p=a?{getBoundingClientRect:a,contextElement:a.contextElement||et()}:e,c=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!s}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(t){var e=t.state;if(tt()){var n=rt().box;["placement","reference-hidden","escaped"].forEach((function(t){"placement"===t?n.setAttribute("data-placement",e.placement):e.attributes.popper["data-popper-"+t]?n.setAttribute("data-"+t,""):n.removeAttribute("data-"+t)})),e.attributes.popper={}}}}];tt()&&u&&c.push({name:"arrow",options:{element:u,padding:3}}),c.push.apply(c,(null==r?void 0:r.modifiers)||[]),Y.popperInstance=t.createPopper(p,$,Object.assign({},r,{placement:o,onFirstUpdate:L,modifiers:c}))}function Tt(){Y.popperInstance&&(Y.popperInstance.destroy(),Y.popperInstance=null)}function At(){return d($.querySelectorAll("[data-tippy-root]"))}function Lt(t){Y.clearDelayTimeouts(),t&&at("onTrigger",[Y,t]),dt();var e=ot(!0),n=Q(),r=n[0],o=n[1];T.isTouch&&"hold"===r&&o&&(e=o),e?p=setTimeout((function(){Y.show()}),e):Y.show()}function Dt(t){if(Y.clearDelayTimeouts(),at("onUntrigger",[Y,t]),Y.state.isVisible){if(!(Y.props.trigger.indexOf("mouseenter")>=0&&Y.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(t.type)>=0&&V)){var e=ot(!1);e?g=setTimeout((function(){Y.state.isVisible&&Y.hide()}),e):b=requestAnimationFrame((function(){Y.hide()}))}}else vt()}}function F(t,e){void 0===e&&(e={});var n=R.plugins.concat(e.plugins||[]);document.addEventListener("touchstart",L,r),window.addEventListener("blur",k);var o=Object.assign({},e,{plugins:n}),i=y(t).reduce((function(t,e){var n=e&&z(e,o);return n&&t.push(n),t}),[]);return g(t)?i[0]:i}F.defaultProps=R,F.setDefaultProps=function(t){Object.keys(t).forEach((function(e){R[e]=t[e]}))},F.currentInput=T;var W=Object.assign({},t.applyStyles,{effect:function(t){var e=t.state,n={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(e.elements.popper.style,n.popper),e.styles=n,e.elements.arrow&&Object.assign(e.elements.arrow.style,n.arrow)}}),X={mouseover:"mouseenter",focusin:"focus",click:"click"};var Y={name:"animateFill",defaultValue:!1,fn:function(t){var e;if(null==(e=t.props.render)||!e.$$tippy)return{};var n=B(t.popper),r=n.box,o=n.content,i=t.props.animateFill?function(){var t=m();return t.className="tippy-backdrop",x([t],"hidden"),t}():null;return{onCreate:function(){i&&(r.insertBefore(i,r.firstElementChild),r.setAttribute("data-animatefill",""),r.style.overflow="hidden",t.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(i){var t=r.style.transitionDuration,e=Number(t.replace("ms",""));o.style.transitionDelay=Math.round(e/10)+"ms",i.style.transitionDuration=t,x([i],"visible")}},onShow:function(){i&&(i.style.transitionDuration="0ms")},onHide:function(){i&&x([i],"hidden")}}}};var q={clientX:0,clientY:0},$=[];function J(t){var e=t.clientX,n=t.clientY;q={clientX:e,clientY:n}}var G={name:"followCursor",defaultValue:!1,fn:function(t){var e=t.reference,n=E(t.props.triggerTarget||e),r=!1,o=!1,i=!0,a=t.props;function s(){return"initial"===t.props.followCursor&&t.state.isVisible}function u(){n.addEventListener("mousemove",f)}function p(){n.removeEventListener("mousemove",f)}function c(){r=!0,t.setProps({getReferenceClientRect:null}),r=!1}function f(n){var r=!n.target||e.contains(n.target),o=t.props.followCursor,i=n.clientX,a=n.clientY,s=e.getBoundingClientRect(),u=i-s.left,p=a-s.top;!r&&t.props.interactive||t.setProps({getReferenceClientRect:function(){var t=e.getBoundingClientRect(),n=i,r=a;"initial"===o&&(n=t.left+u,r=t.top+p);var s="horizontal"===o?t.top:r,c="vertical"===o?t.right:n,f="horizontal"===o?t.bottom:r,l="vertical"===o?t.left:n;return{width:c-l,height:f-s,top:s,right:c,bottom:f,left:l}}})}function l(){t.props.followCursor&&($.push({instance:t,doc:n}),function(t){t.addEventListener("mousemove",J)}(n))}function d(){0===($=$.filter((function(e){return e.instance!==t}))).filter((function(t){return t.doc===n})).length&&function(t){t.removeEventListener("mousemove",J)}(n)}return{onCreate:l,onDestroy:d,onBeforeUpdate:function(){a=t.props},onAfterUpdate:function(e,n){var i=n.followCursor;r||void 0!==i&&a.followCursor!==i&&(d(),i?(l(),!t.state.isMounted||o||s()||u()):(p(),c()))},onMount:function(){t.props.followCursor&&!o&&(i&&(f(q),i=!1),s()||u())},onTrigger:function(t,e){h(e)&&(q={clientX:e.clientX,clientY:e.clientY}),o="focus"===e.type},onHidden:function(){t.props.followCursor&&(c(),p(),i=!0)}}}};var K={name:"inlinePositioning",defaultValue:!1,fn:function(t){var e,n=t.reference;var r=-1,o=!1,i=[],a={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(o){var a=o.state;t.props.inlinePositioning&&(-1!==i.indexOf(a.placement)&&(i=[]),e!==a.placement&&-1===i.indexOf(a.placement)&&(i.push(a.placement),t.setProps({getReferenceClientRect:function(){return function(t){return function(t,e,n,r){if(n.length<2||null===t)return e;if(2===n.length&&r>=0&&n[0].left>n[1].right)return n[r]||e;switch(t){case"top":case"bottom":var o=n[0],i=n[n.length-1],a="top"===t,s=o.top,u=i.bottom,p=a?o.left:i.left,c=a?o.right:i.right;return{top:s,bottom:u,left:p,right:c,width:c-p,height:u-s};case"left":case"right":var f=Math.min.apply(Math,n.map((function(t){return t.left}))),l=Math.max.apply(Math,n.map((function(t){return t.right}))),d=n.filter((function(e){return"left"===t?e.left===f:e.right===l})),v=d[0].top,m=d[d.length-1].bottom;return{top:v,bottom:m,left:f,right:l,width:l-f,height:m-v};default:return e}}(l(t),n.getBoundingClientRect(),d(n.getClientRects()),r)}(a.placement)}})),e=a.placement)}};function s(){var e;o||(e=function(t,e){var n;return{popperOptions:Object.assign({},t.popperOptions,{modifiers:[].concat(((null==(n=t.popperOptions)?void 0:n.modifiers)||[]).filter((function(t){return t.name!==e.name})),[e])})}}(t.props,a),o=!0,t.setProps(e),o=!1)}return{onCreate:s,onAfterUpdate:s,onTrigger:function(e,n){if(h(n)){var o=d(t.reference.getClientRects()),i=o.find((function(t){return t.left-2<=n.clientX&&t.right+2>=n.clientX&&t.top-2<=n.clientY&&t.bottom+2>=n.clientY})),a=o.indexOf(i);r=a>-1?a:r}},onHidden:function(){r=-1}}}};var Q={name:"sticky",defaultValue:!1,fn:function(t){var e=t.reference,n=t.popper;function r(e){return!0===t.props.sticky||t.props.sticky===e}var o=null,i=null;function a(){var s=r("reference")?(t.popperInstance?t.popperInstance.state.elements.reference:e).getBoundingClientRect():null,u=r("popper")?n.getBoundingClientRect():null;(s&&Z(o,s)||u&&Z(i,u))&&t.popperInstance&&t.popperInstance.update(),o=s,i=u,t.state.isMounted&&requestAnimationFrame(a)}return{onMount:function(){t.props.sticky&&a()}}}};function Z(t,e){return!t||!e||(t.top!==e.top||t.right!==e.right||t.bottom!==e.bottom||t.left!==e.left)}return e&&function(t){var e=document.createElement("style");e.textContent=t,e.setAttribute("data-tippy-stylesheet","");var n=document.head,r=document.querySelector("head>style,head>link");r?n.insertBefore(e,r):n.appendChild(e)}('.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1}'),F.setDefaultProps({plugins:[Y,G,K,Q],render:N}),F.createSingleton=function(t,e){var n;void 0===e&&(e={});var r,o=t,i=[],a=[],s=e.overrides,u=[],f=!1;function l(){a=o.map((function(t){return c(t.props.triggerTarget||t.reference)})).reduce((function(t,e){return t.concat(e)}),[])}function d(){i=o.map((function(t){return t.reference}))}function v(t){o.forEach((function(e){t?e.enable():e.disable()}))}function g(t){return o.map((function(e){var n=e.setProps;return e.setProps=function(o){n(o),e.reference===r&&t.setProps(o)},function(){e.setProps=n}}))}function h(t,e){var n=a.indexOf(e);if(e!==r){r=e;var u=(s||[]).concat("content").reduce((function(t,e){return t[e]=o[n].props[e],t}),{});t.setProps(Object.assign({},u,{getReferenceClientRect:"function"==typeof u.getReferenceClientRect?u.getReferenceClientRect:function(){var t;return null==(t=i[n])?void 0:t.getBoundingClientRect()}}))}}v(!1),d(),l();var b={fn:function(){return{onDestroy:function(){v(!0)},onHidden:function(){r=null},onClickOutside:function(t){t.props.showOnCreate&&!f&&(f=!0,r=null)},onShow:function(t){t.props.showOnCreate&&!f&&(f=!0,h(t,i[0]))},onTrigger:function(t,e){h(t,e.currentTarget)}}}},y=F(m(),Object.assign({},p(e,["overrides"]),{plugins:[b].concat(e.plugins||[]),triggerTarget:a,popperOptions:Object.assign({},e.popperOptions,{modifiers:[].concat((null==(n=e.popperOptions)?void 0:n.modifiers)||[],[W])})})),w=y.show;y.show=function(t){if(w(),!r&&null==t)return h(y,i[0]);if(!r||null!=t){if("number"==typeof t)return i[t]&&h(y,i[t]);if(o.indexOf(t)>=0){var e=t.reference;return h(y,e)}return i.indexOf(t)>=0?h(y,t):void 0}},y.showNext=function(){var t=i[0];if(!r)return y.show(0);var e=i.indexOf(r);y.show(i[e+1]||t)},y.showPrevious=function(){var t=i[i.length-1];if(!r)return y.show(t);var e=i.indexOf(r),n=i[e-1]||t;y.show(n)};var x=y.setProps;return y.setProps=function(t){s=t.overrides||s,x(t)},y.setInstances=function(t){v(!0),u.forEach((function(t){return t()})),o=t,v(!1),d(),l(),u=g(y),y.setProps({triggerTarget:a})},u=g(y),y},F.delegate=function(t,e){var n=[],o=[],i=!1,a=e.target,s=p(e,["target"]),u=Object.assign({},s,{trigger:"manual",touch:!1}),f=Object.assign({touch:R.touch},s,{showOnCreate:!0}),l=F(t,u);function d(t){if(t.target&&!i){var n=t.target.closest(a);if(n){var r=n.getAttribute("data-tippy-trigger")||e.trigger||R.trigger;if(!n._tippy&&!("touchstart"===t.type&&"boolean"==typeof f.touch||"touchstart"!==t.type&&r.indexOf(X[t.type])<0)){var s=F(n,f);s&&(o=o.concat(s))}}}}function v(t,e,r,o){void 0===o&&(o=!1),t.addEventListener(e,r,o),n.push({node:t,eventType:e,handler:r,options:o})}return c(l).forEach((function(t){var e=t.destroy,a=t.enable,s=t.disable;t.destroy=function(t){void 0===t&&(t=!0),t&&o.forEach((function(t){t.destroy()})),o=[],n.forEach((function(t){var e=t.node,n=t.eventType,r=t.handler,o=t.options;e.removeEventListener(n,r,o)})),n=[],e()},t.enable=function(){a(),o.forEach((function(t){return t.enable()})),i=!1},t.disable=function(){s(),o.forEach((function(t){return t.disable()})),i=!0},function(t){var e=t.reference;v(e,"touchstart",d,r),v(e,"mouseover",d),v(e,"focusin",d),v(e,"click",d)}(t)})),l},F.hideAll=function(t){var e=void 0===t?{}:t,n=e.exclude,r=e.duration;_.forEach((function(t){var e=!1;if(n&&(e=b(n)?t.reference===n:t.popper===n.popper),!e){var o=t.props.duration;t.setProps({duration:r}),t.hide(),t.state.isDestroyed||t.setProps({duration:o})}}))},F.roundArrow='<svg width="16" height="6" xmlns="http://www.w3.org/2000/svg"><path d="M0 6s1.796-.013 4.67-3.615C5.851.9 6.93.006 8 0c1.07-.006 2.148.887 3.343 2.385C14.233 6.005 16 6 16 6H0z"></svg>',F}));
vendor: 6,389 bytes, lines 2982-2985
2982
2983
2984/*! selectize.js - v0.13.5 | https://github.com/selectize/selectize.js | Apache License (v2) */
2985!function(root,factory){"function"==typeof define&&define.amd?define("sifter",factory):"object"==typeof exports?module.exports=factory():root.Sifter=factory()}(this,function(){function Sifter(items,settings){this.items=items,this.settings=settings||{diacritics:!0}}Sifter.prototype.tokenize=function(query,respect_word_boundaries){if(!(query=trim(String(query||"").toLowerCase()))||!query.length)return[];for(var regex,letter,tokens=[],words=query.split(/ +/),i=0,n=words.length;i<n;i++){if(regex=escape_regex(words[i]),this.settings.diacritics)for(letter in DIACRITICS)DIACRITICS.hasOwnProperty(letter)&&(regex=regex.replace(new RegExp(letter,"g"),DIACRITICS[letter]));respect_word_boundaries&&(regex="\\b"+regex),tokens.push({string:words[i],regex:new RegExp(regex,"i")})}return tokens},Sifter.prototype.iterator=function(object,callback){var iterator=is_array(object)?Array.prototype.forEach||function(callback){for(var i=0,n=this.length;i<n;i++)callback(this[i],i,this)}:function(callback){for(var key in this)this.hasOwnProperty(key)&&callback(this[key],key,this)};iterator.apply(object,[callback])},Sifter.prototype.getScoreFunction=function(search,options){function scoreValue(value,token){var pos;return!value||-1===(pos=(value=String(value||"")).search(token.regex))?0:(token=token.string.length/value.length,0===pos&&(token+=.5),token)}var field_count,tokens=(search=this.prepareSearch(search,options)).tokens,fields=search.options.fields,token_count=tokens.length,nesting=search.options.nesting,scoreObject=(field_count=fields.length)?1===field_count?function(token,data){return scoreValue(getattr(data,fields[0],nesting),token)}:function(token,data){for(var i=0,sum=0;i<field_count;i++)sum+=scoreValue(getattr(data,fields[i],nesting),token);return sum/field_count}:function(){return 0};return token_count?1===token_count?function(data){return scoreObject(tokens[0],data)}:"and"===search.options.conjunction?function(data){for(var score,i=0,sum=0;i<token_count;i++){if((score=scoreObject(tokens[i],data))<=0)return 0;sum+=score}return sum/token_count}:function(data){for(var i=0,sum=0;i<token_count;i++)sum+=scoreObject(tokens[i],data);return sum/token_count}:function(){return 0}},Sifter.prototype.getSortFunction=function(search,options){var i,n,field,fields_count,multiplier,multipliers,implicit_score,self=this,sort=!(search=self.prepareSearch(search,options)).query&&options.sort_empty||options.sort,get_field=function(name,result){return"$score"===name?result.score:getattr(self.items[result.id],name,options.nesting)},fields=[];if(sort)for(i=0,n=sort.length;i<n;i++)!search.query&&"$score"===sort[i].field||fields.push(sort[i]);if(search.query){for(implicit_score=!0,i=0,n=fields.length;i<n;i++)if("$score"===fields[i].field){implicit_score=!1;break}implicit_score&&fields.unshift({field:"$score",direction:"desc"})}else for(i=0,n=fields.length;i<n;i++)if("$score"===fields[i].field){fields.splice(i,1);break}for(multipliers=[],i=0,n=fields.length;i<n;i++)multipliers.push("desc"===fields[i].direction?-1:1);return(fields_count=fields.length)?1===fields_count?(field=fields[0].field,multiplier=multipliers[0],function(a,b){return multiplier*cmp(get_field(field,a),get_field(field,b))}):function(a,b){for(var field,i=0;i<fields_count;i++)if(field=fields[i].field,field=multipliers[i]*cmp(get_field(field,a),get_field(field,b)))return field;return 0}:null},Sifter.prototype.prepareSearch=function(query,options){if("object"==typeof query)return query;var option_fields=(options=extend({},options)).fields,option_sort=options.sort,option_sort_empty=options.sort_empty;return option_fields&&!is_array(option_fields)&&(options.fields=[option_fields]),option_sort&&!is_array(option_sort)&&(options.sort=[option_sort]),option_sort_empty&&!is_array(option_sort_empty)&&(options.sort_empty=[option_sort_empty]),{options:options,query:String(query||"").toLowerCase(),tokens:this.tokenize(query,options.respect_word_boundaries),total:0,items:[]}},Sifter.prototype.search=function(query,options){var score,fn_score,search=this.prepareSearch(query,options);return options=search.options,query=search.query,fn_score=options.score||this.getScoreFunction(search),query.length?this.iterator(this.items,function(item,id){score=fn_score(item),(!1===options.filter||0<score)&&search.items.push({score:score,id:id})}):this.iterator(this.items,function(item,id){search.items.push({score:1,id:id})}),(query=this.getSortFunction(search,options))&&search.items.sort(query),search.total=search.items.length,"number"==typeof options.limit&&(search.items=search.items.slice(0,options.limit)),search};var cmp=function(a,b){return"number"==typeof a&&"number"==typeof b?b<a?1:a<b?-1:0:(a=asciifold(String(a||"")),(b=asciifold(String(b||"")))<a?1:a<b?-1:0)},extend=function(a,b){for(var k,object,i=1,n=arguments.length;i<n;i++)if(object=arguments[i])for(k in object)object.hasOwnProperty(k)&&(a[k]=object[k]);return a},getattr=function(obj,name,nesting){if(obj&&name){if(!nesting)return obj[name];for(var names=name.split(".");names.length&&(obj=obj[names.shift()]););return obj}},trim=function(str){return(str+"").replace(/^\s+|\s+$|/g,"")},escape_regex=function(str){return(str+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")},is_array=Array.isArray||"undefined"!=typeof $&&$.isArray||function(object){return"[object Array]"===Object.prototype.toString.call(object)},DIACRITICS={a:"[aḀḁĂăÂâǍǎȺⱥȦȧẠạÄäÀàÁáĀāÃãÅåąĄÃąĄ]",b:"[b␢βΒB฿𐌁ᛒ]",c:"[cĆćĈĉČčĊċC̄c̄ÇçḈḉȻȼƇƈɕᴄCc]",d:"[dĎďḊḋḐḑḌḍḒḓḎḏĐđD̦d̦ƉɖƊɗƋƌᵭᶁᶑȡᴅDdð]",e:"[eÉéÈèÊêḘḙĚěĔĕẼẽḚḛẺẻĖėËëĒēȨȩĘęᶒɆɇȄȅẾếỀềỄễỂểḜḝḖḗḔḕȆȇẸẹỆệⱸᴇEeɘǝƏƐε]",f:"[fƑƒḞḟ]",g:"[gɢ₲ǤǥĜĝĞğĢģƓɠĠġ]",h:"[hĤĥĦħḨḩẖẖḤḥḢḣɦʰǶƕ]",i:"[iÍíÌìĬĭÎîǏǐÏïḮḯĨĩĮįĪīỈỉȈȉȊȋỊịḬḭƗɨɨ̆ᵻᶖİiIıɪIi]",j:"[jȷĴĵɈɉʝɟʲ]",k:"[kƘƙꝀꝁḰḱǨǩḲḳḴḵκϰ₭]",l:"[lŁłĽľĻļĹĺḶḷḸḹḼḽḺḻĿŀȽƚⱠⱡⱢɫɬᶅɭȴʟLl]",n:"[nŃńǸǹŇňÑñṄṅŅņṆṇṊṋṈṉN̈n̈ƝɲȠƞᵰᶇɳȵɴNnŊŋ]",o:"[oØøÖöÓóÒòÔôǑǒŐőŎŏȮȯỌọƟɵƠơỎỏŌō
2985ÕõǪǫȌȍՕօ]",p:"[pṔṕṖṗⱣᵽƤƥᵱ]",q:"[qꝖꝗʠɊɋꝘꝙq̃]",r:"[rŔŕɌɍŘřŖŗṘṙȐȑȒȓṚṛⱤɽ]",s:"[sŚśṠṡṢṣꞨꞩŜŝŠšŞşȘșS̈s̈]",t:"[tŤťṪṫŢţṬṭƮʈȚțṰṱṮṯƬƭ]",u:"[uŬŭɄʉỤụÜüÚúÙùÛûǓǔŰűŬŭƯưỦủŪūŨũŲųȔȕ∪]",v:"[vṼṽṾṿƲʋꝞꝟⱱʋ]",w:"[wẂẃẀẁŴŵẄẅẆẇẈẉ]",x:"[xẌẍẊẋχ]",y:"[yÝýỲỳŶŷŸÿỸỹẎẏỴỵɎɏƳƴ]",z:"[zŹźẐẑŽžŻżẒẓẔẕƵƶ]"},asciifold=function(){var i,n,k,chunk,foreignletters="",lookup={};for(k in DIACRITICS)if(DIACRITICS.hasOwnProperty(k))for(foreignletters+=chunk=DIACRITICS[k].substring(2,DIACRITICS[k].length-1),i=0,n=chunk.length;i<n;i++)lookup[chunk.charAt(i)]=k;var regexp=new RegExp("["+foreignletters+"]","g");return function(str){return str.replace(regexp,function(foreignletter){return lookup[foreignletter]}).toLowerCase()}}();return Sifter}),function(root,factory){"function"==typeof define&&define.amd?define("microplugin",factory):"object"==typeof exports?module.exports=factory():root.MicroPlugin=factory()}(this,function(){var MicroPlugin={mixin:function(Interface){Interface.plugins={},Interface.prototype.initializePlugins=function(plugins){var i,n,key,queue=[];if(this.plugins={names:[],settings:{},requested:{},loaded:{}},utils.isArray(plugins))for(i=0,n=plugins.length;i<n;i++)"string"==typeof plugins[i]?queue.push(plugins[i]):(this.plugins.settings[plugins[i].name]=plugins[i].options,queue.push(plugins[i].name));else if(plugins)for(key in plugins)plugins.hasOwnProperty(key)&&(this.plugins.settings[key]=plugins[key],queue.push(key));for(;queue.length;)this.require(queue.shift())},Interface.prototype.loadPlugin=function(name){var plugins=this.plugins,plugin=Interface.plugins[name];if(!Interface.plugins.hasOwnProperty(name))throw new Error('Unable to find "'+name+'" plugin');plugins.requested[name]=!0,plugins.loaded[name]=plugin.fn.apply(this,[this.plugins.settings[name]||{}]),plugins.names.push(name)},Interface.prototype.require=function(name){var plugins=this.plugins;if(!this.plugins.loaded.hasOwnProperty(name)){if(plugins.requested[name])throw new Error('Plugin has circular dependency ("'+name+'")');this.loadPlugin(name)}return plugins.loaded[name]},Interface.define=function(name,fn){Interface.plugins[name]={name:name,fn:fn}}}},utils={isArray:Array.isArray||function(vArg){return"[object Array]"===Object.prototype.toString.call(vArg)}};return MicroPlugin}),function(root,factory){"function"==typeof define&&define.amd?define("selectize",["jquery","sifter","microplugin"],factory):"object"==typeof module&&"object"==typeof module.exports?module.exports=factory(require("jquery"),require("sifter"),require("microplugin")):root.Selectize=factory(root.jQuery,root.Sifter,root.MicroPlugin)}(this,function($,Sifter,MicroPlugin){"use strict";function MicroEvent(){}$.fn.removeHighlight=function(){return this.find("span.highlight").each(function(){this.parentNode.firstChild.nodeName;var parent=this.parentNode;parent.replaceChild(this.firstChild,this),parent.normalize()}).end()};function isset(object){return void 0!==object}function hash_key(value){return null==value?null:"boolean"==typeof value?value?"1":"0":value+""}function escape_html(str){return(str+"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function debounce_events(self,types,fn){var type,trigger=self.trigger,event_args={};for(type in self.trigger=function(){var type=arguments[0];if(-1===types.indexOf(type))return trigger.apply(self,arguments);event_args[type]=arguments},fn.apply(self,[]),self.trigger=trigger,event_args)event_args.hasOwnProperty(type)&&trigger.apply(self,event_args[type])}function getSelection(input){var sel,selLen,result={};return void 0===input?console.warn("WARN getSelection cannot locate input control"):"selectionStart"in input?(result.start=input.selectionStart,result.length=input.selectionEnd-result.start):document.selection&&(input.focus(),sel=document.selection.createRange(),selLen=document.selection.createRange().text.length,sel.moveStart("character",-input.value.length),result.start=sel.text.length-selLen,result.length=selLen),result}function measureString(str,$parent){return str?(Selectize.$testInput||(Selectize.$testInput=$("<span />").css({position:"absolute",width:"auto",padding:0,whiteSpace:"pre"}),$("<div />").css({position:"absolute",width:0,height:0,overflow:"hidden"}).append(Selectize.$testInput).appendTo("body")),Selectize.$testInput.text(str),transferStyles($parent,Selectize.$testInput,["letterSpacing","fontSize","fontFamily","fontWeight","textTransform"]),Selectize.$testInput.width()):0}function autoGrow($input){function update(e,options){var printable,keyCode,selection;options=options||{},(e=e||window.event||{}).metaKey||e.altKey||!options.force&&!1===$input.data("grow")||(options=$input.val(),e.type&&"keydown"===e.type.toLowerCase()&&(printable=48<=(keyCode=e.keyCode)&&keyCode<=57||65<=keyCode&&keyCode<=90||96<=keyCode&&keyCode<=111||186<=keyCode&&keyCode<=222||32===keyCode,46===keyCode||8===keyCode?(selection=getSelection($input[0])).length?options=options.substring(0,selection.start)+options.substring(selection.start+selection.length):8===keyCode&&selection.start?options=options.substring(0,selection.start-1)+options.substring(selection.start+1):46===keyCode&&void 0!==selection.start&&(options=options.substring(0,selection.start)+options.substring(selection.start+1)):printable&&(keyCode=e.shiftKey,selection=String.fromCharCode(e.keyCode),options+=selection=keyCode?selection.toUpperCase():selection.toLowerCase())),e=(printable=$input.attr("placeholder"))?measureString(printable,$input)+4:0,(keyCode=Math.max(measureString(options,$input),e)+4)!==currentWidth&&(currentWidth=keyCode,$input.width(keyCode),$input.triggerHandler("resize")))}var currentWidth=null;
2985$input.on("keydown keyup update blur",update),update()}MicroEvent.prototype={on:function(event,fct){this._events=this._events||{},this._events[event]=this._events[event]||[],this._events[event].push(fct)},off:function(event,fct){var n=arguments.length;return 0===n?delete this._events:1===n?delete this._events[event]:(this._events=this._events||{},void(event in this._events!=!1&&this._events[event].splice(this._events[event].indexOf(fct),1)))},trigger:function(event){if(this._events=this._events||{},event in this._events!=!1)for(var i=0;i<this._events[event].length;i++)this._events[event][i].apply(this,Array.prototype.slice.call(arguments,1))}},MicroEvent.mixin=function(destObject){for(var props=["on","off","trigger"],i=0;i<props.length;i++)destObject.prototype[props[i]]=MicroEvent.prototype[props[i]]};var options,IS_MAC=/Mac/.test(navigator.userAgent),KEY_CMD=IS_MAC?91:17,KEY_CTRL=IS_MAC?18:17,SUPPORTS_VALIDITY_API=!/android/i.test(window.navigator.userAgent)&&!!document.createElement("input").validity,hook={before:function(self,method,fn){var original=self[method];self[method]=function(){return fn.apply(self,arguments),original.apply(self,arguments)}},after:function(self,method,fn){var original=self[method];self[method]=function(){var result=original.apply(self,arguments);return fn.apply(self,arguments),result}}},transferStyles=function($from,$to,properties){var i,n,styles={};if(properties)for(i=0,n=properties.length;i<n;i++)styles[properties[i]]=$from.css(properties[i]);else styles=$from.css();$to.css(styles)},Selectize=function($input,settings){var i,n,fn,delay,timeout,input=$input[0],computedStyle=(input.selectize=this,window.getComputedStyle&&window.getComputedStyle(input,null));if(computedStyle=(computedStyle?computedStyle.getPropertyValue("direction"):input.currentStyle&&input.currentStyle.direction)||$input.parents("[dir]:first").attr("dir")||"",$.extend(this,{order:0,settings:settings,$input:$input,tabIndex:$input.attr("tabindex")||"",tagType:"select"===input.tagName.toLowerCase()?1:2,rtl:/rtl/i.test(computedStyle),eventNS:".selectize"+ ++Selectize.count,highlightedValue:null,isBlurring:!1,isOpen:!1,isDisabled:!1,isRequired:$input.is("[required]"),isInvalid:!1,isLocked:!1,isFocused:!1,isInputHidden:!1,isSetup:!1,isShiftDown:!1,isCmdDown:!1,isCtrlDown:!1,ignoreFocus:!1,ignoreBlur:!1,ignoreHover:!1,hasOptions:!1,currentResults:null,lastValue:"",lastValidValue:"",caretPos:0,loading:0,loadedSearches:{},$activeOption:null,$activeItems:[],optgroups:{},options:{},userOptions:{},items:[],renderCache:{},onSearchChange:null===settings.loadThrottle?this.onSearchChange:(fn=this.onSearchChange,delay=settings.loadThrottle,function(){var self=this,args=arguments;window.clearTimeout(timeout),timeout=window.setTimeout(function(){fn.apply(self,args)},delay)})}),this.sifter=new Sifter(this.options,{diacritics:settings.diacritics}),this.settings.options){for(i=0,n=this.settings.options.length;i<n;i++)this.registerOption(this.settings.options[i]);delete this.settings.options}if(this.settings.optgroups){for(i=0,n=this.settings.optgroups.length;i<n;i++)this.registerOptionGroup(this.settings.optgroups[i]);delete this.settings.optgroups}this.settings.mode=this.settings.mode||(1===this.settings.maxItems?"single":"multi"),"boolean"!=typeof this.settings.hideSelected&&(this.settings.hideSelected="multi"===this.settings.mode),this.initializePlugins(this.settings.plugins),this.setupCallbacks(),this.setupTemplates(),this.setup()};return MicroEvent.mixin(Selectize),void 0!==MicroPlugin?MicroPlugin.mixin(Selectize):(MicroPlugin="Dependency MicroPlugin is missing",options=(options={explanation:'Make sure you either: (1) are using the "standalone" version of Selectize, or (2) require MicroPlugin before you load Selectize.'})||{},console.error("Selectize: "+MicroPlugin),options.explanation&&(console.group&&console.group(),console.error(options.explanation),console.group&&console.groupEnd())),$.extend(Selectize.prototype,{setup:function(){var $parent,inputId,fn,self=this,settings=self.settings,eventNS=self.eventNS,$window=$(window),$document=$(document),$input
2985=self.$input,inputMode=self.settings.mode,classes=$input.attr("class")||"",$wrapper=$("<div>").addClass(settings.wrapperClass).addClass(classes).addClass(inputMode),$control=$("<div>").addClass(settings.inputClass).addClass("items").appendTo($wrapper),$control_input=$('<input type="text" autocomplete="new-password" autofill="no" />').appendTo($control).attr("tabindex",$input.is(":disabled")?"-1":self.tabIndex),$dropdown_parent=$(settings.dropdownParent||$wrapper),inputMode=$("<div>").addClass(settings.dropdownClass).addClass(inputMode).hide().appendTo($dropdown_parent),$dropdown_parent=$("<div>").addClass(settings.dropdownContentClass).attr("tabindex","-1").appendTo(inputMode);(inputId=$input.attr("id"))&&($control_input.attr("id",inputId+"-selectized"),$("label[for='"+inputId+"']").attr("for",inputId+"-selectized")),self.settings.copyClassesToDropdown&&inputMode.addClass(classes),$wrapper.css({width:$input[0].style.width}),self.plugins.names.length&&(inputId="plugin-"+self.plugins.names.join(" plugin-"),$wrapper.addClass(inputId),inputMode.addClass(inputId)),(null===settings.maxItems||1<settings.maxItems)&&1===self.tagType&&$input.attr("multiple","multiple"),self.settings.placeholder&&$control_input.attr("placeholder",settings.placeholder),!self.settings.splitOn&&self.settings.delimiter&&(classes=self.settings.delimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),self.settings.splitOn=new RegExp("\\s*"+classes+"+\\s*")),$input.attr("autocorrect")&&$control_input.attr("autocorrect",$input.attr("autocorrect")),$input.attr("autocapitalize")&&$control_input.attr("autocapitalize",$input.attr("autocapitalize")),$input.is("input")&&($control_input[0].type=$input[0].type),self.$wrapper=$wrapper,self.$control=$control,self.$control_input=$control_input,self.$dropdown=inputMode,self.$dropdown_content=$dropdown_parent,inputMode.on("mouseenter mousedown click","[data-disabled]>[data-selectable]",function(e){e.stopImmediatePropagation()}),inputMode.on("mouseenter","[data-selectable]",function(){return self.onOptionHover.apply(self,arguments)}),inputMode.on("mousedown click","[data-selectable]",function(){return self.onOptionSelect.apply(self,arguments)}),inputId="mousedown",classes="*:not(input)",fn=function(){return self.onItemSelect.apply(self,arguments)},($parent=$control).on(inputId,classes,function(e){for(var child=e.target;child&&child.parentNode!==$parent[0];)child=child.parentNode;return e.currentTarget=child,fn.apply(this,[e])}),autoGrow($control_input),$control.on({mousedown:function(){return self.onMouseDown.apply(self,arguments)},click:function(){return self.onClick.apply(self,arguments)}}),$control_input.on({mousedown:function(e){e.stopPropagation()},keydown:function(){return self.onKeyDown.apply(self,arguments)},keypress:function(){return self.onKeyPress.apply(self,arguments)},input:function(){return self.onInput.apply(self,arguments)},resize:function(){self.positionDropdown.apply(self,[])},blur:function(){return self.onBlur.apply(self,arguments)},focus:function(){return self.ignoreBlur=!1,self.onFocus.apply(self,arguments)},paste:function(){return self.onPaste.apply(self,arguments)}}),$document.on("keydown"+eventNS,function(e){self.isCmdDown=e[IS_MAC?"metaKey":"ctrlKey"],self.isCtrlDown=e[IS_MAC?"altKey":"ctrlKey"],self.isShiftDown=e.shiftKey}),$document.on("keyup"+eventNS,function(e){e.keyCode===KEY_CTRL&&(self.isCtrlDown=!1),16===e.keyCode&&(self.isShiftDown=!1),e.keyCode===KEY_CMD&&(self.isCmdDown=!1)}),$document.on("mousedown"+eventNS,function(e){if(self.isFocused){if(e.target===self.$dropdown[0]||e.target.parentNode===self.$dropdown[0])return!1;self.$control.has(e.target).length||e.target===self.$control[0]||self.blur(e.target)}}),$window.on(["scroll"+eventNS,"resize"+eventNS].join(" "),function(){self.isOpen&&self.positionDropdown.apply(self,arguments)}),$window.on("mousemove"+eventNS,function(){self.ignoreHover=!1}),this.revertSettings={$children:$input.children().detach(),tabindex:$input.attr("tabindex")},$input.attr("tabindex",-1).hide().after(self.$wrapper),Array.isArray(settings.items)&&(self.lastValidValue=settings.items,self.setValue(settings.items),delete settings.items),SUPPORTS_VALIDITY_API&&$input.on("invalid"+eventNS,function(e){e.preventDefault(),self.isInvalid=!0,self.refreshState()}),self.updateOriginalInput(),self.refreshItems(),self.refreshState(),self.updatePlaceholder(),self.isSetup=!0,$input.is(":disabled")&&self.disable(),self.on("change",this.onChange),$input.data("selectize",self),$input.addClass("selectized"),self.trigger("initialize"),!0===settings.preload&&self.onSearchChange("")},setupTemplates:function(){var field_label=this.settings.labelField,field_value=this.settings.valueField,field_optgroup=this.settings.optgroupLabelField;this.settings.render=$.extend({},{optgroup:function(data){return'<div class="optgroup">'+data.html+"</div>"},optgroup_header:function(data,escape){return'<div class="optgroup-header">'+escape(data[field_optgroup])+"</div>"},option:function(data,escape){return'<div class="option '+(""===data[field_value]?"selectize-dropdown-emptyoptionlabel":"")+'">'+escape(data[field_label])+"</div>"},item:function(data,escape){return'<div class="item">'+escape(data[field_label])+"</div>"},option_create:function(data,escape){return'<div class="create">Add <strong>'+escape(data.input)+"</strong>&hellip;</div>"}},this.settings.render)},setupCallbacks:function(){var key,fn,callbacks={initialize:"onInitialize",change:"onChange",item_add:"onItemAdd",item_remove:"onItemRemove",clear:"onClear",option_add:"onOptionAdd",option_remove:"onOptionRemove",option_clear:"onOptionClear",optgroup_add:"onOptionGroupAdd",optgroup_remove:"onOptionGroupRemove",optgroup_clear:"onOptionGroupClear",dropdown_open:"onDropdownOpen",dropdown_close:"onDropdownClose",type:"onType",load:"onLoad",focus:"onFocus",blur:"onBlur",dropdown_item_activate:"onDropdownItemActivate",dropdown_item_deactivate:"onDropdownItemDeactivate"};for(key in callbacks)callbacks.hasOwnProperty(key)&&(fn=this.settings[callbacks[key]])&&this.on(key,fn)},onClick:function(e){this.isFocused&&this.isOpen||(this.focus(),e.preventDefault())},onMouseDown:function(e){var self=this,defaultPrevented=e.isDefaultPrevented();$(e.target);if(self.isFocused){if(e.target!==self.$control_input[0])return"single"===self.settings.mode?self.isOpen?self.close():self.open():defaultPrevented||self.setActiveItem(null),!1}else defaultPrevented||window.setTimeout(function(){self.focus()},0)},onChange:function(){""!==this.getValue()&&(this.lastValidValue=this.getValue()),this.$input.trigger("input"),this.$input.trigger("change")},onPaste:function(e){var self=this;self.isFull()||self.isInputHidden||self.isLocked?e.preventDefault():self.settings.splitOn&&setTimeout(function(){var pastedText=self.$control_input.val();if(pastedText.match(self.settings.splitOn))for(var splitInput=pastedText.trim().split(self.settings.splitOn),i=0,n=splitInput.length;i<n;i++)self.createItem(splitInput[i])},0)},onKeyPress:function(e){if(this.isLocked)return e&&e.preventDefault();var character=String.fromCharCode(e.keyCode||e.which);return this.settings.create&&"multi"===this.settings.mode&&character===this.settings.delimiter?(this.createItem(),e.preventDefault(),!1):void 0},onKeyDown:function(e){var $next;e.target,this.$control_input[0];if(this.isLocked)9!==e.keyCode&&e.preventDefault();else{switch(e.keyCode){case 65:if(this.isCmdDown)return void this.selectAll();break;case 27:return void(this.isOpen&&(e.preventDefault(),e.stopPropagation(),this.close()));case 78:if(!e.ctrlKey||e.altKey)break;case 40:return!this.isOpen&&this.hasOptions?this.open():this.$activeOption&&(this.ignoreHover=!0,($next=this.getAdjacentOption(this.$activeOption,1)).length&&this.setActiveOption($next,!0,!0)),void e.preventDefault();case 80:if(!e.ctrlKey||e.altKey)break;case 38:return this.$activeOption&&(this.ignoreHover=!0,($next=this.getAdjacentOption(this.$activeOption,-1)).length&&this.setActiveOption($next,!0,!0)),void e.preventDefault();case 13:return void(this.isOpen&&this.$activeOption&&(this.onOptionSelect({currentTarget:this.$activeOption}),e.preventDefault()));case 37:return void this.advanceSelection(-1,e);case 39:return void this.advanceSelection(1,e);case 9:return this.settings.selectOnTab&&this.isOpen&&this.$activeOption&&(this.onOptionSelect({currentTarget:this.$activeOption}),this.isFull()||e.preventDefault()),void(this.settings.create&&this.createItem()&&this.settings.showAddOptionOnCreate&&e.preventDefault());case 8:case 46:return void this.deleteSelection(e)}!this.isFull()&&!this.isInputHidden||(IS_MAC?e.metaKey:e.ctrlKey)||e.preventDefault()}},onInput:function(e){var value=this.$control_input.val()||"";this.lastValue!==value&&(this.lastValue=value,this.onSearchChange(value),this.refreshOptions(),this.trigger("type",value))},onSearchChange:function(value){var self=this,fn=self.settings.load;fn&&!self.loadedSearches.hasOwnProperty(value)&&(self.loadedSearches[value]=!0,self.load(function(callback){fn.apply(self,[value,callback])}))},onFocus:function(e){var wasFocused=this.isFocused;if(this.isDisabled)return this.blur(),e&&e.preventDefault(),!1;
2985this.ignoreFocus||(this.isFocused=!0,"focus"===this.settings.preload&&this.onSearchChange(""),wasFocused||this.trigger("focus"),this.$activeItems.length||(this.showInput(),this.setActiveItem(null),this.refreshOptions(!!this.settings.openOnFocus)),this.refreshState())},onBlur:function(e,dest){var self=this;if(self.isFocused&&(self.isFocused=!1,!self.ignoreFocus)){if(!self.ignoreBlur&&document.activeElement===self.$dropdown_content[0])return self.ignoreBlur=!0,void self.onFocus(e);e=function(){self.close(),self.setTextboxValue(""),self.setActiveItem(null),self.setActiveOption(null),self.setCaret(self.items.length),self.refreshState(),dest&&dest.focus&&dest.focus(),self.isBlurring=!1,self.ignoreFocus=!1,self.trigger("blur")};self.isBlurring=!0,self.ignoreFocus=!0,self.settings.create&&self.settings.createOnBlur?self.createItem(null,!1,e):e()}},onOptionHover:function(e){this.ignoreHover||this.setActiveOption(e.currentTarget,!1)},onOptionSelect:function(e){var $target,self=this;e.preventDefault&&(e.preventDefault(),e.stopPropagation()),($target=$(e.currentTarget)).hasClass("create")?self.createItem(null,function(){self.settings.closeAfterSelect&&self.close()}):void 0!==($target=$target.attr("data-value"))&&(self.lastQuery=null,self.setTextboxValue(""),self.addItem($target),self.settings.closeAfterSelect?self.close():!self.settings.hideSelected&&e.type&&/mouse/.test(e.type)&&self.setActiveOption(self.getOption($target)))},onItemSelect:function(e){this.isLocked||"multi"===this.settings.mode&&(e.preventDefault(),this.setActiveItem(e.currentTarget,e))},load:function(fn){var self=this,$wrapper=self.$wrapper.addClass(self.settings.loadingClass);self.loading++,fn.apply(self,[function(results){self.loading=Math.max(self.loading-1,0),results&&results.length&&(self.addOption(results),self.refreshOptions(self.isFocused&&!self.isInputHidden)),self.loading||$wrapper.removeClass(self.settings.loadingClass),self.trigger("load",results)}])},getTextboxValue:function(){return this.$control_input.val()},setTextboxValue:function(value){var $input=this.$control_input;$input.val()!==value&&($input.val(value).triggerHandler("update"),this.lastValue=value)},getValue:function(){return 1===this.tagType&&this.$input.attr("multiple")?this.items:this.items.join(this.settings.delimiter)},setValue:function(value,silent){debounce_events(this,silent?[]:["change"],function(){this.clear(silent),this.addItems(value,silent)})},setMaxItems:function(value){this.settings.maxItems=value=0===value?null:value,this.settings.mode=this.settings.mode||(1===this.settings.maxItems?"single":"multi"),this.refreshState()},setActiveItem:function($item,e){var eventName,i,end,item,swap,$last;if("single"!==this.settings.mode){if(!($item=$($item)).length)return $(this.$activeItems).removeClass("active"),this.$activeItems=[],void(this.isFocused&&this.showInput());if("mousedown"===(eventName=e&&e.type.toLowerCase())&&this.isShiftDown&&this.$activeItems.length){for($last=this.$control.children(".active:last"),$last=Array.prototype.indexOf.apply(this.$control[0].childNodes,[$last[0]]),(end=Array.prototype.indexOf.apply(this.$control[0].childNodes,[$item[0]]))<$last&&(swap=$last,$last=end,end=swap),i=$last;i<=end;i++)item=this.$control[0].childNodes[i],-1===this.$activeItems.indexOf(item)&&($(item).addClass("active"),this.$activeItems.push(item));e.preventDefault()}else"mousedown"===eventName&&this.isCtrlDown||"keydown"===eventName&&this.isShiftDown?$item.hasClass("active")?(swap=this.$activeItems.indexOf($item[0]),this.$activeItems.splice(swap,1),$item.removeClass("active")):this.$activeItems.push($item.addClass("active")[0]):($(this.$activeItems).removeClass("active"),this.$activeItems=[$item.addClass("active")[0]]);this.hideInput(),this.isFocused||this.focus()}},setActiveOption:function($option,scroll,animate){var height_item,y,scroll_top,scroll_bottom;this.$activeOption&&(this.$activeOption.removeClass("active"),this.trigger("dropdown_item_deactivate",this.$activeOption.attr("data-value"))),this.$activeOption=null,($option=$($option)).length&&(this.$activeOption=$option.addClass("active"),this.isOpen&&this.trigger("dropdown_item_activate",this.$activeOption.attr("data-value")),!scroll&&isset(scroll)||($option=this.$dropdown_content.height(),height_item=this.$activeOption.outerHeight(!0),scroll=this.$dropdown_content.scrollTop()||0,scroll_bottom=(scroll_top=y=this.$activeOption.offset().top-this.$dropdown_content.offset().top+scroll)-$option+height_item,$option+scroll<y+height_item?this.$dropdown_content.stop().animate({scrollTop:scroll_bottom},animate?this.settings.scrollDuration:0):y<scroll&&this.$dropdown_content.stop().animate({scrollTop:scroll_top},animate?this.settings.scrollDuration:0)))},selectAll:function(){"single"!==this.settings.mode&&(this.$activeItems=Array.prototype.slice.apply(this.$control.children(":not(input)").addClass("active")),this.$activeItems.length&&(this.hideInput(),this.close()),this.focus())},hideInput:function(){this.setTextboxValue(""),this.$control_input.css({opacity:0,position:"absolute",left:this.rtl?1e4:-1e4}),this.isInputHidden=!0},showInput:function(){this.$control_input.css({opacity:1,position:"relative",left:0}),this.isInputHidden=!1},focus:function(){var self=this;return self.isDisabled||(self.ignoreFocus=!0,self.$control_input[0].focus(),window.setTimeout(function(){self.ignoreFocus=!1,self.onFocus()},0)),self},blur:function(dest){return this.$control_input[0].blur(),this.onBlur(null,dest),this},getScoreFunction:function(query){return this.sifter.getScoreFunction(query,this.get
2985SearchOptions())},getSearchOptions:function(){var settings=this.settings,sort=settings.sortField;return{fields:settings.searchField,conjunction:settings.searchConjunction,sort:sort="string"==typeof sort?[{field:sort}]:sort,nesting:settings.nesting}},search:function(query){var i,result,calculateScore,settings=this.settings,options=this.getSearchOptions();if(settings.score&&"function"!=typeof(calculateScore=this.settings.score.apply(this,[query])))throw new Error('Selectize "score" setting must be a function that returns a function');if(query!==this.lastQuery?(this.lastQuery=query,result=this.sifter.search(query,$.extend(options,{score:calculateScore})),this.currentResults=result):result=$.extend(!0,{},this.currentResults),settings.hideSelected)for(i=result.items.length-1;0<=i;i--)-1!==this.items.indexOf(hash_key(result.items[i].id))&&result.items.splice(i,1);return result},refreshOptions:function(triggerDropdown){void 0===triggerDropdown&&(triggerDropdown=!0);var i,j,k,groups,groups_order,option,option_html,optgroup,optgroups,html,html_children,has_create_option,$active,$create,d,tmp,self=this,query=self.$control_input.val().trim(),results=self.search(query),$dropdown_content=self.$dropdown_content,active_before=self.$activeOption&&hash_key(self.$activeOption.attr("data-value")),n=results.items.length;for("number"==typeof self.settings.maxOptions&&(n=Math.min(n,self.settings.maxOptions)),groups={},groups_order=[],i=0;i<n;i++)for(option=self.options[results.items[i].id],option_html=self.render("option",option),optgroup=option[self.settings.optgroupField]||"",j=0,k=(optgroups=Array.isArray(optgroup)?optgroup:[optgroup])&&optgroups.length;j<k;j++)optgroup=optgroups[j],self.optgroups.hasOwnProperty(optgroup)||(optgroup=""),groups.hasOwnProperty(optgroup)||(groups[optgroup]=document.createDocumentFragment(),groups_order.push(optgroup)),groups[optgroup].appendChild(option_html);for(this.settings.lockOptgroupOrder&&groups_order.sort(function(a,b){return(self.optgroups[a]&&self.optgroups[a].$order||0)-(self.optgroups[b]&&self.optgroups[b].$order||0)}),html=document.createDocumentFragment(),i=0,n=groups_order.length;i<n;i++)optgroup=groups_order[i],self.optgroups.hasOwnProperty(optgroup)&&groups[optgroup].childNodes.length?((html_children=document.createDocumentFragment()).appendChild(self.render("optgroup_header",self.optgroups[optgroup])),html_children.appendChild(groups[optgroup]),html.appendChild(self.render("optgroup",$.extend({},self.optgroups[optgroup],{html:(d=html_children,tmp=void 0,(tmp=document.createElement("div")).appendChild(d.cloneNode(!0)),tmp.innerHTML),dom:html_children})))):html.appendChild(groups[optgroup]);if($dropdown_content.html(html),self.settings.highlight&&($dropdown_content.removeHighlight(),results.query.length&&results.tokens.length))for(i=0,n=results.tokens.length;i<n;i++)!function($element,pattern){var regex,highlight;if("string"!=typeof pattern||pattern.length)regex="string"==typeof pattern?new RegExp(pattern,"i"):pattern,highlight=function(node){var skip=0;if(3===node.nodeType){var spannode,match,pos=node.data.search(regex);0<=pos&&0<node.data.length&&(match=node.data.match(regex),(spannode=document.createElement("span")).className="highlight",(pos=node.splitText(pos)).splitText(match[0].length),match=pos.cloneNode(!0),spannode.appendChild(match),pos.parentNode.replaceChild(spannode,pos),skip=1)}else if(1===node.nodeType&&node.childNodes&&!/(script|style)/i.test(node.tagName)&&("highlight"!==node.className||"SPAN"!==node.tagName))for(var i=0;i<node.childNodes.length;++i)i+=highlight(node.childNodes[i]);return skip},$element.each(function(){highlight(this)})}($dropdown_content,results.tokens[i].regex);if(!self.settings.hideSelected)for(self.$dropdown.find(".selected").removeClass("selected"),i=0,n=self.items.length;i<n;i++)self.getOption(self.items[i]).addClass("selected");(has_create_option=self.canCreate(query))&&self.settings.showAddOptionOnCreate&&($dropdown_content.prepend(self.render("option_create",{input:query})),$create=$($dropdown_content[0].childNodes[0])),self.hasOptions=0<results.items.length||has_create_option&&self.settings.showAddOptionOnCreate,self.hasOptions?(0<results.items.length?(query=active_before&&self.getOption(active_before),""!==results.query&&query&&query.length?$active=query:"single"===self.settings.mode&&self.items.length&&($active=self.getOption(self.items[0])),$active&&$active.length||($active=$create&&!self.settings.addPrecedence?self.getAdjacentOption($create,1):$dropdown_content.find("[data-selectable]:first"))):$active=$create,self.setActiveOption($active),triggerDropdown&&!self.isOpen&&self.open()):(self.setActiveOption(null),triggerDropdown&&self.isOpen&&self.close())},addOption:function(data){var i,n,value;if(Array.isArray(data))for(i=0,n=data.length;i<n;i++)this.addOption(data[i]);else(value=this.registerOption(data))&&(this.userOptions[value]=!0,this.lastQuery=null,this.trigger("option_add",value,data))},registerOption:function(data){var key=hash_key(data[this.settings.valueField]);return null!=key&&!this.options.hasOwnProperty(key)&&(data.$order=data.$order||++this.order,this.options[key]=data,key)},registerOptionGroup:function(data){var key=hash_key(data[this.settings.optgroupValueField]);return!!key&&(data.$order=data.$order||++this.order,this.optgroups[key]=data,key)},addOptionGroup:function(id,data){data[this.settings.optgroupValueField]=id,(id=this.registerOptionGroup(data))&&this.trigger("optgroup_add",id,data)},removeOptionGroup:function(id){this.optgroups.hasOwnProperty(id)&&(delete this.optgroups[id],this.renderCache={},this.trigger("optgroup_remove",id))},clearOptionGroups:function(){this.optgroups={},this.renderCache={},this.trigger("optgroup_clear")},updateOption:function(value,data){var value_new,index_item,order_old;if(value=hash_key(value),value_new=hash_key(data[this.settings.valueField]),null!==value&&this.options.hasOwnProperty(value)){if("string"!=typeof value_new)throw new Error("Value must be set in option data");order_old=this.options[value].$order,value_new!==value&&(delete this.options[value],-1!==(index_item=this.items.indexOf(value))&&this.items.splice(index_item,1,value_new)),data.$order=data.$order||order_old,this.options[value_new]=data,index_item=this.renderCache.item,order_old=this.renderCache.option,index_item&&(delete index_item[value],delete index_item[value_new]),order_old&&(delete order_old[value],delete order_old[value_new]),-1!==this.items.indexOf(value_new)&&(index_item=this.getItem(value),order_old=$(this.render("item",data)),index_item.hasClass("active")&&order_old.addClass("active"),index_item.replaceWith(order_old)),this.lastQuery=null,this.isOpen&&this.refreshOptions(!1)}},removeOption:function(value,silent){value=hash_key(value);var cache_items=this.renderCache.item,cache_options=this.renderCache.option;cache_items&&delete cache_items[value],cache_options&&delete cache_options[value],delete this.userOptions[value],delete this.options[value],this.lastQuery=null,this.trigger("option_remove",value),this.removeItem(value,silent)},clearOptions:function(silent){var self=this,options=(self.loadedSearches={},self.userOptions={},self.renderCache={},self.options);$.each(self.options,function(key,value){-1==self.items.indexOf(key)&&delete options[key]}
2985),self.options=self.sifter.items=options,self.lastQuery=null,self.trigger("option_clear"),self.clear(silent)},getOption:function(value){return this.getElementWithValue(value,this.$dropdown_content.find("[data-selectable]"))},getFirstOption:function(){var $options=this.$dropdown.find("[data-selectable]");return 0<$options.length?$options.eq(0):$()},getAdjacentOption:function($option,direction){var $options=this.$dropdown.find("[data-selectable]"),$option=$options.index($option)+direction;return 0<=$option&&$option<$options.length?$options.eq($option):$()},getElementWithValue:function(value,$els){if(null!=(value=hash_key(value)))for(var i=0,n=$els.length;i<n;i++)if($els[i].getAttribute("data-value")===value)return $($els[i]);return $()},getElementWithTextContent:function(textContent,ignoreCase,$els){if(null!=(textContent=hash_key(textContent)))for(var i=0,n=$els.length;i<n;i++){var eleTextContent=$els[i].textContent;if(1==ignoreCase&&(eleTextContent=null!==eleTextContent?eleTextContent.toLowerCase():null,textContent=textContent.toLowerCase()),eleTextContent===textContent)return $($els[i])}return $()},getItem:function(value){return this.getElementWithValue(value,this.$control.children())},getFirstItemMatchedByTextContent:function(textContent,ignoreCase){return this.getElementWithTextContent(textContent,ignoreCase=null!==ignoreCase&&!0===ignoreCase,this.$dropdown_content.find("[data-selectable]"))},addItems:function(values,silent){this.buffer=document.createDocumentFragment();for(var childNodes=this.$control[0].childNodes,i=0;i<childNodes.length;i++)this.buffer.appendChild(childNodes[i]);for(var items=Array.isArray(values)?values:[values],i=0,n=items.length;i<n;i++)this.isPending=i<n-1,this.addItem(items[i],silent);values=this.$control[0];values.insertBefore(this.buffer,values.firstChild),this.buffer=null},addItem:function(value,silent){debounce_events(this,silent?[]:["change"],function(){var $item,$option,wasFull,inputMode=this.settings.mode;value=hash_key(value),-1!==this.items.indexOf(value)?"single"===inputMode&&this.close():this.options.hasOwnProperty(value)&&("single"===inputMode&&this.clear(silent),"multi"===inputMode&&this.isFull()||($item=$(this.render("item",this.options[value])),wasFull=this.isFull(),this.items.splice(this.caretPos,0,value),this.insertAtCaret($item),this.isPending&&(wasFull||!this.isFull())||this.refreshState(),this.isSetup&&(wasFull=this.$dropdown_content.find("[data-selectable]"),this.isPending||($option=this.getOption(value),$option=this.getAdjacentOption($option,1).attr("data-value"),this.refreshOptions(this.isFocused&&"single"!==inputMode),$option&&this.setActiveOption(this.getOption($option))),!wasFull.length||this.isFull()?this.close():this.isPending||this.positionDropdown(),this.updatePlaceholder(),this.trigger("item_add",value,$item),this.isPending||this.updateOriginalInput({silent:silent}))))})},removeItem:function(value,silent){var i,idx,$item=value instanceof $?value:this.getItem(value);value=hash_key($item.attr("data-value")),-1!==(i=this.items.indexOf(value))&&(this.trigger("item_before_remove",value,$item),$item.remove(),$item.hasClass("active")&&(idx=this.$activeItems.indexOf($item[0]),this.$activeItems.splice(idx,1)),this.items.splice(i,1),this.lastQuery=null,!this.settings.persist&&this.userOptions.hasOwnProperty(value)&&this.removeOption(value,silent),i<this.caretPos&&this.setCaret(this.caretPos-1),this.refreshState(),this.updatePlaceholder(),this.updateOriginalInput({silent:silent}),this.positionDropdown(),this.trigger("item_remove",value,$item))},createItem:function(input,triggerDropdown){var self=this,caret=self.caretPos,callback=(input=input||(self.$control_input.val()||"").trim(),arguments[arguments.length-1]);if("function"!=typeof callback&&(callback=function(){}),"boolean"!=typeof triggerDropdown&&(triggerDropdown=!0),!self.canCreate(input))return callback(),!1;self.lock();var fn,called,setup="function"==typeof self.settings.create?this.settings.create:function(input){var data={},input=data[self.settings.labelField]=input;if(!self.settings.formatValueToKey||"function"!=typeof self.settings.formatValueToKey||null!=(input=self.settings.formatValueToKey.apply(this,[input]))&&"object"!=typeof input&&"function"!=typeof input)return data[self.settings.valueField]=input,data;throw new Error('Selectize "formatValueToKey" setting must be a function that returns a value other than object or function.')},create=(called=!(fn=function(data){return self.unlock(),!data||"object"!=typeof data||"string"!=typeof(value=hash_key(data[self.settings.valueField]))?callback():(self.setTextboxValue(""),self.addOption(data),self.setCaret(caret),self.addItem(value),self.refreshOptions(triggerDropdown&&"single"!==self.settings.mode),void callback(data));var value}),function(){called||(called=!0,fn.apply(this,arguments))}),setup=setup.apply(this,[input,create]);return void 0!==setup&&create(setup),!0},refreshItems:function(){this.lastQuery=null,this.isSetup&&this.addItem(this.items),this.refreshState(),this.updateOriginalInput()},refreshState:function(){this.refreshValidityState(),this.refreshClasses()},refreshValidityState:function(){if(!this.isRequired)return!1;var invalid=!this.items.length;this.isInvalid=invalid,this.$control_input.prop("required",invali
2985d),this.$input.prop("required",!invalid)},refreshClasses:function(){var isFull=this.isFull(),isLocked=this.isLocked;this.$wrapper.toggleClass("rtl",this.rtl),this.$control.toggleClass("focus",this.isFocused).toggleClass("disabled",this.isDisabled).toggleClass("required",this.isRequired).toggleClass("invalid",this.isInvalid).toggleClass("locked",isLocked).toggleClass("full",isFull).toggleClass("not-full",!isFull).toggleClass("input-active",this.isFocused&&!this.isInputHidden).toggleClass("dropdown-active",this.isOpen).toggleClass("has-options",!$.isEmptyObject(this.options)).toggleClass("has-items",0<this.items.length),this.$control_input.data("grow",!isFull&&!isLocked)},isFull:function(){return null!==this.settings.maxItems&&this.items.length>=this.settings.maxItems},updateOriginalInput:function(opts){var i,n,options,label;if(opts=opts||{},1===this.tagType){for(options=[],i=0,n=this.items.length;i<n;i++)label=this.options[this.items[i]][this.settings.labelField]||"",options.push('<option value="'+escape_html(this.items[i])+'" selected="selected">'+escape_html(label)+"</option>");options.length||this.$input.attr("multiple")||options.push('<option value="" selected="selected"></option>'),this.$input.html(options.join(""))}else this.$input.val(this.getValue()),this.$input.attr("value",this.$input.val());this.isSetup&&!opts.silent&&this.trigger("change",this.$input.val())},updatePlaceholder:function(){var $input;this.settings.placeholder&&($input=this.$control_input,this.items.length?$input.removeAttr("placeholder"):$input.attr("placeholder",this.settings.placeholder),$input.triggerHandler("update",{force:!0}))},open:function(){this.isLocked||this.isOpen||"multi"===this.settings.mode&&this.isFull()||(this.focus(),this.isOpen=!0,this.refreshState(),this.$dropdown.css({visibility:"hidden",display:"block"}),this.positionDropdown(),this.$dropdown.css({visibility:"visible"}),this.trigger("dropdown_open",this.$dropdown))},close:function(){var trigger=this.isOpen;"single"===this.settings.mode&&this.items.length&&(this.hideInput(),this.isBlurring&&this.$control_input.blur()),this.isOpen=!1,this.$dropdown.hide(),this.setActiveOption(null),this.refreshState(),trigger&&this.trigger("dropdown_close",this.$dropdown)},positionDropdown:function(){var $control=this.$control,offset="body"===this.settings.dropdownParent?$control.offset():$control.position();offset.top+=$control.outerHeight(!0),this.$dropdown.css({width:$control[0].getBoundingClientRect().width,top:offset.top,left:offset.left})},clear:function(silent){this.items.length&&(this.$control.children(":not(input)").remove(),this.items=[],this.lastQuery=null,this.setCaret(0),this.setActiveItem(null),this.updatePlaceholder(),this.updateOriginalInput({silent:silent}),this.refreshState(),this.showInput(),this.trigger("clear"))},insertAtCaret:function($el){var caret=Math.min(this.caretPos,this.items.length),$el=$el[0],target=this.buffer||this.$control[0];0===caret?target.insertBefore($el,target.firstChild):target.insertBefore($el,target.childNodes[caret]),this.setCaret(caret+1)},deleteSelection:function(e){var i,n,values,option_select,$tail,direction=e&&8===e.keyCode?-1:1,selection=getSelection(this.$control_input[0]);if(this.$activeOption&&!this.settings.hideSelected&&(option_select=("string"==typeof this.settings.deselectBehavior&&"top"===this.settings.deselectBehavior?this.getFirstOption():this.getAdjacentOption(this.$activeOption,-1)).attr("data-value")),values=[],this.$activeItems.length){for($tail=this.$control.children(".active:"+(0<direction?"last":"first")),$tail=this.$control.children(":not(input)").index($tail),0<direction&&$tail++,i=0,n=this.$activeItems.length;i<n;i++)values.push($(this.$activeItems[i]).attr("data-value"));e&&(e.preventDefault(),e.stopPropagation())}else(this.isFocused||"single"===this.settings.mode)&&this.items.length&&(direction<0&&0===selection.start&&0===selection.length?values.push(this.items[this.caretPos-1]):0<direction&&selection.start===this.$control_input.val().length&&values.push(this.items[this.caretPos]));if(!values.length||"function"==typeof this.settings.onDelete&&!1===this.settings.onDelete.apply(this,[values]))return!1;for(void 0!==$tail&&this.setCaret($tail);values.length;)this.removeItem(values.pop());return this.showInput(),this.positionDropdown(),this.refreshOptions(!0),option_select&&(e=this.getOption(option_select)).length&&this.setActiveOption(e),!0},advanceSelection:function(direction,e){var tail,valueLength,selection;0!==direction&&(this.rtl&&(direction*=-1),tail=0<direction?"last":"first",selection=getSelection(this.$control_input[0]),this.isFocused&&!this.isInputHidden?(valueLength=this.$control_input.val().length,(direction<0?0!==selection.start||0!==selection.length:selection.start!==valueLength)||valueLength||this.advanceCaret(direction,e)):(selection=this.$control.children(".active:"+tail)).length&&(valueLength=this.$control.children(":not(input)").index(selection),this.setActiveItem(null),this.setCaret(0<direction?valueLength+1:valueLength)))},advanceCaret:function(direction,e){var $adj;0!==direction&&(this.isShiftDown?($adj=this.$control_input[0<direction?"next":"prev"]()).length&&(this.hideInput(),this.setActiveItem($adj),e&&e.preventDefault()):this.setCaret(this.caretPos+direction))},setCaret:function(i){if(i="single"===this.settings.mode?this.items.length:Math.max(0,Math.min(this.items.length,i)),!this.isPending)for(var $child,$children=this.$control.children(":not(input)"),j=0,n=$children.length;j<n;
2985j++)$child=$($children[j]).detach(),j<i?this.$control_input.before($child):this.$control.append($child);this.caretPos=i},lock:function(){this.close(),this.isLocked=!0,this.refreshState()},unlock:function(){this.isLocked=!1,this.refreshState()},disable:function(){this.$input.prop("disabled",!0),this.$control_input.prop("disabled",!0).prop("tabindex",-1),this.isDisabled=!0,this.lock()},enable:function(){this.$input.prop("disabled",!1),this.$control_input.prop("disabled",!1).prop("tabindex",this.tabIndex),this.isDisabled=!1,this.unlock()},destroy:function(){var eventNS=this.eventNS,revertSettings=this.revertSettings;this.trigger("destroy"),this.off(),this.$wrapper.remove(),this.$dropdown.remove(),this.$input.html("").append(revertSettings.$children).removeAttr("tabindex").removeClass("selectized").attr({tabindex:revertSettings.tabindex}).show(),this.$control_input.removeData("grow"),this.$input.removeData("selectize"),0==--Selectize.count&&Selectize.$testInput&&(Selectize.$testInput.remove(),Selectize.$testInput=void 0),$(window).off(eventNS),$(document).off(eventNS),$(document.body).off(eventNS),delete this.$input[0].selectize},render:function(templateName,data){var value,id,html="",cache=!1;return(cache="option"!==templateName&&"item"!==templateName?cache:!!(value=hash_key(data[this.settings.valueField])))&&(isset(this.renderCache[templateName])||(this.renderCache[templateName]={}),this.renderCache[templateName].hasOwnProperty(value))?this.renderCache[templateName][value]:(html=$(this.settings.render[templateName].apply(this,[data,escape_html])),"option"===templateName||"option_create"===templateName?data[this.settings.disabledField]||html.attr("data-selectable",""):"optgroup"===templateName&&(id=data[this.settings.optgroupValueField]||"",html.attr("data-group",id),data[this.settings.disabledField]&&html.attr("data-disabled","")),"option"!==templateName&&"item"!==templateName||html.attr("data-value",value||""),cache&&(this.renderCache[templateName][value]=html[0]),html[0])},clearCache:function(templateName){void 0===templateName?this.renderCache={}:delete this.renderCache[templateName]},canCreate:function(input){if(!this.settings.create)return!1;var filter=this.settings.createFilter;return input.length&&("function"!=typeof filter||filter.apply(this,[input]))&&("string"!=typeof filter||new RegExp(filter).test(input))&&(!(filter instanceof RegExp)||filter.test(input))}}),Selectize.count=0,Selectize.defaults={options:[],optgroups:[],plugins:[],delimiter:",",splitOn:null,persist:!0,diacritics:!0,create:!1,showAddOptionOnCreate:!0,createOnBlur:!1,createFilter:null,highlight:!0,openOnFocus:!0,maxOptions:1e3,maxItems:null,hideSelected:null,addPrecedence:!1,selectOnTab:!0,preload:!1,allowEmptyOption:!1,showEmptyOptionInDropdown:!1,emptyOptionLabel:"--",closeAfterSelect:!1,scrollDuration:60,deselectBehavior:"previous",loadThrottle:300,loadingClass:"loading",dataAttr:"data-data",optgroupField:"optgroup",valueField:"value",labelField:"text",disabledField:"disabled",optgroupLabelField:"label",optgroupValueField:"value",lockOptgroupOrder:!1,sortField:"$order",searchField:["text"],searchConjunction:"and",mode:null,wrapperClass:"selectize-control",inputClass:"selectize-input",dropdownClass:"selectize-dropdown",dropdownContentClass:"selectize-dropdown-content",dropdownParent:null,copyClassesToDropdown:!0,render:{}},$.fn.selectize=function(settings_user){function init_select($input,settings_element){function addOption($option,group){$option=$($option);var arr,value=hash_key($option.val());(value||settings.allowEmptyOption)&&(optionsMap.hasOwnProperty(value)?group&&((arr=optionsMap[value][field_optgroup])?$.isArray(arr)?arr.push(group):optionsMap[value][field_optgroup]=[arr,group]:optionsMap[value][field_optgroup]=group):((arr=readData($option)||{})[field_label]=arr[field_label]||$option.text(),arr[field_value]=arr[field_value]||value,arr[field_disabled]=arr[field_disabled]||$option.prop("disabled"),arr[field_optgroup]=arr[field_optgroup]||group,optionsMap[value]=arr,options.push(arr),$option.is(":selected")&&settings_element.items.push(value)))}var i,n,tagName,$children,options=settings_element.options,optionsMap={},readData=function($el){$el=attr_data&&$el.attr(attr_data);return"string"==typeof $el&&$el.length?JSON.parse($el):null};for(settings_element.maxItems=$input.attr("multiple")?null:1,i=0,n=($children=$input.children()).length;i<n;i++)"optgroup"===(tagName=$children[i].tagName.toLowerCase())?function($optgroup){var i,n,id,optgroup,$options;for((id=($optgroup=$($optgroup)).attr("label"))&&((optgroup=read
2985Data($optgroup)||{})[field_optgroup_label]=id,optgroup[field_optgroup_value]=id,optgroup[field_disabled]=$optgroup.prop("disabled"),settings_element.optgroups.push(optgroup)),i=0,n=($options=$("option",$optgroup)).length;i<n;i++)addOption($options[i],id)}($children[i]):"option"===tagName&&addOption($children[i])}var defaults=$.fn.selectize.defaults,settings=$.extend({},defaults,settings_user),attr_data=settings.dataAttr,field_label=settings.labelField,field_value=settings.valueField,field_disabled=settings.disabledField,field_optgroup=settings.optgroupField,field_optgroup_label=settings.optgroupLabelField,field_optgroup_value=settings.optgroupValueField;return this.each(function(){var $input,tag_name,placeholder,input_html;this.selectize||($input=$(this),tag_name=this.tagName.toLowerCase(),(placeholder=$input.attr("placeholder")||$input.attr("data-placeholder"))||settings.allowEmptyOption||(placeholder=$input.children('option[value=""]').text()),settings.allowEmptyOption&&settings.showEmptyOptionInDropdown&&!$input.children('option[value=""]').length&&(input_html=$input.html(),$input.html('<option value="">'+settings.emptyOptionLabel+"</option>"+input_html)),("select"===tag_name?init_select:function($input,settings_element){var i,n,values,option,data_raw=$input.attr(attr_data);if(data_raw)for(settings_element.options=JSON.parse(data_raw),i=0,n=settings_element.options.length;i<n;i++)settings_element.items.push(settings_element.options[i][field_value]);else{data_raw=$.trim($input.val()||"");if(settings.allowEmptyOption||data_raw.length){for(i=0,n=(values=data_raw.split(settings.delimiter)).length;i<n;i++)(option={})[field_label]=values[i],option[field_value]=values[i],settings_element.options.push(option);settings_element.items=values}}})($input,input_html={placeholder:placeholder,options:[],optgroups:[],items:[]}),new Selectize($input,$.extend(!0,{},defaults,input_html,settings_user)))})},$.fn.selectize.defaults=Selectize.defaults,$.fn.selectize.support={validity:SUPPORTS_VALIDITY_API},Selectize.define("auto_position",function(){const POSITION={top:"top",bottom:"bottom"};this.positionDropdown=function(){const $control=this.$control,offset="body"===this.settings.dropdownParent?$control.offset():$control.position();offset.top+=$control.outerHeight(!0);var dropdownHeight=this.$dropdown.prop("scrollHeight")+5,dropdownHeight=this.$control.get(0).getBoundingClientRect().top+dropdownHeight+this.$wrapper.height()>window.innerHeight?POSITION.top:POSITION.bottom,styles={width:$control.outerWidth(),left:offset.left};dropdownHeight===POSITION.top?(Object.assign(styles,{bottom:offset.top,top:"unset",margin:"0 0 5px 0"}),this.$dropdown.addClass("selectize-position-top")):(Object.assign(styles,{top:offset.top,bottom:"unset",margin:"5px 0 0 0"}),this.$dropdown.removeClass("selectize-position-top")),this.$dropdown.css(styles)}}),Selectize.define("auto_select_on_type",function(options){var originalBlur,self=this;self.onBlur=(originalBlur=self.onBlur,function(e){var $matchedItem=self.getFirstItemMatchedByTextContent(self.lastValue,!0);return void 0!==$matchedItem.attr("data-value")&&self.getValue()!==$matchedItem.attr("data-value")&&self.setValue($matchedItem.attr("data-value")),originalBlur.apply(this,arguments)})}),Selectize.define("autofill_disable",function(options){var original,self=this;self.setup=(original=self.setup,function(){original.apply(self,arguments),self.$control_input.attr({autocomplete:"new-password",autofill:"no"})})}),Selectize.define("drag_drop",function(options){if(!$.fn.sortable)throw new Error('The "drag_drop" plugin requires jQuery UI "sortable".');var self,original;"multi"===this.settings.mode&&((self=this).lock=(original=self.lock,function(){var sortable=self.$control.data("sortable");return sortable&&sortable.disable(),original.apply(self,arguments)}),self.unlock=function(){var original=self.unlock;return function(){var sortable=self.$control.data("sortable");return sortable&&sortable.enable(),original.apply(self,arguments)}}(),self.setup=function(){var original=self.setup;return function(){original.apply(this,arguments);
2985var $control=self.$control.sortable({items:"[data-value]",forcePlaceholderSize:!0,disabled:self.isLocked,start:function(e,ui){ui.placeholder.css("width",ui.helper.css("width")),$control.addClass("dragging")},stop:function(){$control.removeClass("dragging");var active=self.$activeItems?self.$activeItems.slice():null,values=[];$control.children("[data-value]").each(function(){values.push($(this).attr("data-value"))}),self.isFocused=!1,self.setValue(values),self.isFocused=!0,self.setActiveItem(active),self.positionDropdown()}})}}())}),Selectize.define("dropdown_header",function(options){var original,self=this;options=$.extend({title:"Untitled",headerClass:"selectize-dropdown-header",titleRowClass:"selectize-dropdown-header-title",labelClass:"selectize-dropdown-header-label",closeClass:"selectize-dropdown-header-close",html:function(data){return'<div class="'+data.headerClass+'"><div class="'+data.titleRowClass+'"><span class="'+data.labelClass+'">'+data.title+'</span><a href="javascript:void(0)" class="'+data.closeClass+'">&times;</a></div></div>'}},options),self.setup=(original=self.setup,function(){original.apply(self,arguments),self.$dropdown_header=$(options.html(options)),self.$dropdown.prepend(self.$dropdown_header)})}),Selectize.define("optgroup_columns",function(options){function equalizeSizes(){var i,height_max,width,width_parent,$optgroups=$("[data-group]",self.$dropdown_content),n=$optgroups.length;if(n&&self.$dropdown_content.width()){if(options.equalizeHeight){for(i=height_max=0;i<n;i++)height_max=Math.max(height_max,$optgroups.eq(i).height());$optgroups.css({height:height_max})}options.equalizeWidth&&(width_parent=self.$dropdown_content.innerWidth()-getScrollbarWidth(),width=Math.round(width_parent/n),$optgroups.css({width:width}),1<n&&(width_parent=width_parent-width*(n-1),$optgroups.eq(n-1).css({width:width_parent})))}}var original,self=this,getScrollbarWidth=(options=$.extend({equalizeWidth:!0,equalizeHeight:!0},options),this.getAdjacentOption=function($option,direction){var $options=$option.closest("[data-group]").find("[data-selectable]"),$option=$options.index($option)+direction;return 0<=$option&&$option<$options.length?$options.eq($option):$()},this.onKeyDown=(original=self.onKeyDown,function(e){var index,$optgroup;if(!this.isOpen||37!==e.keyCode&&39!==e.keyCode)return original.apply(this,arguments);self.ignoreHover=!0,index=($optgroup=this.$activeOption.closest("[data-group]")).find("[data-selectable]").index(this.$activeOption),($optgroup=(e=($optgroup=37===e.keyCode?$optgroup.prev("[data-group]"):$optgroup.next("[data-group]")).find("[data-selectable]")).eq(Math.min(e.length-1,index))).length&&this.setActiveOption($optgroup)}),function(){var div,width=getScrollbarWidth.width,doc=document;return void 0===width&&((div=doc.createElement("div")).innerHTML='<div style="width:50px;height:50px;position:absolute;left:-50px;top:-50px;overflow:auto;"><div style="width:1px;height:100px;"></div></div>',div=div.firstChild,doc.body.appendChild(div),width=getScrollbarWidth.width=div.offsetWidth-div.clientWidth,doc.body.removeChild(div)),width});(options.equalizeHeight||options.equalizeWidth)&&(hook.after(this,"positionDropdown",equalizeSizes),hook.after(this,"refreshOptions",equalizeSizes))}),Selectize.define("remove_button",function(options){options=$.extend({label:"&times;",title:"Remove",className:"remove",append:!0},options),("single"===this.settings.mode?function(thisRef,options){options.className="remove-single";var original,self=thisRef,html='<a href="javascript:void(0)" class="'+options.className+'" tabindex="-1" title="'+escape_html(options.title)+'">'+options.label+"</a>";thisRef.setup=(original=self.setup,function(){var id,render_item;options.append&&(id=$(self.$input.context).attr("id"),$("#"+id),render_item=self.settings.render.item,self.settings.render.item=function(data){return html_container=render_item.apply(thisRef,arguments),html_element=html,$("<span>").append(html_container).append(html_element);var html_container,html_element}),original.apply(thisRef,arguments),thisRef.$control.on("click","."+options.className,function(e){e.preventDefault(),self.isLocked||self.clear()})})}:function(thisRef,options){var original,self=thisRef,html='<a href="javascript:void(0)" class="'+options.className+'" tabindex="-1" title="'+escape_html(options.title)+'">'+options.label+"</a>";thisRef.setup=(original=self.setup,function(){var render_item;options.append&&(render_item=self.settings.render.item,self.settings.render.item=function(data){return html_container=render_item.apply(thisRef,arguments),html_element=html,pos=html_container.search(/(<\/[^>]+>\s*)$/),html_container.substring(0,pos)+html_element+html_container.substring(pos);var html_container,html_element,pos}),original.apply(thisRef,arguments),thisRef.$control.on("click","."+options.className,function(e){if(e.preventDefault(),!self.isLocked)return e=$(e.currentTarget).parent(),self.setActiveItem(e),self.deleteSelection()&&self.setCaret(self.items.length),!1})})})(this,options)}),Selectize.define("restore_on_backspace",function(options){var original,self=this;options.text=options.text||function(option){return option[this.settings.labelField]},this.onKeyDown=(original=self.onKeyDown,function(e){var index;return 8===e.keyCode&&""===this.$control_input.val()&&!this.$activeItems.length&&0<=(index=this.caretPos-1)&&index<this.items.length?(index=this.options[this.items[index]],this.deleteSelection(e)&&(this.setTextboxValue(options.text.apply(this,[index])),this.refreshOptions(!0)),void e.preventDefault()):original.apply(this,arguments)})}),Selectize.define("select_on_focus",function(options){var originalFocus,originalBlur,self=this;self.on("focus",(originalFocus=self.onFocus,function(e){var value=self.getItem(self.getValue()).text();return self.clear(),self.setTextboxValue(value),self.$control_input.select(),setTimeout(function(){self.settings.selectOnTab&&self.setActiveOption(self.getFirstItemMatchedByTextContent(value)),self.settings.score=null},0),originalFocus.apply(this,arguments)})),self.onBlur=(originalBlur=self.onBlur,function(e){return""===self.getValue()&&self.lastValidValue!==self.getValue()&&self.setValue(self.lastValidValue),setTimeout(function(){self.settings.score=function(){return function(){return 1}}},0),originalBlur.apply(this,arguments)}),self.settings.score=function(){return function(){return 1}}}),Selectize.define("tag_limit",function(options){const self=this;options.tagLimit=options.tagLimit,this.onBlur=function(){const original=self.onBlur;return function(e){if(original.apply(this,e),e){const $control=this.$control,$items=$control.find(".
2985item"),limit=options.tagLimit;void 0===limit||$items.length<=limit||($items.toArray().forEach(function(item,index){index<limit||$(item).hide()}),$control.append("<span><b>"+($items.length-limit)+"</b></span>"))}}}(),this.onFocus=function(){const original=self.onFocus;return function(e){if(original.apply(this,e),e){const $control=this.$control,$items=$control.find(".item");$items.show(),$control.find("span").remove()}}}()}),Selectize});
2986/* selectize click2deselect (custom) */
2987Selectize.define("click2deselect",function(options){var self=this;var setup=self.setup;this.setup=function(){setup.apply(self,arguments);self.$dropdown.on("click","[data-selectable]",function(e){let value=this.getAttribute("data-value");if(this.classList.contains("selected")){self.removeItem(value);self.refreshItems();self.refreshOptions()}return false});self.on("item_remove",function(value){self.getOption(value).removeClass("selected")})}});

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.