PageSourceSearch

https://internationaldataspaces.org/wp-content/cache/wpfc-minified/fi1gyz2a/drfm9.js

js internationaldataspaces.org collected 2026-09-24 08:51:24 UTC 432,586 bytes, 4,713 lines download raw bytes

1// source --> https://internationaldataspaces.org/wp-content/plugins/events-manager/includes/js/events-manager.js?ver=7.2.3.1 
2jQuery(document).ready( function($){
3
4	// backcompat changes 6.x to 5.x
5	if( $('#recurrence-frequency').length > 0  ){
6		$('#recurrence-frequency').addClass('em-recurrence-frequency');
7		$('.event-form-when .interval-desc').each( function(){
8			this.classList.add(this.id);
9		});
10		$('.event-form-when .alternate-selector').each( function(){
11			this.classList.add('em-' + this.id);
12		});
13		$('#recurrence-interval').addClass('em-recurrence-interval');
14	}
15	$('#em-wrapper').addClass('em');
16
17	// Add keyboard accessibility for em-icon button spans
18	$(document).on('keydown', 'span.em-icon[role="button"]', function(e){
19		if( e.key === 'Enter' || e.keyCode === 13 ){
20			e.preventDefault();
21			$(this).trigger('click');
22		}
23	});
24
25	/* Time Entry - legacy @deprecated */
26	$('#start-time').each(function(i, el){
27		$(el).addClass('em-time-input em-time-start').next('#end-time').addClass('em-time-input em-time-end').parent().addClass('em-time-range');
28	});
29
30	/*
31	 * ADMIN AREA AND PUBLIC FORMS (Still polishing this section up, note that form ids and classes may change accordingly)
32	 */
33	//Events List
34	//Approve/Reject Links
35	$('.events-table').on('click', '.em-event-delete', function(){
36		if( !confirm("Are you sure you want to delete?") ){ return false; }
37		window.location.href = this.href;
38	});
39	//Forms
40	$('#event-form #event-image-delete, #location-form #location-image-delete').on('click', function(){
41		var el = $(this);
42		if( el.is(':checked') ){
43			el.closest('.event-form-image, .location-form-image').find('#event-image-img, #location-image-img').hide();
44		}else{
45			el.closest('.event-form-image, .location-form-image').find('#event-image-img, #location-image-img').show();
46		}
47	});
48
49	//Manual Booking
50	$(document).on('click', 'a.em-booking-button', function(e){
51		e.preventDefault();
52		var button = $(this);
53		if( button.text() != EM.bb_booked && $(this).text() != EM.bb_booking){
54			button.text(EM.bb_booking);
55			var button_data = button.attr('id').split('_');
56			$.ajax({
57				url: EM.ajaxurl,
58				dataType: 'jsonp',
59				data: {
60					event_id : button_data[1],
61					_wpnonce : button_data[2],
62					action : 'booking_add_one'
63				},
64				success : function(response, statusText, xhr, $form) {
65					if(response.result){
66						button.text(EM.bb_booked);
67						button.addClass('disabled');
68					}else{
69						button.text(EM.bb_error);
70					}
71					if(response.message != '') alert(response.message);
72					$(document).triggerHandler('em_booking_button_response', [response, button]);
73				},
74				error : function(){ button.text(EM.bb_error); }
75			});
76		}
77		return false;
78	});
79	$(document).on('click', 'a.em-cancel-button', function(e){
80		e.preventDefault();
81		var button = $(this);
82		if( button.text() != EM.bb_cancelled && button.text() != EM.bb_canceling){
83			button.text(EM.bb_canceling);
84			// old method is splitting id with _ and second/third items are id and nonce, otherwise supply it all via data attributes
85			var button_data = button.attr('id').split('_');
86			let button_ajax = {};
87			if( button_data.length < 3 || !('booking_id' in button[0].dataset) ){
88				// legacy support
89				button_ajax = {
90					booking_id : button_data[1],
91					_wpnonce : button_data[2],
92					action : 'booking_cancel',
93				};
94			}
95			let ajax_data = Object.assign( button_ajax, button[0].dataset);
96			$.ajax({
97				url: EM.ajaxurl,
98				dataType: 'jsonp',
99				data: ajax_data,
100				success : function(response, statusText, xhr, $form) {
101					if(response.result){
102						button.text(EM.bb_cancelled);
103						button.addClass('disabled');
104					}else{
105						button.text(EM.bb_cancel_error);
106					}
107				},
108				error : function(){ button.text(EM.bb_cancel_error); }
109			});
110		}
111		return false;
112	});
113	$(document).on('click', 'a.em-booking-button-action', function(e){
114		e.preventDefault();
115		var button = $(this);
116		var button_data = {
117			_wpnonce : button.attr('data-nonce'),
118			action : button.attr('data-action'),
119		}
120		if( button.attr('data-event-id') ) button_data.event_id =  button.attr('data-event-id');
121		if( button.attr('data-booking-id') ) button_data.booking_id =  button.attr('data-booking-id');
122		if( button.text() != EM.bb_booked && $(this).text() != EM.bb_booking){
123			if( button.attr('data-loading') ){
124				button.text(button.attr('data-loading'));
125			}else{
126				button.text(EM.bb_booking);
127			}
128			$.ajax({
129				url: EM.ajaxurl,
130				dataType: 'jsonp',
131				data: button_data,
132				success : function(response, statusText, xhr, $form) {
133					if(response.result){
134						if( button.attr('data-success') ){
135							button.text(button.attr('data-success'));
136						}else{
137							button.text(EM.bb_booked);
138						}
139						button.addClass('disabled');
140					}else{
141						if( button.attr('data-error') ){
142							button.text(button.attr('data-error'));
143						}else{
144							button.text(EM.bb_error);
145						}
146					}
147					if(response.message != '') alert(response.message);
148					$(document).triggerHandler('em_booking_button_action_response', [response, button]);
149				},
150				error : function(){
151					if( button.attr('data-error') ){
152						button.text(button.attr('data-error'));
153					}else{
154						button.text(EM.bb_error);
155					}
156				}
157			});
158		}
159		return false;
160	});
161
162	//Datepicker - legacy
163	var load_ui_css; //load jquery ui css?
164	if( $('.em-date-single, .em-date-range, #em-date-start').length > 0 ){
165		load_ui_css = true;
166	}
167	if( load_ui_css ) em_load_jquery_css();
168
169	//previously in em-admin.php
170	$('#em-wrapper input.select-all').on('change', function(){
171		if($(this).is(':checked')){
172			$('input.row-selector').prop('checked', true);
173			$('input.select-all').prop('checked', true);
174		}else{
175			$('input.row-selector').prop('checked', false);
176			$('input.select-all').prop('checked', false);
177		}
178	});
179
180	/* Load any maps */
181	if( $('.em-location-map').length > 0 || $('.em-locations-map').length > 0 || $('#em-map').length > 0 || $('.em-search-geo').length > 0 ){
182		em_maps_load();
183	}
184
185	/* Location Type Selection */
186	$('.em-location-types .em-location-types-select').on('change', function(){
187		let el = $(this);
188		if( el.val() == 0 ){
189			$('.em-location-type').hide();
190		}else{
191			let location_type = el.find('option:selected').data('display-class');
192			$('.em-location-type').hide();
193			$('.em-location-type.'+location_type).show();
194			if( location_type != 'em-location-type-place' ){
195				jQuery('#em-location-reset a').trigger('click');
196			}
197		}
198		if( el.data('active') !== '' && el.val() !== el.data('active') ){
199			$('.em-location-type-delete-active-alert').hide();
200			$('.em-location-type-delete-active-alert').show();
201		}else{
202			$('.em-location-type-delete-active-alert').hide();
203		}
204	}).trigger('change');
205
206	//Finally, add autocomplete here
207	if( jQuery( 'div.em-location-data [name="location_name"]' ).length > 0 ){
208		$('div.em-location-data [name="location_name"]').em_selectize({
209			plugins: ["restore_on_backspace"],
210			valueField: "id",
211			labelField: "label",
212			searchField: "label",
213			create:true,
214			createOnBlur: true,
215			maxItems:1,
216			persist: false,
217			addPrecedence : true,
218			selectOnTab : true,
219			diacritics : true,
220			render: {
221				item: function (item, escape) {
222					return "<div>" + escape(item.label) + "</div>";
223				},
224				option: function (item, escape) {
225					let meta = '';
226					if( typeof(item.address) !== 'undefined' ) {
227						if (item.address !== '' && item.town !== '') {
228							meta = escape(item.address) + ', ' + escape(item.town);
229						} else if (item.address !== '') {
230							meta = escape(item.address);
231						} else if (item.town !== '') {
232							meta = escape(item.town);
233						}
234					}
235					return  '<div class="em-locations-autocomplete-item">' +
236						'<div class="em-locations-autocomplete-label">' + escape(item.label) + '</div>' +
237						'<div style="font-size:11px; text-decoration:italic;">' + meta + '</div>' +
238						'</div>';
239
240				},
241			},
242			load: function (query, callback) {
243				if (!query.length) return callback();
244				$.ajax({
245					url: EM.locationajaxurl,
246					data: {
247						q : query,
248						method : 'selectize'
249					},
250					dataType : 'json',
251					type: "POST",
252					error: function () {
253						callback();
254					},
255					success: function ( data ) {
256						callback( data );
257					},
258				});
259			},
260			onItemAdd : function (value, data) {
261				this.clearCache();
262				var option = this.options[value];
263				if( value === option.label ){
264					jQuery('input#location-address').focus();
265					return;
266				}
267				jQuery("input#location-name" ).val(option.value);
268				jQuery('input#location-address').val(option.address);
269				jQuery('input#location-town').val(option.town);
270				jQuery('input#location-state').val(option.state);
271				jQuery('input#location-region').val(option.region);
272				jQuery('input#location-postcode').val(option.postcode);
273				jQuery('input#location-latitude').val(option.latitude);
274				jQuery('input#location-longitude').val(option.longitude);
275				if( typeof(option.country) === 'undefined' || option.country === '' ){
276					jQuery('select#location-country option:selected').removeAttr('selected');
277				}else{
278					jQuery('select#location-country option[value="'+option.country+'"]').attr('selected', 'selected');
279				}
280				jQuery("input#location-id" ).val(option.id).trigger('change');
281				jQuery('div.em-location-data input, div.em-location-data select').prop('readonly', true).css('opacity', '0.5');
282				jQuery('#em-location-reset').show();
283				jQuery('#em-location-search-tip').hide();
284				// selectize stuff
285				this.disable();
286				this.$control.blur();
287				jQuery('div.em-location-data [class^="em-selectize"]').each( function(){
288					if( 'selectize' in this ) {
289						this.selectize.disable();
290					}
291				})
292				// trigger hook
293				jQuery(document).triggerHandler('em_locations_autocomplete_selected', [event, option]);
294			}
295		});
296		jQuery('#em-location-reset a').on('click', function(){
297			jQuery('div.em-location-data input, div.em-location-data select').each( function(){
298				this.style.removeProperty('opacity')
299				this.readOnly = false;
300				if( this.type == 'text' ) this.value = '';
301			});
302			jQuery('div.em-location-data option:selected').removeAttr('selected');
303			jQuery('input#location-id').val('');
304			jQuery('#em-location-reset').hide();
305			jQuery('#em-location-search-tip').show();
306			jQuery('#em-map').hide();
307			jQuery('#em-map-404').show();
308			if(typeof(marker) !== 'undefined'){
309				marker.setPosition(new google.maps.LatLng(0, 0));
310				infoWindow.close();
311				marker.setDraggable(true);
312			}
313			// clear selectize autocompleter values, re-enable any selectize ddms
314			let $selectize = $("div.em-location-data input#location-name")[0].selectize;
315			$selectize.enable();
316			$selectize.clear(true);
317			$selectize.clearOptions();
318			jQuery('div.em-location-data select.em-selectize').each( function(){
319				if( 'selectize' in this ){
320					this.selectize.enable();
321					this.selectize.clear(true);
322				}
323			});
324			// return true
325			return false;
326		});
327		if( jQuery('input#location-id').val() != '0' && jQuery('input#location-id').val() != '' ){
328			jQuery('div.em-location-data input, div.em-location-data select').each( function(){
329				this.style.setProperty('opacity','0.5', 'important')
330				this.readOnly = true;
331			});
332			jQuery('#em-location-reset').show();
333			jQuery('#em-location-search-tip').hide();
334			jQuery('div.em-location-data select.em-selectize, div.em-location-data input.em-selectize-autocomplete').each( function(){
335				if( 'selectize' in this ) this.selectize.disable();
336			});
337		}
338	}
339
340	// Add click handler for recurrence conversion links
341	document.querySelectorAll( '.em-convert-recurrence-link' ).forEach( link => {
342		link.addEventListener( 'click', function ( e ) {
343			if ( !confirm( EM.convert_recurring_warning ) ) {
344				e.preventDefault();
345				return false;
346			}
347			let nonce = this.getAttribute( 'data-nonce' );
348			if ( nonce ) {
349				this.href = this.href.replace( 'nonce=x', 'nonce=' + nonce );
350			}
351		} );
352	} );
353
354	// trigger selectize loader
355	em_setup_ui_elements(document);
356
357	/* Done! */
358	$(document).triggerHandler('em_javascript_loaded');
359});
360
361/**
362 * Sets up external UI libraries and adds them to elements within the supplied container. This can be a jQuery or DOM element, subfunctions will either handle accordingly or this function will ensure it's the right one to pass on..
363 * @param jQuery|DOMElement container
364 */
365function em_setup_ui_elements ( $container ) {
366	let container = ( $container instanceof jQuery ) ? $container[0] : $container;
367	// Selectize
368	em_setup_selectize( $container );
369	// Tippy
370	em_setup_tippy( $container );
371	// Moment JS
372	em_setup_moment_times( $container );
373	// Date & Time Pickers
374	if( container.querySelector('.em-datepicker') ){
375		em_setup_datepicker( container );
376	}
377	if( container.querySelector(".em-time-input") ){
378		em_setup_timepicker( container );
379	}
380	// Phone numbers
381	em_setup_phone_inputs( container );
382	// let other things hook in
383	document.dispatchEvent( new CustomEvent( 'em_setup_ui_elements', { detail: { container : container } } ) );
384}
385
386/**
387 * Unsetup containers with UI elements, primarily useful if intending on duplicating an element which would require re-setup.
388 * @param $container
389 */
390function em_unsetup_ui_elements( $container ) {
391	let container = $container instanceof jQuery ? $container[0] : $container;
392	em_unsetup_selectize( container );
393	em_unsetup_tippy( container );
394	em_unsetup_datepicker( container );
395	em_unsetup_timepicker( container );
396	em_unsetup_phone_inputs( container );
397	// let other things hook in
398	document.dispatchEvent( new CustomEvent( 'em_unsetup_ui_elements', { detail: { container : container } } ) );
399}
400
401/* Local JS Timezone related placeholders */
402/* Moment JS Timzeone PH */
403function em_setup_moment_times( container_element ) {
404	container = jQuery(container_element);
405	if( window.moment ){
406		var replace_specials = function( day, string ){
407			// replace things not supported by moment
408			string = string.replace(/##T/g, Intl.DateTimeFormat().resolvedOptions().timeZone);
409			string = string.replace(/#T/g, "GMT"+day.format('Z'));
410			string = string.replace(/###t/g, day.utcOffset()*-60);
411			string = string.replace(/##t/g, day.isDST());
412			string = string.replace(/#t/g, day.daysInMonth());
413			return string;
414		};
415		container.find('.em-date-momentjs').each( function(){
416			// Start Date
417			var el = jQuery(this);
418			var day_start = moment.unix(el.data('date-start'));
419			var date_start_string = replace_specials(day_start, day_start.format(el.data('date-format')));
420			if( el.data('date-start') !== el.data('date-end') ){
421				// End Date
422				var day_end = moment.unix(el.data('date-end'));
423				var day_end_string = replace_specials(day_start, day_end.format(el.data('date-format')));
424				// Output
425				var date_string = date_start_string + el.data('date-separator') + day_end_string;
426			}else{
427				var date_string = date_start_string;
428			}
429			el.text(date_string);
430		});
431		var get_date_string = function(ts, format){
432			let date = new Date(ts * 1000);
433			let minutes = date.getMinutes();
434			if( format == 24 ){
435				let hours = date.getHours();
436				hours = hours < 10 ? '0' + hours : hours;
437				minutes = minutes < 10 ? '0' + minutes : minutes;
438				return hours + ':' + minutes;
439			}else{
440				let hours = date.getHours() % 12;
441				let ampm = hours >= 12 ? 'PM' : 'AM';
442				if( hours === 0 ) hours = 12; // the hour '0' should be '12'
443				minutes = minutes < 10 ? '0'+minutes : minutes;
444				return hours + ':' + minutes + ' ' + ampm;
445			}
446		}
447		container.find('.em-time-localjs').each( function(){
448			var el = jQuery(this);
449			var strTime = get_date_string( el.data('time'), el.data('time-format') );
450			if( el.data('time-end') ){
451				var separator = el.data('time-separator') ? el.data('time-separator') : ' - ';
452				strTime = strTime + separator + get_date_string( el.data('time-end'), el.data('time-format') );
453			}
454			el.text(strTime);
455		});
456	}
457};
458
459function em_load_jquery_css( wrapper = false ){
460	if( EM.ui_css && jQuery('link#jquery-ui-em-css').length == 0 ){
461		var script = document.createElement("link");
462		script.id = 'jquery-ui-em-css';
463		script.rel = "stylesheet";
464		script.href = EM.ui_css;
465		document.body.appendChild(script);
466		if( wrapper ){
467			em_setup_jquery_ui_wrapper();
468		}
469	}
470}
471
472function em_setup_jquery_ui_wrapper(){
473	if( jQuery('#em-jquery-ui').length === 0 ){
474		jQuery('body').append('<div id="em-jquery-ui" class="em">');
475	}
476}
477
478/* Useful function for adding the em_ajax flag to a url, regardless of querystring format */
479var em_ajaxify = function(url){
480	if ( url.search('em_ajax=0') != -1){
481		url = url.replace('em_ajax=0','em_ajax=1');
482	}else if( url.search(/\?/) != -1 ){
483		url = url + "&em_ajax=1";
484	}else{
485		url = url + "?em_ajax=1";
486	}
487	return url;
488};
489
490// load externals after DOM load, supplied by EM.assets, only if selector matches
491var em_setup_scripts = function( $container = false ) {
492	let container = $container || document;
493	if( EM && 'assets' in EM ) {
494		let baseURL = EM.url + '/includes/external/';
495		for ( const [selector, assets] of Object.entries(EM.assets) ) {
496			// load scripts if one element exists for selector
497			if ( container.querySelector(selector) ) {
498				if ('css' in assets) {
499					// Iterate through assets.css object and add stylesheet to head
500					for (const [id, value] of Object.entries(assets.css)) {
501						// Check if the stylesheet with the given ID already exists
502						if (!document.getElementById( id + '-css' )) {
503							// Create a new link element for the stylesheet
504							const link = document.createElement('link');
505							link.id = id + '-css';
506							link.rel = 'stylesheet';
507							link.href = value.match(/^http/) ? value : baseURL + value;
508
509							// Append the stylesheet to the document head
510							document.head.appendChild(link);
511						}
512					}
513				}
514				if ('js' in assets) {
515					// add a tracking of all assets to load, and execute loaded hooks after all assets are loaded and in order of dependence
516					let loaded = {};
517					let loadedListener = function( id ) {
518						loaded[id] = false;
519						if ( Object.entries( loaded ).length === Object.entries( assets.js ).length ) {
520							// all items for this asset loaded, so we go through all the entries and fire their events
521							for ( id of Object.keys( loaded ) ) {
522								loadAsset( id )
523							}
524						}
525					};
526					let loadAsset = function( id ) {
527						if ( !loaded[id] ) {
528							let asset = assets.js[id];
529							if ( typeof asset === 'object' && 'event' in asset ) {
530								if ( asset?.requires) {
531									loadAsset( asset.requires );
532								}
533								document.dispatchEvent( new CustomEvent( asset.event, {
534									detail: {
535										container: container,
536									}
537								} ) );
538							}
539							loaded[id] = true;
540						}
541					};
542					// Iterate through assets.js object and add script to head
543					for ( const [ id, value ] of Object.entries(assets.js)) {
544						// Check if the script with the given ID already exists
545						if ( !document.getElementById( id + '-js' ) ) {
546							// Create a new script element for the JavaScript file
547							const script = document.createElement('script');
548							script.id = id + '-js';
549							script.async = true;
550							if ( typeof value === 'object' ) {
551								// add locale data
552								if ( 'locale' in value && value.locale ) {
553									script.dataset.locale = value.locale;
554								}
555								script.src = value.url.match(/^http/g) ? value.url : baseURL + value.url;
556							} else {
557								script.src = value.match(/^http/g) ? value : baseURL + value;
558							}
559							// listen for loads so we execute the real onload hooks once all files are loaded (or errorred out)
560							script.onload = () => loadedListener(id);
561							script.onerror = () => loadedListener(id);
562							// Append the script to the document head
563							document.head.appendChild(script);
564						}
565					}
566				}
567			}
568		}
569	}
570}
571document.addEventListener('DOMContentLoaded', () => em_setup_scripts( document ));
572
573// WP List Tables front-end stuff
574const setupListTable = function( listTable ) {
575	// handle checks of multiple items using shift
576	const checkboxes = listTable.querySelectorAll( 'tbody .check-column input[type="checkbox"]' );
577	const listTableForm = listTable.querySelector('form.em-list-table-form');
578	let lastChecked;
579
580	//Pagination link clicks
581	listTable.querySelectorAll('.tablenav-pages a').forEach( el => {
582		el.addEventListener('click', function ( e ) {
583			e.preventDefault();
584			//get page no from url, change page, submit form
585			let match = el.href.match(/#[0-9]+/);
586			if ( match != null && match.length > 0 ) {
587				let pno = match[0].replace('#', '');
588				listTableForm.querySelector('input[name=pno]').val(pno);
589			} else {
590				// new way
591				let url = new URL(el.href);
592				if ( url.searchParams.has('paged') ) {
593					listTableForm.querySelectorAll('input[name=pno], input[name=paged]').forEach( el => el.value = url.searchParams.get('paged') );
594				} else {
595					listTableForm.querySelectorAll('input[name=pno], input[name=paged]').forEach( el => el.value = 1 );
596				}
597			}
598			listTableForm.requestSubmit();
599			return false;
600		});
601	});
602	// Pagination - Input page number
603	listTable.querySelectorAll('.tablenav-pages input[name=paged]').forEach( function ( input ){
604		input.addEventListener('change', function (e) {
605			e.preventDefault();
606			let last = listTableForm.querySelector('.tablenav-pages a.last-page');
607			if ( last ) {
608				// check val isn't more than last page
609				let url = new URL(last.href);
610				if ( url.searchParams.has('paged') ) {
611					let lastPage = parseInt(url.searchParams.get('paged'));
612					if ( parseInt(input.value) > lastPage ) {
613						input.value = lastPage;
614					}
615				}
616			} else {
617				// make sure it's less than current page, we're on last page already
618				let lastPage = listTableForm.querySelector('input[name=pno]');
619				if (lastPage && lastPage.value && parseInt(input.value) > parseInt(lastPage.value)) {
620					input.value = lastPage.value;
621					e.preventDefault();
622					return false;
623				}
624			}
625			listTableForm.querySelectorAll('input[name=pno]').forEach( el => el.value = input.value );
626			listTableForm.requestSubmit();
627			return false;
628		});
629	});
630
631	// handle checkboxes
632	listTable.addEventListener('click', function(e){
633		// handle selecting all checkboxes
634		if( e.target.matches('.manage-column.column-cb input') ){
635			listTable.querySelectorAll('.check-column input').forEach( function( checkbox ){
636				checkbox.checked = e.target.checked;
637				checkbox.closest('tr').classList.toggle('selected', e.target.checked);
638				// enable/disable bulk actions filter
639				listTable.querySelector('.tablenav .bulkactions-input').querySelectorAll('input,select,button').forEach( function(el){
640					e.target.checked ? el.removeAttribute('disabled') : el.setAttribute('disabled', true);
641					e.target.checked ? el.classList.remove('disabled') : el.classList.add('disabled', true);
642				});
643			});
644		} else if ( e.target.matches('tbody .check-column input[type="checkbox"]') ) {
645			// handle multiple checks
646			let inBetween = false;
647			if ( e.shiftKey ) {
648				checkboxes.forEach(checkbox => {
649					if ( checkbox === e.target || checkbox === lastChecked ) {
650						inBetween = !inBetween;
651					}
652					if ( inBetween || checkbox === lastChecked ) {
653						checkbox.checked = lastChecked.checked;
654					}
655					checkbox.closest('tr').classList.toggle('selected', checkbox.checked);
656				});
657			} else {
658				e.target.closest('tr').classList.toggle('selected', e.target.checked);
659			}
660			// enable/disable bulk actions filter
661			let somethingSelected = e.target.checked || listTable.querySelectorAll( 'tbody .check-column input[type="checkbox"]:checked' ).length > 0;
662			listTable.querySelector('.tablenav .bulkactions-input').querySelectorAll('input,select,button').forEach( function(el){
663				somethingSelected ? el.removeAttribute('disabled') : el.setAttribute('disabled', true);
664				somethingSelected ? el.classList.remove('disabled') : el.classList.add('disabled', true);
665			});
666			lastChecked = e.target;
667		} else if ( e.target.closest('tbody td.column-primary') ) {
668			// handle row expand/collapse
669			if ( e.target.matches('a[href],button:not(.toggle-row)') ) return true; // allow links to pass
670			e.preventDefault();
671			let rowExpandTrigger = e.target.closest('td.column-primary');
672			let row = rowExpandTrigger.closest('tr');
673			if( row.classList.contains('expanded') ) {
674				row.classList.remove('expanded');
675				row.classList.add('collapsed');
676				rowExpandTrigger.querySelector('button.toggle-row').classList.remove('expanded');
677			} else {
678				row.classList.add('expanded');
679				row.classList.remove('collapsed');
680				rowExpandTrigger.querySelector('button.toggle-row').classList.add('expanded');
681			}
682		}
683	});
684	// disable filter since no checkboxes initially selected
685	listTable.querySelectorAll('.tablenav .bulkactions-input').forEach( (el) => {
686		el.querySelectorAll('input,select,button').forEach(function (el) {
687			el.setAttribute('disabled', true);
688			el.classList.add('disabled', true);
689		})
690	});
691
692	// Sorting by headers
693	listTable.querySelector('thead').addEventListener('click', function( e ) {
694		// get th element
695		let th = e.target.tagName.toLowerCase() === 'th' ? e.target : e.target.closest('th');
696		if( th && (th.classList.contains('sorted') || th.classList.contains('sortable')) ) {
697			e.preventDefault();
698			// add args to form and submit it
699			let params = ( new URL( th.querySelector('a').href) ).searchParams;
700			if ( params.get('orderby') ) {
701				listTableForm.querySelector('input[name="orderby"]').value = params.get('orderby');
702				let order = params.get('order') ? params.get('order') : 'asc';
703				listTableForm.querySelector('input[name="order"]').value = order;
704				listTableForm.requestSubmit();
705			}
706		}
707	});
708
709	// show/hide filters trigger
710	let filterTrigger = listTable.querySelector('button.filters-trigger');
711	if( filterTrigger ) {
712		filterTrigger.addEventListener('click', function(e){
713			e.preventDefault();
714			if( filterTrigger.classList.contains('hidden') ) {
715				listTable.querySelectorAll('div.actions.filters').forEach( filter => filter.classList.remove('hidden') );
716				filterTrigger.classList.remove('hidden');
717				filterTrigger.setAttribute('aria-label', filterTrigger.dataset.labelHide);
718				if( '_tippy' in filterTrigger ){
719					filterTrigger._tippy.setContent( filterTrigger.dataset.labelHide );
720				}
721			} else {
722				listTable.querySelectorAll('div.actions.filters').forEach( filter => filter.classList.add('hidden') );
723				filterTrigger.classList.add('hidden');
724				filterTrigger.setAttribute('aria-label', filterTrigger.dataset.labelShow);
725				if( '_tippy' in filterTrigger ){
726					filterTrigger._tippy.setContent( filterTrigger.dataset.labelShow );
727				}
728			}
729		});
730		listTable.addEventListener('em_resize', function(){
731			if( listTable.classList.contains('size-small') ) {
732				filterTrigger.classList.remove('hidden'); // force hide click
733				filterTrigger.click();
734			}
735		});
736	}
737
738	// EXPAND/COLLAPSE - RESPONSIVE
739	// handle expand/collapse in responsive mode when clicking the expand/collapse (all)
740	let expandTrigger = listTable.querySelector('button.small-expand-trigger');
741	if( expandTrigger ) {
742		// detect click and add expand class to table, expanded class to trigger
743		expandTrigger.addEventListener('click', function(e){
744			e.preventDefault();
745			if( expandTrigger.classList.contains('expanded') ) {
746				listTable.querySelectorAll('tbody tr.expanded, tbody button.toggle-row.expanded').forEach( el => el.classList.remove('expanded') );
747				listTable.classList.remove('expanded');
748				expandTrigger.classList.remove('expanded');
749			} else {
750				listTable.querySelectorAll('tbody tr, tbody button.toggle-row').forEach( el => {
751					el.classList.add('expanded');
752					el.classList.remove('collapsed');
753				});
754				listTable.classList.add('expanded');
755				expandTrigger.classList.add('expanded');
756			}
757		});
758	}
759
760	// handle filters when pressing enter, submitting a search
761	listTable.querySelectorAll('.tablenav .actions input[type="text"]').forEach( function (input) {
762		input.addEventListener('keypress', function (e) {
763			let keycode = (e.keyCode ? e.keyCode : e.which);
764			if (keycode === 13) {
765				e.preventDefault();
766				listTableForm.requestSubmit();
767			}
768		});
769	});
770
771	// handle size breakpoints
772	let breakpoints = {
773		'xsmall' : 465,
774		'small' : 640,
775		'medium' : 930,
776		'large' : false,
777	}
778	// submissions
779	EM_ResizeObserver( breakpoints, [ listTable ] );
780
781	//Widgets and filter submissions
782	listTableForm.addEventListener('submit', function (e) {
783		e.preventDefault();
784		//append loading spinner
785		listTable.classList.add('em-working');
786		let loadingDiv = document.createElement('div');
787		loadingDiv.id = 'em-loading';
788		listTable.append(loadingDiv);
789		listTable.querySelectorAll('.em-list-table-error-notice').forEach( el => el.remove() );
790		//ajax call
791		fetch( EM.ajaxurl, { method: 'POST', body: new FormData(listTableForm) } ).then( function( response ) {
792			if ( response.ok ) {
793				return response.text();
794			} else {
795				throw new Error('Network Response ' + response.status);
796			}
797		}).then( function( data ) {
798			if ( !data ) {
799				throw new Error('Empty string received');
800			}
801			if (!listTable.classList.contains('frontend')) {
802				// remove modals as they are supplied again on the backend
803				listTableForm.querySelectorAll('.em-list-table-trigger').forEach(function ( trigger ) {
804					let modal = document.querySelector(trigger.rel);
805					if( modal ) {
806						modal.remove();
807					}
808				});
809			}
810			// get new data as DOM object
811			let wrapper = document.createElement('div');
812			wrapper.innerHTML = data;
813			let newListTable = wrapper.firstElementChild;
814			// replace old table with new table
815			listTable.replaceWith( newListTable );
816			// fire hook - note that form and data should not be used! This is for backward compatibility with an old jQuery hook being fired. Expect future consequences if you use them, obtain everything from listTable or prevListTable!
817			document.dispatchEvent( new CustomEvent('em_list_table_filtered', { detail: { prevListTable: listTable, listTable: newListTable, form: newListTable.firstElementChild, data: data } }) );
818		}).catch( function( error ) {
819			let div = document.createElement('div');
820			div.innerHTML = '<p>There was an unexpected error retrieving table data with error <code>' + error.message + '</code>
820, please try again or contact an administrator.</p>';
821			div.setAttribute('class', 'em-warning error em-list-table-error-notice');
822			listTable.querySelector('.table-wrap').before(div);
823			loadingDiv.remove();
824			listTable.classList.remove('em-working');
825		});
826		return false;
827	});
828
829	//Settings & Export Modal
830
831	/**
832	 * Handle trigger of settings and export modals.
833	 */
834	listTable.querySelectorAll('.em-list-table-trigger').forEach( trigger => {
835		trigger.addEventListener('click', function (e) {
836			e.preventDefault();
837			let modal = document.querySelector( trigger.getAttribute('rel') );
838			openModal(modal);
839		});
840	});
841
842	/**
843	 * Handle submission of settings forms, by copying over hidden input values such as cols and limit to main form.
844	 */
845	listTable.querySelectorAll('.em-list-table-settings form').forEach( form => {
846		form.addEventListener('submit', function (e) {
847			e.preventDefault();
848			//we know we'll deal with cols, so wipe hidden value from main
849			let modal = form.closest('.em-modal');
850			let match = listTableForm.querySelector("[name=cols]");
851			match.value = '';
852			let tableCols = form.querySelectorAll('.em-list-table-cols-selected .item');
853			tableCols.forEach( function (item_match) {
854				if (!item_match.classList.contains('hidden')) {
855					if (match.value !== '') {
856						match.value = match.value + ',' + item_match.getAttribute('data-value');
857					} else {
858						match.value = item_match.getAttribute('data-value');
859					}
860				}
861			});
862			// sync row count
863			let limit = form.querySelector('select[name="limit"]');
864			if( limit ) {
865				listTableForm.querySelector('[name="limit"]').value = limit.value;
866			}
867			// sync custom inputs
868			form.querySelectorAll('[data-setting]').forEach( function( input ) {
869				listTableForm.querySelectorAll('[name="'+input.name+'"]').forEach( el => el.remove() );
870				let persisted = input.cloneNode(true);
871				persisted.classList.add('hidden')
872				listTableForm.appendChild( persisted );
873			});
874			closeModal(modal);
875			// send events out
876			modal.dispatchEvent( new CustomEvent('submitted') );
877			listTable.dispatchEvent( new CustomEvent( 'em_list_table_settings_submitted', {
878				detail: {
879					listTableForm: listTableForm,
880					form: form,
881					modal: modal
882				},
883				bubbles: true
884			}) );
885			// submit main form
886			listTableForm.requestSubmit();
887		});
888	});
889
890	/**
891	 * Handle submission of export forms, by copying over filters and hidden inputs with the data-persist attribute from main list table form.
892	 */
893	listTable.querySelectorAll('.em-list-table-export > form').forEach( function( exportForm ) {
894		exportForm.addEventListener('submit', function(e) {
895			var formFilters = this.querySelector('.em-list-table-filters');
896			if ( formFilters ) {
897				// get all filter inputs in main list table form and copy over so export inherits all filters to output right results
898				let filters = listTableForm.querySelectorAll('.em-list-table-filters [name]');
899				formFilters.innerHTML = ''; // Empty the filters, none to copy over
900				if( filters ) {
901					filters.forEach( function( filter ) {
902						formFilters.appendChild( filter.cloneNode(true) );
903					});
904				}
905				let peristentData = listTableForm.querySelectorAll('[data-persist]');
906				if( peristentData ) {
907					peristentData.forEach( function( filter ) {
908						formFilters.appendChild( filter.cloneNode(true) );
909					});
910				}
911			}
912		});
913	});
914
915	// sortables
916	listTable.querySelectorAll(".em-list-table-cols-sortable").forEach( function(sortable) {
917		Sortable.create( sortable );
918	});
919
920	// add trigger
921	document.dispatchEvent( new CustomEvent('em_list_table_setup', { detail: { listTable: listTable, listTableForm: listTableForm } }) );
922
923	// add extra listeners that we might want to block such as in bulk actions and row actions
924
925	/* ----------------- Row/Bulk Action Handlers ----------------- */
926
927	const actionMessages = JSON.parse( listTableForm.dataset.actionMessages );
928	let isBulkAction = false;
929
930	listTable.addEventListener('click', function( e ) {
931		if( e.target.matches('a[data-row_action]') ) {
932			e.preventDefault();
933			let el = e.target;
934			let tr = el.closest('tr');
935
936			if( !isBulkAction ) {
937				let confirmation = []
938				// check if we need to confirm something specific
939				if ( el.dataset.confirmation && el.dataset.confirmation in actionMessages ) {
940					confirmation.push( actionMessages[el.dataset.confirmation] );
941				}
942				// check context of action and warn then propagate if upstream
943				if ( el.dataset.row_action in actionMessages ) {
944					confirmation.push( actionMessages[el.dataset.row_action] );
945				}
946
947				if ( confirmation.length > 0 ) {
948					if ( !confirm( confirmation.join("\n\n") ) ) {
949						return false;
950					}
951				}
952			}
953
954			// close dropdown if applicable
955			let dropdown = el.closest('[data-tippy-root], .em-tooltip-ddm-content');
956			if ( dropdown ) {
957				if ( '_tippy' in dropdown ) {
958					dropdown._tippy.hide();
959				}
960			}
961
962			// handle upstream rows, add a loading class to them so they don't get double-tapped, no checks necessary here since we have clicked a single row item
963			if( el.dataset.upstream ) {
964				// block any same upstream_id row so it's loading already pending refresh
965				listTable.querySelectorAll('tr[data-id="' + tr.dataset.id + '"]').forEach( tr => tr.classList.add('loading') );
966			}
967
968			// prep and fetch/refresh
969			let formData = new FormData( listTableForm );
970			for( const [key, value] of Object.entries(el.dataset) ) {
971				formData.set(key, value);
972			}
973			formData.set('view', listTable.dataset.view);
974			formData.set('action', listTable.dataset.basename + '_row');
975			listTableRowAction( tr, formData );
976
977			return false; // stop propagation
978		}
979	});
980
981	// Action links (approve/reject etc.) - circumvent if a warning is required
982	listTable.addEventListener( 'click', function( e ) {
983		if( e.target.matches('a[data-row_action]') ) {
984			e.preventDefault();
985		}
986	});
987
988	listTable.querySelectorAll('button.em-list-table-bulk-action').forEach( function( button ) {
989		button.addEventListener('click', function (e) {
990			e.preventDefault(); // override default
991			let actionSelector = listTableForm.querySelector('select.bulk-action-selector');
992			let action = actionSelector.options[actionSelector.selectedIndex];
993			
994			// check if we need to confirm
995			if ( action.dataset.confirm ) {
996				if ( !confirm( action.dataset.confirm ) ) {
997					isBulkAction = false; // just in case
998					return false;
999				}
1000			}
1001
1002			isBulkAction = true;
1003			// find all checked items and perform action on them if the action actually exists for that row (e.g. you can't re-approve an approved booking)
1004			let rows = listTableForm.querySelectorAll('tbody .check-column input:checked');
1005			rows.forEach( function ( checkbox ) {
1006				let actionTrigger = checkbox.parentElement.querySelector('[data-row_action="' + action.value + '"]');
1007				// check if sibling has the relevant action
1008				if( actionTrigger ) {
1009					let tr = checkbox.closest('tr');
1010					if ( actionTrigger.dataset.upstream ) {
1011						// check if not already in an upstream process, proceed if not
1012						if ( !tr.classList.contains('loading') ) { // if loading, already in upstream from another row
1013							// trigger the first booking id row in this table, it'll handle upstream stuff
1014							actionTrigger.click();
1015						}
1016					} else {
1017						// regular action, just click it
1018						actionTrigger.click();
1019					}
1020				}
1021			});
1022			isBulkAction = false;
1023		});
1024	});
1025
1026
1027	// add a listener to refresh related booking rows if upstream
1028	listTable.addEventListener('em_list_table_row_action_complete', function(e){
1029		if ( e.detail.upstream ) {
1030			// find any rows other than the current one and trigger a refresh
1031			let currentRow = e.detail.currentRow;
1032			let formData = e.detail.formData;
1033			if( formData.get('row_action') === 'delete' ) {
1034				let feedback = currentRow.querySelector('.column-primary span.em-icon-trash.em-tooltip');
1035				if ( feedback ) {
1036					listTable.querySelectorAll('tr[data-id="' + formData.get('row_id') + '"]').forEach( function( tr ) {
1037						// apply to all rows of same booking_id except the one we just updated
1038						if ( tr !== currentRow ) {
1039							let td = tr.querySelector('.column-primary');
1040							td.prepend(feedback.cloneNode(true));
1041							em_setup_tippy(td);
1042						}
1043						tr.classList.remove('faded-out');
1044						tr.classList.remove('loading');
1045					});
1046				}
1047			} else if( formData.get('row_action') !== 'refresh' ) {
1048				let feedback = currentRow.querySelector('.column-primary span.em-icon.em-tooltip').getAttribute('aria-label');
1049				formData.set('row_action', 'refresh'); // this is a special action that just refreshes the row
1050				formData.set('feedback', feedback);
1051				listTable.querySelectorAll('tr[data-id="' + formData.get('row_id') + '"]').forEach( function( tr ) {
1052					// apply to all rows of same booking_id except the one we just updated
1053					if( tr !== currentRow ) {
1054						listTableRowAction(tr, formData);
1055						// delete current booking_id and reset isUpstreamAction if we're done
1056						delete isUpstreamAction[e.detail.booking_id];
1057						if (Object.keys(isUpstreamAction).length) {
1058							isUpstreamAction = false;
1059						}
1060					}
1061				});
1062			}
1063		}
1064	});
1065
1066	// setup rows with actions if there are any
1067	listTable.querySelectorAll('td.column-actions a').forEach( (action) => {
1068		action.classList.add('em-tooltip');
1069		action.setAttribute('aria-label', action.innerText);
1070	});
1071}
1072
1073let listTableRowAction = function( tr, formData, upstream = false ){
1074	let listTable = tr.closest('.em-list-table');
1075	tr.classList.add('loading');
1076	formData.set('row_id', tr.dataset.id );
1077	fetch( EM.ajaxurl, { method: 'post', body : formData } ).then( function( response ) {
1078		return response.text();
1079	}).then( function( html ) {
1080		tr.classList.add('faded-out');
1081		if ( formData.get('row_action') === 'delete' ) {
1082			// the text provided is the icon, nothing else
1083			tr.querySelectorAll('th.check-column input[type="checkbox"], .em-list-table-actions').forEach( el => el.remove() );
1084			let td = tr.querySelector('.column-primary');
1085			let wrapper = document.createElement('div');
1086			wrapper.innerHTML = html;
1087			let icon = wrapper.firstElementChild;
1088			em_setup_tippy(wrapper); // no actions to set up
1089			td.prepend(icon);
1090		} else {
1091			tr.innerHTML = html
1092			setupListTableExtras(tr);
1093		}
1094		tr.classList.remove('faded-out');
1095		tr.classList.remove('loading');
1096		listTable.dispatchEvent( new CustomEvent('em_list_table_row_action_complete', { detail: { currentRow: tr, formData: formData, upstream: upstream } } ) );
1097	});
1098}
1099
1100const setupListTableExtras = function( listTable ) {
1101	// setup rows with actions if there are any
1102	listTable.querySelectorAll('td.column-actions a').forEach( (action) => {
1103		action.classList.add('em-tooltip');
1104		action.setAttribute('aria-label', action.innerText);
1105	});
1106	// remove tooltips within tooltips in cell tooltips
1107	listTable.querySelectorAll('td .em-list-table-col-tooltip .em-list-table-col-tooltip').forEach( (subtip) => {
1108		subtip.querySelectorAll('.em-tooltip').forEach( el => el.remove() );
1109		subtip.querySelectorAll('.em-tooltip-content').forEach( el => el.classList.remove('hidden') );
1110	});
1111	// set up tippy, selectize etc.
1112	em_setup_tippy( listTable );
1113	em_setup_selectize( listTable );
1114}
1115
1116document.addEventListener('em_list_table_filtered', function(e){
1117	setupListTable( e.detail.listTable );
1118	// re-setup tippy, selectize etc.
1119	setupListTableExtras( e.detail.listTable );
1120});
1121
1122// init
1123document.addEventListener('DOMContentLoaded', function() {
1124	// add back-compat stuff
1125	document.querySelectorAll('.em_obj div.tablenav').forEach( function( tablenav ){
1126		let em_obj = tablenav.closest('.em_obj');
1127		em_obj.classList.add('em-list-table','legacy', 'frontend');
1128		em_obj.querySelector('& > form').classList.add('em-list-table-form');
1129	});
1130	// find tables
1131	document.querySelectorAll('.em-list-table').forEach( listTable => setupListTable(listTable) );
1132});
1133
1134// add extra setup to bookings list table
1135document.addEventListener('em_list_table_setup'  , function(e){
1136	let listTable = e.detail.listTable;
1137	let listTableForm = e.detail.listTableForm;
1138	if( listTable.classList.contains('em-bookings-table') ) {
1139
1140		// handle submitting the settings modal form with booking-speficic extras
1141		listTable.addEventListener('em_list_table_settings_submitted', function(e){
1142			let form = e.detail.form;
1143			let listTableForm = e.detail.listTableForm;
1144			// get the views ddm and sync it to the table filter
1145			let views_select = form.querySelector('select[name="view"]');
1146			if ( views_select ) {
1147				let view_radio = listTableForm.querySelector('[name="view"][value="' + views_select.value + '"]');
1148				if( view_radio ) {
1149					view_radio.checked = true; // this doesn't trigger an event as we don't want that
1150				}
1151				let view_option = listTableForm.querySelector('button.em-bookings-table-view-option[data-view]');
1152				if ( view_option ) {
1153					view_option.setAttribute('data-view', views_select.value);
1154					view_option.innerText = views_select.options[views_select.selectedIndex].innerText;
1155				}
1156			}
1157		});
1158
1159		// setup views dropdown to switch between different booking table views
1160		let views_ddm_options = {
1161			theme : 'light-border',
1162			allowHTML : true,
1163			interactive : true,
1164			trigger : 'manual',
1165			placement : 'bottom',
1166			zIndex : 1000000,
1167			touch: true,
1168		};
1169		let tooltip_vars = { theme : 'light-border', appendTo : 'parent', touch : false, };
1170
1171		// TODO unify this with the search view dropdown JS to remove redundant code
1172		listTable.querySelectorAll('.em-bookings-table-views-trigger').forEach( function( trigger ){
1173			tooltip_vars.content = trigger.parentElement.getAttribute('aria-label');
1174			let views_tooltip = tippy(trigger.parentElement, tooltip_vars);
1175			let views_content = trigger.parentElement.querySelector('.em-bookings-table-views-options');
1176			let views_content_parent = views_content.parentElement;
1177			let tippy_content = document.createElement('div');
1178			views_ddm_options.content = tippy_content;
1179			let views_ddm = tippy(trigger, views_ddm_options);
1180			views_ddm.setProps({
1181				onShow(instance){
1182					views_tooltip.disable();
1183					tippy_content.append(views_content);
1184				},
1185				onShown(instance){ // keyboard support
1186					views_content.querySelector('input:checked').focus();
1187				},
1188				onHidden(instance){
1189					views_tooltip.enable();
1190					if( views_content.parentElement !== views_content_parent ) {
1191						views_content_parent.append(views_content);
1192					}
1193				}
1194			});
1195			let tippy_listener = function(e){
1196				if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false;
1197				e.preventDefault();
1198				e.stopPropagation();
1199				trigger._tippy.show();
1200				views_tooltip.hide();
1201			}
1202			trigger.addEventListener('click', tippy_listener);
1203			trigger.addEventListener('keydown', tippy_listener);
1204			trigger.firstElementChild.addEventListener('focus', function(e){
1205				views_ddm.hide();
1206				views_tooltip.enable();
1207				views_tooltip.show();
1208			});
1209			trigger.firstElementChild.addEventListener('blur', function(){
1210				views_tooltip.hide();
1211			});
1212
1213			// TODO Remove this dependence on jQuery. Copied it from the search.js file, but it seems that even a vanilla document.addEventListener('blur') isn't intercepting these blur/focus events.
1214			let $ = jQuery;
1215			$views = $(listTable).find('.em-bookings-table-views');
1216			$views.on('focus blur', '.em-bookings-table-views-options input', function(){
1217				if( document.activeElement === this ){
1218					this.parentElement.classList.add('focused');
1219				}else{
1220					this.parentElement.classList.remove('focused');
1221				}
1222			});
1223
1224			$views.on('keydown click', '.em-bookings-table-views-options input', function( e ){
1225				// get relevant vars
1226				if( e.type === 'keydown' && e.which !== 13 ){
1227					if ( [37, 38, 39, 40].indexOf(e.which) !== -1 ) {
1228						if (e.which === 38) {
1229							if (this.parentElement.previousElementSibling) {
1230								this.parentElement.previousElementSibling.focus();
1231							}
1232						} else if (e.which === 40) {
1233							if (this.parentElement.nextElementSibling) {
1234								this.parentElement.nextElementSibling.focus();
1235							}
1236						}
1237						return false;
1238					} else if ( e.which === 9 ) {
1239						// focus out
1240						views_ddm.hide();
1241					}
1242					return true;
1243				}
1244				this.checked = true;
1245				let input = $(this);
1246				// mark label selected
1247				input.closest('fieldset').find('label').removeClass('checked');
1248				input.parent().addClass('checked');
1249				// get other reference elements we need
1250				let views_wrapper = $(this).closest('.em-bookings-table-views');
1251				let view_type = this.value;
1252				let trigger = views_wrapper.children('.em-bookings-table-views-trigger');
1253				let trigger_option = trigger.children('.em-search-view-option');
1254				// change view, if different
1255				if( view_type !== trigger_option.attr('data-view') ){
1256					trigger_option.attr('data-view', this.value).text(this.parentElement.innerText);
1257					// remove cols value if it's just a switch in view, so we get default cols (if there is one)
1258					listTableForm.querySelector('input[name="cols"][type="hidden"]').value = '';
1259					// set the view type and trigger a form submit
1260					listTableForm.requestSubmit();
1261				}
1262				views_ddm.hide();
1263			});
1264		});
1265	}
1266});
1267
1268// backcompat for em_bookings_filtered jQuery trigger
1269document.addEventListener('em_list_table_filtered', function( e ){
1270	if( e.detail.listTable.classList.contains('em-bookings-table') && window.jQuery ) {
1271		jQuery(document).triggerHandler('em_bookings_filtered', [jQuery(e.detail.data), e.detail.listTable, jQuery(e.detail.form)]); // backwards compatibility
1272	}
1273})
1274
1275function em_setup_datepicker( container ){
1276	wrap = jQuery(container);
1277
1278	//apply datepickers - jQuery UI (backcompat)
1279	let dateDivs = wrap.find('.em-date-single, .em-date-range');
1280	if( dateDivs.length > 0 ){
1281		//default picker vals
1282		var datepicker_vals = {
1283			dateFormat: "yy-mm-dd",
1284			changeMonth: true,
1285			changeYear: true,
1286			firstDay : EM.firstDay,
1287			yearRange:'c-100:c+15',
1288			beforeShow : function( el, inst ){
1289				em_setup_jquery_ui_wrapper();
1290				inst.dpDiv.appendTo('#em-jquery-ui');
1291			}
1292		};
1293		if( EM.dateFormat ) datepicker_vals.dateFormat = EM.dateFormat;
1294		if( EM.yearRange ) datepicker_vals.yearRange = EM.yearRange;
1295		jQuery(document).triggerHandler('em_datepicker', datepicker_vals);
1296		//apply datepickers to elements
1297		dateDivs.find('input.em-date-input-loc').each(function(i,dateInput){
1298			//init the datepicker
1299			var dateInput = jQuery(dateInput);
1300			var dateValue = dateInput.nextAll('input.em-date-input').first();
1301			var dateValue_value = dateValue.val();
1302			dateInput.datepicker(datepicker_vals);
1303			dateInput.datepicker('option', 'altField', dateValue);
1304			//now set the value
1305			if( dateValue_value ){
1306				var this_date_formatted = jQuery.datepicker.formatDate( EM.dateFormat, jQuery.datepicker.parseDate('yy-mm-dd', dateValue_value) );
1307				dateInput.val(this_date_formatted);
1308				dateValue.val(dateValue_value);
1309			}
1310			//add logic for texts
1311			dateInput.on('change', function(){
1312				if( jQuery(this).val() == '' ){
1313					jQuery(this).nextAll('.em-date-input').first().val('');
1314				}
1315			});
1316		});
1317		//deal with date ranges
1318		dateDivs.filter('.em-date-range').find('input.em-date-input-loc[type="text"]').each(function(i,dateInput){
1319			//finally, apply start/end logic to this field
1320			dateInput = jQuery(dateInput);
1321			if( dateInput.hasClass('em-date-start') ){
1322				dateInput.datepicker('option','onSelect', function( selectedDate ) {
1323					//get corresponding end date input, we expect ranges to be contained in .em-date-range with a start/end input element
1324					var startDate = jQuery(this);
1325					var endDate = startDate.parents('.em-date-range').find('.em-date-end').first();
1326					var startValue = startDate.nextAll('input.em-date-input').first().val();
1327					var endValue = endDate.nextAll('input.em-date-input').first().val();
1328					startDate.trigger('em_datepicker_change');
1329					if( startValue > endValue && endValue != '' ){
1330						endDate.datepicker( "setDate" , selectedDate );
1331						endDate.trigger('change').trigger('em_datepicker_change');
1332					}
1333					endDate.datepicker( "option", 'minDate', selectedDate );
1334				});
1335			}else if( dateInput.hasClass('em-date-end') ){
1336				var startInput = dateInput.parents('.em-date-range').find('.em-date-start').first();
1337				if( startInput.val() != '' ){
1338					dateInput.datepicker('option', 'minDate', startInput.val());
1339				}
1340			}
1341		});
1342	}
1343
1344	// datpicker - new format
1345	let datePickerDivs = wrap.find('.em-datepicker, .em-datepicker-range');
1346	if( datePickerDivs.length > 0 ){
1347		// wrappers and locale
1348		let datepicker_wrapper = jQuery('#em-flatpickr');
1349		if( datepicker_wrapper.length === 0 ){
1350			datepicker_wrapper = jQuery('<div class="em pixelbones em-flatpickr" id="em-flatpickr"></div>').appendTo('body');
1351		}
1352		// locale
1353		if( 'locale' in EM.datepicker ){
1354			flatpickr.localize(flatpickr.l10ns[EM.datepicker.locale]);
1355			flatpickr.l10ns.default.firstDayOfWeek = EM.firstDay;
1356		}
1357		//default picker vals
1358		let datepicker_onChanging;
1359		let datepicker_options = {
1360			appendTo : datepicker_wrapper[0],
1361			dateFormat: "Y-m-d",
1362			disableMoble : "true",
1363			allowInput : true,
1364			onChange : [function( selectedDates, dateStr, instance ){
1365				if ( datepicker_onChanging !== selectedDates) {
1366					let wrapper = jQuery(instance.input).closest('.em-datepicker');
1367					let data_wrapper = wrapper.find('.em-datepicker-data');
1368					let inputs = data_wrapper.find('input');
1369					let dateFormat = function(d) {
1370						let month = '' + (d.getMonth() + 1),
1371							day = '' + d.getDate(),
1372							year = d.getFullYear();
1373						if (month.length < 2) month = '0' + month;
1374						if (day.length < 2) day = '0' + day;
1375						return [year, month, day].join('-');
1376					}
1377					if ( selectedDates.length === 0 ){
1378						if ( instance.config.mode === 'single' && wrapper.hasClass('em-datepicker-until') ) {
1379							let input = instance.input.classList.contains('em-date-input-start') ? inputs[0] : input
1379s[1];
1380							input.setAttribute('value', '');
1381							if ( inputs.filter(input => input.value !== '').length === 0 ) {
1382								wrapper.removeClass('has-value');
1383							}
1384						} else {
1385							wrapper.removeClass('has-value');
1386							inputs.attr('value', '');
1387							if( instance.config.mode === 'multiple' ) {
1388								// empty pill selection
1389								let datesEl = instance.input.closest('.em-datepicker').querySelector('.em-datepicker-dates');
1390								if (datesEl) {
1391									datesEl.querySelectorAll('.item:not(.clear-all)').forEach( el => el.remove() );
1392									datesEl.classList.remove('has-value');
1393								}
1394							}
1395						}
1396					} else {
1397						wrapper.addClass('has-value');
1398						if ( instance.config.mode === 'range' && selectedDates[1] !== undefined ) {
1399							// deal with end date
1400							inputs[0].setAttribute('value', dateFormat(selectedDates[0]));
1401							inputs[1].setAttribute('value', dateFormat(selectedDates[1]));
1402						} else if ( instance.config.mode === 'single' && wrapper.hasClass('em-datepicker-until') ){
1403							if( instance.input.classList.contains('em-date-input-start') ){
1404								inputs[0].setAttribute('value', dateFormat(selectedDates[0]));
1405								// set min-date of other datepicker
1406								let fp;
1407								if( wrapper.attr('data-until-id') ){
1408									let fp_inputData = jQuery('#' + wrapper.attr('data-until-id') + ' .em-date-input-end');
1409									fp = fp_inputData[0]._flatpickr;
1410								}else {
1411									fp = wrapper.find('.em-date-input-end')[0]._flatpickr;
1412								}
1413								if( fp.selectedDates[0] !== undefined && fp.selectedDates[0] < selectedDates[0] ){
1414									fp.setDate(selectedDates[0], false);
1415									inputs[1].setAttribute('value', dateFormat(fp.selectedDates[0]));
1416								}
1417								fp.set('minDate', selectedDates[0]);
1418							}else{
1419								inputs[1].setAttribute('value', dateFormat(selectedDates[0]));
1420							}
1421						} else if ( instance.config.mode === 'multiple' ){
1422							inputs[0].setAttribute('value', dateStr);
1423							// Sort the selected dates chronologically
1424							selectedDates.sort(function(a, b) { return a - b; });
1425							// Build pill selection for multiple dates
1426							let datesEl = instance.input.closest('.em-datepicker').querySelector('.em-datepicker-dates');
1427							datesEl.classList.add('has-value');
1428							if ( datesEl ) {
1429								// Remove existing date pills but preserve the clear-all button
1430								datesEl.querySelectorAll('.item:not(.clear-all)').forEach(el => el.remove());
1431	
1432								// Sort dates chronologically
1433								selectedDates.sort((a, b) => a - b);
1434	
1435								// Group sequential dates into ranges
1436								let groups = [], currentGroup = [];
1437								selectedDates.forEach((date, i) => {
1438									if (currentGroup.length === 0) {
1439										currentGroup.push(date);
1440									} else {
1441										let lastDate = currentGroup[currentGroup.length - 1];
1442										let diffDays = (date - lastDate) / (1000 * 3600 * 24);
1443										if (diffDays === 1) {
1444											currentGroup.push(date);
1445										} else {
1446											groups.push(currentGroup);
1447											currentGroup = [date];
1448										}
1449									}
1450									if (i === selectedDates.length - 1) groups.push(currentGroup);
1451								});
1452	
1453								// Insert pills and maintain date values
1454								groups.forEach(group => {
1455									let div = document.createElement('div');
1456									div.className = 'item';
1457									let formattedDates = group.map(date => instance.formatDate(date, 'Y-m-d'));
1458									div.dataset.date = formattedDates.join(',');
1459									let startText = instance.formatDate(group[0], instance.config.altFormat);
1460									let endText = instance.formatDate(group[group.length - 1], instance.config.altFormat);
1461									div.innerHTML = `<span>${group.length > 1 ? startText + ' - ' + endText : startText}</span><a href="#" class="remove" tabindex="-1" title="Remove">×</a>`;
1462									datesEl.insertBefore(div, datesEl.querySelector('.clear-all'));
1463								});
1464							}
1465						} else {
1466							inputs[0].setAttribute('value', dateFormat(selectedDates[0]));
1467						}
1468					}
1469					inputs.trigger('change');
1470					let current_date = data_wrapper.attr('date-value');
1471					data_wrapper.attr('data-value', inputs.toArray().map(input => input.value).filter(value => value !== '').join(','));
1472					if( current_date === dateStr ) data_wrapper.trigger('change');
1473					wrapper[0].dispatchEvent( new CustomEvent('datepicker-onChange', { detail: { selectedDates : selectedDates, dateStr: dateStr, instance: instance } }) );
1474				}
1475				datepicker_onChanging = null; // reset regardless, since it's to prevent onClose firing this twice
1476			}],
1477			onClose : function( selectedDates, dateStr, instance ){
1478				// deal with single date choice and clicking out
1479				if( instance.config.mode === 'range' && selectedDates[1] !== undefined ){
1480					if(selectedDates.length === 1){
1481						instance.setDate([selectedDates[0],selectedDates[0]], true); // wouldn't have been triggered with a single date selection
1482					}
1483				} else {
1484					// trigger an onChange
1485					datepicker_options.onChange[0](selectedDates, dateStr, instance);
1486					datepicker_onChanging = selectedDates; // set flag to prevent onChange firing twice
1487				}
1488			},
1489			locale : {},
1490		};
1491		if( EM.datepicker.format !== datepicker_options.dateFormat ){
1492			datepicker_options.altFormat = EM.datepicker.format;
1493			datepicker_options.altInput = true;
1494		}
1495		jQuery(document).triggerHandler('em_datepicker_options', datepicker_options);
1496		//apply datepickers to elements
1497		datePickerDivs.each( function(i,datePickerDiv) {
1498			// hide fallback fields, show range or single
1499			datePickerDiv = jQuery(datePickerDiv);
1500			datePickerDiv.find('.em-datepicker-data').addClass('hidden');
1501			let isRange = datePickerDiv.hasClass('em-datepicker-range');
1502			let altOptions = {};
1503			if( datePickerDiv.attr('data-datepicker') ){
1504				altOptions = JSON.parse(datePickerDiv.attr('data-datepicker'));
1505				if( typeof altOptions !== 'object' ){
1506					altOptions = {};
1507				}
1508			}
1509			let otherOptions = {};
1510			if( datePickerDiv.find('script.datepicker-options').length > 0 ){
1511				otherOptions = JSON.parse( datePickerDiv.find('script.datepicker-options').text() );
1512				if( typeof altOptions !== 'object' ){
1513					otherOptions = {};
1514				}
1515			}
1516			let options = Object.assign({}, datepicker_options, altOptions, otherOptions); // clone, mainly shallow concern for 'mode'
1517			options.mode = isRange ? 'range' : 'single';
1518			if ( datePickerDiv.hasClass('em-datepicker-multiple') ) {
1519				options.mode = 'multiple';
1520			}
1521			if( isRange && 'onClose' in options ){
1522				options.onClose = [function( selectedDates, dateStr, instance ){
1523					if(selectedDates.length === 1){ // deal with single date choice and clicking out
1524						instance.setDate([selectedDates[0],selectedDates[0]], true);
1525					}
1526				}];
1527			}
1528			if( datePickerDiv.attr('data-separator') ) options.locale.rangeSeparator = datePickerDiv.attr('data-separator');
1529			if( datePickerDiv.attr('data-format') ) options.altFormat = datePickerDiv.attr('data-format');
1530			let FPs = datePickerDiv.find('.em-date-input');
1531			//if ( FPs.hasClass(flatpickr-input) ) return; // already initialized
1532			if ( FPs[0].tagName.toLowerCase() === 'input' ) {
1533				FPs.attr('type', 'text');
1534			} else {
1535				options.wrap = true;
1536				FPs.find('input[type="hidden"]').attr('type', 'text');
1537			}
1538			FPs.flatpickr(options);
1539		});
1540		em_setup_datepicker_dates( datePickerDivs );
1541		// fire trigger
1542		jQuery(document).triggerHandler('em_flatpickr_loaded', [wrap]);
1543		container.dispatchEvent( new CustomEvent('em_datepicker_loaded', { bubbles: true, detail: { container: wrap, datepickers: datePickerDivs } } ) );
1544	}
1545}
1546
1547function em_setup_datepicker_dates( container ) {
1548	let datePickerContainer = jQuery(container);
1549	let datePickerDivs = datePickerContainer.first().hasClass('em-datepicker') ? datePickerContainer : datePickerContainer.find('.em-datepicker, .em-datepicker-range') ;
1550	// add values to elements, done once all datepickers instantiated so we don't get errors with date range els in separate divs
1551	datePickerDivs.each( function(i,datePickerDiv) {
1552		datePickerDiv = jQuery(datePickerDiv);
1553		let FPs = datePickerDiv.find('.em-date-input');
1554		//if ( FPs.hasClass(flatpickr-input) ) return;
1555		let inputs = datePickerDiv.find('.em-datepicker-data input');
1556		inputs.attr('type', 'hidden'); // hide so not tabbable
1557		if( datePickerDiv.hasClass('em-datepicker-until') ){
1558			let start_fp = FPs.filter('.em-date-input-start')[0]._flatpickr;
1559			let end_fp;
1560			if( datePickerDiv.attr('data-until-id') ){
1561				end_fp = jQuery('#' + datePickerDiv.attr('data-until-id') + ' .em-date-input-end')[0]._flatpickr;
1562			}else{
1563				end_fp = FPs.filter('.em-date-input-end')[0]._flatpickr;
1564				if( inputs[1] && inputs[1].value ) {
1565					end_fp.setDate(inputs[1].value, false, 'Y-m-d');
1566				}
1567			}
1568			if( inputs[0] && inputs[0].value ){
1569				start_fp.setDate(inputs[0].value, false, 'Y-m-d');
1570				end_fp.set('minDate', inputs[0].value);
1571			}
1572			start_fp._inputData = inputs[0] ? [inputs[0]] : [];
1573			end_fp._inputData = inputs[1] ? [inputs[1]] : [];
1574		}else if( datePickerDiv.hasClass('em-datepicker-multiple') ){
1575			// handle multiple pre-loaded dates
1576			if( inputs[0] && inputs[0].value ){
1577				let datesArray = inputs[0].value.split(',');
1578				FPs[0]._flatpickr.setDate(datesArray, true, 'Y-m-d');
1579			}
1580			FPs[0]._flatpickr._inputData = [ inputs[0] ];
1581		}else{
1582			let dates = [];
1583			FPs[0]._flatpickr._inputData = [];
1584			inputs.each( function( i, input ){
1585				if( input.value ){
1586					dates.push(input.value);
1587					FPs[0]._flatpickr._inputData.push(input);
1588				}
1589			});
1590			FPs[0]._flatpickr.setDate(dates, false, 'Y-m-d');
1591		}
1592	});
1593}
1594
1595/**
1596 * Deregister the datepicker
1597 * @param wrap
1598 */
1599function em_unsetup_datepicker( wrap ) {
1600	wrap.querySelectorAll(".em-datepicker .em-date-input.flatpickr-input").forEach( function( el ){
1601		if( '_flatpickr' in el ){
1602			el._flatpickr.destroy();
1603		}
1604	});
1605}
1606
1607/**
1608 * Handle the remove button for each date selection pill
1609 */
1610document.addEventListener('click', function(e) {
1611	if ( !e.target.closest('.em-datepicker-dates .item:not(.clear-all) .remove') ) return;
1612
1613	e.preventDefault();
1614	const pill = e.target.closest('.item');
1615	const datesContainer = pill.closest('.em-datepicker-dates');
1616	const datepickerContainer = datesContainer.closest('.em-datepicker');
1617	const dateInput = datepickerContainer.querySelector('.em-date-input');
1618
1619	// Remove pill
1620	pill.remove();
1621
1622	// Rebuild dates array from remaining pills
1623	const newDates = [];
1624	datesContainer.querySelectorAll('.item:not(.clear-all)').forEach(item => {
1625		const dates = item.dataset.date.split(',');
1626		dates.forEach(date => newDates.push(date));
1627	});
1628
1629	// Update Flatpickr instance
1630	const fp = datepickerContainer.querySelector('.em-date-input')._flatpickr;
1631	if (fp) fp.setDate(newDates, true, 'Y-m-d');
1632
1633	// Update hidden input
1634	const altInput = datepickerContainer.querySelector('.em-datepicker-data input');
1635	if (altInput) {
1636		altInput.value = newDates.join(',');
1637		altInput.dispatchEvent(new Event('change'));
1638	}
1639});
1640
1641/**
1642 * Handle the Clear All button
1643 */
1644document.addEventListener('click', function(e) {
1645	if ( !e.target.closest('.em-datepicker-dates .clear-all') ) return;
1646
1647	e.preventDefault();
1648	const datesContainer = e.target.closest('.em-datepicker-dates');
1649	const datepickerContainer = datesContainer.closest('.em-datepicker');
1650	const fp = datepickerContainer.querySelector('.em-date-input')._flatpickr;
1651
1652	// Remove all pills
1653	datesContainer.querySelectorAll('.item:not(.clear-all)').forEach( item => item.remove() );
1654
1655	// Clear Flatpickr instance
1656	if (fp) fp.clear();
1657
1658	// Update hidden input
1659	const altInput = datepickerContainer.querySelector('.em-datepicker-data input');
1660	if (altInput) {
1661		altInput.value = '';
1662		altInput.dispatchEvent(new Event('change'));
1663	}
1664});
1665
1666
1667
1668function em_setup_timepicker( container ){
1669	wrap = jQuery(container);
1670	var timepicker_options = {
1671		step:15
1672	}
1673	timepicker_options.timeFormat = EM.show24hours == 1 ? 'G:i':'g:i A';
1674	jQuery(document).triggerHandler('em_timepicker_options', timepicker_options);
1675	wrap.find(".em-time-input").em_timepicker(timepicker_options).each( function(i, el){
1676		this.dataset.seconds = this.value ? jQuery(this).em_timepicker('getSecondsFromMidnight') : '';
1677	});
1678
1679	/**
1680	 * A function that retargets an the change event to the .em-time-range enclosing div whilst maintinaing the originally triggered target.
1681	 * This is done because the em_timepicker short-circuits the bubbling.
1682	 *
1683	 * @param {Event} e - The original event to be retargeted.
1684	 */
1685	let retargetEvent = function(e) {
1686		e.stopPropagation();
1687		const customEvent = new CustomEvent('change', {
1688			bubbles: true,
1689			cancelable: true,
1690			detail: { target: e.target }
1691		});
1692
1693		// Override the target getter to return the original element
1694		Object.defineProperty(customEvent, 'target', {
1695			configurable: true,
1696			get: () => e.target,
1697		});
1698		e.target.closest('.em-time-range').dispatchEvent( customEvent );
1699	};
1700
1701	// Keep the duration between the two inputs.
1702	wrap.find(".em-time-range input.em-time-start").each( function(i, el){
1703		var time = jQuery(el);
1704		time.data('oldTime', time.em_timepicker('getSecondsFromMidnight'));
1705	}).on('change', function( e ) {
1706		var start = jQuery(this);
1707		var wrapper = start.closest('.em-time-range');
1708		var end = wrapper.find('.em-time-end').first();
1709		if ( end.val() ) { // Only update when second input has a value.
1710			// Calculate duration.
1711			var oldTime = start.data('oldTime');
1712			var duration = (end.em_timepicker('getSecondsFromMidnight') - oldTime) * 1000;
1713			var time = start.em_timepicker('getSecondsFromMidnight');
1714			if(  this.value && end.em_timepicker('getSecondsFromMidnight') >= oldTime ){
1715				// Calculate and update the time in the second input.
1716				end.em_timepicker('setTime', new Date(start.em_timepicker('getTime').getTime() + duration));
1717			}
1718			start.data('oldTime', time);
1719		}
1720		if ( start.val() || end.val() ) {
1721			wrapper.find('.em-time-all-day').prop('checked', false).prop('indeterminate', false);
1722		}
1723		this.dataset.seconds = start.val() ? start.em_timepicker('getSecondsFromMidnight') : '';
1724		retargetEvent(e);
1725	});
1726	// Validate.
1727	container.querySelectorAll('.em-time-range').forEach( el => el.addEventListener('change', function (e) {
1728		if ( e.target.matches('input.em-time-end') ) {
1729			let end = jQuery(e.target);
1730			e.target.dataset.seconds = end.val() ? end.em_timepicker('getSecondsFromMidnight') : '';
1731			let start = end.prevAll('.em-time-start');
1732			let wrapper = e.target.closest('.event-form-when, .em-time-range');
1733			let start_date_element = wrapper.querySelector('.em-date-end');
1734			let end_date_element = wrapper.querySelector('.em-date-start');
1735			let start_date = start_date_element ? start_date_element.value : '';
1736			let end_date = end_date_element ? end_date_element.value : '';
1737			if ( start.val() ) {
1738				let hasError = start.em_timepicker('getTime') > end.em_timepicker('getTime') && (!end_date || start_date === end_date);
1739				e.target.classList.toggle('error', hasError);
1740			}
1741			if (end_date_element) {
1742				wrapper.querySelectorAll('.em-time-all-day').forEach(function (checkbox) {
1743					checkbox.checked = false;
1744					checkbox.indeterminate = false;
1745				});
1746			}
1747		} else if ( e.target.matches('.em-date-end') ) {
1748			jQuery(e.target.closest('.event-form-when')).find('.em-time-end').trigger('change');
1749		} else if ( e.target.matches('input.em-time-all-day') ) {
1750			e.currentTarget.querySelectorAll('.em-time-input').forEach(function (input) {
1751				input.readOnly = e.target.checked;
1752			});
1753			if ( e.target.checked ) {
1754				// set 12am and 11:59pm for start/end times
1755				e.currentTarget.querySelectorAll('.em-time-start').forEach( el => jQuery(el).em_timepicker('setTime', new Date('2000-01-01 00:00:00') ) );
1756				e.currentTarget.querySelectorAll('.em-time-end').forEach( el => jQuery(el).em_timepicker('setTime', new Date('2000-01-01 23:59:59') ) );
1757			}
1758		}
1759	}) );
1760	// listen to and dispatch the event
1761	wrap.find(".em-time-range input.em-time-end").on('change', retargetEvent );
1762}
1763
1764function em_unsetup_timepicker( container ) {
1765	jQuery(container).find('.em-time-range input.em-time-end, .em-time-range input.em-time-start').unbind(['click','focus','change']); //clear all timepickers - consequently, also other click/blur/change events, recreate the further down
1766}
1767
1768let em_close_other_selectized = function(){
1769	// find all other selectized items and close them
1770	let control = this.classList.contains('selectize-control') ? this.closest('.em-selectize.selectize-control') : this;
1771	document.querySelectorAll('.em-selectize.dropdown-active').forEach( function( el ){
1772		if( el !== control && 'selectize' in el.previousElementSibling) {
1773			el.previousElementSibling.selectize.close();
1774		}
1775	});
1776}
1777
1778document.addEventListener('events_manager_js_loaded', function(){
1779	EM_Selectize.define('multidropdown', function( options ) {
1780		if( !this.$input.hasClass('multidropdown') ) return;
1781		let s = this;
1782		let s_setup = s.setup;
1783		let s_refreshOptions = s.refreshOptions;
1784		let s_open = s.open;
1785		let s_close = s.close;
1786		let placeholder;
1787		let placeholder_text
1788		let placeholder_default;
1789		let placeholder_label;
1790		let counter;
1791		let isClosing = false;
1792		this.changeFunction = function() {
1793			let items = s.getValue();
1794			let selected_text = this.$input.attr('data-selected-text') ? this.$input.attr('data-selected-text') : '%d Selected';
1795			counter.children('span.selected-text').text(selected_text.replace('%d', items.length));
1796			if( items.length > 0 ) {
1797				counter.removeClass('hidden');
1798				placeholder_text.text( placeholder_label );
1799				s.$control_input.attr('placeholder', s.$input.attr('placeholder'));
1800			} else {
1801				counter.addClass('hidden');
1802				placeholder_text.text( placeholder_default );
1803			}
1804		}
1805		this.setup = function() {
1806			s_setup.apply(s);
1807			s.isDropdownClosingPlaceholder = false;
1808			// add section to top of selection to show the dropdown text
1809			placeholder = jQuery('<div class="em-selectize-placeholder"></div>').prependTo(s.$wrapper);
1810			let clear_text = this.$input.attr('data-clear-text') ? this.$input.attr('data-clear-text') : 'Clear Selection';
1811			counter = jQuery('<span class="placeholder-count hidden"><a href="#" class="remove" tabindex="-1">X</a><span class="selected-text"></span><span class="clear-selection">' + clear_text + '</span></div>').prependTo(placeholder);
1812			placeholder_text = jQuery('<span class="placeholder-text"></span>').appendTo(placeholder);
1813			placeholder_default = s.$input.attr('data-default') ? s.$input.attr('data-default') : s.$input.attr('placeholder');
1814			placeholder_label = s.$input.attr('data-label') ? s.$input.attr('data-label') : s.$input.attr('placeholder');
1815			placeholder_text.text( placeholder_default );
1816			s.$dropdown.prepend(s.$control_input.parent());
1817			s.on('dropdown_close', function() {
1818				s.$wrapper.removeClass('dropdown-active');
1819			});
1820			s.on('dropdown_open', function() {
1821				s.$wrapper.addClass('dropdown-active');
1822				s.$control_input.val('');
1823			});
1824			s.on('change', this.changeFunction);
1825			placeholder.on('focus blur click', function (e) {
1826				// only if we're clicking on the placeholder
1827				if( this.matches('.em-selectize-placeholder') ) {
1828					if ( !s.isOpen && e.type !== 'blur' ){
1829						s.open();
1830					} else if ( s.isOpen && e.type !== 'focus' ) {
1831						s.close();
1832					}
1833				}
1834			}).on('focus blur click mousedown mouseup', function( e ){
1835				if( this.matches('.em-selectize-placeholder') ) {
1836					// stope selectize doing anything to our own open/close actions
1837					e.stopPropagation();
1838					e.preventDefault();
1839					if( e.type === 'click' ) {
1840						em_close_other_selectized.call( this.closest('.selectize-control') );
1841						if ( s.isOpen && s.$control_input.val() && !this.matches('.placeholder-count') && !this.closest('.placeholder-count') ) {
1842							isClosing = true;
1843							s.close();
1844						}
1845					} else {
1846						isClosing = false;
1847					}
1848					return false;
1849				}
1850			});
1851			counter.on( 'click' , function( e ){
1852				e.preventDefault();
1853				e.stopPropagation();
1854				s.clear();
1855				if( s.isOpen ) s.refreshOptions();
1856			});
1857			this.changeFunction();
1858		}
1859
1860		// prevent dropdown from closing when no options are found, because the search input shows within the dropdown in multidropdown
1861		this.refreshOptions = function ( ...args ) {
1862			s_refreshOptions.apply(s, args);
1863			if ( !this.hasOptions && this.lastQuery ) {
1864				// intervene on closing only if not in a closing process caused by our own listeners
1865				if( isClosing === false ) {
1866					this.$wrapper.addClass("dropdown-active");
1867					s.isOpen = true;
1868				}
1869				this.$wrapper.addClass("no-options");
1870				isClosing = false;
1871			} else {
1872				this.$wrapper.removeClass("no-options");
1873			}
1874		};
1875	});
1876});
1877
1878function em_setup_selectize( container_element ){
1879	container = jQuery(container_element); // in case we were given a dom object
1880
1881	container.find('.em-selectize.selectize-control').on( 'click', em_close_other_selectized );
1882
1883	let optionRender = function (item, escape) {
1884		let html = '<div class="option"';
1885		if( 'data' in item ){
1886			// 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
1887			Object.entries(item.data).forEach( function( item_data ){
1888				html += ' data-'+ escape(item_data[0]) + '="'+ escape(item_data[1]) +'"';
1889			});
1890		}
1891		html +=	'>';
1892		if( this.$input.hasClass('checkboxes') ){
1893			html += item.text.replace(/^(\s+)?/i, '$1<span></span> ');
1894		}else{
1895			html += item.text;
1896		}
1897		html += '</div>';
1898		return html;
1899	};
1900
1901	// Selectize General
1902	container.find('select:not([multiple]).em-selectize, .em-selectize select:not([multiple])').em_selectize({
1903		selectOnTab : false,
1904		render: {
1905			option: optionRender,
1906		},
1907	}).on('change', ( e ) => {
1908		e.target.selectize?.$input[0].parentElement.dispatchEvent( new CustomEvent('change', { bubbles: true, cancelable: true, detail : { target: e.target, selectize: e.target.selectize } }) )
1909	});
1910	container.find('select[multiple].em-selectize, .em-selectize select[multiple]').em_selectize({
1911		selectOnTab : false,
1912		hideSelected : false,
1913		plugins: ["remove_button", 'click2deselect','multidropdown'],
1914		diacritics : true,
1915		render: {
1916			item: function (item, escape) {
1917				return '<div class="item"><span>' + item.text.replace(/^\s+/i, '') + '</span></div>';
1918			},
1919			option : optionRender,
1920			optgroup : function (item, escape) {
1921				let html = '<div class="optgroup" data-group="' + escape(item.label) + '"';
1922				if( 'data' in item ){
1923					// 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
1924					Object.entries(item.data).forEach( function( item_data ){
1925						html += ' data-'+ escape(item_data[0]) + '="'+ escape(item_data[1]) +'"';
1926					});
1927				}
1928				html +=	'>';
1929				return html + item.html + '</div>';
1930			}
1931
1932		},
1933	}).on('change', ( e ) => {
1934		e.target.selectize?.$input[0].parentElement.dispatchEvent( new CustomEvent('change', { bubbles: true, cancelable: true, detail : { target: e.target, selectize: e.target.selectize } }) )
1935	});
1936	container.find('.em-selectize:not(.always-open)').each( function(){
1937		if( 'selectize' in this ){
1938			let s = this.selectize;
1939			this.selectize.$wrapper.on('keydown', function(e) {
1940				if( e.keyCode === 9 ) {
1941					s.blur();
1942				}
1943			});
1944		}
1945	});
1946	container.find('.em-selectize.always-open').each( function(){
1947		//extra behaviour for selectize "always open mode"
1948		if( 'selectize' in this ){
1949			let s = this.selectize;
1950			s.open();
1951			s.advanceSelection = function(){}; // remove odd item shuffling
1952			s.setActiveItem = function(){}; // remove odd item shuffling
1953			// add event listener to fix remove button issues due to above hacks
1954			this.selectize.$control.on('click', '.remove', function(e) {
1955				if ( s.isLocked  ) return;
1956				var $item = jQuery(e.currentTarget).parent();
1957				s.removeItem($item.attr('data-value'));
1958				s.refreshOptions();
1959				return false;
1960			});
1961		}
1962	});
1963
1964	// Sortables - selectize and sorting columns, usually in list tables
1965	container.find('.em-list-table-modal .em-list-table-cols').each( function(){
1966		let parent = jQuery(this);
1967		let sortables = jQuery(this).find('.em-list-table-cols-sortable');
1968		parent.find('.em-selectize.always-open').each( function() {
1969			//extra behaviour for selectize column picker
1970			if ('selectize' in this) {
1971				let selectize = this.selectize;
1972				// add event listener to fix remove button issues due to above hacks
1973				selectize.on('item_add', function (value, item) {
1974					let col = item.clone();
1975					let option  = selectize.getOption(value);
1976					let type = option.attr('data-type');
1977					col.appendTo(sortables);
1978					col.attr('data-type', type);
1979					if( option.attr('data-header') ) {
1980						col.children('span:first-child').text( option.attr('data-header') );
1981					}
1982					jQuery('<input type="hidden" name="cols[' + value + ']" value="1">').appendTo(col);
1983				});
1984				selectize.on('item_remove', function (value) {
1985					parent.find('.item[data-value="'+ value +'"]').remove();
1986				});
1987				parent.on('click', '.em-list-table-cols-selected .item .remove', function(){
1988					let value = this.parentElement.getAttribute('data-value');
1989					selectize.removeItem(value, true);
1990				});
1991			}
1992		});
1993	});
1994}
1995
1996function em_unsetup_selectize( container ) {
1997	container.querySelectorAll('.em-selectize').forEach( function( el ) {
1998		//extra behaviour for selectize "always open mode"
1999		if ( 'selectize' in el ) {
2000			el.selectize.destroy();
2001		}
2002	});
2003}
2004
2005function em_setup_tippy( container_element ){
2006	let container = jQuery(container_element);
2007	var tooltip_vars = {
2008		theme : 'light-border',
2009		appendTo : 'parent',
2010		content(reference) {
2011			if( reference.dataset.content ){
2012				try {
2013					let content = container[0].querySelector(reference.dataset.content);
2014					if (content) {
2015						content.classList.remove('hidden');
2016						return content;
2017					}
2018				} catch ( error ) {
2019					console.log('Invlid tooltip selector in %o : %o', reference, error);
2020				}
2021			};
2022			return reference.getAttribute('aria-label') ?? reference.title ?? '';
2023		},
2024		'touch' : ['hold', 300],
2025		allowHTML : true,
2026	};
2027	jQuery(document).trigger('em-tippy-vars',[tooltip_vars, container]);
2028	container.find('.em-tooltip').each( ( i, tooltip ) => tippy( tooltip, tooltip_vars ) );
2029	// Set up Tippy DDMs
2030	let tippy_ddm_options = {
2031		theme : 'light-border',
2032		arrow : false,
2033		allowHTML : true,
2034		interactive : true,
2035		trigger : 'manual',
2036		placement : 'bottom',
2037		zIndex : 1000000,
2038		touch : true,
2039	};
2040	jQuery(document).trigger('em-tippy-ddm-vars',[tippy_ddm_options, container]);
2041	container.find('.em-tooltip-ddm').each( function(){
2042		let ddm_content, ddm_content_sibling;
2043		if( this.getAttribute('data-content') ){
2044			ddm_content = document.getElementById(this.getAttribute('data-content'))
2045			ddm_content_sibling = ddm_content.previousElementSibling;
2046		}else{
2047			ddm_content = this.nextElementSibling;
2048			ddm_content_sibling = ddm_content.previousElementSibling;
2049		}
2050		let tippy_content = document.createElement('div');
2051		// allow for custom width
2052		let button_width = this.getAttribute('data-button-width');
2053		if( button_width ){
2054			if( button_width == 'match' ){
2055				tippy_ddm_options.maxWidth = this.clientWidth;
2056				ddm_content.style.width = this.clientWidth + 'px';
2057			}else{
2058				tippy_ddm_options.maxWidth = this.getAttribute('data-button-width');
2059			}
2060		}
2061		tippy_ddm_options.content = tippy_content;
2062		let tippy_ddm = tippy(this, tippy_ddm_options);
2063		tippy_ddm.props.distance = 50;
2064		tippy_ddm.setProps({
2065			onShow(instance){
2066				if( instance.reference.getAttribute('data-tooltip-class') ) {
2067					instance.popper.classList.add( instance.reference.getAttribute('data-tooltip-class') );
2068				}
2069				instance.popper.classList.add( 'em-tooltip-ddm-display' );
2070				tippy_content.append(ddm_content);
2071				ddm_content.classList.remove('em-tooltip-ddm-content');
2072			},
2073			onShown(instance){ // keyboard support
2074				ddm_content.firstElementChild.focus();
2075			},
2076			onHidden(instance){
2077				if( ddm_content.previousElementSibling !== ddm_content_sibling ) {
2078					ddm_content_sibling.after(ddm_content);
2079					ddm_content.classList.add('em-tooltip-ddm-content');
2080				}
2081			},
2082		});
2083		let tippy_listener = function(e){
2084			if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false;
2085			e.preventDefault();
2086			e.stopPropagation();
2087			this._tippy.show();
2088		}
2089		this.addEventListener('click', tippy_listener);
2090		this.addEventListener('keydown', tippy_listener);
2091		tippy_content.addEventListener('blur', function(){
2092			tippy_content.hide();
2093		});
2094		tippy_content.addEventListener('mouseover', function(){
2095			ddm_content.firstElementChild.blur();
2096		});
2097	});
2098}
2099
2100function em_unsetup_tippy( container ) {
2101	container.querySelectorAll('.em-tooltip-ddm').forEach( function( el ){
2102		if ( '_tippy' in el ) {
2103			el._tippy.destroy();
2104		}
2105	});
2106}
2107
2108/*
2109 * MAP FUNCTIONS
2110 */
2111var em_maps_loaded = false;
2112var maps = {};
2113var maps_markers = {};
2114var maps_infoWindows = {};
2115var content
2116//loads maps script if not already loaded and executes EM maps script
2117function em_maps_load(){
2118	if( !em_maps_loaded ){
2119		if ( jQuery('script#google-maps').length == 0 && ( typeof google !== 'object' || typeof google.maps !== 'object' ) ){
2120			let script = document.createElement("script");
2121			script.type = "text/javascript";
2122			script.id = "google-maps";
2123			script.async = true;
2124			let proto = (EM.is_ssl) ? 'https:' : 'http:';
2125			if( typeof EM.google_maps_api !== 'undefined' ){
2126				script.src = proto + '//maps.google.com/maps/api/js?loading=async&v=quarterly&libraries=places&callback=em_maps&key='+EM.google_maps_api;
2127			}else{
2128				script.src = proto + '//maps.google.com/maps/api/js?loading=async&v=quarterly&libraries=places&callback=em_maps';
2129			}
2130			document.body.appendChild(script);
2131		}else if( typeof google === 'object' && typeof google.maps === 'object' && !em_maps_loaded ){
2132			em_maps();
2133		}else if( jQuery('script#google-maps').length > 0 ){
2134			jQuery(window).load(function(){ if( !em_maps_loaded ) em_maps(); }); //google isn't loaded so wait for page to load resources
2135		}
2136	}
2137}
2138jQuery(document).on('em_view_loaded_map', function( e, view, form ){
2139	if( !em_maps_loaded ){
2140		em_maps_load();
2141	}else{
2142		let map = view.find('div.em-locations-map');
2143		em_maps_load_locations( map[0] );
2144	}
2145});
2146//re-usable function to load global location maps
2147async function em_maps_load_locations( element ){
2148	const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");
2149	let el = element;
2150	let map_id = el.getAttribute('id').replace('em-locations-map-','');
2151	let em_data;
2152	if ( document.getElementById('em-locations-map-coords-'+map_id) ) {
2153		em_data = JSON.parse( document.getElementById('em-locations-map-coords-'+map_id).text );
2154	} else {
2155		let coords_data = el.parentElement.querySelector('.em-locations-map-coords');
2156		if ( coords_data ) {
2157			em_data = JSON.parse( coords_data.text );
2158		} else {
2159			em_data = {};
2160		}
2161	}
2162	jQuery.getJSON(document.URL, em_data , function( data ) {
2163		if( data.length > 0 ){
2164			//define default options and allow option for extension via event triggers
2165			let map_options = {
2166				mapTypeId: google.maps.MapTypeId.ROADMAP,
2167				mapId: 'em-locations-map-' + map_id
2168			};
2169			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]; }
2170			else if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; }
2171			jQuery(document).triggerHandler('em_maps_locations_map_options', map_options);
2172			let marker_options = {};
2173			jQuery(document).triggerHandler('em_maps_location_marker_options', marker_options);
2174
2175			maps[map_id] = new google.maps.Map(el, map_options);
2176			maps_markers[map_id] = [];
2177
2178			let bounds = new google.maps.LatLngBounds();
2179
2180			jQuery.map( data, function( location, i ){
2181				if( !(location.location_latitude == 0 && location.location_longitude == 0) ){
2182					let latitude = parseFloat( location.location_latitude );
2183					let longitude = parseFloat( location.location_longitude );
2184					let location_position = new google.maps.LatLng( latitude, longitude );
2185					//extend the default marker options
2186					jQuery.extend(marker_options, {
2187						position: location_position,
2188						map: maps[map_id]
2189					})
2190					let marker = new AdvancedMarkerElement(marker_options);
2191					maps_markers[map_id] = marker;
2192					em_map_InfoWindow ( location.location_name, location.location_balloon, marker );
2193					//extend bounds
2194					bounds.extend(new google.maps.LatLng(latitude,longitude))
2195				}
2196			});
2197			// Zoom in to the bounds
2198			maps[map_id].fitBounds(bounds);
2199
2200			//Call a hook if exists
2201			if( jQuery ) {
2202				jQuery(document).triggerHandler('em_maps_locations_hook', [maps[map_id], data, map_id, maps_markers[map_id]]);
2203			}
2204			document.dispatchEvent( new CustomEvent('em_maps_locations_hook', {
2205				detail: {
2206					map : maps[map_id],
2207					data : data,
2208					id : map_id,
2209					markers : maps_markers[map_id],
2210					el : el,
2211				},
2212				cancellable : true,
2213			}));
2214		} else {
2215			el.firstElementChild.innerHTML = 'No locations found';
2216			if( jQuery ) {
2217				jQuery(document).triggerHandler('em_maps_locations_hook_not_found', [ jQuery(el) ]);
2218			}
2219			document.dispatchEvent( new CustomEvent('em_maps_locations_hook_not_found', {
2220				detail: {
2221					id : map_id,
2222					el : el
2223				},
2224				cancellable : true,
2225			}));
2226		}
2227	});
2228}
2229async function em_maps_load_location(el){
2230	el = jQuery(el);
2231	const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");
2232	let mapId = el.attr('id');
2233	let map_id = mapId.replace('em-location-map-','');
2234	let map_title = el.attr('title');
2235	let em_LatLng = new google.maps.LatLng( jQuery('#em-location-map-coords-'+map_id+' .lat').text(), jQuery('#em-location-map-coords-'+map_id+' .lng').text());
2236	//extend map and markers via event triggers
2237	let map_options = {
2238		zoom: 14,
2239		center: em_LatLng,
2240		mapTypeId: google.maps.MapTypeId.ROADMAP,
2241		mapTypeControl: false,
2242		gestureHandling: 'cooperative',
2243		mapId: mapId,
2244	};
2245	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]; }
2246	else if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; }
2247	jQuery(document).triggerHandler('em_maps_location_map_options', map_options);
2248	maps[map_id] = new google.maps.Map( document.getElementById('em-location-map-'+map_id), map_options);
2249	let marker_options = {
2250		position: em_LatLng,
2251		map: maps[map_id],
2252		title: map_title,
2253	};
2254	jQuery(document).triggerHandler('em_maps_location_marker_options', marker_options);
2255	let marker = new AdvancedMarkerElement(marker_options);
2256	maps_markers[map_id] = marker;
2257	let content = jQuery('#em-location-map-info-'+map_id + ' .em-map-balloon-content').get(0);
2258	em_map_InfoWindow( map_title, content, marker, true );
2259
2260	//JS Hook for handling map after instantiation
2261	//Example hook, which you can add elsewhere in your theme's JS - jQuery(document).on('em_maps_location_hook', function(){ alert('hi');} );
2262	jQuery(document).triggerHandler('em_maps_location_hook', [maps[map_id], infoWindow, maps_markers[map_id], map_id]);
2263	//map resize listener
2264	jQuery(window).on('resize', function(e) {
2265		google.maps.event.trigger(maps[map_id], "resize");
2266		maps[map_id].setCenter(maps_markers[map_id].position);
2267		maps[map_id].panBy(40,-70);
2268	});
2269}
2270jQuery(document).on('em_search_ajax', function(e, vars, wrapper){
2271	if( em_maps_loaded ){
2272		wrapper.find('div.em-location-map').each( function(index, el){ em_maps_load_location(el); } );
2273		wrapper.find('div.em-locations-map').each( function(index, el){ em_maps_load_locations(el); });
2274	}
2275});
2276//Load single maps (each map is treated as a seperate map).
2277async function em_maps() {
2278	/**
2279	 * InfoWindow object - Location info bubble on map, showing the current map
2280	 */
2281	let infoWindow;
2282	//Find all the maps on this page and load them
2283	jQuery('div.em-location-map').each( function(index, el){ em_maps_load_location(el); } );
2284	jQuery('div.em-locations-map').each( function(index, el){ em_maps_load_locations(el); } );
2285
2286	//Location stuff - only needed if inputs for location exist
2287	if( jQuery('select#location-select-id, input#location-address').length > 0 ){
2288		const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");
2289		let map
2290		let marker;
2291
2292		// refresh map with current location info
2293		let refresh_map_location = function(){
2294			let location_latitude = jQuery('#location-latitude').val();
2295			let location_longitude = jQuery('#location-longitude').val();
2296			let hasCoords = location_latitude != 0 || location_longitude != 0;
2297			if( hasCoords ){
2298				let position = new google.maps.LatLng(location_latitude, location_longitude); //the location coords
2299				marker.position = position;
2300				let mapTitle = (jQuery('input#location-name').length > 0) ? jQuery('input#location-name').val():jQuery('input#title').val();
2301				mapTitle = em_esc_attr(mapTitle);
2302				marker.title = mapTitle ;
2303				marker.gmpDraggable = true;
2304				jQuery('#em-map').show();
2305				jQuery('#em-map-404').hide();
2306				google.maps.event.trigger(map, 'resize');
2307				map.setCenter(position);
2308				map.panBy(40,-55);
2309				infoWindow?.close();
2310				infoWindow = em_map_InfoWindow( mapTitle, em_esc_attr(jQuery('#location-address').val()) + '<br>' + em_esc_attr(jQuery('#location-town').val()), marker, true );
2311				jQuery(document).triggerHandler('em_maps_location_hook', [map, infoWindow, marker, 0]);
2312			} else {
2313				jQuery('#em-map').hide();
2314				jQuery('#em-map-404').show();
2315			}
2316		};
2317
2318		// Add listeners for changes to address or location ID
2319
2320		// get or refresh the map by location id
2321		let get_map_by_id = function(id){
2322			if(jQuery('#em-map').length > 0){
2323				jQuery('#em-map-404 .em-loading-maps').show();
2324				jQuery.getJSON(document.URL,{ em_ajax_action:'get_location', id:id }, function(data){
2325					let hasCoords = data.location_latitude != 0 && data.location_longitude != 0;
2326					if( hasCoords ){
2327						loc_latlng = new google.maps.LatLng(data.location_latitude, data.location_longitude);
2328						marker.position = loc_latlng;
2329						marker.title = data.location_name;
2330						marker.gmpDraggable = false;
2331						jQuery('#em-map').show();
2332						jQuery('#em-map-404').hide();
2333						jQuery('#em-map-404 .em-loading-maps').hide();
2334						map.setCenter(loc_latlng);
2335						map.panBy(40,-55);
2336						infoWindow?.close();
2337						infoWindow = em_map_InfoWindow( data.location_name, data.location_balloon, marker, true );
2338						google.maps.event.trigger(map, 'resize');
2339						jQuery(document).triggerHandler('em_maps_location_hook', [map, infoWindow, marker, 0]);
2340					}else{
2341						jQuery('#em-map').hide();
2342						jQuery('#em-map-404').show();
2343						jQuery('#em-map-404 .em-loading-maps').hide();
2344					}
2345				});
2346			}
2347		};
2348		jQuery('#location-select-id, input#location-id').on('change', function() { get_map_by_id( jQuery(this).val() ); } );
2349
2350		// detect changes to address fields and build a coordinate from geocoding
2351		jQuery('#location-name, #location-town, #location-address, #location-state, #location-postcode, #location-country').on('change', function(){
2352			//build address
2353			if( jQuery(this).prop('readonly') === true ) return;
2354			let addresses = [ jQuery('#location-address').val(), jQuery('#location-town').val(), jQuery('#location-state').val(), jQuery('#location-postcode').val() ];
2355			let address = '';
2356			jQuery.each( addresses, function(i, val){
2357				if( val != '' ){
2358					address = ( address == '' ) ? address+val:address+', '+val;
2359				}
2360			});
2361			if( address == '' ){ //in case only name is entered, no address
2362				jQuery('#em-map').hide();
2363				jQuery('#em-map-404').show();
2364				return false;
2365			}
2366			//do country last, as it's using the text version
2367			if( jQuery('#location-country option:selected').val() != 0 ){
2368				address = ( address == '' ) ? address+jQuery('#location-country option:selected').text():address+', '+jQuery('#location-country option:selected').text();
2369			}
2370			//add working indcator whilst we search
2371			jQuery('#em-map-404 .em-loading-maps').show();
2372			//search!
2373			if( address != '' && jQuery('#em-map').length > 0 ){
2374				let geocoder = new google.maps.Geocoder();
2375				geocoder.geocode( { 'address': address }, function(results, status) {
2376					if (status == google.maps.GeocoderStatus.OK) {
2377						jQuery('#location-latitude').val(results[0].geometry.location.lat());
2378						jQuery('#location-longitude').val(results[0].geometry.location.lng());
2379					}
2380					refresh_map_location();
2381				});
2382			}
2383		});
2384		
2385		// Check if we are on a location editing page, and if address was previously entered, if so we check location coords
2386		let location_latitude = jQuery('#location-latitude').val();
2387		let location_longitude = jQuery('#location-longitude').val();
2388		let hasCoords = location_latitude != 0 || location_longitude != 0;
2389		if ( !hasCoords  ) {
2390			// check if there's any address items that were added previously
2391			if ( document.getElementById('location-address')?.value != '' && (document.getElementById('location-address')?.value != '' || document.getElementById('location-town')?.value != '' || document.getElementById('location-state')?.value != '' || document.getElementById('location-postcode')?.value != '' ) ) {
2392				// trigger a change so we reload the address and coords
2393				jQuery('#location-address').trigger('change');
2394				if ( 'google_maps_resave_location' in EM ) {
2395					alert(EM.google_maps_resave_location);
2396				}
2397			}
2398		}
2399
2400		// Load map initially
2401		if(jQuery('#em-map').length > 0){
2402			let em_LatLng = new google.maps.LatLng(0, 0);
2403			let map_options = {
2404				zoom: 14,
2405				center: em_LatLng,
2406				mapTypeId: google.maps.MapTypeId.ROADMAP,
2407				mapTypeControl: false,
2408				gestureHandling: 'cooperative',
2409				mapId: 'em-map',
2410			};
2411			if( typeof EM.google_maps_styles !== 'undefined' ){ map_options.styles = EM.google_maps_styles; }
2412			map = new google.maps.Map( document.getElementById('em-map'), map_options);
2413			marker = new AdvancedMarkerElement({
2414				position: em_LatLng,
2415				map: map,
2416				gmpDraggable: true,
2417			});
2418			google.maps.event.addListener(marker, 'dragend', function() {
2419				let position = marker.position;
2420				jQuery('#location-latitude').val(position.lat);
2421				jQuery('#location-longitude').val(position.lng);
2422				map.setCenter(position);
2423				map.panBy(40,-55);
2424			});
2425			if( jQuery('#location-select-id').length > 0 ){
2426				jQuery('#location-select-id').trigger('change');
2427			}else{
2428				refresh_map_location();
2429			}
2430			jQuery(document).triggerHandler('em_map_loaded', [map, infoWindow, marker]);
2431		}
2432		//map resize listener
2433		jQuery(window).on('resize', function(e) {
2434			google.maps.event.trigger(map, "resize");
2435			map.setCenter(marker.position);
2436			map.panBy(40,-55);
2437		});
2438	}
2439	em_maps_loaded = true; //maps have been loaded
2440	jQuery(document).triggerHandler('em_maps_loaded');
2441}
2442
2443function em_map_InfoWindow( title, content, marker, open = false ) {
2444	let title_content = document.createElement("div");
2445	let map_id = marker.map.mapId.replace(/em-location-maps?-/,'');
2446	title_content.className = "em-map-balloon-title";
2447	title_content.innerHTML = title;
2448	if ( typeof content === 'string' ) {
2449		let wrapper = document.createElement("div");
2450		wrapper.innerHTML = content;
2451		content = wrapper;
2452	}
2453	// wrap content in div with class if not already done
2454	content.classList.add('em-map-balloon-content');
2455	let infoWindow = new google.maps.InfoWindow( {
2456		content: content,
2457		headerContent: title_content,
2458	} );
2459	infoWindow.addListener('domready', function() {
2460		marker.map.panBy(40,-70);
2461	});
2462	if ( !( map_id in maps_infoWindows ) ) {
2463		maps_infoWindows[ map_id ] = [];
2464	}
2465	maps_infoWindows[ map_id ].push( infoWindow );
2466	let open_options = {
2467		shouldFocus: false,
2468		anchor: marker,
2469		map: marker.map,
2470	};
2471	marker.addListener("gmp-click", () => {
2472		maps_infoWindows[ map_id ]?.forEach( ( infoWindow ) => infoWindow.close() );
2473		infoWindow.open( open_options );
2474	});
2475	if ( open ) {
2476		maps_infoWindows[ map_id ]?.forEach( ( infoWindow ) => infoWindow.close() );
2477		infoWindow.open( open_options );
2478	}
2479	return infoWindow;
2480}
2481
2482/**
2483 * @deprecated use em_map_infowindow instead
2484 * @param marker
2485 * @param message
2486 * @param map
2487 */
2488function em_map_infobox(marker, message, map) {
2489	let iw = new google.maps.InfoWindow({ content: message });
2490	google.maps.event.addListener(marker, 'click', function() {
2491		if( infoWindow ) infoWindow.close();
2492		infoWindow = iw;
2493		iw.open(map,marker);
2494	});
2495}
2496
2497function em_esc_attr( str ){
2498	if( typeof str !== 'string' ) return '';
2499	return str.replace(/</gi,'&lt;').replace(/>/gi,'&gt;');
2500}
2501
2502// Modal Open/Close
2503let openModal = function( modal, onOpen = null ){
2504	modal = jQuery(modal);
2505	modal.appendTo(document.body);
2506	setTimeout( function(){
2507		modal.addClass('active').find('.em-modal-popup').addClass('active');
2508		jQuery(document).triggerHandler('em_modal_open', [modal]);
2509		document.dispatchEvent( new CustomEvent('em_modal_open', { detail: { modal: modal } }) );
2510		if( typeof onOpen === 'function' ){
2511			setTimeout( onOpen, 200); // timeout allows css transition
2512		}
2513	}, 100); // timeout allows css transition
2514};
2515let closeModal = function( modal, onClose = null ){
2516	modal = jQuery(modal);
2517	modal.removeClass('active').find('.em-modal-popup').removeClass('active');
2518	setTimeout( function(){
2519		if( modal.attr('data-parent') ){
2520			let wrapper = jQuery('#' + modal.attr('data-parent') );
2521			if( wrapper.length ) {
2522				modal.appendTo(wrapper);
2523			}
2524		}
2525		modal[0].dispatchEvent( new CustomEvent('em_modal_close', { bubbles: true, detail: { modal: modal } } ) );
2526		if( typeof onClose === 'function' ){
2527			onClose();
2528		}
2529	}, 500); // timeout allows css transition
2530}
2531jQuery(document).on('click', '.em-modal .em-close-modal', function(e){
2532	let modal = jQuery(this).closest('.em-modal');
2533	if( !modal.attr('data-prevent-close') ) {
2534		closeModal(modal);
2535	}
2536});
2537jQuery(document).on('click', '.em-modal', function(e){
2538	var target = jQuery(e.target);
2539	if( target.hasClass('em-modal') ) {
2540		let modal = jQuery(this);
2541		if( !modal.attr('data-prevent-close') ){
2542			closeModal(modal);
2543		}
2544	}
2545});
2546
2547function EM_Alert( content ){
2548	// find the alert modal, create if not
2549	let modal = document.getElementById('em-alert-modal');
2550	if( modal === null ){
2551		modal = document.createElement('div');
2552		modal.setAttribute('class', "em pixelbones em-modal");
2553		modal.id = 'em-alert-modal';
2554		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>';
2555		document.body.append(modal);
2556	}
2557	document.getElementById('em-alert-modal-content').innerHTML = content;
2558	openModal(modal);
2559};
2560
2561//Events Search
2562jQuery(document).ready( function($){
2563	// handle the views tip/ddm
2564	let views_ddm_options = {
2565		theme : 'light-border',
2566		allowHTML : true,
2567		interactive : true,
2568		trigger : 'manual',
2569		placement : 'bottom',
2570		zIndex : 1000000,
2571		touch: true,
2572	};
2573	$(document).trigger('em-search-views-trigger-vars',[views_ddm_options]);
2574	let tooltip_vars = { theme : 'light-border', appendTo : 'parent', touch : false, };
2575	$(document).trigger('em-tippy-vars',[tooltip_vars]);
2576
2577	// sync main search texts to advanced search
2578	let search_forms = $('.em-search:not(.em-search-advanced)');
2579	search_forms.each( function(){
2580		/*
2581		 * Important references we'll reuse in scope
2582		 */
2583		let search = $(this);
2584		let search_id = search.attr('id').replace('em-search-', '');
2585		let search_form = search.find('.em-search-form').first();
2586		let search_advanced = search.find('.em-search-advanced'); // there should only be one anyway
2587
2588		/*
2589		 * Counter functions
2590		 */
2591		const update_input_count = function( input, qty = 1 ){
2592			let el = jQuery(input);
2593			let total = qty > 0 ? qty : null;
2594			el.attr('data-advanced-total-input', total);
2595			update_search_totals();
2596		};
2597
2598		const update_search_totals = function( applied = false ){
2599			// set everything to 0, recount
2600			search.find('span.total-count').remove();
2601			// find all fields with total attributes and sum them up
2602			let total = 0;
2603			search_advanced.find('[data-advanced-total-input]').each( function(){
2604				let total_input = this.getAttribute('data-advanced-total-input');
2605				total += Math.abs( total_input );
2606			});
2607			search.attr('data-advanced-total', total);
2608			update_trigger_count( applied );
2609			// find all sections with totals and display them (added above)
2610			search_advanced.find('.em-search-advanced-section').each( function(){
2611				let section = $(this);
2612				let section_total = 0;
2613				section.attr('data-advanced-total', 0);
2614				// go through all set qtys and calculate
2615				section.find('[data-advanced-total-input]').each( function(){
2616					let total_input = this.getAttribute('data-advanced-total-input');
2617					section_total += Math.abs( total_input );
2618				});
2619				section.attr('data-advanced-total', section_total);
2620				update_section_count(section);
2621			});
2622			// update triggers, search, clear button etc.
2623			if( total > 0 || !search.attr('data-advanced-previous-total') || total != search.attr('data-advanced-previous-total') ){
2624				update_submit_buttons( true );
2625			}
2626			update_clear_button_count();
2627		}
2628
2629		const update_trigger_count = function( applied = false ){
2630			let triggers = jQuery('.em-search-advanced-trigger[data-search-advanced-id="em-search-advanced-'+ search_id +'"]'); // search like this ato apply to external triggers
2631			triggers.find('span.total-count').remove();
2632			let total = search.attr('data-advanced-total');
2633			if( total > 0 ){
2634				let trigger_count = jQuery('<span class="total-count">'+ total + '</span>').appendTo(triggers);
2635				if( !applied ){
2636					trigger_count.addClass('tentative');
2637				}
2638			}
2639		};
2640
2641		const update_submit_buttons = function( enabled = false ){
2642			// update the clear link
2643			let submit_button = search_advanced.find('button[type="submit"]');
2644			let main_submit_button = search.find('.em-search-main-bar button[type="submit"]');
2645			let submit_buttons = submit_button.add( main_submit_button ); // merge together to apply chanegs
2646			if( enabled ){
2647				submit_buttons.removeClass('disabled').attr('aria-disabled', 'false');
2648			}else{
2649				submit_buttons.addClass('disabled').attr('aria-disabled', 'true');
2650			}
2651		};
2652
2653		const update_section_count = function( section ){
2654			let section_total = section.attr('data-advanced-total');
2655			section.find('header span.total-count').remove();
2656			if( section_total > 0 ){
2657				$('<span class="total-count">'+ section_total +'</span>').appendTo( section.find('header') );
2658			}
2659		};
2660
2661		const update_clear_button_count = function(){
2662			// update the clear link
2663			let clear_link = search_advanced.find('button[type="reset"]');
2664			if( !clear_link.attr('data-placeholder') ){
2665				clear_link.attr('data-placeholder', clear_link.text());
2666			}
2667			let total = search.attr('data-advanced-total');
2668			if( total > 0 ){
2669				clear_link.text( clear_link.attr('data-placeholder') + ' (' + total + ')' ).prop('disabled', false);
2670				clear_link.removeClass('disabled').attr('aria-disabled', 'false');
2671			}else{
2672				clear_link.text( clear_link.attr('data-placeholder') );
2673				clear_link.addClass('disabled').attr('aria-disabled', 'true');
2674			}
2675		};
2676
2677		/*
2678		 * Triggers
2679		 */
2680		search.find('.em-search-views-trigger').each( function(){
2681			tooltip_vars.content = this.parentElement.getAttribute('aria-label');
2682			let views_tooltip = tippy(this.parentElement, tooltip_vars);
2683			let views_content = this.parentElement.querySelector('.em-search-views-options');
2684			let views_content_parent = views_content.parentElement;
2685			let tippy_content = document.createElement('div');
2686			views_ddm_options.content = tippy_content;
2687			let views_ddm = tippy(this, views_ddm_options);
2688			views_ddm.setProps({
2689				onShow(instance){
2690					views_tooltip.disable();
2691					tippy_content.append(views_content);
2692				},
2693				onShown(instance){ // keyboard support
2694					views_content.querySelector('input:checked').focus();
2695				},
2696				onHidden(instance){
2697					views_tooltip.enable();
2698					if( views_content.parentElement !== views_content_parent ) {
2699						views_content_parent.append(views_content);
2700					}
2701				}
2702			});
2703			let tippy_listener = function(e){
2704				if( e.type === 'keydown' && !(e.which === 13 || e.which === 40) ) return false;
2705				e.preventDefault();
2706				e.stopPropagation();
2707				this._tippy.show();
2708				views_tooltip.hide();
2709			}
2710			this.addEventListener('click', tippy_listener);
2711			this.addEventListener('keydown', tippy_listener);
2712			this.firstElementChild.addEventListener('focus', function(e){
2713				views_ddm.hide();
2714				views_tooltip.enable();
2715				views_tooltip.show();
2716			});
2717			this.firstElementChild.addEventListener('blur', function(){
2718				views_tooltip.hide();
2719			});
2720
2721			search.on('focus blur', '.em-search-views-options input', function(){
2722				if( document.activeElement === this ){
2723					this.parentElement.classList.add('focused');
2724				}else{
2725					this.parentElement.classList.remove('focused');
2726				}
2727			});
2728
2729			search[0].addEventListener('change', function(){
2730				update_submit_buttons(true);
2731			});
2732
2733			search.on('keydown click', '.em-search-views-options input', function( e ){
2734				// get relevant vars
2735				if( e.type === 'keydown' && e.which !== 13 ){
2736					if ( [37, 38, 39, 40].indexOf(e.which) !== -1 ) {
2737						if (e.which === 38) {
2738							if (this.parentElement.previousElementSibling) {
2739								this.parentElement.previousElementSibling.focus();
2740							}
2741						} else if (e.which === 40) {
2742							if (this.parentElement.nextElementSibling) {
2743								this.parentElement.nextElementSibling.focus();
2744							}
2745						}
2746						return false;
2747					} else if ( e.which === 9 ) {
2748						// focus out
2749						views_ddm.hide();
2750					}
2751					return true;
2752				}
2753				this.checked = true;
2754				let input = $(this);
2755				// mark label selected
2756				input.closest('fieldset').find('label').removeClass('checked');
2757				input.parent().addClass('checked');
2758				// get other reference elements we need
2759				let views_wrapper = $(this).closest('.em-search-views');
2760				let view_type = this.value;
2761				let trigger = views_wrapper.children('.em-search-views-trigger');
2762				let trigger_option = trigger.children('.em-search-view-option');
2763				// change view, if different
2764				if( view_type !== trigger_option.attr('data-view') ){
2765					trigger_option.attr('data-view', this.value).text(this.parentElement.innerText);
2766					// remove custom search vals from current view so it's not used into another view
2767					$('#em-view-'+search_id).find('#em-view-custom-data-search-'+search_id).remove();
2768					// trigger custom event in case form disabled due to no search vals
2769					search_form.find('button[type="submit"]').focus();
2770					search_form.trigger('forcesubmit');
2771				}
2772				views_ddm.hide();
2773			});
2774		});
2775
2776		search.find('.em-search-sort-trigger').each( function(){
2777			tooltip_vars.content = this.parentElement.getAttribute('aria-label');
2778			let views_tooltip = tippy(this.parentElement, tooltip_vars);
2779			search.on('keydown click', '.em-search-sort-option', function( e ){
2780				// get other reference elements we need
2781				let order = this.dataset.sort === 'ASC' ? 'DESC' : 'ASC';
2782				this.setAttribute('data-sort', order);
2783				this.parentElement.querySelector('input[name="order"]').value = order;
2784				// trigger custom event in case form disabled due to no search vals
2785				search_form.find('button[type="submit"]').focus();
2786				search_form.trigger('forcesubmit');
2787			});
2788		});
2789
2790		// add trigger logic for advanced popup modal
2791		let search_advanced_trigger_click = function( e ){
2792			if( search.hasClass('advanced-mode-inline') ){
2793				// inline
2794				if( !search_advanced.hasClass('visible') ){
2795					search_advanced.slideDown().addClass('visible');
2796					if( '_tippy' in this ){
2797						this._tippy.setContent(this.getAttribute('data-label-hide'));
2798					}
2799				}else{
2800					search_advanced.slideUp().removeClass('visible');
2801					if( '_tippy' in this ){
2802						this._tippy.setContent(this.getAttribute('data-label-show'));
2803					}
2804				}
2805			}else{
2806				// wrap modal popup element in a form, so taht it's 'accessible' with keyboard
2807				if( !search_advanced.hasClass('active') ) {
2808					let form_wrapper = $('<form action="" method="post" class="em-search-advanced-form" id="em-search-form-advanced-' + search_id + '"></form>');
2809					form_wrapper.appendTo(search_advanced);
2810					search_advanced.find('.em-modal-popup').appendTo(form_wrapper);
2811					// open modal
2812					let button = this;
2813					openModal(search_advanced, function () {
2814						// Do this instead
2815						button.blur();
2816						search_advanced.find('input.em-search-text').focus();
2817					});
2818				}
2819			}
2820		};
2821		search.on('click', 'button.em-search-advanced-trigger:not([data-search-advanced-id],[data-parent-trigger])', search_advanced_trigger_click);
2822		search_form.on('search_advanced_trigger', search_advanced_trigger_click);
2823
2824		search_advanced.on('em_modal_close', function(){
2825			search_advanced.find('.em-modal-popup').appendTo(search_advanced);
2826			search_advanced.children('form').remove();
2827			let trigger = search.find('button.em-search-advanced-trigger').focus();
2828			if( trigger.length > 0 && '_tippy' in trigger[0] ){
2829				trigger[0]._tippy.hide();
2830			}
2831		});
2832
2833		// add header toggle logic to expand/collapse sections - add directly to elements since they move around the DOM due to modal
2834		search_advanced.find('.em-search-advanced-section > header').on('click', function(){
2835			let header = $(this);
2836			let section = header.closest('section');
2837			let content = header.siblings('.em-search-section-content');
2838			if( section.hasClass('active') ){
2839				content.slideUp();
2840				section.removeClass('active');
2841			}else{
2842				content.slideDown();
2843				section.addClass('active');
2844			}
2845		});
2846
2847		/*
2848		 *  Advanced Search Field Listeners - Main Search Form
2849		 */
2850
2851		let search_form_advanced_calculate_totals_inputs = function( input ){
2852			// for textboxes we only need to add or remove 1 advanced
2853			let el = $(input);
2854			let qty = el.val() !== '' ? 1:0;
2855			update_input_count( el, qty );
2856		};
2857
2858		// These are for the main search bar, syncing information back into the advanced form
2859		search.on('change input', '.em-search-main-bar input.em-search-text', function( e ){
2860			// sync advanced input field with same text
2861			let advanced_search_input = search_advanced.find('input.em-search-text');
2862			if ( advanced_search_input.length === 0 ) {
2863				search_form_advanced_calculate_totals_inputs(this);
2864			} else {
2865				advanced_search_input.val( this.value );
2866				// recalculate totals from here
2867				search_form_advanced_calculate_totals_inputs(advanced_search_input[0]);
2868			}
2869			// any change without advanced form should show the search form still
2870			update_submit_buttons( true);
2871		});
2872		search.on('change', '.em-search-main-bar input.em-search-geo-coords', function(){
2873			let el = $(this);
2874			let advanced_geo = search_advanced.find('div.em-search-geo');
2875			// copy over value and class names
2876			let advanced_geo_coords = advanced_geo.find('input.em-search-geo-coords');
2877			if( advanced_geo_coords.length > 0 ) {
2878				advanced_geo_coords.val(el.val()).attr('class', el.attr('class'));
2879				let geo_text = el.siblings('input.em-search-geo').first();
2880				advanced_geo.find('input.em-search-geo').val(geo_text.val()).attr('class', geo_text.attr('class'));
2881				// calculate totals from here
2882				search_form_advanced_calculate_totals_inputs(advanced_geo_coords);
2883			} else {
2884				// calculate totals from here
2885				search_form_advanced_calculate_totals_inputs(this);
2886			}
2887		});
2888		search.find('.em-search-main-bar .em-datepicker input.em-search-scope.flatpickr-input').each( function(){
2889			if( !('_flatpickr' in this) ) return;
2890			this._flatpickr.config.onClose.push( function( selectedDates, dateStr, instance ) {
2891				// any change without advanced form should show the search form
2892				let advanced_datepicker = search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input');
2893				if( advanced_datepicker.length === 0 ) {
2894					// update counter
2895					let qty = dateStr ? 1:0;
2896					update_input_count(instance.input, qty);
2897				} else {
2898					// update advanced search form datepicker values, trigger a close for it to handle the rest
2899					advanced_datepicker[0]._flatpickr.setDate( selectedDates, true );
2900					advanced_datepicker[0]._flatpickr.close();
2901				}
2902			});
2903		});
2904
2905		search.find('select.em-selectize').each(function () {
2906			if( 'selectize' in this ) {
2907				this.selectize.on('change', function () {
2908					search_advanced_selectize_change(this);
2909				});
2910			}
2911		});
2912
2913		/*
2914		 *  Advanced Search Field Listeners - Advanced Search Form
2915		 */
2916
2917		// regular text advanced or hidden inputs that represent another ui
2918		search_advanced.on('change input', 'input.em-search-text', function( e ){
2919			if( e.type === 'change' ){
2920				// copy over place info on change only, not on each keystroke
2921				search.find('.em-search-main input.em-search-text').val( this.value );
2922			}
2923			search_form_advanced_calculate_totals_inputs(this);
2924		});
2925		search_advanced.on('change', 'input.em-search-geo-coords', function( e ){
2926			search_form_advanced_calculate_totals_inputs(this);
2927			//update values in main search
2928			let el = $(this);
2929			let main = search.find('.em-search-main div.em-search-geo');
2930			if( main.length > 0 ){
2931				// copy over value and class names
2932				main.find('input.em-search-geo-coords').val( el.val() ).attr('class', el.attr('class'));
2933				let geo_text = el.siblings('input.em-search-geo');
2934				main.find('input.em-search-geo').val(geo_text.val()).attr('class', geo_text.attr('class'));
2935			}
2936		});
2937		search_advanced.on('clear_search', function(){
2938			let text = $(this).find('input.em-search-text');
2939			if( text.length === 0 ) {
2940				// select geo from main if it exists, so we keep counts synced
2941				text = search.find('input.em-search-text');
2942			}
2943			text.val('').attr('value', null).trigger('change'); // value attr removed as well due to compat issues in Chrome (possibly more)
2944		});
2945		/* Not sure we should be calculating this... since it's always set to something.
2946		search_advanced.on('change', 'select.em-search-geo-unit, select.em-search-geo-distance', function( e ){
2947			// combine both values into parent, if value set then it's a toggle
2948			let el = jQuery(this);
2949			let qty = el.val() ? 1 : null;
2950			el.closest('.em-search-geo-units').attr('data-advanced-total-input', qty);
2951			update_search_totals();
2952		});
2953		 */
2954		search_advanced.on('change', 'input[type="checkbox"]', function( e ){
2955			let el = $(this);
2956			let qty = el.prop('checked') ? 1:0;
2957			update_input_count( el, qty );
2958		});
2959		search_advanced.on('calculate_totals', function(){
2960			search_advanced.find('input.em-search-text, input.em-search-geo-coords').each( function(){
2961				search_form_advanced_calculate_totals_inputs(this);
2962			});
2963			search_advanced.find('input[type="checkbox"]').trigger('change');
2964		});
2965		search_advanced.on('clear_search', function(){
2966			let geo = $(this).find('input.em-search-geo');
2967			if( geo.length === 0 ) {
2968				// select geo from main if it exists, so we keep counts synced
2969				geo = search.find('input.em-search-geo');
2970			}
2971			geo.removeClass('off').removeClass('on').val('');
2972			geo.siblings('input.em-search-geo-coords').val('').trigger('change');
2973			search_advanced.find('input[type="checkbox"]').prop("checked", false).trigger('change').prop("checked", false); // set checked after trigger because something seems to be checking during event
2974		});
2975
2976		// datepicker advanced logic
2977		search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input').each( function(){
2978			if( !('_flatpickr' in this) ) return;
2979			this._flatpickr.config.onClose.push( function( selectedDates, dateStr, instance ) {
2980				// check previous value against current value, no change, no go
2981				let previous_value = instance.input.getAttribute('data-previous-value');
2982				if( previous_value !== dateStr ){
2983					// update counter
2984					let qty = dateStr ? 1:0;
2985					update_input_count(instance.input, qty);
2986					// update main search form datepicker values
2987					let main_datepicker = search.find('.em-search-main-bar .em-datepicker input.em-search-scope.flatpickr-input');
2988					if( main_datepicker.length > 0 ) {
2989						main_datepicker[0]._flatpickr.setDate(selectedDates, true);
2990					}
2991					// set for next time
2992					instance.input.setAttribute('data-previous-value', dateStr);
2993				}
2994			});
2995		});
2996		search_advanced.on('calculate_totals', function(){
2997			search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input').first().each( function(){
2998				let qty = this._flatpickr.selectedDates.length > 0 ? 1 : 0;
2999				update_input_count(this, qty);
3000			});
3001		});
3002		search_advanced.on('clear_search', function(){
3003			let datepickers = search_advanced.find('.em-datepicker input.em-search-scope.flatpickr-input');
3004			if( datepickers.length === 0 ) {
3005				// find datepickers on main form so syncing is sent up
3006				datepickers = search.find('.em-datepicker input.em-search-scope.flatpickr-input');
3007			}
3008			datepickers.each(function () {
3009				this._flatpickr.clear();
3010				update_input_count(this, 0);
3011			});
3012		});
3013		// clear the date total for calendars, before anything is done
3014		let scope_calendar_check = function(){
3015			search.find('.em-datepicker input.em-search-scope.flatpickr-input').each( function(){
3016				if( search.attr('data-view') == 'calendar' ){
3017					this.setAttribute('data-advanced-total-input', 0);
3018					this._flatpickr.input.disabled = true;
3019				}else{
3020					this._flatpickr.input.disabled = false;
3021					let qty = this._flatpickr.selectedDates.length > 0 ? 1 : 0;
3022					this.setAttribute('data-advanced-total-input', qty);
3023				}
3024			});
3025		};
3026		$(document).on('em_search_loaded', scope_calendar_check);
3027		scope_calendar_check();
3028
3029		// selectize advanced
3030		let search_advanced_selectize_change = function( selectize ){
3031			let qty = selectize.items.length;
3032			// handle 'all' default values
3033			if( qty == 1 && !selectize.items[0] ){
3034				qty = 0;
3035			}
3036			if ( selectize.$input.closest('.em-search-advanced').length === 0 ) {
3037				// sync advanced input field with same text
3038				let classSearch = '.' + selectize.$input.attr('class').replaceAll(' ', '.').trim();
3039				let advanced_search_input = search_advanced.find( classSearch );
3040				if ( advanced_search_input.length > 0 ) {
3041					// copy over values
3042					advanced_search_input[0].selectize.setValue( selectize.items );
3043					// recalculate totals from here
3044					search_advanced_selectize_change(advanced_search_input[0].selectize);
3045				}
3046			}
3047			update_input_count( selectize.$input, qty );
3048		};
3049
3050		search_advanced.find('select.em-selectize').each(function () {
3051			if( 'selectize' in this ) {
3052				this.selectize.on('change', function () {
3053					search_advanced_selectize_change(this);
3054				});
3055			}
3056		});
3057		search_advanced.on('calculate_totals', function(){
3058			$(this).find('select.em-selectize').each( function(){
3059				search_advanced_selectize_change(this.selectize);
3060			});
3061		});
3062		search_advanced.on('clear_search', function(){
3063			let clearSearch = function(){
3064				this.selectize.clear();
3065				this.selectize.refreshItems();
3066				this.selectize.refreshOptions(false);
3067				this.selectize.blur();
3068			};
3069			search_advanced.find('select.em-selectize').each( clearSearch );
3070			search.find('.em-search-main-bar select.em-selectize').each( clearSearch );
3071		});
3072
3073		// location-specific stuff for dropdowns (powered by selectize)
3074		let locations_selectize_load_complete = function(){
3075			if( 'selectize' in this ) {
3076				this.selectize.settings.placeholder = this.selectize.settings.original_placeholder;
3077				this.selectize.updatePlaceholder();
3078				// get options from select again
3079				let options = [];
3080				this.selectize.$input.find('option').each( function(){
3081					let value = this.value !== null ? this.value : this.innerHTML;
3082					options.push({ value : value, text: this.innerHTML});
3083				});
3084				this.selectize.addOption(options);
3085				this.selectize.refreshOptions(false);
3086			}
3087		};
3088		let locations_selectize_load_start = function(){
3089			if( 'selectize' in this ){
3090				this.selectize.clearOptions();
3091				if( !('original_placeholder' in this.selectize.settings) ) this.selectize.settings.original_placeholder = this.selectize.settings.placeholder;
3092				this.selectize.settings.placeholder = EM.txt_loading;
3093				this.selectize.updatePlaceholder();
3094			}
3095		};
3096		$('.em-search-advanced select[name=country], .em-search select[name=country]').on('change', function(){
3097			var el = $(this);
3098			let wrapper = el.closest('.em-search-location');
3099			wrapper.find('select[name=state]').html('<option value="">'+EM.txt_loading+'</option>');
3100			wrapper.find('select[name=region]').html('<option value="">'+EM.txt_loading+'</option>');
3101			wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>');
3102			wrapper.find('select[name=state], select[name=region], select[name=town]').each( locations_selectize_load_start );
3103			if( el.val() != '' ){
3104				wrapper.find('.em-search-location-meta').slideDown();
3105				var data = {
3106					action : 'search_states',
3107					country : el.val(),
3108					return_html : true,
3109				};
3110				wrapper.find('select[name=state]').load( EM.ajaxurl, data, locations_selectize_load_complete );
3111				data.action = 'search_regions';
3112				wrapper.find('select[name=region]').load( EM.ajaxurl, data, locations_selectize_load_complete );
3113				data.action = 'search_towns';
3114				wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete );
3115			}else{
3116				wrapper.find('.em-search-location-meta').slideUp();
3117			}
3118		});
3119		$('.em-search-advanced select[name=region], .em-search select[name=region]').on('change', function(){
3120			var el = $(this);
3121			let wrapper = el.closest('.em-search-location');
3122			wrapper.find('select[name=state]').html('<option value="">'+EM.txt_loading+'</option>');
3123			wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>');
3124			wrapper.find('select[name=state], select[name=town]').each( locations_selectize_load_start );
3125			var data = {
3126				action : 'search_states',
3127				region : el.val(),
3128				country : wrapper.find('select[name=country]').val(),
3129				return_html : true
3130			};
3131			wrapper.find('select[name=state]').load( EM.ajaxurl, data, locations_selectize_load_complete );
3132			data.action = 'search_towns';
3133			wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete );
3134		});
3135		$('.em-search-advanced select[name=state], .em-search select[name=state]').on('change', function(){
3136			var el = $(this);
3137			let wrapper = el.closest('.em-search-location');
3138			wrapper.find('select[name=town]').html('<option value="">'+EM.txt_loading+'</option>').each( locations_selectize_load_start );
3139			var data = {
3140				action : 'search_towns',
3141				state : el.val(),
3142				region : wrapper.find('select[name=region]').val(),
3143				country : wrapper.find('select[name=country]').val(),
3144				return_html : true
3145			};
3146			wrapper.find('select[name=town]').load( EM.ajaxurl, data, locations_selectize_load_complete );
3147		});
3148
3149		/*
3150		 *  Clear & Search Actions
3151		 */
3152		// handle clear link for advanced
3153		search_advanced.on( 'click', 'button[type="reset"]', function(){
3154			// clear text search advanced, run clear hook for other parts to hook into
3155			if( search.attr('data-advanced-total') == 0 ) return;
3156			// search text and geo search
3157			search_advanced.find('input.em-search-text, input.em-search-geo').val('').attr('data-advanced-total-input', null).trigger('change');
3158			// other implementations hook here and do what you need
3159			search.trigger('clear_search');
3160			search_advanced.trigger('clear_search');
3161			// remove counters, set data counters to 0, hide section and submit form without search settings
3162			update_search_totals(true); // in theory, this is 0 and removes everything
3163			if( search_advanced.hasClass('em-modal') ) {
3164				search_advanced_trigger_click();
3165			}
3166			search_advanced.append('<input name="clear_search" type="hidden" value="1">');
3167			search_advanced.find('button[type="submit"]').trigger('forceclick');
3168			update_clear_button_count();
3169		}).each( function(){
3170			search_advanced.trigger('calculate_totals');
3171			update_search_totals(true);
3172		});
3173		const on_update_trigger_count = function(e, applied = true){
3174			update_trigger_count( applied );
3175		};
3176		search.on('update_trigger_count', on_update_trigger_count);
3177		search_advanced.on('update_trigger_count', on_update_trigger_count);
3178
3179		// handle submission for advanced
3180		search_advanced.on( 'click forceclick', 'button[type="submit"]', function(e){
3181			e.preventDefault();
3182			if( this.classList.contains('disabled') && e.type !== 'forceclick' ) return false;
3183			// close attach back to search form
3184			if( search_advanced.hasClass('em-modal') ) {
3185				closeModal(search_advanced, function () {
3186					// submit for search
3187					search_form.submit();
3188				});
3189			}else{
3190				search_form.submit();
3191			}
3192			return false; // we handled it
3193		});
3194
3195		search.on('submit forcesubmit', '.em-search-form', function(e){
3196			if ( search.hasClass('no-ajax') ) {
3197				return true;
3198			}
3199			e.preventDefault();
3200			let form = $(this);
3201			let submit_buttons = form.find('button[type="submit"]');
3202			if( e.type !== 'forcesubmit' && submit_buttons.hasClass('disabled') ) return false;
3203			let wrapper = form.closest('.em-search');
3204			if( wrapper.hasClass('em-search-legacy') ){
3205				em_submit_legacy_search_form(form);
3206			}else{
3207				let view = $('#em-view-'+search_id);
3208				let view_type = form.find('[name="view"]:checked, [name="view"][type="hidden"], .em-search-view-option-hidden').val();
3209				if( Array.isArray(view_type) ) view_type = view_type.shift();
3210				// copy over custom view information, remove it further down
3211				let custom_view_data = view.find('#em-view-custom-data-search-'+search_id).clone();
3212				let custom_view_data_container = $('<div class="em-view-custom-data"></div>');
3213				custom_view_data.children().appendTo(custom_view_data_container);
3214				custom_view_data.remove();
3215				custom_view_data_container.appendTo(form);
3216				// add loading stuff
3217				view.append('<div class="em-loading"></div>');
3218				submit_buttons.each( function(){
3219					if( EM.txt_searching !== this.innerHTML ) {
3220						this.setAttribute('data-button-text', this.innerHTML);
3221						this.innerHTML = EM.txt_searching;
3222					}
3223				});
3224				var vars = form.serialize();
3225				$.ajax( EM.ajaxurl, {
3226					type : 'POST',
3227					dataType : 'html',
3228					data : vars,
3229					success : function(responseText){
3230						submit_buttons.each( function(){
3231							this.innerHTML = this.getAttribute('data-button-text');
3232						});
3233						view = EM_View_Updater( view, responseText );
3234						// update view definitions
3235						view.attr('data-view', view_type);
3236						search.attr('data-view', view_type);
3237						search_advanced.attr('data-view', view_type);
3238						jQuery(document).triggerHandler('em_view_loaded_'+view_type, [view, form, e]);
3239						jQuery(document).triggerHandler('em_search_loaded', [view, form, e]); // ajax has loaded new results
3240						jQuery(document).triggerHandler('em_search_result', [vars, view, e]); // legacy for backcompat, use the above
3241						wrapper.find('.count.tentative').removeClass('tentative');
3242						// deactivate submit button until changes are made again
3243						submit_buttons.addClass('disabled').attr('aria-disabled', 'true');
3244						// update search totals
3245						update_search_totals(true);
3246						search.attr('data-advanced-previous-total', search.attr('data-advanced-total')); // so we know if filters were used in previous search
3247						update_submit_buttons(false);
3248						custom_view_data_container.remove(); // remove data so it's reloaded again later
3249						search.find('input[name="clear_search"]').remove();
3250					}
3251				});
3252			}
3253			return false;
3254		});
3255
3256		// observe resizing
3257		EM_ResizeObserver( EM.search.breakpoints, [search[0]]);
3258	});
3259
3260	// handle external triggers, e.g. a calendar shortcut for a hidden search form
3261	$(document).on('click', '.em-search-advanced-trigger[data-search-advanced-id], .em-search-advanced-trigger[data-parent-trigger]', function(){
3262		if( this.getAttribute('data-search-advanced-id') ){
3263			// trigger the search form by parent
3264			let search_advanced_form = document.getElementById( this.getAttribute('data-search-advanced-id') );
3265			if( search_advanced_form ){
3266				let search_form = search_advanced_form.closest('form.em-search-form');
3267				if( search_form ){
3268					search_form.dispatchEvent( new CustomEvent('search_advanced_trigger') );
3269					return;
3270				}
3271			}
3272		} else if( this.getAttribute('data-parent-trigger') ) {
3273			let trigger = document.getElementById(this.getAttribute('data-parent-trigger'));
3274			if ( trigger ) {
3275				trigger.click();
3276				return;
3277			}
3278		}
3279		console.log('Cannot locate a valid advanced search form trigger for %o', this);
3280	});
3281
3282	$(document).on('click', '.em-view-container .em-ajax.em-pagination a.page-numbers', function(e){
3283		let a = $(this);
3284		let view = a.closest('.em-view-container');
3285		let href = a.attr('href');
3286		//add data-em-ajax att if it exists
3287		let data = a.closest('.em-pagination').attr('data-em-ajax');
3288		if( data ){
3289			href += href.includes('?') ? '&' : '?';
3290			href += data;
3291		}
3292		// build querystring from url
3293		let url_params = new URL(href, window.location.origin).searchParams;
3294		if( view.attr('data-view') ) {
3295			url_params.set('view', view.attr('data-view'));
3296		}
3297		// start ajax
3298		view.append('<div class="loading" id="em-loading"></div>');
3299		$.ajax( EM.ajaxurl, {
3300			type : 'POST',
3301			dataType : 'html',
3302			data : url_params.toString(),
3303			success : function(responseText) {
3304				view = EM_View_Updater( view, responseText );
3305				view.find('.em-pagination').each( function(){
3306					paginationObserver.observe(this);
3307				});
3308				jQuery(document).triggerHandler('em_page_loaded', [view]);
3309				view[0].scrollIntoView({ behavior: "smooth" });
3310			}
3311		});
3312		e.preventDefault();
3313		return false;
3314	});
3315
3316	const paginationObserver = new ResizeObserver( function( entries ){
3317		for (let entry of entries) {
3318			let el = entry.target;
3319			if( !el.classList.contains('observing') ) {
3320				el.classList.add('observing'); // prevent endless loop on resizing within this check
3321				// check if any pagination parts are overflowing
3322				let overflowing = false;
3323				el.classList.remove('overflowing');
3324				for ( const item of el.querySelectorAll('.not-current')) {
3325					if( item.scrollHeight > item.clientHeight || item.scrollWidth > item.clientWidth ){
3326						overflowing = true;
3327						break; // break if one has overflown
3328					}
3329				};
3330				// add or remove overflow classes
3331				if( overflowing ){
3332					el.classList.add('overflowing')
3333				}
3334				el.classList.remove('observing');
3335			}
3336		}
3337	});
3338	$('.em-pagination').each( function(){
3339		paginationObserver.observe(this);
3340	});
3341
3342	/* START Legacy */
3343	// deprecated - hide/show the advanced search advanced link - relevant for old template overrides
3344	$(document).on('click change', '.em-search-legacy .em-toggle', function(e){
3345		e.preventDefault();
3346		//show or hide advanced search, hidden by default
3347		var el = $(this);
3348		var rel = el.attr('rel').split(':');
3349		if( el.hasClass('show-search') ){
3350			if( rel.length > 1 ){ el.closest(rel[1]).find(rel[0]).slideUp(); }
3351			else{ $(rel[0]).slideUp(); }
3352			el.find('.show, .show-advanced').show();
3353			el.find('.hide, .hide-advanced').hide();
3354			el.removeClass('show-search');
3355		}else{
3356			if( rel.length > 1 ){ el.closest(rel[1]).find(rel[0]).slideDown(); }
3357			else{ $(rel[0]).slideDown(); }
3358			el.find('.show, .show-advanced').hide();
3359			el.find('.hide, .hide-advanced').show();
3360			el.addClass('show-search');
3361		}
3362	});
3363	// handle search form submission
3364	let em_submit_legacy_search_form = function( form ){
3365		if( this.em_search && this.em_search.value == EM.txt_search){ this.em_search.value = ''; }
3366		var results_wrapper = form.closest('.em-search-wrapper').find('.em-search-ajax');
3367		if( results_wrapper.length == 0 ) results_wrapper = $('.em-search-ajax');
3368		if( results_wrapper.length > 0 ){
3369			results_wrapper.append('<div class="loading" id="em-loading"></div>');
3370			var submitButton = form.find('.em-search-submit button');
3371			submitButton.attr('data-button-text', submitButton.val()).val(EM.txt_searching);
3372			var img = submitButton.children('img');
3373			if( img.length > 0 ) img.attr('src', img.attr('src').replace('search-mag.png', 'search-loading.gif'));
3374			var vars = form.serialize();
3375			$.ajax( EM.ajaxurl, {
3376				type : 'POST',
3377				dataType : 'html',
3378				data : vars,
3379				success : function(responseText){
3380					submitButton.val(submitButton.attr('data-button-text'));
3381					if( img.length > 0 ) img.attr('src', img.attr('src').replace('search-loading.gif', 'search-mag.png'));
3382					results_wrapper.replaceWith(responseText);
3383					if( form.find('input[name=em_search]').val() == '' ){ form.find('input[name=em_search]').val(EM.txt_search); }
3384					//reload results_wrapper
3385					results_wrapper = form.closest('.em-search-wrapper').find('.em-search-ajax');
3386					if( results_wrapper.length == 0 ) results_wrapper = $('.em-search-ajax');
3387					jQuery(document).triggerHandler('em_search_ajax', [vars, results_wrapper, e]); //ajax has loaded new results
3388				}
3389			});
3390			e.preventDefault();
3391			return false;
3392		}
3393	};
3394	if( $('.em-search-ajax').length > 0 ){
3395		$(document).on('click', '.em-search-ajax a.page-numbers', function(e){
3396			var a = $(this);
3397			var data = a.closest('.em-pagination').attr('data-em-ajax');
3398			var wrapper = a.closest('.em-search-ajax');
3399			var wrapper_parent = wrapper.parent();
3400			var qvars = a.attr('href').split('?');
3401			var vars = qvars[1];
3402			//add data-em-ajax att if it exists
3403			if( data != '' ){
3404				vars = vars != '' ? vars+'&'+data : data;
3405			}
3406			vars += '&legacy=1';
3407			wrapper.append('<div class="loading" id="em-loading"></div>');
3408			$.ajax( EM.ajaxurl, {
3409				type : 'POST',
3410				dataType : 'html',
3411				data : vars,
3412				success : function(responseText) {
3413					wrapper.replaceWith(responseText);
3414					wrapper = wrapper_parent.find('.em-search-ajax');
3415					jQuery(document).triggerHandler('em_search_ajax', [vars, wrapper, e]); //ajax has loaded new results
3416				}
3417			});
3418			e.preventDefault();
3419			return false;
3420		});
3421	}
3422	/* END Legacy */
3423});
3424
3425/*
3426* CALENDAR
3427*/
3428jQuery(document).ready( function($){
3429
3430	const em_calendar_init = function( calendar ){
3431		calendar = $(calendar);
3432		if( !calendar.attr('id') || !calendar.attr('id').match(/^em-calendar-[0-9]+$/) ){
3433			calendar.attr('id', 'em-calendar-' + Math.floor(Math.random() * 10000)); // retroactively add id to old templates
3434		}
3435		calendar.find('a').off("click");
3436		calendar.on('click', 'a.em-calnav, a.em-calnav-today', function(e){
3437			e.preventDefault();
3438			const el = $(this);
3439			if( el.attr('href') === '') return; // do nothing if disabled or no link provided
3440			el.closest('.em-calendar').prepend('<div class="loading" id="em-loading"></div>');
3441			let url = el.attr('href');
3442			const view_id = el.closest('[data-view-id]').data('view-id');
3443			const custom_data = $('form#em-view-custom-data-calendar-'+ view_id);
3444			let form_data = new FormData();
3445			if( custom_data.length > 0 ){
3446				form_data = new FormData(custom_data[0]);
3447				let $URL = new URL(url, window.location.origin);
3448				let url_params = $URL.searchParams;
3449				for (const [key, value] of url_params.entries()) {
3450					if( key === 'mo' ) {
3451						form_data.set('month', value);
3452					} else if ( key === 'yr' ) {
3453						form_data.set('year', value);
3454					} else {
3455						form_data.set(key, value);
3456					}
3457				}
3458				// remove mo and yr from URL
3459				$URL.searchParams.delete('mo');
3460				$URL.searchParams.delete('yr');
3461				url = $URL.toString();
3462			}
3463			if ( calendar.attr('data-timezone') ) {
3464				form_data.set('calendar_timezone', calendar.attr('data-timezone') );
3465			}
3466			form_data.set('id', view_id);
3467			form_data.set('ajaxCalendar', 1); // AJAX trigger
3468			form_data.set('em_ajax', 1); // AJAX trigger
3469			// check advanced trigger
3470			if( calendar.hasClass('with-advanced') ){
3471				form_data.set('has_advanced_trigger', 1);
3472			}
3473			$.ajax({
3474				url: url,
3475				data: form_data,
3476				processData: false,
3477				contentType: false,
3478				method: 'POST',
3479				success: function( data ){
3480					let view = EM_View_Updater( calendar, data );
3481					if( view.hasClass('em-view-container') ){
3482						calendar = view.find('.em-calendar');
3483					}else{
3484						calendar = view;
3485					}
3486					calendar[0].dispatchEvent( new CustomEvent( 'em_calendar_load', { bubbles: true } ) );
3487				},
3488				dataType: 'html'
3489			});
3490		} );
3491		calendar[0].addEventListener('reload', () => {
3492			calendar_trigger_ajax( calendar, calendar.attr('data-year'), calendar.attr('data-month') );
3493		});
3494		let calendar_trigger_ajax = function( calendar, year, month ){
3495			let link = calendar.find('.em-calnav-next');
3496			let url = new URL(link.attr('href'), window.location.origin);
3497			url.searchParams.set('mo', month);
3498			url.searchParams.set('yr', year);
3499			link.attr('href', url.toString()).trigger('click');
3500		};
3501		let calendar_resize_monthpicker = function( instance, text ){
3502			let span = $('<span class="marker">'+ text +'</span>');
3503			span.insertAfter(instance);
3504			let width = span.width() + 40;
3505			span.remove();
3506			instance.style.setProperty('width', width+'px', 'important');
3507		}
3508		let calendar_month_init = function(){
3509			let month_form = calendar.find('.month form');
3510			calendar.find('.event-style-pill .em-cal-event').on('click', function( e ){
3511				e.preventDefault();
3512				if( !(calendar.hasClass('preview-tooltips') && calendar.data('preview-tooltips-trigger')) && !(calendar.hasClass('preview-modal')) ) {
3513					let link = this.getAttribute('data-event-url');
3514					if (link !== null) {
3515						window.location.href = link;
3516					}
3517				}
3518				// select this date, all others no
3519				e.target.closest('.em-cal-body').querySelectorAll('.em-cal-day-date').forEach( calDate => calDate.classList.remove('selected') );
3520				e.target.closest('.em-cal-day').querySelector('.em-cal-day-date')?.classList.add('selected');
3521			});
3522			if( month_form.length > 0 ){
3523				month_form.find('input[type="submit"]').hide();
3524				let select = $('<select style="display:none;visibility:hidden;"></select>').appendTo(month_form);
3525				let option = $('<option></option>').appendTo(select);
3526				let current_datetime = calendar.find('select[name="month"]').val() + calendar.find('select[name="year"]').val();
3527				let month = calendar.find('select[name="month"]');
3528				let year = calendar.find('select[name="year"]');
3529				let monthpicker = calendar.find('.em-month-picker');
3530				let month_value = monthpicker.data('month-value');
3531				monthpicker.prop('type', 'text').prop('value', month_value);
3532				calendar_resize_monthpicker( monthpicker[0], month_value );
3533				let monthpicker_wrapper = $('#em-flatpickr');
3534				if( monthpicker_wrapper.length === 0 ) {
3535					monthpicker_wrapper = $('<div class="em pixelbones" id="em-flatpickr"></div>').appendTo('body');
3536				}
3537				let minDate = null;
3538				if( calendar.data('scope') === 'future' ){
3539					minDate = new Date();
3540					minDate.setMonth(minDate.getMonth()-1);
3541				}
3542				// locale
3543				if( 'locale' in EM.datepicker ){
3544					flatpickr.localize(flatpickr.l10ns[EM.datepicker.locale]);
3545					flatpickr.l10ns.default.firstDayOfWeek = EM.firstDay;
3546				}
3547				let fp = monthpicker.flatpickr({
3548					appendTo : monthpicker_wrapper[0],
3549					dateFormat : EM?.calendar?.month_format,
3550					minDate : minDate,
3551					disableMobile: "true",
3552					plugins: [
3553						new monthSelectPlugin({
3554							shorthand: true,
3555							dateFormat: EM?.calendar?.month_format || 'F Y',
3556							altFormat: EM?.calendar?.month_format || 'F Y',
3557						})
3558					],
3559					onChange: function(selectedDates, dateStr, instance) {
3560						calendar_resize_monthpicker( instance.input, dateStr );
3561						calendar_trigger_ajax( calendar, selectedDates[0].getFullYear(), selectedDates[0].getMonth()+1);
3562					},
3563				});
3564				// this bit fixes issues if the supplied text value has a mismatch with the real text value due to localization differences between WP and flatpickr
3565				let month_real_value = monthpicker.val() + '-01';
3566				fp.setDate( new Date( month_real_value ) );
3567				// add classes to month picker
3568				monthpicker.addClass('select-toggle');
3569			}
3570			if( calendar.hasClass('preview-tooltips') ){
3571				let tooltip_vars = {
3572					theme : 'light-border',
3573					allowHTML : true,
3574					interactive : true,
3575					trigger : 'mouseenter focus click',
3576					content(reference) {
3577						return document.createElement('div');
3578					},
3579					onShow( instance ){
3580						const id = instance.reference.getAttribute('data-event-id');
3581						const template = calendar.find('section.em-cal-events-content .em-cal-event-content[data-event-id="'+id+'"]');
3582						instance.props.content.append(template.first().clone()[0]);
3583					},
3584					onHide( instance ){
3585						instance.props.content.innerHTML = '';
3586					}
3587				};
3588				if( calendar.data('preview-tooltips-trigger') ) {
3589					tooltip_vars.trigger = calendar.data('preview-tooltips-trigger');
3590				}
3591				$(document).trigger('em-tippy-cal-event-vars',[tooltip_vars]);
3592				tippy(calendar.find('.em-cal-event').toArray(), tooltip_vars);
3593			}else if( calendar.hasClass('preview-modal') ){
3594				// Modal
3595				calendar.find('.em-cal-event').on('click', function( e ){
3596					const id = this.getAttribute('data-event-id');
3597					const modal = calendar.find('section.em-cal-events-content .em-cal-event-content[data-event-id="'+id+'"]');
3598					modal.attr('data-calendar-id', calendar.attr('id'));
3599					openModal(modal);
3600					// select this date, all others no
3601					e.target.closest('.em-cal-body').querySelectorAll('.em-cal-day-date').forEach( calDate => calDate.classList.remove('selected') );
3602					e.target.closest('.em-cal-day').querySelector('.em-cal-day-date')?.classList.add('selected');
3603				});
3604			}
3605			// responsive mobile view for date clicks
3606			if( calendar.hasClass('responsive-dateclick-modal') ){
3607				calendar.find('.eventful .em-cal-day-date, .eventful-post .em-cal-day-date, .eventful-pre .em-cal-day-date').on('click', function( e ){
3608					//if( calendar.hasClass('size-small') || calendar.hasClass('size-medium') ){
3609					e.preventDefault();
3610					const id = this.getAttribute('data-timestamp');
3611					const modal = calendar.find('.em-cal-date-content[data-calendar-date="'+id+'"], .em-cal-date-content[data-timestamp="'+id+'"]');
3612					modal.attr('data-calendar-id', calendar.attr('id'));
3613					openModal(modal);
3614					// select this date, all others no
3615					e.target.closest('.em-cal-body').querySelectorAll('.em-cal-day-date').forEach( calDate => calDate.classList.remove('selected') );
3616					e.target.closest('.em-cal-day').querySelector('.em-cal-day-date')?.classList.add('selected');
3617				});
3618			}
3619			// observe resizing if not fixed
3620			if( !calendar.hasClass('size-fixed') ){
3621				EM_ResizeObserver( EM.calendar.breakpoints, [calendar[0], calendar[0]]);
3622			}
3623			// even aspect, because aspect ratio can screw up widths vs row template heights
3624			let calendar_body = calendar.find('.em-cal-body');
3625			if( calendar_body.hasClass('even-aspect') ) {
3626				let ro_function = function (el) {
3627					let width = el.firstElementChild.getBoundingClientRect().width;
3628					if (width > 0) {
3629						el.style.setProperty('--grid-auto-rows', 'minmax(' + width + 'px, auto)');
3630					}
3631				}
3632				let ro = new ResizeObserver(function (entries) {
3633					for (let entry of entries) {
3634						ro_function(entry.target);
3635					}
3636				});
3637				ro.observe(calendar_body[0]);
3638				ro_function(calendar_body[0]);
3639			}
3640
3641			// figure out colors
3642			calendar.find('.date-day-colors').each( function(){
3643				let colors = JSON.parse(this.getAttribute('data-colors'));
3644				let day = $(this).siblings('.em-cal-day-date.colored');
3645				let sides = {
3646					1 : { 1 : '--date-border-color', 'class' : 'one' },
3647					2 : { 1 : '--date-border-color-top', 2 : '--date-border-color-bottom', 'class' : 'two' },
3648					3 : { 1 : '--date-border-color-top', 2 : '--date-border-color-right', 3 : '--date-border-color-bottom', 'class' : 'three' },
3649					4 : { 1 : '--date-border-color-top', 2 : '--date-border-color-right', 3 : '--date-border-color-bottom', 4 : '--date-border-color-left', 'class' : 'four' },
3650				};
3651				for (let i = 0; i < colors.length; i += 4) {
3652					const ring_colors = colors.slice(i, i + 4);
3653					// add a ring
3654					let outer_ring = day.children().first();
3655					let new_ring = $('<div class="ring"></div>').prependTo(day);
3656					outer_ring.appendTo(new_ring);
3657					new_ring.addClass( sides[ring_colors.length].class );
3658					for ( let it = 0; it < ring_colors.length; it++ ){
3659						new_ring.css(sides[ring_colors.length][it+1], ring_colors[it]);
3660					}
3661				}
3662			});
3663
3664			if( calendar.hasClass('with-advanced') ){
3665				const trigger = calendar.find('.em-search-advanced-trigger');
3666				const search_advanced = $('#'+trigger.attr('data-search-advanced-id'));
3667				search_advanced.triggerHandler('update_trigger_count');
3668			}
3669		}
3670		calendar_month_init();
3671		$(document).triggerHandler('em_calendar_loaded', [calendar]);
3672	};
3673	$('.em-calendar').each( function(){
3674		let calendar = $(this);
3675		em_calendar_init( calendar );
3676	});
3677	$(document).on('em_calendar_load', '.em-calendar', function(){
3678		em_calendar_init( this );
3679	});
3680	$(document).on('em_view_loaded_calendar', function( e, view, form ){
3681		let calendar;
3682		if( view.hasClass('em-calendar') ){
3683			calendar = view;
3684		}else {
3685			calendar = view.find('.em-calendar').first();
3686		}
3687		em_calendar_init( calendar );
3688	});
3689});
3690
3691let EM_View_Updater = function( element, html ){
3692	let content = jQuery(html);
3693	let view = element.hasClass('em-view-container') ? element : element.parent('.em-view-container');
3694	if( view.length > 0 ){
3695		if( content.hasClass('em-view-container') ){
3696			view.replaceWith(content);
3697			view = content;
3698		}else{
3699			view.empty().append(content);
3700		}
3701	}else{
3702		// create a view if possible
3703		if( content.hasClass('em-view-container') ){
3704			element.replaceWith(content);
3705			view = content;
3706		}else if( content.attr('data-view-id') ){
3707			let view = jQuery('<div class="em em-view-container"></div>');
3708			let view_id = content.attr('data-view-id');
3709			view.attr('data-view-id', view_id);
3710			view.attr('id', 'em-view-'+ view_id);
3711			view.attr('data-view-type', content.attr('data-view-type'));
3712			view.append(content);
3713			element.replaceWith(view);
3714		}
3715	}
3716	em_setup_ui_elements( view[0] );
3717	return view;
3718}
3719
3720/**
3721 * 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.
3722 * An object item with value false will represent any screensize, i.e. it should be the last value when all breakpoints aren't met.
3723 * @param breakpoints
3724 * @param elements
3725 * @constructor
3726 */
3727let EM_ResizeObserver = function( breakpoints, elements ){
3728	const ro = new ResizeObserver( function( entries ){
3729		for (let entry of entries) {
3730			let el = entry.target;
3731			if( !el.classList.contains('size-fixed') ) {
3732				for (const [name, breakpoint] of Object.entries(breakpoints)) {
3733					if (el.offsetWidth <= breakpoint || breakpoint === false) {
3734						for (let breakpoint_name of Object.keys(breakpoints)) {
3735							if (breakpoint_name !== name) el.classList.remove('size-' + breakpoint_name);
3736						}
3737						// add class and trigger event only once
3738						if(	!el.classList.contains('size-' + name) ) {
3739							el.classList.add('size-' + name);
3740							el.dispatchEvent( new CustomEvent('em_resize') );
3741						}
3742						break;
3743					}
3744				}
3745			}
3746		}
3747	});
3748	elements.forEach( function( el ){
3749		if( typeof el !== 'undefined' ){
3750			ro.observe(el);
3751		}
3752	});
3753	return ro;
3754};
3755
3756// event list and event page (inc. some extra booking form logic) - todo/cleanup
3757jQuery(document).ready( function($){
3758	// Events List
3759	let breakpoints = {
3760		'small' : 600,
3761		'large' : false,
3762	}
3763	const events_ro = EM_ResizeObserver( breakpoints, $('.em-list').toArray() );
3764	$(document).on('em_page_loaded em_view_loaded_list em_view_loaded_list-grouped em_view_loaded_grid', function( e, view ){
3765		let new_elements = view.find('.em-list').each( function(){
3766			if( !this.classList.contains('size-fixed') ){
3767				events_ro.observe( this );
3768			}
3769		});
3770	});
3771
3772	$(document).on('click', '.em-grid .em-item[data-href]', function(e){
3773		if( e.target.type !== 'a' ){
3774			window.location.href = this.getAttribute('data-href');
3775		}
3776	});
3777
3778	// Single event area
3779	breakpoints = {
3780		'small' : 600,
3781		'medium' : 900,
3782		'large' : false,
3783	}
3784	const event_ro = EM_ResizeObserver( breakpoints, $('.em-item-single').toArray() );
3785	$(document).on('em_view_loaded', function( e, view ){
3786		let new_elements = view.find('.em-event-single').each( function(){
3787			if( !this.classList.contains('size-fixed') ){
3788				event_ro.observe( this );
3789			}
3790		});
3791	});
3792	// booking form area (WIP)
3793	$(document).on("click", ".em-event-booking-form .em-login-trigger a", function( e ){
3794		e.preventDefault();
3795		var parent = $(this).closest('.em-event-booking-form');
3796		parent.find('.em-login-trigger').hide();
3797		parent.find('.em-login-content').fadeIn();
3798		let login_form = parent.find('.em-login');
3799		login_form[0].scrollIntoView({
3800			behavior: 'smooth'
3801		});
3802		login_form.first().find('input[name="log"]').focus();
3803
3804	});
3805	$(document).on("click", ".em-event-booking-form .em-login-cancel", function( e ){
3806		e.preventDefault();
3807		let parent = $(this).closest('.em-event-booking-form');
3808		parent.find('.em-login-content').hide();
3809		parent.find('.em-login-trigger').show();
3810	});
3811	EM_ResizeObserver( {'small': 500, 'large' : false}, $('.em-login').toArray());
3812
3813});
3814
3815// handle generic ajax submission forms vanilla style
3816document.addEventListener('DOMContentLoaded', function () {
3817	document.querySelectorAll('form.em-ajax-form').forEach( function(el){
3818		el.addEventListener('submit', function(e){
3819			e.preventDefault();
3820			let form = e.currentTarget;
3821			let formData =  new FormData(form);
3822			let button = form.querySelector('button[type="submit"]');
3823			let loader;
3824
3825			if( form.classList.contains('no-overlay-spinner') ){
3826				form.classList.add('loading');
3827			}else{
3828				let loader = document.createElement('div');
3829				loader.id = 'em-loading';
3830				form.append(loader);
3831			}
3832
3833			var request = new XMLHttpRequest();
3834			if( form.getAttribute('data-api-url') ){
3835				request.open('POST', form.getAttribute('data-api-url'), true);
3836				request.setRequestHeader('X-WP-Nonce', EM.api_nonce);
3837			}else{
3838				request.open('POST', EM.ajaxurl, true);
3839			}
3840
3841			request.onload = function() {
3842				if( loader ) loader.remove();
3843				if (this.status >= 200 && this.status < 400) {
3844					// Success!
3845					try {
3846						let data = JSON.parse(this.response);
3847						let notice;
3848						if( !form.classList.contains('no-inline-notice') ){
3849							notice = form.querySelector('.em-notice');
3850							if( !notice ){
3851								notice = document.createElement('div');
3852								form.prepend(notice);
3853								if( formData.get('action') ){
3854									form.dispatchEvent( new CustomEvent( 'em_ajax_form_success_' + formData.get('action'), {
3855										detail : {
3856											form : form,
3857											notice : notice,
3858											response : data,
3859										}
3860									}) );
3861								}
3862							}
3863							notice.innerHTML = '';
3864							notice.setAttribute('class', 'em-notice');
3865						}
3866						if( data.result ){
3867							if( !form.classList.contains('no-inline-notice') ){
3868								notice.classList.add('em-notice-success');
3869								notice.innerHTML = data.message;
3870								form.replaceWith(notice);
3871							}else{
3872								form.classList.add('load-successful');
3873								form.classList.remove('loading');
3874								if( data.message ){
3875									EM_Alert(data.message);
3876								}
3877							}
3878						}else{
3879							if( !form.classList.contains('no-inline-notice') ){
3880								notice.classList.add('em-notice-error');
3881								notice.innerHTML = data.errors;
3882							}else{
3883								EM_Alert(data.errors);
3884							}
3885						}
3886					} catch(e) {
3887						alert( 'Error Encountered : ' + e);
3888					}
3889				} else {
3890					alert('Error encountered... please see debug logs or contact support.');
3891				}
3892				form.classList.remove('loading');
3893			};
3894
3895			request.onerror = function() {
3896				alert('Connection error encountered... please see debug logs or contact support.');
3897			};
3898
3899			request.send( formData );
3900			return false;
3901		});
3902	});
3903});
3904
3905// phone numbers
3906let em_setup_phone_inputs = function( container ){};
3907let em_unsetup_phone_inputs = function( container ){};
3908if ( EM.phone ) {
3909
3910	let getCountry = function() {
3911		var timezones = {
3912			"Africa/Abidjan": { c : ["CI", "BF", "GH", "GM", "GN", "ML", "MR", "SH", "SL", "SN", "TG"] },
3913			"Africa/Accra": { c : ["GH"] },
3914			"Africa/Addis_Ababa": { c : ["ET"] },
3915			"Africa/Algiers": { c : ["DZ"] },
3916			"Africa/Asmara": { c : ["ER"] },
3917			"Africa/Asmera": { c : ["ER"] },
3918			"Africa/Bamako": { c : ["ML"] },
3919			"Africa/Bangui": { c : ["CF"] },
3920			"Africa/Banjul": { c : ["GM"] },
3921			"Africa/Bissau": { c : ["GW"] },
3922			"Africa/Blantyre": { c : ["MW"] },
3923			"Africa/Brazzaville": { c : ["CG"] },
3924			"Africa/Bujumbura": { c : ["BI"] },
3925			"Africa/Cairo": { c : ["EG"] },
3926			"Africa/Casablanca": { c : ["MA"] },
3927			"Africa/Ceuta": { c : ["ES"] },
3928			"Africa/Conakry": { c : ["GN"] },
3929			"Africa/Dakar": { c : ["SN"] },
3930			"Africa/Dar_es_Salaam": { c : ["TZ"] },
3931			"Africa/Djibouti": { c : ["DJ"] },
3932			"Africa/Douala": { c : ["CM"] },
3933			"Africa/El_Aaiun": { c : ["EH"] },
3934			"Africa/Freetown": { c : ["SL"] },
3935			"Africa/Gaborone": { c : ["BW"] },
3936			"Africa/Harare": { c : ["ZW"] },
3937			"Africa/Johannesburg": { c : ["ZA", "LS", "SZ"] },
3938			"Africa/Juba": { c : ["SS"] },
3939			"Africa/Kampala": { c : ["UG"] },
3940			"Africa/Khartoum": { c : ["SD"] },
3941			"Africa/Kigali": { c : ["RW"] },
3942			"Africa/Kinshasa": { c : ["CD"] },
3943			"Africa/Lagos": { c : ["NG", "AO", "BJ", "CD", "CF", "CG", "CM", "GA", "GQ", "NE"] },
3944			"Africa/Libreville": { c : ["GA"] },
3945			"Africa/Lome": { c : ["TG"] },
3946			"Africa/Luanda": { c : ["AO"] },
3947			"Africa/Lubumbashi": { c : ["CD"] },
3948			"Africa/Lusaka": { c : ["ZM"] },
3949			"Africa/Malabo": { c : ["GQ"] },
3950			"Africa/Maputo": { c : ["MZ", "BI", "BW", "CD", "MW", "RW", "ZM", "ZW"] },
3951			"Africa/Maseru": { c : ["LS"] },
3952			"Africa/Mbabane": { c : ["SZ"] },
3953			"Africa/Mogadishu": { c : ["SO"] },
3954			"Africa/Monrovia": { c : ["LR"] },
3955			"Africa/Nairobi": { c : ["KE", "DJ", "ER", "ET", "KM", "MG", "SO", "TZ", "UG", "YT"] },
3956			"Africa/Ndjamena": { c : ["TD"] },
3957			"Africa/Niamey": { c : ["NE"] },
3958			"Africa/Nouakchott": { c : ["MR"] },
3959			"Africa/Ouagadougou": { c : ["BF"] },
3960			"Africa/Porto-Novo": { c : ["BJ"] },
3961			"Africa/Sao_Tome": { c : ["ST"] },
3962			"Africa/Timbuktu": { c : ["ML"] },
3963			"Africa/Tripoli": { c : ["LY"] },
3964			"Africa/Tunis": { c : ["TN"] },
3965			"Africa/Windhoek": { c : ["NA"] },
3966			"America/Adak": { c : ["US"] },
3967			"America/Anchorage": { c : ["US"] },
3968			"America/Anguilla": { c : ["AI"] },
3969			"America/Antigua": { c : ["AG"] },
3970			"America/Araguaina": { c : ["BR"] },
3971			"America/Argentina/Buenos_Aires": { c : ["AR"] },
3972			"America/Argentina/Catamarca": { c : ["AR"] },
3973			"America/Argentina/ComodRivadavia": { c : ["AR"] },
3974			"America/Argentina/Cordoba": { c : ["AR"] },
3975			"America/Argentina/Jujuy": { c : ["AR"] },
3976			"America/Argentina/La_Rioja": { c : ["AR"] },
3977			"America/Argentina/Mendoza": { c : ["AR"] },
3978			"America/Argentina/Rio_Gallegos": { c : ["AR"] },
3979			"America/Argentina/Salta": { c : ["AR"] },
3980			"America/Argentina/San_Juan": { c : ["AR"] },
3981			"America/Argentina/San_Luis": { c : ["AR"] },
3982			"America/Argentina/Tucuman": { c : ["AR"] },
3983			"America/Argentina/Ushuaia": { c : ["AR"] },
3984			"America/Aruba": { c : ["AW"] },
3985			"America/Asuncion": { c : ["PY"] },
3986			"America/Atikokan": { c : ["CA"] },
3987			"America/Atka": {},
3988			"America/Bahia": { c : ["BR"] },
3989			"America/Bahia_Banderas": { c : ["MX"] },
3990			"America/Barbados": { c : ["BB"] },
3991			"America/Belem": { c : ["BR"] },
3992			"America/Belize": { c : ["BZ"] },
3993			"America/Blanc-Sablon": { c : ["CA"] },
3994			"America/Boa_Vista": { c : ["BR"] },
3995			"America/Bogota": { c : ["CO"] },
3996			"America/Boise": { c : ["US"] },
3997			"America/Buenos_Aires": { c : ["AR"] },
3998			"America/Cambridge_Bay": { c : ["CA"] },
3999			"America/Campo_Grande": { c : ["BR"] },
4000			"America/Cancun": { c : ["MX"] },
4001			"America/Caracas": { c : ["VE"] },
4002			"America/Catamarca": {},
4003			"America/Cayenne": { c : ["GF"] },
4004			"America/Cayman": { c : ["KY"] },
4005			"America/Chicago": { c : ["US"] },
4006			"America/Chihuahua": { c : ["MX"] },
4007			"America/Coral_Harbour": { c : ["CA"] },
4008			"America/Cordoba": { c: ['AR'] },
4009			"America/Costa_Rica": { c : ["CR"] },
4010			"America/Creston": { c : ["CA"] },
4011			"America/Cuiaba": { c : ["BR"] },
4012			"America/Curacao": { c : ["CW"] },
4013			"America/Danmarkshavn": { c : ["GL"] },
4014			"America/Dawson": { c : ["CA"] },
4015			"America/Dawson_Creek": { c : ["CA"] },
4016			"America/Denver": { c : ["US"] },
4017			"America/Detroit": { c : ["US"] },
4018			"America/Dominica": { c : ["DM"] },
4019			"America/Edmonton": { c : ["CA"] },
4020			"America/Eirunepe": { c : ["BR"] },
4021			"America/El_Salvador": { c : ["SV"] },
4022			"America/Ensenada": {},
4023			"America/Fort_Nelson": { c : ["CA"] },
4024			"America/Fort_Wayne": {},
4025			"America/Fortaleza": { c : ["BR"] },
4026			"America/Glace_Bay": { c : ["CA"] },
4027			"America/Godthab": {},
4028			"America/Goose_Bay": { c : ["CA"] },
4029			"America/Grand_Turk": { c : ["TC"] },
4030			"America/Grenada": { c : ["GD"] },
4031			"America/Guadeloupe": { c : ["GP"] },
4032			"America/Guatemala": { c : ["GT"] },
4033			"America/Guayaquil": { c : ["EC"] },
4034			"America/Guyana": { c : ["GY"] },
4035			"America/Halifax": { c : ["CA"] },
4036			"America/Havana": { c : ["CU"] },
4037			"America/Hermosillo": { c : ["MX"] },
4038			"America/Indiana/Indianapolis": { c : ["US"] },
4039			"America/Indiana/Knox": { c : ["US"] },
4040			"America/Indiana/Marengo": { c : ["US"] },
4041			"America/Indiana/Petersburg": { c : ["US"] },
4042			"America/Indiana/Tell_City": { c : ["US"] },
4043			"America/Indiana/Vevay": { c : ["US"] },
4044			"America/Indiana/Vincennes": { c : ["US"] },
4045			"America/Indiana/Winamac": { c : ["US"] },
4046			"America/Indianapolis": {},
4047			"America/Inuvik": { c : ["CA"] },
4048			"America/Iqaluit": { c : ["CA"] },
4049			"America/Jamaica": { c : ["JM"] },
4050			"America/Jujuy": {},
4051			"America/Juneau": { c : ["US"] },
4052			"America/Kentucky/Louisville": { c : ["US"] },
4053			"America/Kentucky/Monticello": { c : ["US"] },
4054			"America/Knox_IN": {},
4055			"America/Kralendijk": { c : ["BQ"] },
4056			"America/La_Paz": { c : ["BO"] },
4057			"America/Lima": { c : ["PE"] },
4058			"America/Los_Angeles": { c : ["US"] },
4059			"America/Louisville": {},
4060			"America/Lower_Princes": { c : ["SX"] },
4061			"America/Maceio": { c : ["BR"] },
4062			"America/Managua": { c : ["NI"] },
4063			"America/Manaus": { c : ["BR"] },
4064			"America/Marigot": { c : ["MF"] },
4065			"America/Martinique": { c : ["MQ"] },
4066			"America/Matamoros": { c : ["MX"] },
4067			"America/Mazatlan": { c : ["MX"] },
4068			"America/Mendoza": {},
4069			"America/Menominee": { c : ["US"] },
4070			"America/Merida": { c : ["MX"] },
4071			"America/Metlakatla": { c : ["US"] },
4072			"America/Mexico_City": { c : ["MX"] },
4073			"America/Miquelon": { c : ["PM"] },
4074			"America/Moncton": { c : ["CA"] },
4075			"America/Monterrey": { c : ["MX"] },
4076			"America/Montevideo": { c : ["UY"] },
4077			"America/Montreal": { c : ["CA"] },
4078			"America/Montserrat": { c : ["MS"] },
4079			"America/Nassau": { c : ["BS"] },
4080			"America/New_York": { c : ["US"] },
4081			"America/Nipigon": { c : ["CA"] },
4082			"America/Nome": { c : ["US"] },
4083			"America/Noronha": { c : ["BR"] },
4084			"America/North_Dakota/Beulah": { c : ["US"] },
4085			"America/North_Dakota/Center": { c : ["US"] },
4086			"America/North_Dakota/New_Salem": { c : ["US"] },
4087			"America/Nuuk": { c : ["GL"] },
4088			"America/Ojinaga": { c : ["MX"] },
4089			"America/Panama": { c : ["PA", "CA", "KY"] },
4090			"America/Pangnirtung": { c : ["CA"] },
4091			"America/Paramaribo": { c : ["SR"] },
4092			"America/Phoenix": { c : ["US", "CA"] },
4093			"America/Port-au-Prince": { c : ["HT"] },
4094			"America/Port_of_Spain": { c : ["TT"] },
4095			"America/Porto_Acre": {},
4096			"America/Porto_Velho": { c : ["BR"] },
4097			"America/Puerto_Rico": { c : ["PR", "AG", "CA", "AI","AW","BL","BQ","CW","DM","GD","GP","KN","LC","MF","MS","SX","TT","VC","VG","VI"] },
4098			"America/Punta_Arenas": { c : ["CL"] },
4099			"America/Rainy_River": { c : ["CA"] },
4100			"America/Rankin_Inlet": { c : ["CA"] },
4101			"America/Recife": { c : ["BR"] },
4102			"America/Regina": { c : ["CA"] },
4103			"America/Resolute": { c : ["CA"] },
4104			"America/Rio_Branco": { c : ["BR"] },
4105			"America/Rosario": {},
4106			"America/Santa_Isabel": {},
4107			"America/Santarem": { c : ["BR"] },
4108			"America/Santiago": { c : ["CL"] },
4109			"America/Santo_Domingo": { c : ["DO"] },
4110			"America/Sao_Paulo": { c : ["BR"] },
4111			"America/Scoresbysund": { c : ["GL"] },
4112			"America/Shiprock": {},
4113			"America/Sitka": { c : ["US"] },
4114			"America/St_Barthelemy": { c : ["BL"] },
4115			"America/St_Johns": { c : ["CA"] },
4116			"America/St_Kitts": { c : ["KN"] },
4117			"America/St_Lucia": { c : ["LC"] },
4118			"America/St_Thomas": { c : ["VI"] },
4119			"America/St_Vincent": { c : ["VC"] },
4120			"America/Swift_Current": { c : ["CA"] },
4121			"America/Tegucigalpa": { c : ["HN"] },
4122			"America/Thule": { c : ["GL"] },
4123			"America/Thunder_Bay": { c : ["CA"] },
4124			"America/Tijuana": { c : ["MX"] },
4125			"America/Toronto": { c : ["CA", "BS"] },
4126			"America/Tortola": { c : ["VG"] },
4127			"America/Vancouver": { c : ["CA"] },
4128			"America/Virgin": { c : ["VI"] },
4129			"America/Whitehorse": { c : ["CA"] },
4130			"America/Winnipeg": { c : ["CA"] },
4131			"America/Yakutat": { c : ["US"] },
4132			"America/Yellowknife": { c : ["CA"] },
4133			"Antarctica/Casey": { c : ["AQ"] },
4134			"Antarctica/Davis": { c : ["AQ"] },
4135			"Antarctica/DumontDUrville": { c : ["AQ"] },
4136			"Antarctica/Macquarie": { c : ["AU"] },
4137			"Antarctica/Mawson": { c : ["AQ"] },
4138			"Antarctica/McMurdo": { c : ["AQ"] },
4139			"Antarctica/Palmer": { c : ["AQ"] },
4140			"Antarctica/Rothera": { c : ["AQ"] },
4141			"Antarctica/South_Pole": { c : ["AQ"] },
4142			"Antarctica/Syowa": { c : ["AQ"] },
4143			"Antarctica/Troll": { c : ["AQ"] },
4144			"Antarctica/Vostok": { c : ["AQ"] },
4145			"Arctic/Longyearbyen": { c : ["SJ"] },
4146			"Asia/Aden": { c : ["YE"] },
4147			"Asia/Almaty": { c : ["KZ"] },
4148			"Asia/Amman": { c : ["JO"] },
4149			"Asia/Anadyr": { c : ["RU"] },
4150			"Asia/Aqtau": { c : ["KZ"] },
4151			"Asia/Aqtobe": { c : ["KZ"] },
4152			"Asia/Ashgabat": { c : ["TM"] },
4153			"Asia/Ashkhabad": {},
4154			"Asia/Atyrau": { c : ["KZ"] },
4155			"Asia/Baghdad": { c : ["IQ"] },
4156			"Asia/Bahrain": { c : ["BH"] },
4157			"Asia/Baku": { c : ["AZ"] },
4158			"Asia/Bangkok": { c : ["TH", "KH", "LA", "VN"] },
4159			"Asia/Barnaul": { c : ["RU"] },
4160			"Asia/Beirut": { c : ["LB"] },
4161			"Asia/Bishkek": { c : ["KG"] },
4162			"Asia/Brunei": { c : ["BN"] },
4163			"Asia/Calcutta": {},
4164			"Asia/Chita": { c : ["RU"] },
4165			"Asia/Choibalsan": { c : ["MN"] },
4166			"Asia/Chongqing": {},
4167			"Asia/Chungking": {},
4168			"Asia/Colombo": { c : ["LK"] },
4169			"Asia/Dacca": {},
4170			"Asia/Damascus": { c : ["SY"] },
4171			"Asia/Dhaka": { c : ["BD"] },
4172			"Asia/Dili": { c : ["TL"] },
4173			"Asia/Dubai": { c : ["AE", "OM"] },
4174			"Asia/Dushanbe": { c : ["TJ"] },
4175			"Asia/Famagusta": { c : ["CY"] },
4176			"Asia/Gaza": { c : ["PS"] },
4177			"Asia/Harbin": {},
4178			"Asia/Hebron": { c : ["PS"] },
4179			"Asia/Ho_Chi_Minh": { c : ["VN"] },
4180			"Asia/Hong_Kong": { c : ["HK"] },
4181			"Asia/Hovd": { c : ["MN"] },
4182			"Asia/Irkutsk": { c : ["RU"] },
4183			"Asia/Istanbul": {},
4184			"Asia/Jakarta": { c : ["ID"] },
4185			"Asia/Jayapura": { c : ["ID"] },
4186			"Asia/Jerusalem": { c : ["IL"] },
4187			"Asia/Kabul": { c : ["AF"] },
4188			"Asia/Kamchatka": { c : ["RU"] },
4189			"Asia/Karachi": { c : ["PK"] },
4190			"Asia/Kashgar": {},
4191			"Asia/Kathmandu": { c : ["NP"] },
4192			"Asia/Katmandu": {},
4193			"Asia/Khandyga": { c : ["RU"] },
4194			"Asia/Kolkata": { c : ["IN"] },
4195			"Asia/Krasnoyarsk": { c : ["RU"] },
4196			"Asia/Kuala_Lumpur": { c : ["MY"] },
4197			"Asia/Kuching": { c : ["MY"] },
4198			"Asia/Kuwait": { c : ["KW"] },
4199			"Asia/Macao": {},
4200			"Asia/Macau": { c : ["MO"] },
4201			"Asia/Magadan": { c : ["RU"] },
4202			"Asia/Makassar": { c : ["ID"] },
4203			"Asia/Manila": { c : ["PH"] },
4204			"Asia/Muscat": { c : ["OM"] },
4205			"Asia/Nicosia": { c : ["CY"] },
4206			"Asia/Novokuznetsk": { c : ["RU"] },
4207			"Asia/Novosibirsk": { c : ["RU"] },
4208			"Asia/Omsk": { c : ["RU"] },
4209			"Asia/Oral": { c : ["KZ"] },
4210			"Asia/Phnom_Penh": { c : ["KH"] },
4211			"Asia/Pontianak": { c : ["ID"] },
4212			"Asia/Pyongyang": { c : ["KP"] },
4213			"Asia/Qatar": { c : ["QA", "BH"] },
4214			"Asia/Qostanay": { c : ["KZ"] },
4215			"Asia/Qyzylorda": { c : ["KZ"] },
4216			"Asia/Rangoon": {},
4217			"Asia/Riyadh": { c : ["SA", "AQ", "KW", "YE"] },
4218			"Asia/Saigon": {},
4219			"Asia/Sakhalin": { c : ["RU"] },
4220			"Asia/Samarkand": { c : ["UZ"] },
4221			"Asia/Seoul": { c : ["KR"] },
4222			"Asia/Shanghai": { c : ["CN"] },
4223			"Asia/Singapore": { c : ["SG", "MY"] },
4224			"Asia/Srednekolymsk": { c : ["RU"] },
4225			"Asia/Taipei": { c : ["TW"] },
4226			"Asia/Tashkent": { c : ["UZ"] },
4227			"Asia/Tbilisi": { c : ["GE"] },
4228			"Asia/Tehran": { c : ["IR"] },
4229			"Asia/Tel_Aviv": {},
4230			"Asia/Thimbu": {},
4231			"Asia/Thimphu": { c : ["BT"] },
4232			"Asia/Tokyo": { c : ["JP"] },
4233			"Asia/Tomsk": { c : ["RU"] },
4234			"Asia/Ujung_Pandang": {},
4235			"Asia/Ulaanbaatar": { c : ["MN"] },
4236			"Asia/Ulan_Bator": {},
4237			"Asia/Urumqi": { c : ["CN"] },
4238			"Asia/Ust-Nera": { c : ["RU"] },
4239			"Asia/Vientiane": { c : ["LA"] },
4240			"Asia/Vladivostok": { c : ["RU"] },
4241			"Asia/Yakutsk": { c : ["RU"] },
4242			"Asia/Yangon": { c : ["MM"] },
4243			"Asia/Yekaterinburg": { c : ["RU"] },
4244			"Asia/Yerevan": { c : ["AM"] },
4245			"Atlantic/Azores": { c : ["PT"] },
4246			"Atlantic/Bermuda": { c : ["BM"] },
4247			"Atlantic/Canary": { c : ["ES"] },
4248			"Atlantic/Cape_Verde": { c : ["CV"] },
4249			"Atlantic/Faeroe": {},
4250			"Atlantic/Faroe": { c : ["FO"] },
4251			"Atlantic/Jan_Mayen": { c : ["SJ"] },
4252			"Atlantic/Madeira": { c : ["PT"] },
4253			"Atlantic/Reykjavik": { c : ["IS"] },
4254			"Atlantic/South_Georgia": { c : ["GS"] },
4255			"Atlantic/St_Helena": { c : ["SH"] },
4256			"Atlantic/Stanley": { c : ["FK"] },
4257			"Australia/ACT": {},
4258			"Australia/Adelaide": { c : ["AU"] },
4259			"Australia/Brisbane": { c : ["AU"] },
4260			"Australia/Broken_Hill": { c : ["AU"] },
4261			"Australia/Canberra": {},
4262			"Australia/Currie": {},
4263			"Australia/Darwin": { c : ["AU"] },
4264			"Australia/Eucla": { c : ["AU"] },
4265			"Australia/Hobart": { c : ["AU"] },
4266			"Australia/LHI": {},
4267			"Australia/Lindeman": { c : ["AU"] },
4268			"Australia/Lord_Howe": { c : ["AU"] },
4269			"Australia/Melbourne": { c : ["AU"] },
4270			"Australia/NSW": {},
4271			"Australia/North": {},
4272			"Australia/Perth": { c : ["AU"] },
4273			"Australia/Queensland": {},
4274			"Australia/South": {},
4275			"Australia/Sydney": { c : ["AU"] },
4276			"Australia/Tasmania": {},
4277			"Australia/Victoria": {},
4278			"Australia/West": {},
4279			"Australia/Yancowinna": {},
4280			"Brazil/Acre": {},
4281			"Brazil/DeNoronha": {},
4282			"Brazil/East": {},
4283			"Brazil/West": {},
4284			CET: { c : ["XK"] },
4285			CST6CDT: {},
4286			"Canada/Atlantic": {},
4287			"Canada/Central": {},
4288			"Canada/Eastern": { c : ["CA"] },
4289			"Canada/Mountain": {},
4290			"Canada/Newfoundland": {},
4291			"Canada/Pacific": {},
4292			"Canada/Saskatchewan": {},
4293			"Canada/Yukon": {},
4294			"Chile/Continental": {},
4295			"Chile/EasterIsland": {},
4296			Cuba: {},
4297			EET: {},
4298			EST: {},
4299			EST5EDT: {},
4300			Egypt: {},
4301			Eire: {},
4302			"Etc/GMT": { c : ["AC"] },
4303			"Etc/GMT+0": {},
4304			"Etc/GMT+1": {},
4305			"Etc/GMT+10": {},
4306			"Etc/GMT+11": {},
4307			"Etc/GMT+12": {},
4308			"Etc/GMT+2": {},
4309			"Etc/GMT+3": {},
4310			"Etc/GMT+4": {},
4311			"Etc/GMT+5": {},
4312			"Etc/GMT+6": {},
4313			"Etc/GMT+7": {},
4314			"Etc/GMT+8": {},
4315			"Etc/GMT+9": {},
4316			"Etc/GMT-0": {},
4317			"Etc/GMT-1": {},
4318			"Etc/GMT-10": {},
4319			"Etc/GMT-11": {},
4320			"Etc/GMT-12": {},
4321			"Etc/GMT-13": {},
4322			"Etc/GMT-14": {},
4323			"Etc/GMT-2": {},
4324			"Etc/GMT-3": {},
4325			"Etc/GMT-4": {},
4326			"Etc/GMT-5": {},
4327			"Etc/GMT-6": {},
4328			"Etc/GMT-7": {},
4329			"Etc/GMT-8": {},
4330			"Etc/GMT-9": {},
4331			"Etc/GMT0": {},
4332			"Etc/Greenwich": {},
4333			"Etc/UCT": {},
4334			"Etc/UTC": {},
4335			"Etc/Universal": {},
4336			"Etc/Zulu": {},
4337			"Europe/Amsterdam": { c : ["NL"] },
4338			"Europe/Andorra": { c : ["AD"] },
4339			"Europe/Astrakhan": { c : ["RU"] },
4340			"Europe/Athens": { c : ["GR"] },
4341			"Europe/Belfast": { c : ["GB"] },
4342			"Europe/Belgrade": { c : ["RS", "BA", "HR", "ME", "MK", "SI"] },
4343			"Europe/Berlin": { c : ["DE"] },
4344			"Europe/Bratislava": { c : ["SK"] },
4345			"Europe/Brussels": { c : ["BE"] },
4346			"Europe/Bucharest": { c : ["RO"] },
4347			"Europe/Budapest": { c : ["HU"] },
4348			"Europe/Busingen": { c : ["DE"] },
4349			"Europe/Chisinau": { c : ["MD"] },
4350			"Europe/Copenhagen": { c : ["DK"] },
4351			"Europe/Dublin": { c : ["IE"] },
4352			"Europe/Gibraltar": { c : ["GI"] },
4353			"Europe/Guernsey": { c : ["GG"] },
4354			"Europe/Helsinki": { c : ["FI", "AX"] },
4355			"Europe/Isle_of_Man": { c : ["IM"] },
4356			"Europe/Istanbul": { c : ["TR"] },
4357			"Europe/Jersey": { c : ["JE"] },
4358			"Europe/Kaliningrad": { c : ["RU"] },
4359			"Europe/Kiev": { c : ["UA"] },
4360			"Europe/Kirov": { c : ["RU"] },
4361			"Europe/Lisbon": { c : ["PT"] },
4362			"Europe/Ljubljana": { c : ["SI"] },
4363			"Europe/London": { c : ["GB", "GG", "IM", "JE"] },
4364			"Europe/Luxembourg": { c : ["LU"] },
4365			"Europe/Madrid": { c : ["ES"] },
4366			"Europe/Malta": { c : ["MT"] },
4367			"Europe/Mariehamn": { c : ["AX"] },
4368			"Europe/Minsk": { c : ["BY"] },
4369			"Europe/Monaco": { c : ["MC"] },
4370			"Europe/Moscow": { c : ["RU"] },
4371			"Europe/Nicosia": {},
4372			"Europe/Oslo": { c : ["NO", "SJ", "BV"] },
4373			"Europe/Paris": { c : ["FR"] },
4374			"Europe/Podgorica": { c : ["ME"] },
4375			"Europe/Prague": { c : ["CZ", "SK"] },
4376			"Europe/Riga": { c : ["LV"] },
4377			"Europe/Rome": { c : ["IT", "SM", "VA"] },
4378			"Europe/Samara": { c : ["RU"] },
4379			"Europe/San_Marino": { c : ["SM"] },
4380			"Europe/Sarajevo": { c : ["BA"] },
4381			"Europe/Saratov": { c : ["RU"] },
4382			"Europe/Simferopol": { c : ["RU", "UA"] },
4383			"Europe/Skopje": { c : ["MK"] },
4384			"Europe/Sofia": { c : ["BG"] },
4385			"Europe/Stockholm": { c : ["SE"] },
4386			"Europe/Tallinn": { c : ["EE"] },
4387			"Europe/Tirane": { c : ["AL"] },
4388			"Europe/Tiraspol": {},
4389			"Europe/Ulyanovsk": { c : ["RU"] },
4390			"Europe/Uzhgorod": { c : ["UA"] },
4391			"Europe/Vaduz": { c : ["LI"] },
4392			"Europe/Vatican": { c : ["VA"] },
4393			"Europe/Vienna": { c : ["AT"] },
4394			"Europe/Vilnius": { c : ["LT"] },
4395			"Europe/Volgograd": { c : ["RU"] },
4396			"Europe/Warsaw": { c : ["PL"] },
4397			"Europe/Zagreb": { c : ["HR"] },
4398			"Europe/Zaporozhye": { c : ["UA"] },
4399			"Europe/Zurich": { c : ["CH", "DE", "LI"] },
4400			Factory: {},
4401			GB: { c : ["GB"] },
4402			"GB-Eire": { c : ["GB"] },
4403			GMT: { c : ["AC"] },
4404			"GMT+0": {},
4405			"GMT-0": {},
4406			GMT0: {},
4407			Greenwich: {},
4408			HST: {},
4409			Hongkong: {},
4410			Iceland: {},
4411			"Indian/Antananarivo": { c : ["MG"] },
4412			"Indian/Chagos": { c : ["IO"] },
4413			"Indian/Christmas": { c : ["CX"] },
4414			"Indian/Cocos": { c : ["CC"] },
4415			"Indian/Comoro": { c : ["KM"] },
4416			"Indian/Kerguelen": { c : ["TF", "HM"] },
4417			"Indian/Mahe": { c : ["SC"] },
4418			"Indian/Maldives": { c : ["MV"] },
4419			"Indian/Mauritius": { c : ["MU"] },
4420			"Indian/Mayotte": { c : ["YT"] },
4421			"Indian/Reunion": { c : ["RE", "TF"] },
4422			Iran: {},
4423			Israel: {},
4424			Jamaica: {},
4425			Japan: {},
4426			Kwajalein: {},
4427			Libya: {},
4428			MET: {},
4429			MST: {},
4430			MST7MDT: {},
4431			"Mexico/BajaNorte": {},
4432			"Mexico/BajaSur": {},
4433			"Mexico/General": {},
4434			NZ: { c : ["NZ"] },
4435			"NZ-CHAT": {},
4436			Navajo: {},
4437			PRC: {},
4438			PST8PDT: {},
4439			"Pacific/Apia": { c : ["WS"] },
4440			"Pacific/Auckland": { c : ["NZ", "AQ"] },
4441			"Pacific/Bougainville": { c : ["PG"] },
4442			"Pacific/Chatham": { c : ["NZ"] },
4443			"Pacific/Chuuk": { c : ["FM"] },
4444			"Pacific/Easter": { c : ["CL"] },
4445			"Pacific/Efate": { c : ["VU"] },
4446			"Pacific/Enderbury": {},
4447			"Pacific/Fakaofo": { c : ["TK"] },
4448			"Pacific/Fiji": { c : ["FJ"] },
4449			"Pacific/Funafuti": { c : ["TV"] },
4450			"Pacific/Galapagos": { c : ["EC"] },
4451			"Pacific/Gambier": { c : ["PF"] },
4452			"Pacific/Guadalcanal": { c : ["SB"] },
4453			"Pacific/Guam": { c : ["GU", "MP"] },
4454			"Pacific/Honolulu": { c : ["US", "UM"] },
4455			"Pacific/Johnston": { c : ["UM"] },
4456			"Pacific/Kanton": { c : ["KI"] },
4457			"Pacific/Kiritimati": { c : ["KI"] },
4458			"Pacific/Kosrae": { c : ["FM"] },
4459			"Pacific/Kwajalein": { c : ["MH"] },
4460			"Pacific/Majuro": { c : ["MH"] },
4461			"Pacific/Marquesas": { c : ["PF"] },
4462			"Pacific/Midway": { c : ["UM"] },
4463			"Pacific/Nauru": { c : ["NR"] },
4464			"Pacific/Niue": { c : ["NU"] },
4465			"Pacific/Norfolk": { c : ["NF"] },
4466			"Pacific/Noumea": { c : ["NC"] },
4467			"Pacific/Pago_Pago": { c : ["AS", "UM"] },
4468			"Pacific/Palau": { c : ["PW"] },
4469			"Pacific/Pitcairn": { c : ["PN"] },
4470			"Pacific/Pohnpei": { c : ["FM"] },
4471			"Pacific/Ponape": {},
4472			"Pacific/Port_Moresby": { c : ["PG", "AQ"] },
4473			"Pacific/Rarotonga": { c : ["CK"] },
4474			"Pacific/Saipan": { c : ["MP"] },
4475			"Pacific/Samoa": { c : ["WS"] },
4476			"Pacific/Tahiti": { c : ["PF"] },
4477			"Pacific/Tarawa": { c : ["KI"] },
4478			"Pacific/Tongatapu": { c : ["TO"] },
4479			"Pacific/Truk": {},
4480			"Pacific/Wake": { c : ["UM"] },
4481			"Pacific/Wallis": { c : ["WF"] },
4482			"Pacific/Yap": {},
4483			Poland: {},
4484			Portugal: {},
4485			ROC: {},
4486			ROK: {},
4487			Singapore: { c : ["SG"] },
4488			Turkey: {},
4489			UCT: {},
4490			"US/Alaska": {},
4491			"US/Aleutian": {},
4492			"US/Arizona": { c : ["US"] },
4493			"US/Central": {},
4494			"US/East-Indiana": {},
4495			"US/Eastern": {},
4496			"US/Hawaii": { c : ["US"] },
4497			"US/Indiana-Starke": {},
4498			"US/Michigan": {},
4499			"US/Mountain": {},
4500			"US/Pacific": {},
4501			"US/Samoa": { c : ["WS"] },
4502			UTC: {},
4503			Universal: {},
4504			"W-SU": {},
4505			WET: {},
4506			Zulu: {
4507			}
4508		};
4509
4510		const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
4511
4512		if (timezone === "" || !timezone) {
4513			return null;
4514		}
4515
4516		return timezones[timezone].c[0];
4517	}
4518
4519	let utilsScriptLoaded;
4520
4521	em_setup_phone_inputs = async function ( container, overriding_options = {} ) {
4522		if ( !EM.phone ) return false;
4523		if( !utilsScriptLoaded ) {
4524			import( EM.url + '/includes/external/intl-tel-input/js/intlTelInputWithUtils.js' ).then( () => {
4525				utilsScriptLoaded = true;
4526				em_setup_phone_inputs( container );
4527			});
4528			return false;
4529		} // on initial load, we wait for scripts to load
4530		container.querySelectorAll('input.em-phone-intl[type="tel"]').forEach( function(input){
4531			// change name and allow a hidden field for submission
4532			let alt = document.createElement('input');
4533			let name = input.name;
4534			if( name ) {
4535				// check if there's an ending ] in the name if so modify the name within the last brackets
4536				let lastBracket = name.lastIndexOf(']');
4537				if( lastBracket > -1 ) {
4538					input.name = name.substring(0, lastBracket) + '_intl]';
4539				} else {
4540					input.name = name + '_intl';
4541				}
4542				alt.name = name;
4543			}
4544			input.classList.add('em-intl-tel');
4545			// copy all classes and remove ones we know we don't want
4546			alt.setAttribute('class', input.getAttribute('class') + ' em-intl-tel-full');
4547			alt.classList.remove('em-intl-tel');
4548			alt.type = 'hidden';
4549			if( input.id ) {
4550				alt.id = input.id + '-full'
4551			}
4552			alt.value = input.value;
4553			// add data-name to the full input if it exists, for use in dynamic input forms for JS submission within forms
4554			if( input.getAttribute('data-name') ) {
4555				alt.setAttribute('data-name', input.getAttribute('data-name'));
4556				input.removeAttribute('data-name');
4557			}
4558			input.after(alt);
4559
4560			let default_options = Object.assign({
4561				autoPlaceholder: 'aggressive',
4562				separateDialCode : true,
4563			}, EM.phone.options);
4564			let options = Object.assign( default_options, overriding_options );
4565
4566			if( EM.phone.detectJS || options.detectJS ) {
4567				let country = getCountry();
4568				if( country ) {
4569					options.initialCountry = country;
4570				} else if ( EM.phone.initialCountry ) {
4571					options.initialCountry = EM.phone.initialCountry;
4572				}
4573			}
4574			if( options.onlyCountries ) {
4575				if( Array.isArray(options.onlyCountries) && options.onlyCountries.length > 0 ) {
4576					// make sure initial country is not excluded
4577					if (!options.onlyCountries.includes(options.initialCountry && options.initialCountry)) {
4578						options.onlyCountries.push(options.initialCountry);
4579					}
4580				} else {
4581					options.onlyCountries = [];
4582				}
4583			}
4584
4585			let iti = EM.intlTelInput( input, options);
4586			if ( !input?.checkVisibility() ) {
4587				// if the input is hidden, we need some trickery to correctly obtain the padding by adding a clone of the minimum into the array
4588				// intl-tel-input does this, but because it's not wrapped in an em element the padding isn't correctly styled via CSS
4589				let body = document.body;
4590				let container = document.createElement('div');
4591				container.style.visibility = "hidden";
4592				container.classList.add('em');
4593				body.appendChild( container );
4594				let containerClone = input.parentNode.cloneNode( false );
4595				container.appendChild( containerClone );
4596				let countryContainerClone = iti.ui.countryContainer.cloneNode();
4597				containerClone.appendChild( countryContainerClone );
4598				let selectedCountryClone = iti.ui.selectedCountry.cloneNode( true );
4599				countryContainerClone.appendChild( selectedCountryClone );
4600				let width = selectedCountryClone.offsetWidth + 12; // add extra padding
4601				input.style.setProperty('padding-left', width + 'px', 'important' );
4602				body.removeChild( container );
4603			}
4604			//iti.countryContainer.querySelector('button')?.setAttribute('data-nostyle', '');
4605			let pixels = parseInt( input.style.paddingLeft.replace('px', '') ); // pad this an extra px
4606			input.style.setProperty('padding-left', pixels + 'px', 'important' );
4607
4608			// do some basic inline validation
4609			input.addEventListener('change', function( e ){
4610				alt.value = iti.getNumber();
4611				if ( input.value.trim() ) {
4612					let wrapper = input.closest('.iti')
4613					if ( iti.isValidNumber() ) {
4614						wrapper.classList.remove("invalid-number");
4615						if ( wrapper.nextElementSibling && wrapper.nextElementSibling.classList.contains('em-inline-error') ) {
4616							wrapper.nextElementSibling.remove();
4617						}
4618					} else {
4619						wrapper.classList.add("invalid-number");
4620						const errorCode = iti.getValidationError();
4621						let errorMsg;
4622						if( !(wrapper.nextElementSibling && wrapper.nextElementSibling.classList.contains('em-inline-error')) ) {
4623							// create a div em-form-error class name and append after input
4624							errorMsg = document.createElement('div');
4625							errorMsg.classList.add('em-inline-error');
4626							wrapper.after(errorMsg);
4627						} else {
4628							errorMsg = wrapper.nextElementSibling;
4629						}
4630						errorMsg.innerHTML = '<span class="em-icon"></span> ' + EM.phone.error;
4631						errorMsg.classList.remove("hide");
4632					}
4633				}
4634			});
4635			
4636			// trigger changes
4637			input.addEventListener('countrychange', function( e ){
4638				alt.value = iti.getNumber();
4639				// check input padding inline style and set it to important
4640				if( input.getAttribute('style') ) {
4641					let pixels = parseInt(input.style.paddingLeft.replace('px', '')); // pad this an extra px
4642					input.style.setProperty('padding-left', pixels + 'px', 'important' );
4643				}
4644			});
4645
4646			input.addEventListener('open:countrydropdown', function( e ) {
4647				document.querySelectorAll('.iti.iti--container.iti--fullscreen-popup').forEach( function( el ) {
4648					if ( !el.closest('.em') ) {
4649						// wrap in an .em div
4650						let div = document.createElement('div');
4651						div.classList.add('em');
4652						el.parentNode.insertBefore(div, el);
4653						div.appendChild(el);
4654						el.querySelector('input.iti__search-input')?.focus();
4655					}
4656				});
4657			});
4658
4659		});
4660	};
4661
4662	em_unsetup_phone_inputs = function( container ) {
4663		container.querySelectorAll( 'input.em-phone-intl[type="tel"]' ).forEach( function(el){
4664			let iti = EM.intlTelInput?.getInstance(el);
4665			if ( iti ) {
4666				iti.destroy();
4667				// remove alt field as well and unset the _intl suffix, which may have a trailing ] so needs a preg
4668				el.name = el.name.replace(/_intl]$/, ']').replace(/_intl$/, '');
4669				el.parentElement.querySelector('input.em-intl-tel-full')?.remove();
4670			}
4671		});
4672	};
4673}
4674
4675/*!
4676 * jquery-timepicker v1.13.16 - Copyright (c) 2020 Jon Thornton - https://www.jonthornton.com/jquery-timepicker/
4677 * Did a search/replace of timepicker to em_timepicker to prevent conflicts.
4678 */
4679(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}
4679function _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);var 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)))}}
4679var selectTimeEvent=new Event("selectTime");if(this.selectedValue!=value){this.selectedValue=value;var changeTimeEvent=new Event("changeTime");var 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(sett
4679ings.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;if(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>
4679settings.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;if(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;
4679if(_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
4679))}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})})();
4680
4681/*!
4682 * flatpickr v4.6.13,, @license MIT
vendor: 50,644 bytes, lines 4683-4684
4683 */
4684!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,345 bytes, lines 4684-4685
4684
4685(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;
4685index<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});
4686
4687/*!
4688 * popperjs v2.11.5 - MIT License - https://github.com/popperjs/popper-core
4689 */
4690!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: 17,313 bytes, lines 4690-4694
4690wport||[],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];Object.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})}));
4691
4692/*!
4693 * tippy.js v6.3.7 - MIT License - https://github.com/atomiks/tippyjs
4694 */
vendor: 25,668 bytes, line 4695
4695!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}));
4696
4697/**
4698 * Selectize (v0.15.2)
4699 * https://selectize.dev
4700 */
4701(function(root,factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else if(typeof module==="object"&&typeof module.exports==="object"){module.exports=factory(require("jquery"))}else{root.EM_Selectize=factory(root.jQuery)}})(this,function($){"use strict";var highlight=function($element,pattern){if(typeof pattern==="string"&&!pattern.length)return;var regex=typeof pattern==="string"?new RegExp(pattern,"i"):pattern;var highlight=function(node){var skip=0;if(node.nodeType===3){var pos=node.data.search(regex);if(pos>=0&&node.data.length>0){var match=node.data.match(regex);var spannode=document.createElement("span");spannode.className="highlight";var middlebit=node.splitText(pos);var endbit=middlebit.splitText(match[0].length);var middleclone=middlebit.cloneNode(true);spannode.appendChild(middleclone);middlebit.parentNode.replaceChild(spannode,middlebit);skip=1}}else if(node.nodeType===1&&node.childNodes&&!/(script|style)/i.test(node.tagName)&&(node.className!=="highlight"||node.tagName!=="SPAN")){for(var i=0;i<node.childNodes.length;++i){i+=highlight(node.childNodes[i])}}return skip};return $element.each(function(){highlight(this)})};$.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()};var MicroEvent=function(){};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;if(n===0)return delete this._events;if(n===1)return delete this._events[event];this._events=this._events||{};if(event in this._events===false)return;this._events[event].splice(this._events[event].indexOf(fct),1)},trigger:function(event){const events=this._events=this._events||{};if(event in events===false)return;for(var i=0;i<events[event].length;i++){events[event][i].apply(this,Array.prototype.slice.call(arguments,1))}}};MicroEvent.mixin=function(destObject){var props=["on","off","trigger"];for(var i=0;i<props.length;i++){destObject.prototype[props[i]]=MicroEvent.prototype[props[i]]}};var MicroPlugin={};MicroPlugin.mixin=function(Interface){Interface.plugins={};Interface.prototype.initializePlugins=function(plugins){var i,n,key;var self=this;var queue=[];self.plugins={names:[],settings:{},requested:{},loaded:{}};if(utils.isArray(plugins)){for(i=0,n=plugins.length;i<n;i++){if(typeof plugins[i]==="string"){queue.push(plugins[i])}else{self.plugins.settings[plugins[i].name]=plugins[i].options;queue.push(plugins[i].name)}}}else if(plugins){for(key in plugins){if(plugins.hasOwnProperty(key)){self.plugins.settings[key]=plugins[key];queue.push(key)}}}while(queue.length){self.require(queue.shift())}};Interface.prototype.loadPlugin=function(name){var self=this;var plugins=self.plugins;var plugin=Interface.plugins[name];if(!Interface.plugins.hasOwnProperty(name)){throw new Error('Unable to find "'+name+'" plugin')}plugins.requested[name]=true;plugins.loaded[name]=plugin.fn.apply(self,[self.plugins.settings[name]||{}]);plugins.names.push(name)};Interface.prototype.require=function(name){var self=this;var plugins=self.plugins;if(!self.plugins.loaded.hasOwnProperty(name)){if(plugins.requested[name]){throw new Error('Plugin has circular dependency ("'+name+'")')}self.loadPlugin(name)}return plugins.loaded[name]};Interface.define=function(name,fn){Interface.plugins[name]={name:name,fn:fn}}};var utils={isArray:Array.isArray||function(vArg){return Object.prototype.toString.call(vArg)==="[object Array]"}};var Sifter=function(items,settings){this.items=items;this.settings=settings||{diacritics:true}};Sifter.prototype.tokenize=function(query,respect_word_boundaries){query=trim(String(query||"").toLowerCase());if(!query||!query.length)return[];var i,n,regex,letter;var tokens=[];var words=query.split(/ +/);for(i=0,n=words.length;i<n;i++){regex=escape_regex(words[i]);if(this.settings.diacritics){for(letter in DIACRITICS){if(DIACRITICS.hasOwnProperty(letter)){regex=regex.replace(new RegExp(letter,"g"),DIACRITICS[letter])}}}if(respect_word_boundaries)regex="\\b"+regex;tokens.push({string:words[i],regex:new RegExp(regex,"i")})}return tokens}
4701;Sifter.prototype.iterator=function(object,callback){var iterator;if(is_array(object)){iterator=Array.prototype.forEach||function(callback){for(var i=0,n=this.length;i<n;i++){callback(this[i],i,this)}}}else{iterator=function(callback){for(var key in this){if(this.hasOwnProperty(key)){callback(this[key],key,this)}}}}iterator.apply(object,[callback])};Sifter.prototype.getScoreFunction=function(search,options){var self,fields,tokens,token_count,nesting;self=this;search=self.prepareSearch(search,options);tokens=search.tokens;fields=search.options.fields;token_count=tokens.length;nesting=search.options.nesting;var scoreValue=function(value,token){var score,pos;if(!value)return 0;value=String(value||"");pos=value.search(token.regex);if(pos===-1)return 0;score=token.string.length/value.length;if(pos===0)score+=.5;return score};var scoreObject=function(){var field_count=fields.length;if(!field_count){return function(){return 0}}if(field_count===1){return function(token,data){return scoreValue(getattr(data,fields[0],nesting),token)}}return 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}}();if(!token_count){return function(){return 0}}if(token_count===1){return function(data){return scoreObject(tokens[0],data)}}if(search.options.conjunction==="and"){return function(data){var score;for(var i=0,sum=0;i<token_count;i++){score=scoreObject(tokens[i],data);if(score<=0)return 0;sum+=score}return sum/token_count}}else{return function(data){for(var i=0,sum=0;i<token_count;i++){sum+=scoreObject(tokens[i],data)}return sum/token_count}}};Sifter.prototype.getSortFunction=function(search,options){var i,n,self,field,fields,fields_count,multiplier,multipliers,get_field,implicit_score,sort;self=this;search=self.prepareSearch(search,options);sort=!search.query&&options.sort_empty||options.sort;get_field=function(name,result){if(name==="$score")return result.score;return getattr(self.items[result.id],name,options.nesting)};fields=[];if(sort){for(i=0,n=sort.length;i<n;i++){if(search.query||sort[i].field!=="$score"){fields.push(sort[i])}}}if(search.query){implicit_score=true;for(i=0,n=fields.length;i<n;i++){if(fields[i].field==="$score"){implicit_score=false;break}}if(implicit_score){fields.unshift({field:"$score",direction:"desc"})}}else{for(i=0,n=fields.length;i<n;i++){if(fields[i].field==="$score"){fields.splice(i,1);break}}}multipliers=[];for(i=0,n=fields.length;i<n;i++){multipliers.push(fields[i].direction==="desc"?-1:1)}fields_count=fields.length;if(!fields_count){return null}else if(fields_count===1){field=fields[0].field;multiplier=multipliers[0];return function(a,b){return multiplier*cmp(get_field(field,a),get_field(field,b))}}else{return function(a,b){var i,result,a_value,b_value,field;for(i=0;i<fields_count;i++){field=fields[i].field;result=multipliers[i]*cmp(get_field(field,a),get_field(field,b));if(result)return result}return 0}}};Sifter.prototype.prepareSearch=function(query,options){if(typeof query==="object")return query;options=extend({},options);var option_fields=options.fields;var option_sort=options.sort;var option_sort_empty=options.sort_empty;if(option_fields&&!is_array(option_fields))options.fields=[option_fields];if(option_sort&&!is_array(option_sort))options.sort=[option_sort];if(option_sort_empty&&!is_array(option_sort_empty))options.sort_empty=[option_sort_empty];return{options:options,query:String(query||"").toLowerCase(),tokens:this.tokenize(query,options.respect_word_boundaries),total:0,items:[]}};Sifter.prototype.search=function(query,options){var self=this,value,score,search,calculateScore;var fn_sort;var fn_score;search=this.prepareSearch(query,options);options=search.options;query=search.query;fn_score=options.score||self.getScoreFunction(search);if(query.length){self.iterator(self.items,function(item,id){score=fn_score(item);if(options.filter===false||score>0){search.items.push({score:score,id:id})}})}else{self.iterator(self.items,function(item,id){search.items.push({score:1,id:id})})}fn_sort=self.getSortFunction(search,options);if(fn_sort)search.items.sort(fn_sort);search.total=search.items.length;if(typeof options.limit==="number"){search.items=search.items.slice(0,options.limit)}return search};var cmp=function(a,b){if(typeof a==="number"&&typeof b==="number"){return a>b?1:a<b?-1:0}a=asciifold(String(a||""));b=asciifold(String(b||""));if(a>b)return 1;if(b>a)return-1;return 0};var extend=function(a,b){var i,n,k,object;for(i=1,n=arguments.length;i<n;i++){object=arguments[i];if(!object)continue;for(k in object){if(object.hasOwnProperty(k)){a[k]=object[k]}}}return a};var getattr=function(obj,name,nesting){if(!obj||!name)return;if(!nesting)return obj[name];var names=name.split(".");while(names.length&&(obj=obj[names.shift()]));return obj};var trim=function(str){return(str+"").replace(/^\s+|\s+$|/g,"")};var escape_regex=function(str){return(str+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")};var is_array=Array.isArray||typeof $!=="undefined"&&$.isArray||function(object){return Object.prototype.toString.call(object)==="[object Array]"};var 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ØøÖöÓóÒòÔôǑǒŐőŎŏȮȯỌọƟɵƠơỎỏŌō
4701ÕõǪǫȌȍՕօ]",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ŹźẐẑŽžŻżẒẓẔẕƵƶ]"};var asciifold=function(){var i,n,k,chunk;var foreignletters="";var lookup={};for(k in DIACRITICS){if(DIACRITICS.hasOwnProperty(k)){chunk=DIACRITICS[k].substring(2,DIACRITICS[k].length-1);foreignletters+=chunk;for(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()}}();function uaDetect(platform,re){if(navigator.userAgentData){return platform===navigator.userAgentData.platform}return re.test(navigator.userAgent)}var IS_MAC=uaDetect("macOS",/Mac/);var KEY_A=65;var KEY_COMMA=188;var KEY_RETURN=13;var KEY_ESC=27;var KEY_LEFT=37;var KEY_UP=38;var KEY_P=80;var KEY_RIGHT=39;var KEY_DOWN=40;var KEY_N=78;var KEY_BACKSPACE=8;var KEY_DELETE=46;var KEY_SHIFT=16;var KEY_CMD=IS_MAC?91:17;var KEY_CTRL=IS_MAC?18:17;var KEY_TAB=9;var TAG_SELECT=1;var TAG_INPUT=2;var SUPPORTS_VALIDITY_API=!uaDetect("Android",/android/i)&&!!document.createElement("input").validity;var isset=function(object){return typeof object!=="undefined"};var hash_key=function(value){if(typeof value==="undefined"||value===null)return null;if(typeof value==="boolean")return value?"1":"0";return value+""};var escape_html=function(str){return(str+"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")};var escape_replace=function(str){return(str+"").replace(/\$/g,"$$$$")};var hook={};hook.before=function(self,method,fn){var original=self[method];self[method]=function(){fn.apply(self,arguments);return original.apply(self,arguments)}};hook.after=function(self,method,fn){var original=self[method];self[method]=function(){var result=original.apply(self,arguments);fn.apply(self,arguments);return result}};var once=function(fn){var called=false;return function(){if(called)return;called=true;fn.apply(this,arguments)}};var debounce=function(fn,delay){var timeout;return function(){var self=this;var args=arguments;window.clearTimeout(timeout);timeout=window.setTimeout(function(){fn.apply(self,args)},delay)}};var debounce_events=function(self,types,fn){var type;var trigger=self.trigger;var event_args={};self.trigger=function(){var type=arguments[0];if(types.indexOf(type)!==-1){event_args[type]=arguments}else{return trigger.apply(self,arguments)}};fn.apply(self,[]);self.trigger=trigger;for(type in event_args){if(event_args.hasOwnProperty(type)){trigger.apply(self,event_args[type])}}};var watchChildEvent=function($parent,event,selector,fn){$parent.on(event,selector,function(e){var child=e.target;while(child&&child.parentNode!==$parent[0]){child=child.parentNode}e.currentTarget=child;return fn.apply(this,[e])})};var getInputSelection=function(input){var result={};if(input===undefined){console.warn("WARN getInputSelection cannot locate input control");return result}if("selectionStart"in input){result.start=input.selectionStart;result.length=input.selectionEnd-result.start}else if(document.selection){input.focus();var sel=document.selection.createRange();var selLen=document.selection.createRange().text.length;sel.moveStart("character",-input.value.length);result.start=sel.text.length-selLen;result.length=selLen}return result};var 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)};var measureString=function(str,$parent){if(!str){return 0}if(!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"]);return Selectize.$testInput.width()};var autoGrow=function($input){var currentWidth=null;var update=function(e,options){var value,keyCode,printable,width;var placeholder,placeholderWidth;var shift,character,selection;e=e||window.event||{};options=options||{};if(e.metaKey||e.altKey)return;if(!options.force&&$input.data("grow")===false)return;value=$input.val();if(e.type&&e.type.toLowerCase()==="keydown"){keyCode=e.keyCode;printable=keyCode>=48&&keyCode<=57||keyCode>=65&&keyCode<=90||keyCode>=96&&keyCode<=111||keyCode>=186&&keyCode<=222||keyCode===32;if(keyCode===KEY_DELETE||keyCode===KEY_BACKSPACE){selection=getInputSelection($input[0]);if(selection.length){value=value.substring(0,selection.start)+value.substring(selection.start+selection.length)}else if(keyCode===KEY_BACKSPACE&&selection.start){value=value.substring(0,selection.start-1)+value.substring(selection.start+1)}else if(keyCode===KEY_DELETE&&typeof selection.start!=="undefined"){value=value.substring(0,selection.start)+value.substring(selection.start+1)}}else if(printable){shift=e.shiftKey;character=String.fromCharCode(e.keyCode);if(shift)character=character.toUpperCase();else character=character.toLowerCase();value+=character}}placeholder=$input.attr("placeholder");if(placeholder){placeholderWidth=measureString(placeholder,$input)+4}else{placeholderWidth=0}width=Math.max(measureString(value,$input),placeholderWidth)+4;if(width!==currentWidth){currentWidth=width;$input.width(width);$input.triggerHandler("resize")}};
4701$input.on("keydown keyup update blur",update);update()};var domToString=function(d){var tmp=document.createElement("div");tmp.appendChild(d.cloneNode(true));return tmp.innerHTML};var logError=function(message,options){if(!options)options={};var component="Selectize";console.error(component+": "+message);if(options.explanation){if(console.group)console.group();console.error(options.explanation);if(console.group)console.groupEnd()}};var isJSON=function(data){try{JSON.parse(str)}catch(e){return false}return true};var Selectize=function($input,settings){var key,i,n,dir,input,self=this;input=$input[0];input.selectize=self;var computedStyle=window.getComputedStyle&&window.getComputedStyle(input,null);dir=computedStyle?computedStyle.getPropertyValue("direction"):input.currentStyle&&input.currentStyle.direction;dir=dir||$input.parents("[dir]:first").attr("dir")||"";$.extend(self,{order:0,settings:settings,$input:$input,tabIndex:$input.attr("tabindex")||"",tagType:input.tagName.toLowerCase()==="select"?TAG_SELECT:TAG_INPUT,rtl:/rtl/i.test(dir),eventNS:".selectize"+ ++Selectize.count,highlightedValue:null,isBlurring:false,isOpen:false,isDisabled:false,isRequired:$input.is("[required]"),isInvalid:false,isLocked:false,isFocused:false,isInputHidden:false,isSetup:false,isShiftDown:false,isCmdDown:false,isCtrlDown:false,ignoreFocus:false,ignoreBlur:false,ignoreHover:false,hasOptions:false,currentResults:null,lastValue:"",lastValidValue:"",lastOpenTarget:false,caretPos:0,loading:0,loadedSearches:{},isDropdownClosing:false,$activeOption:null,$activeItems:[],optgroups:{},options:{},userOptions:{},items:[],renderCache:{},onSearchChange:settings.loadThrottle===null?self.onSearchChange:debounce(self.onSearchChange,settings.loadThrottle)});self.sifter=new Sifter(this.options,{diacritics:settings.diacritics});if(self.settings.options){for(i=0,n=self.settings.options.length;i<n;i++){self.registerOption(self.settings.options[i])}delete self.settings.options}if(self.settings.optgroups){for(i=0,n=self.settings.optgroups.length;i<n;i++){self.registerOptionGroup(self.settings.optgroups[i])}delete self.settings.optgroups}self.settings.mode=self.settings.mode||(self.settings.maxItems===1?"single":"multi");if(typeof self.settings.hideSelected!=="boolean"){self.settings.hideSelected=self.settings.mode==="multi"}self.initializePlugins(self.settings.plugins);self.setupCallbacks();self.setupTemplates();self.setup()};MicroEvent.mixin(Selectize);MicroPlugin.mixin(Selectize);$.extend(Selectize.prototype,{setup:function(){var self=this;var settings=self.settings;var eventNS=self.eventNS;var $window=$(window);var $document=$(document);var $input=self.$input;var $wrapper;var $control;var $control_input;var $dropdown;var $dropdown_content;var $dropdown_parent;var inputMode;var timeout_blur;var timeout_focus;var classes;var classes_plugins;var inputId;inputMode=self.settings.mode;classes=$input.attr("class")||"";$wrapper=$("<div>
4701").addClass(settings.wrapperClass).addClass(classes+" selectize-control").addClass(inputMode);$control=$("<div>").addClass(settings.inputClass+" selectize-input items").appendTo($wrapper);$control_input=$('<input type="select-one" autocomplete="new-password" autofill="no" />').appendTo($control).attr("tabindex",$input.is(":disabled")?"-1":self.tabIndex);$dropdown_parent=$(settings.dropdownParent||$wrapper);$dropdown=$("<div>").addClass(settings.dropdownClass).addClass(inputMode+" selectize-dropdown").hide().appendTo($dropdown_parent);$dropdown_content=$("<div>").addClass(settings.dropdownContentClass+" selectize-dropdown-content").attr("tabindex","-1").appendTo($dropdown);if(inputId=$input.attr("id")){$control_input.attr("id",inputId+"-selectized");$("label[for='"+inputId+"']").attr("for",inputId+"-selectized")}if(self.settings.copyClassesToDropdown){$dropdown.addClass(classes)}$wrapper.css({width:$input[0].style.width});if(self.plugins.names.length){classes_plugins="plugin-"+self.plugins.names.join(" plugin-");
4701$wrapper.addClass(classes_plugins);$dropdown.addClass(classes_plugins)}if((settings.maxItems===null||settings.maxItems>1)&&self.tagType===TAG_SELECT){$input.attr("multiple","multiple")}if(self.settings.placeholder){$control_input.attr("placeholder",settings.placeholder)}if(!self.settings.search){$control_input.attr("readonly",true);$control_input.attr("inputmode","none");$control.css("cursor","pointer")}if(!self.settings.splitOn&&self.settings.delimiter){var delimiterEscaped=self.settings.delimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");self.settings.splitOn=new RegExp("\\s*"+delimiterEscaped+"+\\s*")}if($input.attr("autocorrect")){$control_input.attr("autocorrect",$input.attr("autocorrect"))}if($input.attr("autocapitalize")){$control_input.attr("autocapitalize",$input.attr("autocapitalize"))}if($input.is("input")){$control_input[0].type=$input[0].type}self.$wrapper=$wrapper;self.$control=$control;self.$control_input=$control_input;self.$dropdown=$dropdown;self.$dropdown_content=$dropdown_content;$dropdown.on("mouseenter mousedown mouseup click","[data-disabled]>[data-selectable]",function(e){e.stopImmediatePropagation()});$dropdown.on("mouseenter","[data-selectable]",function(){return self.onOptionHover.apply(self,arguments)});$dropdown.on("mouseup click","[data-selectable]",function(){return self.onOptionSelect.apply(self,arguments)});watchChildEvent($control,"mouseup","*:not(input)",function(){return self.onItemSelect.apply(self,arguments)});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){if(self.$control_input.val()!==""||self.settings.openOnFocus){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,[])},focus:function(){self.ignoreBlur=false;return 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){if(e.keyCode===KEY_CTRL)self.isCtrlDown=false;if(e.keyCode===KEY_SHIFT)self.isShiftDown=false;if(e.keyCode===KEY_CMD)self.isCmdDown=false});$document.on("mousedown"+eventNS,function(e){if(self.isFocused){if(e.target===self.$dropdown[0]||e.target.parentNode===self.$dropdown[0]){return false}if(!self.$dropdown.has(e.target).length&&e.target!==self.$control[0]){self.blur(e.target)}}});$window.on(["scroll"+eventNS,"resize"+eventNS].join(" "),function(){if(self.isOpen){self.positionDropdown.apply(self,arguments)}});$window.on("mousemove"+eventNS,function(){self.ignoreHover=self.settings.ignoreHover});var inputPlaceholder=$("<div></div>");var inputChildren=$input.children().detach();$input.replaceWith(inputPlaceholder);inputPlaceholder.replaceWith($input);this.revertSettings={$children:inputChildren,tabindex:$input.attr("tabindex")};$input.attr("tabindex",-1).hide().after(self.$wrapper);if(Array.isArray(settings.items)){self.lastValidValue=settings.items;self.setValue(settings.items);delete settings.items}if(SUPPORTS_VALIDITY_API){$input.on("invalid"+eventNS,function(e){e.preventDefault();self.isInvalid=true;self.refreshState()})}self.updateOriginalInput();self.refreshItems();self.refreshState();self.updatePlaceholder();self.isSetup=true;if($input.is(":disabled")){self.disable()}self.on("change",this.onChange);$input.data("selectize",self);$input.addClass("selectized");self.trigger("initialize");if(settings.preload===true){self.onSearchChange("")}},setupTemplates:function(){var self=this;var field_label=self.settings.labelField;var field_value=self.settings.valueField;var field_optgroup=self.settings.optgroupLabelField;var templates={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){var classes=data.classes?" "+data.classes:"";classes+=data[field_value]===""?" selectize-dropdown-emptyoptionlabel":"";var styles=data.styles?' style="'+data.styles+'"':"";return"<div"+styles+' class="option'+classes+'">'+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>&#x2026;</div>"}};self.settings.render=$.extend({},templates,self.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){if(callbacks.hasOwnProperty(key)){fn=this.settings[callbacks[key]];if(fn)this.on(key,fn)}}},onClick:function(e){var self=this;if(self.isDropdownClosing){return}if(!self.isFocused||!self.isOpen){self.focus();e.preventDefault()}},onMouseDown:function(e){var self=this;var defaultPrevented=e.isDefaultPrevented();var $target=$(e.target);if(!self.isFocused){if(!defaultPrevented){window.setTimeout(function(){self.focus()},0)}}if(e.target!==self.$control_input[0]||self.$control_input.val()===""){if(self.settings.mode==="single"){self.isOpen?self.close():self.open()}else{if(!defaultPrevented){self.setActiveItem(null)}if(!self.settings.openOnFocus){if(self.isOpen&&e.target===self.lastOpenTarget){self.close();self.lastOpenTarget=false}else if(!self.isOpen){self.refreshOptions();self.open();self.lastOpenTarget=e.target}else{self.lastOpenTarget=e.target}}}return false}},onChange:function(){var self=this;if(self.getValue()!==""){self.lastValidValue=self.getValue()}this.$input.trigger("input");this.$input.trigger("change")},onPaste:function(e){var self=this;if(self.isFull()||self.isInputHidden||self.isLocked){e.preventDefault();return}if(self.settings.splitOn){setTimeout(function(){var pastedText=self.$control_input.val();if(!pastedText.match(self.settings.splitOn)){return}var splitInput=pastedText.trim().split(self.settings.splitOn);for(var 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);if(this.settings.create&&this.settings.mode==="multi"&&character===this.settings.delimiter){this.createItem();e.preventDefault();return false}},onKeyDown:function(e){var isInput=e.target===this.$control_input[0];var self=this;if(self.isLocked){if(e.keyCode!==KEY_TAB){e.preventDefault()}return}switch(e.keyCode){case KEY_A:if(self.isCmdDown){self.selectAll();return}break;case KEY_ESC:if(self.isOpen){e.preventDefault();e.stopPropagation();self.close()}return;case KEY_N:if(!e.ctrlKey||e.altKey)break;case KEY_DOWN:if(!self.isOpen&&self.hasOptions){self.open()}else if(self.$activeOption){self.ignoreHover=true;var $next=self.getAdjacentOption(self.$activeOption,1);if($next.length)self.setActiveOption($next,true,true)}e.preventDefault();return;case KEY_P:if(!e.ctrlKey||e.altKey)break;case KEY_UP:if(self.$activeOption){self.ignoreHover=true;var $prev=self.getAdjacentOption(self.$activeOption,-1);if($prev.length)self.setActiveOption($prev,true,true)}e.preventDefault();return;case KEY_RETURN:if(self.isOpen&&self.$activeOption){self.onOptionSelect({currentTarget:self.$activeOption});e.preventDefault()}return;case KEY_LEFT:self.advanceSelection(-1,e);return;case KEY_RIGHT:self.advanceSelection(1,e);return;case KEY_TAB:if(self.settings.selectOnTab&&self.isOpen&&self.$activeOption){self.onOptionSelect({currentTarget:self.$activeOption});if(!self.isFull()){e.preventDefault()}}if(self.settings.create&&self.createItem()&&self.settings.showAddOptionOnCreate){e.preventDefault()}return;case KEY_BACKSPACE:case KEY_DELETE:self.deleteSelection(e);return}if((self.isFull()||self.isInputHidden)&&!(IS_MAC?e.metaKey:e.ctrlKey)){e.preventDefault();return}},onInput:function(e){var self=this;var value=self.$control_input.val()||"";if(self.lastValue!==value){self.lastValue=value;self.onSearchChange(value);self.refreshOptions();self.trigger("type",value)}},onSearchChange:function(value){var self=this;var fn=self.settings.load;if(!fn)return;if(self.loadedSearches.hasOwnProperty(value))return;self.loadedSearches[value]=true;self.load(function(callback){fn.apply(self,[value,callback])})},onFocus:function(e){var self=this;var wasFocused=self.isFocused;if(self.isDisabled){self.blur();e&&e.preventDefault();return false}if(self.ignoreFocus)return;self.isFocused=true;if(self.settings.preload==="focus")self.onSearchChange("");
4701if(!wasFocused)self.trigger("focus");if(!self.$activeItems.length){self.showInput();self.setActiveItem(null);self.refreshOptions(!!self.settings.openOnFocus)}self.refreshState()},onBlur:function(e,dest){var self=this;if(!self.isFocused)return;self.isFocused=false;if(self.ignoreFocus){return}var deactivate=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=false;self.ignoreFocus=false;self.trigger("blur")};self.isBlurring=true;self.ignoreFocus=true;if(self.settings.create&&self.settings.createOnBlur){self.createItem(null,false,deactivate)}else{deactivate()}},onOptionHover:function(e){if(this.ignoreHover)return;this.setActiveOption(e.currentTarget,false)},onOptionSelect:function(e){var value,$target,$option,self=this;if(e.preventDefault){e.preventDefault();e.stopPropagation()}$target=$(e.currentTarget);if($target.hasClass("create")){self.createItem(null,function(){if(self.settings.closeAfterSelect){self.close()}})}else{value=$target.attr("data-value");if(typeof value!=="undefined"){self.lastQuery=null;self.setTextboxValue("");self.addItem(value);if(self.settings.closeAfterSelect){self.close()}else if(!self.settings.hideSelected&&e.type&&/mouse/.test(e.type)){self.setActiveOption(self.getOption(value))}}}},onItemSelect:function(e){var self=this;if(self.isLocked)return;if(self.settings.mode==="multi"){e.preventDefault();self.setActiveItem(e.currentTarget,e)}},load:function(fn){var self=this;var $wrapper=self.$wrapper.addClass(self.settings.loadingClass);self.loading++;fn.apply(self,[function(results){self.loading=Math.max(self.loading-1,0);if(results&&results.length){self.addOption(results);self.refreshOptions(self.isFocused&&!self.isInputHidden)}if(!self.loading){$wrapper.removeClass(self.settings.loadingClass)}self.trigger("load",results)}])},getTextboxValue:function(){var $input=this.$control_input;return $input.val()},setTextboxValue:function(value){var $input=this.$control_input;var changed=$input.val()!==value;if(changed){$input.val(value).triggerHandler("update");this.lastValue=value}},getValue:function(){if(this.tagType===TAG_SELECT&&this.$input.attr("multiple")){return this.items}else{return this.items.join(this.settings.delimiter)}},setValue:function(value,silent){const items=Array.isArray(value)?value:[value];if(items.join("")===this.items.join("")){return}var events=silent?[]:["change"];debounce_events(this,events,function(){this.clear(silent);this.addItems(value,silent)})},setMaxItems:function(value){if(value===0)value=null;this.settings.maxItems=value;this.settings.mode=this.settings.mode||(this.settings.maxItems===1?"single":"multi");this.refreshState()},setActiveItem:function($item,e){var self=this;var eventName;var i,idx,begin,end,item,swap;var $last;if(self.settings.mode==="single")return;$item=$($item);if(!$item.length){$(self.$activeItems).removeClass("active");self.$activeItems=[];if(self.isFocused){self.showInput()}return}eventName=e&&e.type.toLowerCase();if(eventName==="mousedown"&&self.isShiftDown&&self.$activeItems.length){$last=self.$control.children(".active:last");begin=Array.prototype.indexOf.apply(self.$control[0].childNodes,[$last[0]]);end=Array.prototype.indexOf.apply(self.$control[0].childNodes,[$item[0]]);if(begin>end){swap=begin;begin=end;end=swap}for(i=begin;i<=end;i++){item=self.$control[0].childNodes[i];if(self.$activeItems.indexOf(item)===-1){$(item).addClass("active");self.$activeItems.push(item)}}e.preventDefault()}else if(eventName==="mousedown"&&self.isCtrlDown||eventName==="keydown"&&this.isShiftDown){if($item.hasClass("active")){idx=self.$activeItems.indexOf($item[0]);self.$activeItems.splice(idx,1);$item.removeClass("active")}else{self.$activeItems.push($item.addClass("active")[0])}}else{$(self.$activeItems).removeClass("active");self.$activeItems=[$item.addClass("active")[0]]}self.hideInput();if(!this.isFocused){self.focus()}},setActiveOption:function($option,scroll,animate){var height_menu,height_item,y;var scroll_top,scroll_bottom;var self=this;if(self.$activeOption){self.$activeOption.removeClass("active");self.trigger("dropdown_item_deactivate",self.$activeOption.attr("data-value"))}self.$activeOption=null;$option=$($option);if(!$option.length)return;self.$activeOption=$option.addClass("active");if(self.isOpen)self.trigger("dropdown_item_activate",self.$activeOption.attr("data-value"));if(scroll||!isset(scroll)){height_menu=self.$dropdown_content.height();height_item=self.$activeOption.outerHeight(true);scroll=self.$dropdown_content.scrollTop()||0;y=self.$activeOption.offset().top-self.$dropdown_content.offset().top+scroll;scroll_top=y;scroll_bottom=y-height_menu+height_item;if(y+height_item>height_menu+scroll){self.$dropdown_content.stop().animate({scrollTop:scroll_bottom},animate?self.settings.scrollDuration:0)}else if(y<scroll){self.$dropdown_content.stop().animate({scrollTop:scroll_top},animate?self.settings.scrollDuration:0)}}},selectAll:function(){var self=this;if(self.settings.mode==="single")return;self.$activeItems=Array.prototype.slice.apply(self.$control.children(":not(input)").addClass("active"));if(self.$activeItems.length){self.hideInput();self.close()}self.focus()},hideInput:function(){var self=this;self.setTextboxValue("");self.$control_input.css({opacity:0,position:"absolute",left:self.rtl?1e4:0});self.isInputHidden=true},showInput:function(){this.$control_input.css({opacity:1,position:"relative",left:0});this.isInputHidden=false},focus:function(){var self=this;if(self.isDisabled)return self;self.ignoreFocus=true;self.$control_input[0].focus();window.setTimeout(function(){self.ignoreFocus=false;self.onFocus()},0);return self},blur:function(dest){this.$control_input[0].blur();this.onBlur(null,dest);return this},getScoreFunction:function(query){return this.sifter.getScoreFunction(query,this.get
4701SearchOptions())},getSearchOptions:function(){var settings=this.settings;var sort=settings.sortField;if(typeof sort==="string"){sort=[{field:sort}]}return{fields:settings.searchField,conjunction:settings.searchConjunction,sort:sort,nesting:settings.nesting,filter:settings.filter,respect_word_boundaries:settings.respect_word_boundaries}},search:function(query){var i,value,score,result,calculateScore;var self=this;var settings=self.settings;var options=this.getSearchOptions();if(settings.score){calculateScore=self.settings.score.apply(this,[query]);if(typeof calculateScore!=="function"){throw new Error('Selectize "score" setting must be a function that returns a function')}}if(query!==self.lastQuery){if(settings.normalize)query=query.normalize("NFD").replace(/[\u0300-\u036f]/g,"");self.lastQuery=query;result=self.sifter.search(query,$.extend(options,{score:calculateScore}));self.currentResults=result}else{result=$.extend(true,{},self.currentResults)}if(settings.hideSelected){for(i=result.items.length-1;i>=0;i--){if(self.items.indexOf(hash_key(result.items[i].id))!==-1){result.items.splice(i,1)}}}return result},refreshOptions:function(triggerDropdown){var i,j,k,n,groups,groups_order,option,option_html,optgroup,optgroups,html,html_children,has_create_option;var $active,$active_before,$create;if(typeof triggerDropdown==="undefined"){triggerDropdown=true}var self=this;var query=self.$control_input.val().trim();var results=self.search(query);var $dropdown_content=self.$dropdown_content;var active_before=self.$activeOption&&hash_key(self.$activeOption.attr("data-value"));n=results.items.length;if(typeof self.settings.maxOptions==="number"){n=Math.min(n,self.settings.maxOptions)}groups={};groups_order=[];for(i=0;i<n;i++){option=self.options[results.items[i].id];option_html=self.render("option",option);optgroup=option[self.settings.optgroupField]||"";optgroups=Array.isArray(optgroup)?optgroup:[optgroup];for(j=0,k=optgroups&&optgroups.length;j<k;j++){optgroup=optgroups[j];if(!self.optgroups.hasOwnProperty(optgroup)&&typeof self.settings.optionGroupRegister==="function"){var regGroup;if(regGroup=self.settings.optionGroupRegister.apply(self,[optgroup])){self.registerOptionGroup(regGroup)}}if(!self.optgroups.hasOwnProperty(optgroup)){optgroup=""}if(!groups.hasOwnProperty(optgroup)){groups[optgroup]=document.createDocumentFragment();groups_order.push(optgroup)}groups[optgroup].appendChild(option_html)}}if(this.settings.lockOptgroupOrder){groups_order.sort(function(a,b){var a_order=self.optgroups[a]&&self.optgroups[a].$order||0;var b_order=self.optgroups[b]&&self.optgroups[b].$order||0;return a_order-b_order})}html=document.createDocumentFragment();for(i=0,n=groups_order.length;i<n;i++){optgroup=groups_order[i];if(self.optgroups.hasOwnProperty(optgroup)&&groups[optgroup].childNodes.length){html_children=document.createDocumentFragment();html_children.appendChild(self.render("optgroup_header",self.optgroups[optgroup]));html_children.appendChild(groups[optgroup]);html.appendChild(self.render("optgroup",$.extend({},self.optgroups[optgroup],{html:domToString(html_children),dom:html_children})))}else{html.appendChild(groups[optgroup])}}$dropdown_content.html(html);if(self.settings.highlight){$dropdown_content.removeHighlight();if(results.query.length&&results.tokens.length){for(i=0,n=results.tokens.length;i<n;i++){highlight($dropdown_content,results.tokens[i].regex)}}}if(!self.settings.hideSelected){self.$dropdown.find(".selected").removeClass("selected");for(i=0,n=self.items.length;i<n;i++){self.getOption(self.items[i]).addClass("selected")}}if(self.settings.dropdownSize.sizeType!=="auto"&&self.isOpen){self.setupDropdownHeight()}has_create_option=self.canCreate(query);if(has_create_option){if(self.settings.showAddOptionOnCreate){$dropdown_content.prepend(self.render("option_create",{input:query}));$create=$($dropdown_content[0].childNodes[0])}}self.hasOptions=results.items.length>0||has_create_option&&self.settings.showAddOptionOnCreate||self.settings.setFirstOptionActive;if(self.hasOptions){if(results.items.length>0){$active_before=active_before&&self.getOption(active_before);if(results.query!==""&&self.settings.setFirstOptionActive){$active=$dropdown_content.find("[data-selectable]:first")}else if(results.query!==""&&$active_before&&$active_before.length){$active=$active_before}else if(self.settings.mode==="single"&&self.items.length){$active=self.getOption(self.items[0])}if(!$active||!$active.length){if($create&&!self.settings.addPrecedence){$active=self.getAdjacentOption($create,1)}else{$active=$dropdown_content.find("[data-selectable]:first")}}}else{$active=$create}self.setActiveOption($active);if(triggerDropdown&&!self.isOpen){self.open()}}else{self.setActiveOption(null);if(triggerDropdown&&self.isOpen){self.close()}}},addOption:function(data){var i,n,value,self=this;if(Array.isArray(data)){for(i=0,n=data.length;i<n;i++){self.addOption(data[i])}return}if(value=self.registerOption(data)){self.userOptions[value]=true;self.lastQuery=null;self.trigger("option_add",value,data)}},registerOption:function(data){var key=hash_key(data[this.settings.valueField]);if(typeof key==="undefined"||key===null||this.options.hasOwnProperty(key))return false;data.$order=data.$order||++this.order;this.options[key]=data;return key},registerOptionGroup:function(data){var key=hash_key(data[this.settings.optgroupValueField]);if(!key)return false;data.$order=data.$order||++this.order;this.optgroups[key]=data;return key},addOptionGroup:function(id,data){data[this.settings.optgroupValueField]=id;if(id=this.registerOptionGroup(data)){this.trigger("optgroup_add",id,data)}},removeOptionGroup:function(id){if(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 self=this;var $item,$item_new;var value_new,index_item,cache_items,cache_options,order_old;value=hash_key(value);value_new=hash_key(data[self.settings.valueField]);if(value===null)return;if(!self.options.hasOwnProperty(value))return;if(typeof value_new!=="string")throw new Error("Value must be set in option data");order_old=self.options[value].$order;if(value_new!==value){delete self.options[value];index_item=self.items.indexOf(value);if(index_item!==-1){self.items.splice(index_item,1,value_new)}}data.$order=data.$order||order_old;self.options[value_new]=data;cache_items=self.renderCache["item"];cache_options=self.renderCache["option"];if(cache_items){delete cache_items[value];delete cache_items[value_new]}if(cache_options){delete cache_options[value];delete cache_options[value_new]}if(self.items.indexOf(value_new)!==-1){$item=self.getItem(value);$item_new=$(self.render("item",data));if($item.hasClass("active"))$item_new.addClass("active");$item.replaceWith($item_new)}self.lastQuery=null;if(self.isOpen){self.refreshOptions(false)}},removeOption:function(value,silent){var self=this;value=hash_key(value);var cache_items=self.renderCache["item"];var cache_options=self.renderCache["option"];if(cache_items)delete cache_items[value];if(cache_options)delete cache_options[value];delete self.userOptions[value];delete self.options[value];self.lastQuery=null;self.trigger("option_remove",value);self.removeItem(value,silent)},clearOptions:function(silent){var self=this;self.loadedSearches={};self.userOptions={};self.renderCache={};var options=self.options;$.each(self.options,function(key,value){if(self.items.indexOf(key)==-1){delete options[key]}});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 $options.length>0?$options.eq(0):$()},getAdjacentOption:function($option,direction){var $options=this.$dropdown.find("[data-selectable]");var index=$options.index($option)+direction;return index>=0&&index<$options.length?$options.eq(index):$()},getElementWithValue:function(value,$els){value=hash_key(value);if(typeof value!=="undefined"&&value!==null){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){textContent=hash_key(textContent);if(typeof textContent!=="undefined"&&textContent!==null){for(var i=0,n=$els.length;i<n;i++){var eleTextContent=$els[i].textContent;if(ignoreCase==true){eleTextContent=eleTextContent!==null?eleTextContent.toLowerCase():null;textContent=textContent.toLowerCase()}if(eleTextContent===textContent){return $($els[i])}}}return $()},getItem:function(value){return this.getElementWithValue(value,this.$control.children())},getFirstItemMatchedByTextContent:function(textContent,ignoreCase){ignoreCase=ignoreCase!==null&&ignoreCase===true?true:false;return this.getElementWithTextContent(textContent,ignoreCase,this.$dropdown_content.find("[data-selectable]"))},addItems:function(values,silent){this.buffer=document.createDocumentFragment();var childNodes=this.$control[0].childNodes;for(var i=0;i<childNodes.length;i++){this.buffer.appendChild(childNodes[i])}var items=Array.isArray(values)?values:[values];for(var i=0,n=items.length;i<n;i++){this.isPending=i<n-1;this.addItem(items[i],silent)}var control=this.$control[0];control.insertBefore(this.buffer,control.firstChild);this.buffer=null},addItem:function(value,silent){var events=silent?[]:["change"];debounce_events(this,events,function(){var $item,$option,$options;var self=this;var inputMode=self.settings.mode;var i,active,value_next,wasFull;value=hash_key(value);if(self.items.indexOf(value)!==-1){if(inputMode==="single")self.close();return}if(!self.options.hasOwnProperty(value))return;if(inputMode==="single")self.clear(silent);if(inputMode==="multi"&&self.isFull())return;$item=$(self.render("item",self.options[value]));wasFull=self.isFull();self.items.splice(self.caretPos,0,value);self.insertAtCaret($item);if(!self.isPending||!wasFull&&self.isFull()){self.refreshState()}if(self.isSetup){$options=self.$dropdown_content.find("[data-selectable]");if(!self.isPending){$option=self.getOption(value);value_next=self.getAdjacentOption($option,1).attr("data-value");self.refreshOptions(self.isFocused&&inputMode!=="single");if(value_next){self.setActiveOption(self.getOption(value_next))}}if(!$options.length||self.isFull()){self.close()}else if(!self.isPending){self.positionDropdown()}self.updatePlaceholder();self.trigger("item_add",value,$item);if(!self.isPending){self.updateOriginalInput({silent:silent})}}})},removeItem:function(value,silent){var self=this;var $item,i,idx;$item=value instanceof $?value:self.getItem(value);value=hash_key($item.attr("data-value"));i=self.items.indexOf(value);if(i!==-1){self.trigger("item_before_remove",value,$item);
4701$item.remove();if($item.hasClass("active")){$item.removeClass("active");idx=self.$activeItems.indexOf($item[0]);self.$activeItems.splice(idx,1);$item.removeClass("active")}self.items.splice(i,1);self.lastQuery=null;if(!self.settings.persist&&self.userOptions.hasOwnProperty(value)){self.removeOption(value,silent)}if(i<self.caretPos){self.setCaret(self.caretPos-1)}self.refreshState();self.updatePlaceholder();self.updateOriginalInput({silent:silent});self.positionDropdown();self.trigger("item_remove",value,$item)}},createItem:function(input,triggerDropdown){var self=this;var caret=self.caretPos;input=input||(self.$control_input.val()||"").trim();var callback=arguments[arguments.length-1];if(typeof callback!=="function")callback=function(){};if(typeof triggerDropdown!=="boolean"){triggerDropdown=true}if(!self.canCreate(input)){callback();return false}self.lock();var setup=typeof self.settings.create==="function"?this.settings.create:function(input){var data={};data[self.settings.labelField]=input;var key=input;if(self.settings.formatValueToKey&&typeof self.settings.formatValueToKey==="function"){key=self.settings.formatValueToKey.apply(this,[key]);if(key===null||typeof key==="undefined"||typeof key==="object"||typeof key==="function"){throw new Error('Selectize "formatValueToKey" setting must be a function that returns a value other than object or function.')}}data[self.settings.valueField]=key;return data};var create=once(function(data){self.unlock();if(!data||typeof data!=="object")return callback();var value=hash_key(data[self.settings.valueField]);if(typeof value!=="string")return callback();self.setTextboxValue("");self.addOption(data);self.setCaret(caret);self.addItem(value);self.refreshOptions(triggerDropdown&&self.settings.mode!=="single");callback(data)});var output=setup.apply(this,[input,create]);if(typeof output!=="undefined"){create(output)}return true},refreshItems:function(silent){this.lastQuery=null;if(this.isSetup){this.addItem(this.items,silent)}this.refreshState();this.updateOriginalInput({silent:silent})},refreshState:function(){this.refreshValidityState();this.refreshClasses()},refreshValidityState:function(){if(!this.isRequired)return false;var invalid=!this.items.length;this.isInvalid=invalid;this.$control_input.prop("required",invalid);this.$input.prop("required",!invalid)},refreshClasses:function(){var self=this;var isFull=self.isFull();var isLocked=self.isLocked;self.$wrapper.toggleClass("rtl",self.rtl);self.$control.toggleClass("focus",self.isFocused).toggleClass("disabled",self.isDisabled).toggleClass("required",self.isRequired).toggleClass("invalid",self.isInvalid).toggleClass("locked",isLocked).toggleClass("full",isFull).toggleClass("not-full",!isFull).toggleClass("input-active",self.isFocused&&!self.isInputHidden).toggleClass("dropdown-active",self.isOpen).toggleClass("has-options",!$.isEmptyObject(self.options)).toggleClass("has-items",self.items.length>0);self.$control_input.data("grow",!isFull&&!isLocked)},isFull:function(){return this.settings.maxItems!==null&&this.items.length>=this.settings.maxItems},updateOriginalInput:function(opts){var i,n,existing,fresh,old,$options,label,value,values,self=this;opts=opts||{};if(self.tagType===TAG_SELECT){$options=self.$input.find("option");existing=[];fresh=[];old=[];values=[];$options.get().forEach(function(option){existing.push(option.value)});self.items.forEach(function(item){label=self.options[item][self.settings.labelField]||"";values.push(item);if(existing.indexOf(item)!=-1){return}fresh.push('<option value="'+escape_html(item)+'" selected="selected">'+escape_html(label)+"</option>")});old=existing.filter(function(value){return values.indexOf(value)<0}).map(function(value){return'option[value="'+value+'"]'});if(existing.length-old.length+fresh.length===0&&!self.$input.attr("multiple")){fresh.push('<option value="" selected="selected"></option>')}self.$input.find(old.join(", ")).remove();self.$input.append(fresh.join(""))}else{self.$input.val(self.getValue());self.$input.attr("value",self.$input.val())}if(self.isSetup){if(!opts.silent){self.trigger("change",self.$input.val())}}},updatePlaceholder:function(){if(!this.settings.placeholder)return;var $input=this.$control_input;if(this.items.length){$input.removeAttr("placeholder")}else{$input.attr("placeholder",this.settings.placeholder)}$input.triggerHandler("update",{force:true})},open:function(){var self=this;if(self.isLocked||self.isOpen||self.settings.mode==="multi"&&self.isFull())return;self.focus();self.isOpen=true;self.refreshState();self.$dropdown.css({visibility:"hidden",display:"block"});self.setupDropdownHeight();self.positionDropdown();self.$dropdown.css({visibility:"visible"});self.trigger("dropdown_open",self.$dropdown)},close:function(){var self=this;var trigger=self.isOpen;if(self.settings.mode==="single"&&self.items.length){self.hideInput();if(self.isBlurring){self.$control_input[0].blur()}}self.isOpen=false;self.$dropdown.hide();self.setActiveOption(null);self.refreshState();if(trigger)self.trigger("dropdown_close",self.$dropdown)},positionDropdown:function(){var $control=this.$control;var offset=this.settings.dropdownParent==="body"?$control.offset():$control.position();offset.top+=$control.outerHeight(true);var w=$control[0].getBoundingClientRect().width;if(this.settings.minWidth&&this.settings.minWidth>w){w=this.settings.minWidth}
4701this.$dropdown.css({width:w,top:offset.top,left:offset.left})},setupDropdownHeight:function(){if(typeof this.settings.dropdownSize==="object"&&this.settings.dropdownSize.sizeType!=="auto"){var height=this.settings.dropdownSize.sizeValue;if(this.settings.dropdownSize.sizeType==="numberItems"){var $items=this.$dropdown_content.find("*").not(".optgroup, .highlight").not(this.settings.ignoreOnDropwdownHeight);var totalHeight=0;var marginTop=0;var marginBottom=0;var separatorHeight=0;for(var i=0;i<height;i++){var $item=$($items[i]);if($item.length===0){break}totalHeight+=$item.outerHeight(true);if(typeof $item.data("selectable")=="undefined"){if($item.hasClass("optgroup-header")){var styles=window.getComputedStyle($item.parent()[0],":before");if(styles){marginTop=styles.marginTop?Number(styles.marginTop.replace(/\W*(\w)\w*/g,"$1")):0;marginBottom=styles.marginBottom?Number(styles.marginBottom.replace(/\W*(\w)\w*/g,"$1")):0;separatorHeight=styles.borderTopWidth?Number(styles.borderTopWidth.replace(/\W*(\w)\w*/g,"$1")):0}}height++}}var paddingTop=this.$dropdown_content.css("padding-top")?Number(this.$dropdown_content.css("padding-top").replace(/\W*(\w)\w*/g,"$1")):0;var paddingBottom=this.$dropdown_content.css("padding-bottom")?Number(this.$dropdown_content.css("padding-bottom").replace(/\W*(\w)\w*/g,"$1")):0;height=totalHeight+paddingTop+paddingBottom+marginTop+marginBottom+separatorHeight+"px"}else if(this.settings.dropdownSize.sizeType!=="fixedHeight"){console.warn('Selectize.js - Value of "sizeType" must be "fixedHeight" or "numberItems');return}this.$dropdown_content.css({height:height,maxHeight:"none"})}},clear:function(silent){var self=this;if(!self.items.length)return;self.$control.children(":not(input)").remove();self.items=[];self.lastQuery=null;self.setCaret(0);self.setActiveItem(null);self.updatePlaceholder();self.updateOriginalInput({silent:silent});self.refreshState();self.showInput();self.trigger("clear")},insertAtCaret:function($el){var caret=Math.min(this.caretPos,this.items.length);var el=$el[0];var target=this.buffer||this.$control[0];if(caret===0){target.insertBefore(el,target.firstChild)}else{target.insertBefore(el,target.childNodes[caret])}this.setCaret(caret+1)},deleteSelection:function(e){var i,n,direction,selection,values,caret,option_select,$option_select,$tail;var self=this;direction=e&&e.keyCode===KEY_BACKSPACE?-1:1;selection=getInputSelection(self.$control_input[0]);if(self.$activeOption&&!self.settings.hideSelected){if(typeof self.settings.deselectBehavior==="string"&&self.settings.deselectBehavior==="top"){option_select=self.getFirstOption().attr("data-value")}else{option_select=self.getAdjacentOption(self.$activeOption,-1).attr("data-value")}}values=[];if(self.$activeItems.length){$tail=self.$control.children(".active:"+(direction>0?"last":"first"));caret=self.$control.children(":not(input)").index($tail);if(direction>0){caret++}for(i=0,n=self.$activeItems.length;i<n;i++){values.push($(self.$activeItems[i]).attr("data-value"))}if(e){e.preventDefault();e.stopPropagation()}}else if((self.isFocused||self.settings.mode==="single")&&self.items.length){if(direction<0&&selection.start===0&&selection.length===0){values.push(self.items[self.caretPos-1])}else if(direction>0&&selection.start===self.$control_input.val().length){values.push(self.items[self.caretPos])}}if(!values.length||typeof self.settings.onDelete==="function"&&self.settings.onDelete.apply(self,[values])===false){return false}if(typeof caret!=="undefined"){self.setCaret(caret)}while(values.length){self.removeItem(values.pop())}self.showInput();self.positionDropdown();self.refreshOptions(true);if(option_select){$option_select=self.getOption(option_select);if($option_select.length){self.setActiveOption($option_select)}}return true},advanceSelection:function(direction,e){var tail,selection,idx,valueLength,cursorAtEdge,$tail;var self=this;if(direction===0)return;if(self.rtl)direction*=-1;tail=direction>0?"last":"first";selection=getInputSelection(self.$control_input[0]);if(self.isFocused&&!self.isInputHidden){valueLength=self.$control_input.val().length;cursorAtEdge=direction<0?selection.start===0&&selection.length===0:selection.start===valueLength;if(cursorAtEdge&&!valueLength){self.advanceCaret(direction,e)}}else{$tail=self.$control.children(".active:"+tail);if($tail.length){idx=self.$control.children(":not(input)").index($tail);self.setActiveItem(null);self.setCaret(direction>0?idx+1:idx)}}},advanceCaret:function(direction,e){var self=this,fn,$adj;if(direction===0)return;fn=direction>0?"next":"prev";if(self.isShiftDown){$adj=self.$control_input[fn]();if($adj.length){self.hideInput();self.setActiveItem($adj);e&&e.preventDefault()}}else{self.setCaret(self.caretPos+direction)}},setCaret:function(i){var self=this;if(self.settings.mode==="single"){i=self.items.length}else{i=Math.max(0,Math.min(self.items.length,i))}if(!self.isPending){var j,n,fn,$children,$child;$children=self.$control.children(":not(input)");for(j=0,n=$children.length;j<n;
4701j++){$child=$($children[j]).detach();if(j<i){self.$control_input.before($child)}else{self.$control.append($child)}}}self.caretPos=i},lock:function(){this.close();this.isLocked=true;this.refreshState()},unlock:function(){this.isLocked=false;this.refreshState()},disable:function(){var self=this;self.$input.prop("disabled",true);self.$control_input.prop("disabled",true).prop("tabindex",-1);self.isDisabled=true;self.lock()},enable:function(){var self=this;self.$input.prop("disabled",false);self.$control_input.prop("disabled",false).prop("tabindex",self.tabIndex);self.isDisabled=false;self.unlock()},destroy:function(){var self=this;var eventNS=self.eventNS;var revertSettings=self.revertSettings;self.trigger("destroy");self.off();self.$wrapper.remove();self.$dropdown.remove();self.$input.html("").append(revertSettings.$children).removeAttr("tabindex").removeClass("selectized").attr({tabindex:revertSettings.tabindex}).show();self.$control_input.removeData("grow");self.$input.removeData("selectize");if(--Selectize.count==0&&Selectize.$testInput){Selectize.$testInput.remove();Selectize.$testInput=undefined}$(window).off(eventNS);$(document).off(eventNS);$(document.body).off(eventNS);delete self.$input[0].selectize},render:function(templateName,data){var value,id,label;var html="";var cache=false;var self=this;var regex_tag=/^[\t \r\n]*<([a-z][a-z0-9\-_]*(?:\:[a-z][a-z0-9\-_]*)?)/i;if(templateName==="option"||templateName==="item"){value=hash_key(data[self.settings.valueField]);cache=!!value}if(cache){if(!isset(self.renderCache[templateName])){self.renderCache[templateName]={}}if(self.renderCache[templateName].hasOwnProperty(value)){return self.renderCache[templateName][value]}}html=$(self.settings.render[templateName].apply(this,[data,escape_html]));if(templateName==="option"||templateName==="option_create"){if(!data[self.settings.disabledField]){html.attr("data-selectable","")}}else if(templateName==="optgroup"){id=data[self.settings.optgroupValueField]||"";html.attr("data-group",id);if(data[self.settings.disabledField]){html.attr("data-disabled","")}}if(templateName==="option"||templateName==="item"){html.attr("data-value",value||"")}if(cache){self.renderCache[templateName][value]=html[0]}return html[0]},clearCache:function(templateName){var self=this;if(typeof templateName==="undefined"){self.renderCache={}}else{delete self.renderCache[templateName]}},canCreate:function(input){var self=this;if(!self.settings.create)return false;var filter=self.settings.createFilter;return input.length&&(typeof filter!=="function"||filter.apply(self,[input]))&&(typeof filter!=="string"||new RegExp(filter).test(input))&&(!(filter instanceof RegExp)||filter.test(input))}});Selectize.count=0;Selectize.defaults={options:[],optgroups:[],plugins:[],delimiter:",",splitOn:null,persist:true,diacritics:true,create:false,showAddOptionOnCreate:true,createOnBlur:false,createFilter:null,highlight:true,openOnFocus:true,maxOptions:1e3,maxItems:null,hideSelected:null,addPrecedence:false,selectOnTab:true,preload:false,allowEmptyOption:false,showEmptyOptionInDropdown:false,emptyOptionLabel:"--",setFirstOptionActive:false,closeAfterSelect:false,closeDropdownThreshold:250,scrollDuration:60,deselectBehavior:"previous",loadThrottle:300,loadingClass:"loading",dataAttr:"data-data",optgroupField:"optgroup",valueField:"value",labelField:"text",disabledField:"disabled",optgroupLabelField:"label",optgroupValueField:"value",lockOptgroupOrder:false,sortField:"$order",searchField:["text"],searchConjunction:"and",respect_word_boundaries:true,mode:null,wrapperClass:"",inputClass:"",dropdownClass:"",dropdownContentClass:"",dropdownParent:null,copyClassesToDropdown:true,dropdownSize:{sizeType:"auto",sizeValue:"auto"},normalize:false,ignoreOnDropwdownHeight:"img, i",search:true,render:{}};$.fn.em_selectize=function(settings_user){var defaults=$.fn.em_selectize.defaults;var settings=$.extend({},defaults,settings_user);var attr_data=settings.dataAttr;var field_label=settings.labelField;var field_value=settings.valueField;var field_disabled=settings.disabledField;var field_optgroup=settings.optgroupField;var field_optgroup_label=settings.optgroupLabelField;var field_optgroup_value=settings.optgroupValueField;var init_textbox=function($input,settings_element){var i,n,values,option;var data_raw=$input.attr(attr_data);if(!data_raw){var value=($input.val()||"").trim();if(!settings.allowEmptyOption&&!value.length)return;values=value.split(settings.delimiter);for(i=0,n=values.length;i<n;i++){option={};option[field_label]=values[i];option[field_value]=values[i];settings_element.options.push(option)}settings_element.items=values}else{settings_element.options=JSON.parse(data_raw);for(i=0,n=settings_element.options.length;i<n;i++){settings_element.items.push(settings_element.options[i][field_value])}}};var init_select=function($input,settings_element){var i,n,tagName,$children,order=0;var options=settings_element.options;var optionsMap={};var readData=function($el){var data=attr_data&&$el.attr(attr_data);var allData=$el.data();var obj={};if(typeof data==="string"&&data.length){if(isJSON(data)){Object.assign(obj,JSON.parse(data))}else{obj[data]=data}
4701}Object.assign(obj,allData);return obj||null};var addOption=function($option,group){$option=$($option);var value=hash_key($option.val());if(!value&&!settings.allowEmptyOption)return;if(optionsMap.hasOwnProperty(value)){if(group){var arr=optionsMap[value][field_optgroup];if(!arr){optionsMap[value][field_optgroup]=group}else if(!Array.isArray(arr)){optionsMap[value][field_optgroup]=[arr,group]}else{arr.push(group)}}return}var option=readData($option)||{};option[field_label]=option[field_label]||$option.text();option[field_value]=option[field_value]||value;option[field_disabled]=option[field_disabled]||$option.prop("disabled");option[field_optgroup]=option[field_optgroup]||group;option.styles=$option.attr("style")||"";option.classes=$option.attr("class")||"";optionsMap[value]=option;options.push(option);if($option.is(":selected")){settings_element.items.push(value)}};var addGroup=function($optgroup){var i,n,id,optgroup,$options;$optgroup=$($optgroup);id=$optgroup.attr("label");if(id){optgroup=readData($optgroup)||{};optgroup[field_optgroup_label]=id;optgroup[field_optgroup_value]=id;optgroup[field_disabled]=$optgroup.prop("disabled");settings_element.optgroups.push(optgroup)}$options=$("option",$optgroup);for(i=0,n=$options.length;i<n;i++){addOption($options[i],id)}};settings_element.maxItems=$input.attr("multiple")?null:1;$children=$input.children();for(i=0,n=$children.length;i<n;i++){tagName=$children[i].tagName.toLowerCase();if(tagName==="optgroup"){addGroup($children[i])}else if(tagName==="option"){addOption($children[i])}}};return this.each(function(){if(this.selectize)return;var instance;var $input=$(this);var tag_name=this.tagName.toLowerCase();var placeholder=$input.attr("placeholder")||$input.attr("data-placeholder");if(!placeholder&&!settings.allowEmptyOption){placeholder=$input.children('option[value=""]').text()}if(settings.allowEmptyOption&&settings.showEmptyOptionInDropdown&&!$input.children('option[value=""]').length){var input_html=$input.html();var label=escape_html(settings.emptyOptionLabel||"--");$input.html('<option value="">'+label+"</option>"+input_html)}var settings_element={placeholder:placeholder,options:[],optgroups:[],items:[]};if(tag_name==="select"){init_select($input,settings_element)}else{init_textbox($input,settings_element)}instance=new Selectize($input,$.extend(true,{},defaults,settings_element,settings_user));instance.settings_user=settings_user})};$.fn.em_selectize.defaults=Selectize.defaults;$.fn.em_selectize.support={validity:SUPPORTS_VALIDITY_API};Selectize.define("auto_position",function(){var self=this;const POSITION={top:"top",bottom:"bottom"};self.positionDropdown=function(){return function(){const $control=this.$control;const offset=this.settings.dropdownParent==="body"?$control.offset():$control.position();offset.top+=$control.outerHeight(true);const dropdownHeight=this.$dropdown.prop("scrollHeight")+5;const controlPosTop=this.$control.get(0).getBoundingClientRect().top;const wrapperHeight=this.$wrapper.height();const position=controlPosTop+dropdownHeight+wrapperHeight>window.innerHeight?POSITION.top:POSITION.bottom;const styles={width:$control.outerWidth(),left:offset.left};if(position===POSITION.top){const styleToAdd={bottom:offset.top,top:"unset"};if(this.settings.dropdownParent==="body"){styleToAdd.top=offset.top-this.$dropdown.outerHeight(true)-$control.outerHeight(true);styleToAdd.bottom="unset"}Object.assign(styles,styleToAdd);this.$dropdown.addClass("selectize-position-top");this.$control.addClass("selectize-position-top")}else{Object.assign(styles,{top:offset.top,bottom:"unset"});this.$dropdown.removeClass("selectize-position-top");this.$control.removeClass("selectize-position-top")}this.$dropdown.css(styles)}}()});Selectize.define("auto_select_on_type",function(options){var self=this;self.onBlur=function(){var originalBlur=self.onBlur;return function(e){var $matchedItem=self.getFirstItemMatchedByTextContent(self.lastValue,true);if(typeof $matchedItem.attr("data-value")!=="undefined"&&self.getValue()!==$matchedItem.attr("data-value")){self.setValue($matchedItem.attr("data-value"))}return originalBlur.apply(this,arguments)}}()});Selectize.define("autofill_disable",function(options){var self=this;self.setup=function(){var original=self.setup;return function(){original.apply(self,arguments);self.$control_input.attr({autocomplete:"new-password",autofill:"no"})}}()});Selectize.define("clear_button",function(options){var self=this;options=$.extend({title:"Clear",className:"clear",label:"×",html:function(data){return'<a class="'+data.className+'" title="'+data.title+'"> '+data.label+"</a>"}},options);self.setup=function(){var original=self.setup;return function(){original.apply(self,arguments);self.$button_clear=$(options.html(options));if(self.settings.mode==="single")self.$wrapper.addClass("single");self.$wrapper.append(self.$button_clear);if(self.getValue()===""||self.getValue().length===0){self.$wrapper.find("."+options.className).css("display","none")}self.on("change",function(){if(self.getValue()===""||self.getValue().length===0){self.$wrapper.find("."+options.className).css("display","none")}else{self.$wrapper.find("."+options.className).css("display","")}});self.$wrapper.on("click","."+options.className,function(e){e.preventDefault();e.stopImmediatePropagation();e.stopPropagation();if(self.isLocked)return;self.clear();self.$wrapper.find("."+options.className).css("display","none")})}}()});Selectize.define("drag_drop",function(options){if(!$.fn.sortable)throw new Error('The "drag_drop" plugin requires jQuery UI "sortable".');if(this.settings.mode!=="multi")return;var self=this;self.lock=function(){var original=self.lock;return function(){var sortable=self.$control.data("sortable");if(sortable)sortable.disable();return original.apply(self,arguments)}}();self.unlock=function(){var original=self.unlock;return function(){var sortable=self.$control.data("sortable");if(sortable)sortable.enable();return original.apply(self,arguments)}}();self.setup=function(){var original=self.setup;return function(){original.apply(this,arguments);
4701var $control=self.$control.sortable({items:"[data-value]",forcePlaceholderSize:true,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;var values=[];$control.children("[data-value]").each(function(){values.push($(this).attr("data-value"))});self.isFocused=false;self.setValue(values);self.isFocused=true;self.setActiveItem(active);self.positionDropdown()}})}}()});Selectize.define("dropdown_header",function(options){var 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+'">&#xd7;</a>'+"</div>"+"</div>"}},options);self.setup=function(){var original=self.setup;return function(){original.apply(self,arguments);self.$dropdown_header=$(options.html(options));self.$dropdown.prepend(self.$dropdown_header);self.$dropdown_header.find("."+options.closeClass).on("click",function(){self.close()})}}()});Selectize.define("optgroup_columns",function(options){var self=this;options=$.extend({equalizeWidth:true,equalizeHeight:true},options);this.getAdjacentOption=function($option,direction){var $options=$option.closest("[data-group]").find("[data-selectable]");var index=$options.index($option)+direction;return index>=0&&index<$options.length?$options.eq(index):$()};this.onKeyDown=function(){var original=self.onKeyDown;return function(e){var index,$option,$options,$optgroup;if(this.isOpen&&(e.keyCode===KEY_LEFT||e.keyCode===KEY_RIGHT)){self.ignoreHover=true;$optgroup=this.$activeOption.closest("[data-group]");index=$optgroup.find("[data-selectable]").index(this.$activeOption);if(e.keyCode===KEY_LEFT){$optgroup=$optgroup.prev("[data-group]")}else{$optgroup=$optgroup.next("[data-group]")}$options=$optgroup.find("[data-selectable]");$option=$options.eq(Math.min($options.length-1,index));if($option.length){this.setActiveOption($option)}return}return original.apply(this,arguments)}}();var getScrollbarWidth=function(){var div;var width=getScrollbarWidth.width;var doc=document;if(typeof width==="undefined"){div=doc.createElement("div");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)}return width};var equalizeSizes=function(){var i,n,height_max,width,width_last,width_parent,$optgroups;$optgroups=$("[data-group]",self.$dropdown_content);n=$optgroups.length;if(!n||!self.$dropdown_content.width())return;if(options.equalizeHeight){height_max=0;for(i=0;i<n;i++){height_max=Math.max(height_max,$optgroups.eq(i).height())}$optgroups.css({height:height_max})}if(options.equalizeWidth){width_parent=self.$dropdown_content.innerWidth()-getScrollbarWidth();width=Math.round(width_parent/n);$optgroups.css({width:width});if(n>1){width_last=width_parent-width*(n-1);$optgroups.eq(n-1).css({width:width_last})}}};if(options.equalizeHeight||options.equalizeWidth){hook.after(this,"positionDropdown",equalizeSizes);hook.after(this,"refreshOptions",equalizeSizes)}});Selectize.define("remove_button",function(options){if(this.settings.mode==="single")return;options=$.extend({label:"&#xd7;",title:"Remove",className:"remove",append:true},options);var multiClose=function(thisRef,options){var self=thisRef;var html='<a href="javascript:void(0)" class="'+options.className+'" tabindex="-1" title="'+escape_html(options.title)+'">'+options.label+"</a>";var append=function(html_container,html_element){var pos=html_container.search(/(<\/[^>]+>\s*)$/);return html_container.substring(0,pos)+html_element+html_container.substring(pos)};thisRef.setup=function(){var original=self.setup;return function(){if(options.append){var render_item=self.settings.render.item;self.settings.render.item=function(data){return append(render_item.apply(thisRef,arguments),html)}}original.apply(thisRef,arguments);thisRef.$control.on("click","."+options.className,function(e){e.preventDefault();if(self.isLocked)return;var $item=$(e.currentTarget).parent();self.setActiveItem($item);if(self.deleteSelection()){self.setCaret(self.items.length)}return false})}}()};multiClose(this,options)});Selectize.define("restore_on_backspace",function(options){var self=this;options.text=options.text||function(option){return option[this.settings.labelField]};this.onKeyDown=function(){var original=self.onKeyDown;return function(e){var index,option;if(e.keyCode===KEY_BACKSPACE&&this.$control_input.val()===""&&!this.$activeItems.length){index=this.caretPos-1;if(index>=0&&index<this.items.length){option=this.options[this.items[index]];if(this.deleteSelection(e)){this.setTextboxValue(options.text.apply(this,[option]));this.refreshOptions(true)}e.preventDefault();return}}return original.apply(this,arguments)}}()});Selectize.define("select_on_focus",function(options){var self=this;self.on("focus",function(){var originalFocus=self.onFocus;return function(e){var value=self.getItem(self.getValue()).text();self.clear();self.setTextboxValue(value);self.$control_input.select();setTimeout(function(){if(self.settings.selectOnTab){self.setActiveOption(self.getFirstItemMatchedByTextContent(value))}self.settings.score=null},0);return originalFocus.apply(this,arguments)}}());self.onBlur=function(){var originalBlur=self.onBlur;return function(e){if(self.getValue()===""&&self.lastValidValue!==self.getValue()){self.setValue(self.lastValidValue)}setTimeout(function(){self.settings.score=function(){return function(){return 1}}},0);return 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(e){const original=self.onBlur;return function(e){original.apply(this,e);if(!e)return;const $control=this.$control;
4701const $items=$control.find(".item");const limit=options.tagLimit;if(limit===undefined||$items.length<=limit)return;$items.toArray().forEach(function(item,index){if(index<limit)return;$(item).hide()});$control.append("<span><b>"+($items.length-limit)+"</b></span>")}}();this.onFocus=function(e){const original=self.onFocus;return function(e){original.apply(this,e);if(!e)return;const $control=this.$control;const $items=$control.find(".item");$items.show();$control.find("span").remove()}}()});return Selectize});
4702/*!
4703 * selectize click2deselect (custom)
4704 */
4705/* Selectize deselect function */
4706EM_Selectize.define("click2deselect",function(options){var self=this;var setup=self.setup;this.setup=function(){setup.apply(self,arguments);let just_added;self.$dropdown.each(function(){this.addEventListener("click",function(e){let target=e.target.matches(".selected[data-selectable]")?e.target:e.target.closest(".selected[data-selectable]");if(target!==null){let value=target.getAttribute("data-value");if(value!==just_added){self.removeItem(value);self.refreshItems();self.refreshOptions()}}just_added=false;return false})});self.on("item_remove",function(value){self.getOption(value).removeClass("selected")});self.on("item_add",function(value){just_added=value})}});
4707
4708/*! Sortable 1.15.2 - MIT | git://github.com/SortableJS/Sortable.git */
4709!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Sortable=e()}(this,function(){"use strict";function e(e,t){var n,o=Object.keys(e);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(e),t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),o.push.apply(o,n)),o}function I(o){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?e(Object(i),!0).forEach(function(t){var e,n;e=o,t=i[n=t],n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t}):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(i)):e(Object(i)).forEach(function(t){Object.defineProperty(o,t,Object.getOwnPropertyDescriptor(i,t))})}return o}function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function a(){return(a=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n,o=arguments[e];for(n in o)Object.prototype.hasOwnProperty.call(o,n)&&(t[n]=o[n])}return t}).apply(this,arguments)}function i(t,e){if(null==t)return{};var n,o=function(t,e){if(null==t)return{};for(var n,o={},i=Object.keys(t),r=0;r<i.length;r++)n=i[r],0<=e.indexOf(n)||(o[n]=t[n]);return o}(t,e);if(Object.getOwnPropertySymbols)for(var i=Object.getOwnPropertySymbols(t),r=0;r<i.length;r++)n=i[r],0<=e.indexOf(n)||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n]);return o}function r(t){return function(t){if(Array.isArray(t))return l(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return l(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Map"===(n="Object"===n&&t.constructor?t.constructor.name:n)||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,o=new Array(e);n<e;n++)o[n]=t[n];return o}function t(t){if("undefined"!=typeof window&&window.navigator)return!!navigator.userAgent.match(t)}var y=t(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),w=t(/Edge/i),s=t(/firefox/i),u=t(/safari/i)&&!t(/chrome/i)&&!t(/android/i),n=t(/iP(ad|od|hone)/i),c=t(/chrome/i)&&t(/android/i),d={capture:!1,passive:!1};function h(t,e,n){t.addEventListener(e,n,!y&&d)}function f(t,e,n){t.removeEventListener(e,n,!y&&d)}function p(t,e){if(e&&(">"===e[0]&&(e=e.substring(1)),t))try{if(t.matches)return t.matches(e);
vendor: 41,755 bytes, lines 4709-4713
4709if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return}}function P(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"!==e[0]||t.parentNode===n)&&p(t,e)||o&&t===n)return t}while(t!==n&&(t=(i=t).host&&i!==document&&i.host.nodeType?i.host:i.parentNode))}var i;return null}var g,m=/\s+/g;function k(t,e,n){var o;t&&e&&(t.classList?t.classList[n?"add":"remove"](e):(o=(" "+t.className+" ").replace(m," ").replace(" "+e+" "," "),t.className=(o+(n?" "+e:"")).replace(m," ")))}function R(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];o[e=!(e in o||-1!==e.indexOf("webkit"))?"-webkit-"+e:e]=n+("string"==typeof n?"":"px")}}function v(t,e){var n="";if("string"==typeof t)n=t;else do{var o=R(t,"transform")}while(o&&"none"!==o&&(n=o+" "+n),!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function b(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,r=o.length;if(n)for(;i<r;i++)n(o[i],i);return o}return[]}function O(){var t=document.scrollingElement;return t||document.documentElement}function X(t,e,n,o,i){if(t.getBoundingClientRect||t===window){var r,a,l,s,c,u,d=t!==window&&t.parentNode&&t!==O()?(a=(r=t.getBoundingClientRect()).top,l=r.left,s=r.bottom,c=r.right,u=r.height,r.width):(l=a=0,s=window.innerHeight,c=window.innerWidth,u=window.innerHeight,window.innerWidth);if((e||n)&&t!==window&&(i=i||t.parentNode,!y))do{if(i&&i.getBoundingClientRect&&("none"!==R(i,"transform")||n&&"static"!==R(i,"position"))){var h=i.getBoundingClientRect();a-=h.top+parseInt(R(i,"border-top-width")),l-=h.left+parseInt(R(i,"border-left-width")),s=a+r.height,c=l+r.width;break}}while(i=i.parentNode);return o&&t!==window&&(o=(e=v(i||t))&&e.a,t=e&&e.d,e&&(s=(a/=t)+(u/=t),c=(l/=o)+(d/=o))),{top:a,left:l,bottom:s,right:c,width:d,height:u}}}function Y(t,e,n){for(var o=M(t,!0),i=X(t)[e];o;){var r=X(o)[n];if(!("top"===n||"left"===n?r<=i:i<=r))return o;if(o===O())break;o=M(o,!1)}return!1}function B(t,e,n,o){for(var i=0,r=0,a=t.children;r<a.length;){if("none"!==a[r].style.display&&a[r]!==Ft.ghost&&(o||a[r]!==Ft.dragged)&&P(a[r],n.draggable,t,!1)){if(i===e)return a[r];i++}r++}return null}function F(t,e){for(var n=t.lastElementChild;n&&(n===Ft.ghost||"none"===R(n,"display")||e&&!p(n,e));)n=n.previousElementSibling;return n||null}function j(t,e){var n=0;if(!t||!t.parentNode)return-1;for(;t=t.previousElementSibling;)"TEMPLATE"===t.nodeName.toUpperCase()||t===Ft.clone||e&&!p(t,e)||n++;return n}function E(t){var e=0,n=0,o=O();if(t)do{var i=v(t),r=i.a,i=i.d}while(e+=t.scrollLeft*r,n+=t.scrollTop*i,t!==o&&(t=t.parentNode));return[e,n]}function M(t,e){if(!t||!t.getBoundingClientRect)return O();var n=t,o=!1;do{if(n.clientWidth<n.scrollWidth||n.clientHeight<n.scrollHeight){var i=R(n);if(n.clientWidth<n.scrollWidth&&("auto"==i.overflowX||"scroll"==i.overflowX)||n.clientHeight<n.scrollHeight&&("auto"==i.overflowY||"scroll"==i.overflowY)){if(!n.getBoundingClientRect||n===document.body)return O();if(o||e)return n;o=!0}}}while(n=n.parentNode);return O()}function D(t,e){return Math.round(t.top)===Math.round(e.top)&&Math.round(t.left)===Math.round(e.left)&&Math.round(t.height)===Math.round(e.height)&&Math.round(t.width)===Math.round(e.width)}function S(e,n){return function(){var t;g||(1===(t=arguments).length?e.call(this,t[0]):e.apply(this,t),g=setTimeout(function(){g=void 0},n))}}function H(t,e,n){t.scrollLeft+=e,t.scrollTop+=n}function _(t){var e=window.Polymer,n=window.jQuery||window.Zepto;return e&&e.dom?e.dom(t).cloneNode(!0):n?n(t).clone(!0)[0]:t.cloneNode(!0)}function C(t,e){R(t,"position","absolute"),R(t,"top",e.top),R(t,"left",e.left),R(t,"width",e.width),R(t,"height",e.height)}function T(t){R(t,"position",""),R(t,"top",""),R(t,"left",""),R(t,"width",""),R(t,"height","")}function L(n,o,i){var r={};return Array.from(n.children).forEach(function(t){var e;P(t,o.draggable,n,!1)&&!t.animated&&t!==i&&(e=X(t),r.left=Math.min(null!==(t=r.left)&&void 0!==t?t:1/0,e.left),r.top=Math.min(null!==(t=r.top)&&void 0!==t?t:1/0,e.top),r.right=Math.max(null!==(t=r.right)&&void 0!==t?t:-1/0,e.right),r.bottom=Math.max(null!==(t=r.bottom)&&void 0!==t?t:-1/0,e.bottom))}),r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}var K="Sortable"+(new Date).getTime();function x(){var e,o=[];return{captureAnimationState:function(){o=[],this.options.animation&&[].slice.call(this.el.children).forEach(function(t){var e,n;"none"!==R(t,"display")&&t!==Ft.ghost&&(o.push({target:t,rect:X(t)}),e=I({},o[o.length-1].rect),!t.thisAnimationDuration||(n=v(t,!0))&&(e.top-=n.f,e.left-=n.e),t.fromRect=e)})},addAnimationState:function(t){o.push(t)},removeAnimationState:function(t){o.splice(function(t,e){for(var n in t)if(t.hasOwnProperty(n))for(var o in e)if(e.hasOwnProperty(o)&&e[o]===t[n][o])return Number(n);return-1}(o,{target:t}),1)},animateAll:function(t){var c=this;if(!this.options.animation)return clearTimeout(e),void("function"==typeof t&&t());var u=!1,d=0;o.forEach(function(t){var e=0,n=t.target,o=n.fromRect,i=X(n),r=n.prevFromRect,a=n.prevToRect,l=t.rect,s=v(n,!0);s&&(i.top-=s.f,i.left-=s.e),n.toRect=i,n.thisAnimationDuration&&D(r,i)&&!D(o,i)&&(l.top-i.top)/(l.left-i.left)==(o.top-i.top)/(o.left-i.left)&&(t=l,s=r,r=a,a=c.options,e=Math.sqrt(Math.pow(s.top-t.top,2)+Math.pow(s.left-t.left,2))/Math.sqrt(Math.pow(s.top-r.top,2)+Math.pow(s.left-r.left,2))*a.animation),D(i,o)||(n.prevFromRect=o,n.prevToRect=i,e=e||c.options.animation,c.animate(n,l,i,e)),e&&(u=!0,d=Math.max(d,e),clearTimeout(n.animationResetTimer),n.animationResetTimer=setTimeout(function(){n.animationTime=0,n.prevFromRect=null,n.fromRect=null,n.prevToRect=null,n.thisAnimationDuration=null},e),n.thisAnimationDuration=e)}),clearTimeout(e),u?e=setTimeout(function(){"function"==typeof t&&t()},d):"function"==typeof t&&t(),o=[]},animate:function(t,e,n,o){var i,r;o&&(R(t,"transition",""),R(t,"transform",""),i=(r=v(this.el))&&r.a,r=r&&r.d,i=(e.left-n.left)/(i||1),r=(e.top-n.top)/(r||1),t.animatingX=!!i,t.animatingY=!!r,R(t,"transform","translate3d("+i+"px,"+r+"px,0)"),this.forRepaintDummy=t.offsetWidth,R(t,"transition","transform "+o+"ms"+(this.options.easing?" "+this.options.easing:"")),R(t,"transform","translate3d(0,0,0)"),"number"==typeof t.animated&&clearTimeout(t.animated),t.animated=setTimeout(function(){R(t,"transition",""),R(t,"transform",""),t.animated=!1,t.animatingX=!1,t.animatingY=!1},o))}}}var A=[],N={initializeByDefault:!0},W={mount:function(e){for(var t in N)!N.hasOwnProperty(t)||t in e||(e[t]=N[t]);A.forEach(function(t){if(t.pluginName===e.pluginName)throw"Sortable: Cannot mount plugin ".concat(e.pluginName," more than once")}),A.push(e)},pluginEvent:function(e,n,o){var t=this;this.eventCanceled=!1,o.cancel=function(){t.eventCanceled=!0};var i=e+"Global";A.forEach(function(t){n[t.pluginName]&&(n[t.pluginName][i]&&n[t.pluginName][i](I({sortable:n},o)),n.options[t.pluginName]&&n[t.pluginName][e]&&n[t.pluginName][e](I({sortable:n},o)))})},initializePlugins:function(n,o,i,t){for(var e in A.forEach(function(t){var e=t.pluginName;(n.options[e]||t.initializeByDefault)&&((t=new t(n,o,n.options)).sortable=n,t.options=n.options,n[e]=t,a(i,t.defaults))}),n.options){var r;n.options.hasOwnProperty(e)&&(void 0!==(r=this.modifyOption(n,e,n.options[e]))&&(n.options[e]=r))}},getEventProperties:function(e,n){var o={};return A.forEach(function(t){"function"==typeof t.eventProperties&&a(o,t.eventProperties.call(n[t.pluginName],e))}),o},modifyOption:function(e,n,o){var i;return A.forEach(function(t){e[t.pluginName]&&t.optionListeners&&"function"==typeof t.optionListeners[n]&&(i=t.optionListeners[n].call(e[t.pluginName],o))}),i}};function z(t){var e=t.sortable,n=t.rootEl,o=t.name,i=t.targetEl,r=t.cloneEl,a=t.toEl,l=t.fromEl,s=t.oldIndex,c=t.newIndex,u=t.oldDraggableIndex,d=t.newDraggableIndex,h=t.originalEvent,f=t.putSortable,p=t.extraEventProperties;if(e=e||n&&n[K]){var g,m=e.options,t="on"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||y||w?(g=document.createEvent("Event")).initEvent(o,!0,!0):g=new CustomEvent(o,{bubbles:!0,cancelable:!0}),g.to=a||n,g.from=l||n,g.item=i||n,g.clone=r,g.oldIndex=s,g.newIndex=c,g.oldDraggableIndex=u,g.newDraggableIndex=d,g.originalEvent=h,g.pullMode=f?f.lastPutMode:void 0;var v,b=I(I({},p),W.getEventProperties(o,e));for(v in b)g[v]=b[v];n&&n.dispatchEvent(g),m[t]&&m[t].call(e,g)}}function G(t,e){var n=(o=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{}).evt,o=i(o,U);W.pluginEvent.bind(Ft)(t,e,I({dragEl:V,parentEl:Z,ghostEl:$,rootEl:Q,nextEl:J,lastDownEl:tt,cloneEl:et,cloneHidden:nt,dragStarted:gt,putSortable:st,activeSortable:Ft.active,originalEvent:n,oldIndex:ot,oldDraggableIndex:rt,newIndex:it,newDraggableIndex:at,hideGhostForTarget:Rt,unhideGhostForTarget:Xt,cloneNowHidden:function(){nt=!0},cloneNowShown:function(){nt=!1},dispatchSortableEvent:function(t){q({sortable:e,name:t,originalEvent:n})}},o))}var U=["evt"];function q(t){z(I({putSortable:st,cloneEl:et,targetEl:V,rootEl:Q,oldIndex:ot,oldDraggableIndex:rt,newIndex:it,newDraggableIndex:at},t))}var V,Z,$,Q,J,tt,et,nt,ot,it,rt,at,lt,st,ct,ut,dt,ht,ft,pt,gt,mt,vt,bt,yt,wt=!1,Et=!1,Dt=[],St=!1,_t=!1,Ct=[],Tt=!1,xt=[],Ot="undefined"!=typeof document,Mt=n,At=w||y?"cssFloat":"float",Nt=Ot&&!c&&!n&&"draggable"in document.createElement("div"),It=function(){if(Ot){if(y)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}}(),Pt=function(t,e){var n=R(t),o=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),i=B(t,0,e),r=B(t,1,e),a=i&&R(i),l=r&&R(r),s=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+X(i).width,t=l&&parseInt(l.marginLeft)+parseInt(l.marginRight)+X(r).width;if("flex"===n.display)return"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal";if("grid"===n.display)return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(i&&a.float&&"none"!==a.float){e="left"===a.float?"left":"right";return!r||"both"!==l.clear&&l.clear!==e?"horizontal":"vertical"}return i&&("block"===a.display||"flex"===a.display||"table"===a.display||"grid"===a.display||o<=s&&"none"===n[At]||r&&"none"===n[At]&&o<s+t)?"vertical":"horizontal"},kt=function(t){function l(r,a){return function(t,e,n,o){var i=t.options.group.name&&e.options.group.name&&t.options.group.name===e.options.group.name;if(null==r&&(a||i))return!0;if(null==r||!1===r)return!1;if(a&&"clone"===r)return r;if("function"==typeof r)return l(r(t,e,n,o),a)(t,e,n,o);e=(a?t:e).options.group.name;return!0===r||"string"==typeof r&&r===e||r.join&&-1<r.indexOf(e)}}var e={},n=t.group;n&&"object"==o(n)||(n={name:n}),e.name=n.name,e.checkPull=l(n.pull,!0),e.checkPut=l(n.put),e.revertClone=n.revertClone,t.group=e},Rt=function(){!It&&$&&R($,"display","none")},Xt=function(){!It&&$&&R($,"display","")};Ot&&!c&&document.addEventListener("click",function(t){if(Et)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),Et=!1},!0);function Yt(t){if(V){t=t.touches?t.touches[0]:t;var e=(i=t.clientX,r=t.clientY,Dt.some(function(t){var e=t[K].options.emptyInsertThreshold;if(e&&!F(t)){var n=X(t),o=i>=n.left-e&&i<=n.right+e,e=r>=n.top-e&&r<=n.bottom+e;return o&&e?a=t:void 0}}),a);if(e){var n,o={};for(n in t)t.hasOwnProperty(n)&&(o[n]=t[n]);o.target=o.rootEl=e,o.preventDefault=void 0,o.stopPropagation=void 0,e[K]._onDragOver(o)}}var i,r,a}function Bt(t){V&&V.parentNode[K]._isOutsideThisEl(t.target)}function Ft(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=a({},e),t[K]=this;var n,o,i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Pt(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Ft.supportPointer&&"PointerEvent"in window&&!u,emptyInsertThreshold:5};for(n in W.initializePlugins(this,t,i),i)n in e||(e[n]=i[n]);for(o in kt(e),this)"_"===o.charAt(0)&&"function"==typeof this[o]&&(this[o]=this[o].bind(this));this.nativeDraggable=!e.forceFallback&&Nt,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?h(t,"pointerdown",this._onTapStart):(h(t,"mousedown",this._onTapStart),h(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(h(t,"dragover",this),h(t,"dragenter",this)),Dt.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),a(this,x())}function jt(t,e,n,o,i,r,a,l){var s,c,u=t[K],d=u.options.onMove;return!window.CustomEvent||y||w?(s=document.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=n,s.draggedRect=o,s.related=i||e,s.relatedRect=r||X(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),c=d?d.call(u,s,a):c}function Ht(t){t.draggable=!1}function Lt(){Tt=!1}function Kt(t){return setTimeout(t,0)}function Wt(t){return clearTimeout(t)}Ft.prototype={constructor:Ft,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(mt=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,V):this.options.direction},_onTapStart:function(e){if(e.cancelable){var n=this,o=this.el,t=this.options,i=t.preventOnFilter,r=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,l=(a||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,c=t.filter;if(!function(t){xt.length=0;var e=t.getElementsByTagName("input"),n=e.length;for(;n--;){var o=e[n];o.checked&&xt.push(o)}}(o),!V&&!(/mousedown|pointerdown/.test(r)&&0!==e.button||t.disabled)&&!s.isContentEditable&&(this.nativeDraggable||!u||!l||"SELECT"!==l.tagName.toUpperCase())&&!((l=P(l,t.draggable,o,!1))&&l.animated||tt===l)){if(ot=j(l),rt=j(l,t.draggable),"function"==typeof c){if(c.call(this,e,l,this))return q({sortable:n,rootEl:s,name:"filter",targetEl:l,toEl:o,fromEl:o}),G("filter",n,{evt:e}),void(i&&e.cancelable&&e.preventDefault())}else if(c=c&&c.split(",").some(function(t){if(t=P(s,t.trim(),o,!1))return q({sortable:n,rootEl:t,name:"filter",targetEl:l,fromEl:o,toEl:o}),G("filter",n,{evt:e}),!0}))return void(i&&e.cancelable&&e.preventDefault());t.handle&&!P(s,t.handle,o,!1)||this._prepareDragStart(e,a,l)}}},_prepareDragStart:function(t,e,n){var o,i=this,r=i.el,a=i.options,l=r.ownerDocument;n&&!V&&n.parentNode===r&&(o=X(n),Q=r,Z=(V=n).parentNode,J=V.nextSibling,tt=n,lt=a.group,ct={target:Ft.dragged=V,clientX:(e||t).clientX,clientY:(e||t).clientY},ft=ct.clientX-o.left,pt=ct.clientY-o.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,V.style["will-change"]="all",o=function(){G("delayEnded",i,{evt:t}),Ft.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!s&&i.nativeDraggable&&(V.draggable=!0),i._triggerDragStart(t,e),q({sortable:i,name:"choose",originalEvent:t}),k(V,a.chosenClass,!0))},a.ignore.split(",").forEach(function(t){b(V,t.trim(),Ht)}),h(l,"dragover",Yt),h(l,"mousemove",Yt),h(l,"touchmove",Yt),h(l,"mouseup",i._onDrop),h(l,"touchend",i._onDrop),h(l,"touchcancel",i._onDrop),s&&this.nativeDraggable&&(this.options.touchStartThreshold=4,V.draggable=!0),G("delayStart",this,{evt:t}),!a.delay||a.delayOnTouchOnly&&!e||this.nativeDraggable&&(w||y)?o():Ft.eventCanceled?this._onDrop():(h(l,"mouseup",i._disableDelayedDrag),h(l,"touchend",i._disableDelayedDrag),h(l,"touchcancel",i._disableDelayedDrag),h(l,"mousemove",i._delayedDragTouchMoveHandler),h(l,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&h(l,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(o,a.delay)))},_delayedDragTouchMoveHandler:function(t){t=t.touches?t.touches[0]:t;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){V&&Ht(V),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;f(t,"mouseup",this._disableDelayedDrag),f(t,"touchend",this._disableDelayedDrag),f(t,"touchcancel",this._disableDelayedDrag),f(t,"mousemove",this._delayedDragTouchMoveHandler),f(t,"touchmove",this._delayedDragTouchMoveHandler),f(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?h(document,"pointermove",this._onTouchMove):h(document,e?"touchmove":"mousemove",this._onTouchMove):(h(V,"dragend",this),h(Q,"dragstart",this._onDragStart));try{document.selection?Kt(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){var n;wt=!1,Q&&V?(G("dragStarted",this,{evt:e}),this.nativeDraggable&&h(document,"dragover",Bt),n=this.options,t||k(V,n.dragClass,!1),k(V,n.ghostClass,!0),Ft.active=this,t&&this._appendGhost(),q({sortable:this,name:"start",originalEvent:e})):this._nulling()},_emulateDragOver:function(){if(ut){this._lastX=ut.clientX,this._lastY=ut.clientY,Rt();for(var t=document.elementFromPoint(ut.clientX,ut.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(ut.clientX,ut.clientY))!==e;)e=t;if(V.parentNode[K]._isOutsideThisEl(t),e)do{if(e[K])if(e[K]._onDragOver({clientX:ut.clientX,clientY:ut.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break}while(e=(t=e).parentNode);Xt()}},_onTouchMove:function(t){if(ct){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,r=$&&v($,!0),a=$&&r&&r.a,l=$&&r&&r.d,e=Mt&&yt&&E(yt),a=(i.clientX-ct.clientX+o.x)/(a||1)+(e?e[0]-Ct[0]:0)/(a||1),l=(i.clientY-ct.clientY+o.y)/(l||1)+(e?e[1]-Ct[1]:0)/(l||1);if(!Ft.active&&!wt){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))<n)return;this._onDragStart(t,!0)}$&&(r?(r.e+=a-(dt||0),r.f+=l-(ht||0)):r={a:1,b:0,c:0,d:1,e:a,f:l},r="matrix(".concat(r.a,",").concat(r.b,",").concat(r.c,",").concat(r.d,",").concat(r.e,",").concat(r.f,")"),R($,"webkitTransform",r),R($,"mozTransform",r),R($,"msTransform",r),R($,"transform",r),dt=a,ht=l,ut=i),t.cancelable&&t.preventDefault()}},_appendGhost:function(){if(!$){var t=this.options.fallbackOnBody?document.body:Q,e=X(V,!0,Mt,!0,t),n=this.options;if(Mt){for(yt=t;"static"===R(yt,"position")&&"none"===R(yt,"transform")&&yt!==document;)yt=yt.parentNode;yt!==document.body&&yt!==document.documentElement?(yt===document&&(yt=O()),e.top+=yt.scrollTop,e.left+=yt.scrollLeft):yt=O(),Ct=E(yt)}k($=V.cloneNode(!0),n.ghostClass,!1),k($,n.fallbackClass,!0),k($,n.dragClass,!0),R($,"transition",""),R($,"transform",""),R($,"box-sizing","border-box"),R($,"margin",0),R($,"top",e.top),R($,"left",e.left),R($,"width",e.width),R($,"height",e.height),R($,"opacity","0.8"),R($,"position",Mt?"absolute":"fixed"),R($,"zIndex","100000"),R($,"pointerEvents","none"),Ft.ghost=$,t.appendChild($),R($,"transform-origin",ft/parseInt($.style.width)*100+"% "+pt/parseInt($.style.height)*100+"%")}},_onDragStart:function(t,e){var n=this,o=t.dataTransfer,i=n.options;G("dragStart",this,{evt:t}),Ft.eventCanceled?this._onDrop():(G("setupClone",this),Ft.eventCanceled||((et=_(V)).removeAttribute("id"),et.draggable=!1,et.style["will-change"]="",this._hideClone(),k(et,this.options.chosenClass,!1),Ft.clone=et),n.cloneId=Kt(function(){G("clone",n),Ft.eventCanceled||(n.options.removeCloneOnHide||Q.insertBefore(et,V),n._hideClone(),q({sortable:n,name:"clone"}))}),e||k(V,i.dragClass,!0),e?(Et=!0,n._loopId=setInterval(n._emulateDragOver,50)):(f(document,"mouseup",n._onDrop),f(document,"touchend",n._onDrop),f(document,"touchcancel",n._onDrop),o&&(o.effectAllowed="move",i.setData&&i.setData.call(n,o,V)),h(document,"drop",n),R(V,"transform","translateZ(0)")),wt=!0,n._dragStartId=Kt(n._dragStarted.bind(n,e,t)),h(document,"selectstart",n),gt=!0,u&&R(document.body,"user-select","none"))},_onDragOver:function(n){var o,i,r,t,e,a=this.el,l=n.target,s=this.options,c=s.group,u=Ft.active,d=lt===c,h=s.sort,f=st||u,p=this,g=!1;if(!Tt){if(void 0!==n.preventDefault&&n.cancelable&&n.preventDefault(),l=P(l,s.draggable,a,!0),O("dragOver"),Ft.eventCanceled)return g;if(V.contains(n.target)||l.animated&&l.animatingX&&l.animatingY||p._ignoreWhileAnimating===l)return A(!1);if(Et=!1,u&&!s.disabled&&(d?h||(i=Z!==Q):st===this||(this.lastPutMode=lt.checkPull(this,u,V,n))&&c.checkPut(this,u,V,n))){if(r="vertical"===this._getDirection(n,l),o=X(V),O("dragOverValid"),Ft.eventCanceled)return g;if(i)return Z=Q,M(),this._hideClone(),O("revert"),Ft.eventCanceled||(J?Q.insertBefore(V,J):Q.appendChild(V)),A(!0);var m=F(a,s.draggable);if(m&&(S=n,c=r,x=X(F((D=this).el,D.options.draggable)),D=L(D.el,D.options,$),!(c?S.clientX>D.right+10||S.clientY>x.bottom&&S.clientX>x.left:S.clientY>D.bottom+10||S.clientX>x.right&&S.clientY>x.top)||m.animated)){if(m&&(t=n,e=r,C=X(B((_=this).el,0,_.options,!0)),_=L(_.el,_.options,$),e?t.clientX<_.left-10||t.clientY<C.top&&t.clientX<C.right:t.clientY<_.top-10||t.clientY<C.bottom&&t.clientX<C.left)){var v=B(a,0,s,!0);if(v===V)return A(!1);if(E=X(l=v),!1!==jt(Q,a,V,o,l,E,n,!1))return M(),a.insertBefore(V,v),Z=a,N(),A(!0)}else if(l.parentNode===a){var b,y,w,E=X(l),D=V.parentNode!==a,S=(S=V.animated&&V.toRect||o,x=l.animated&&l.toRect||E,_=(e=r)?S.left:S.top,t=e?S.right:S.bottom,C=e?S.width:S.height,v=e?x.left:x.top,S=e?x.right:x.bottom,x=e?x.width:x.height,!(_===v||t===S||_+C/2===v+x/2)),_=r?"top":"left",C=Y(l,"top","top")||Y(V,"top","top"),v=C?C.scrollTop:void 0;if(mt!==l&&(y=E[_],St=!1,_t=!S&&s.invertSwap||D),0!==(b=function(t,e,n,o,i,r,a,l){var s=o?t.clientY:t.clientX,c=o?n.height:n.width,t=o?n.top:n.left,o=o?n.bottom:n.right,n=!1;if(!a)if(l&&bt<c*i){if(St=!St&&(1===vt?t+c*r/2<s:s<o-c*r/2)?!0:St)n=!0;else if(1===vt?s<t+bt:o-bt<s)return-vt}else if(t+c*(1-i)/2<s&&s<o-c*(1-i)/2)return function(t){return j(V)<j(t)?1:-1}(e);if((n=n||a)&&(s<t+c*r/2||o-c*r/2<s))return t+c/2<s?1:-1;return 0}(n,l,E,r,S?1:s.swapThreshold,null==s.invertedSwapThreshold?s.swapThreshold:s.invertedSwapThreshold,_t,mt===l)))for(var T=j(V);(w=Z.children[T-=b])&&("none"===R(w,"display")||w===$););if(0===b||w===l)return A(!1);vt=b;var x=(mt=l).nextElementSibling,D=!1,S=jt(Q,a,V,o,l,E,n,D=1===b);if(!1!==S)return 1!==S&&-1!==S||(D=1===S),Tt=!0,setTimeout(Lt,30),M(),D&&!x?a.appendChild(V):l.parentNode.insertBefore(V,D?x:l),C&&H(C,0,v-C.scrollTop),Z=V.parentNode,void 0===y||_t||(bt=Math.abs(y-X(l)[_])),N(),A(!0)}}else{if(m===V)return A(!1);if((l=m&&a===n.target?m:l)&&(E=X(l)),!1!==jt(Q,a,V,o,l,E,n,!!l))return M(),m&&m.nextSibling?a.insertBefore(V,m.nextSibling):a.appendChild(V),Z=a,N(),A(!0)}if(a.contains(V))return A(!1)}return!1}function O(t,e){G(t,p,I({evt:n,isOwner:d,axis:r?"vertical":"horizontal",revert:i,dragRect:o,targetRect:E,canSort:h,fromSortable:f,target:l,completed:A,onMove:function(t,e){return jt(Q,a,V,o,t,X(t),n,e)},changed:N},e))}function M(){O("dragOverAnimationCapture"),p.captureAnimationState(),p!==f&&f.captureAnimationState()}function A(t){return O("dragOverCompleted",{insertion:t}),t&&(d?u._hideClone():u._showClone(p),p!==f&&(k(V,(st||u).options.ghostClass,!1),k(V,s.ghostClass,!0)),st!==p&&p!==Ft.active?st=p:p===Ft.active&&st&&(st=null),f===p&&(p._ignoreWhileAnimating=l),p.animateAll(function(){O("dragOverAnimationComplete"),p._ignoreWhileAnimating=null}),p!==f&&(f.animateAll(),f._ignoreWhileAnimating=null)),(l===V&&!V.animated||l===a&&!l.animated)&&(mt=null),s.dragoverBubble||n.rootEl||l===document||(V.parentNode[K]._isOutsideThisEl(n.target),t||Yt(n)),!s.dragoverBubble&&n.stopPropagation&&n.stopPropagation(),g=!0}function N(){it=j(V),at=j(V,s.draggable),q({sortable:p,name:"change",toEl:a,newIndex:it,newDraggableIndex:at,originalEvent:n})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){f(document,"mousemove",this._onTouchMove),f(document,"touchmove",this._onTouchMove),f(document,"pointermove",this._onTouchMove),f(document,"dragover",Yt),f(document,"mousemove",Yt),f(document,"touchmove",Yt)},_offUpEvents:function(){var t=this.el.ownerDocument;f(t,"mouseup",this._onDrop),f(t,"touchend",this._onDrop),f(t,"pointerup",this._onDrop),f(t,"touchcancel",this._onDrop),f(document,"selectstart",this)},_onDrop:function(t){var e=this.el,n=this.options;it=j(V),at=j(V,n.draggable),G("drop",this,{evt:t}),Z=V&&V.parentNode,it=j(V),at=j(V,n.draggable),Ft.eventCanceled||(St=_t=wt=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),Wt(this.cloneId),Wt(this._dragStartId),this.nativeDraggable&&(f(document,"drop",this),f(e,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),u&&R(document.body,"user-select",""),R(V,"transform",""),t&&(gt&&(t.cancelable&&t.preventDefault(),n.dropBubble||t.stopPropagation()),$&&$.parentNode&&$.parentNode.removeChild($),(Q===Z||st&&"clone"!==st.lastPutMode)&&et&&et.parentNode&&et.parentNode.removeChild(et),V&&(this.nativeDraggable&&f(V,"dragend",this),Ht(V),V.style["will-change"]="",gt&&!wt&&k(V,(st||this).options.ghostClass,!1),k(V,this.options.chosenClass,!1),q({sortable:this,name:"unchoose",toEl:Z,newIndex:null,newDraggableIndex:null,originalEvent:t}),Q!==Z?(0<=it&&(q({rootEl:Z,name:"add",toEl:Z,fromEl:Q,originalEvent:t}),q({sortable:this,name:"remove",toEl:Z,originalEvent:t}),q({rootEl:Z,name:"sort",toEl:Z,fromEl:Q,originalEvent:t}),q({sortable:this,name:"sort",toEl:Z,originalEvent:t})),st&&st.save()):it!==ot&&0<=it&&(q({sortable:this,name:"update",toEl:Z,originalEvent:t}),q({sortable:this,name:"sort",toEl:Z,originalEvent:t})),Ft.active&&(null!=it&&-1!==it||(it=ot,at=rt),q({sortable:this,name:"end",toEl:Z,originalEvent:t}),this.save())))),this._nulling()},_nulling:function(){G("nulling",this),Q=V=Z=$=J=et=tt=nt=ct=ut=gt=it=at=ot=rt=mt=vt=st=lt=Ft.dragged=Ft.ghost=Ft.clone=Ft.active=null,xt.forEach(function(t){t.checked=!0}),xt.length=dt=ht=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":V&&(this._onDragOver(t),function(t){t.dataTransfer&&(t.dataTransfer.dropEffect="move");t.cancelable&&t.preventDefault()}(t));break;case"selectstart":t.preventDefault()}},toArray:function(){for(var t,e=[],n=this.el.children,o=0,i=n.length,r=this.options;o<i;o++)P(t=n[o],r.draggable,this.el,!1)&&e.push(t.getAttribute(r.dataIdAttr)||function(t){var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,o=0;for(;n--;)o+=e.charCodeAt(n);return o.toString(36)}(t));return e},sort:function(t,e){var n={},o=this.el;this.toArray().forEach(function(t,e){e=o.children[e];P(e,this.options.draggable,o,!1)&&(n[t]=e)},this),e&&this.captureAnimationState(),t.forEach(function(t){n[t]&&(o.removeChild(n[t]),o.appendChild(n[t]))}),e&&this.animateAll()},save:function(){var t=this.options.store;t&&t.set&&t.set(this)},closest:function(t,e){return P(t,e||this.options.draggable,this.el,!1)},option:function(t,e){var n=this.options;if(void 0===e)return n[t];var o=W.modifyOption(this,t,e);n[t]=void 0!==o?o:e,"group"===t&&kt(n)},destroy:function(){G("destroy",this);var t=this.el;t[K]=null,f(t,"mousedown",this._onTapStart),f(t,"touchstart",this._onTapStart),f(t,"pointerdown",this._onTapStart),this.nativeDraggable&&(f(t,"dragover",this),f(t,"dragenter",this)),Array.prototype.forEach.call(t.querySelectorAll("[draggable]"),function(t){t.removeAttribute("draggable")}),this._onDrop(),this._disableDelayedDragEvents(),Dt.splice(Dt.indexOf(this.el),1),this.el=t=null},_hideClone:function(){nt||(G("hideClone",this),Ft.eventCanceled||(R(et,"display","none"),this.options.removeCloneOnHide&&et.parentNode&&et.parentNode.removeChild(et),nt=!0))},_showClone:function(t){"clone"===t.lastPutMode?nt&&(G("showClone",this),Ft.eventCanceled||(V.parentNode!=Q||this.options.group.revertClone?J?Q.insertBefore(et,J):Q.appendChild(et):Q.insertBefore(et,V),this.options.group.revertClone&&this.animate(V,et),R(et,"display",""),nt=!1)):this._hideClone()}},Ot&&h(document,"touchmove",function(t){(Ft.active||wt)&&t.cancelable&&t.preventDefault()}),Ft.utils={on:h,off:f,css:R,find:b,is:function(t,e){return!!P(t,e,t,!1)},extend:function(t,e){if(t&&e)for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t},throttle:S,closest:P,toggleClass:k,clone:_,index:j,nextTick:Kt,cancelNextTick:Wt,detectDirection:Pt,getChild:B},Ft.get=function(t){return t[K]},Ft.mount=function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];(e=e[0].constructor===Array?e[0]:e).forEach(function(t){if(!t.prototype||!t.prototype.constructor)throw"Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(t));t.utils&&(Ft.utils=I(I({},Ft.utils),t.utils)),W.mount(t)})},Ft.create=function(t,e){return new Ft(t,e)};var zt,Gt,Ut,qt,Vt,Zt,$t=[],Qt=!(Ft.version="1.15.2");function Jt(){$t.forEach(function(t){clearInterval(t.pid)}),$t=[]}function te(){clearInterval(Zt)}var ee,ne=S(function(n,t,e,o){if(t.scroll){var i,r=(n.touches?n.touches[0]:n).clientX,a=(n.touches?n.touches[0]:n).clientY,l=t.scrollSensitivity,s=t.scrollSpeed,c=O(),u=!1;Gt!==e&&(Gt=e,Jt(),zt=t.scroll,i=t.scrollFn,!0===zt&&(zt=M(e,!0)));var d=0,h=zt;do{var f=h,p=X(f),g=p.top,m=p.bottom,v=p.left,b=p.right,y=p.width,w=p.height,E=void 0,D=void 0,S=f.scrollWidth,_=f.scrollHeight,C=R(f),T=f.scrollLeft,p=f.scrollTop,D=f===c?(E=y<S&&("auto"===C.overflowX||"scroll"===C.overflowX||"visible"===C.overflowX),w<_&&("auto"===C.overflowY||"scroll"===C.overflowY||"visible"===C.overflowY)):(E=y<S&&("auto"===C.overflowX||"scroll"===C.overflowX),w<_&&("auto"===C.overflowY||"scroll"===C.overflowY)),T=E&&(Math.abs(b-r)<=l&&T+y<S)-(Math.abs(v-r)<=l&&!!T),p=D&&(Math.abs(m-a)<=l&&p+w<_)-(Math.abs(g-a)<=l&&!!p);if(!$t[d])for(var x=0;x<=d;x++)$t[x]||($t[x]={});$t[d].vx==T&&$t[d].vy==p&&$t[d].el===f||($t[d].el=f,$t[d].vx=T,$t[d].vy=p,clearInterval($t[d].pid),0==T&&0==p||(u=!0,$t[d].pid=setInterval(function(){o&&0===this.layer&&Ft.active._onTouchMove(Vt);var t=$t[this.layer].vy?$t[this.layer].vy*s:0,e=$t[this.layer].vx?$t[this.layer].vx*s:0;"function"==typeof i&&"continue"!==i.call(Ft.dragged.parentNode[K],e,t,n,Vt,$t[this.layer].el)||H($t[this.layer].el,e,t)}.bind({layer:d}),24))),d++}while(t.bubbleScroll&&h!==c&&(h=M(h,!1)));Qt=u}},30),c=function(t){var e=t.originalEvent,n=t.putSortable,o=t.dragEl,i=t.activeSortable,r=t.dispatchSortableEvent,a=t.hideGhostForTarget,t=t.unhideGhostForTarget;e&&(i=n||i,a(),e=e.changedTouches&&e.changedTouches.length?e.changedTouches[0]:e,e=document.elementFromPoint(e.clientX,e.clientY),t(),i&&!i.el.contains(e)&&(r("spill"),this.onSpill({dragEl:o,putSortable:n})))};function oe(){}function ie(){}oe.prototype={startIndex:null,dragStart:function(t){t=t.oldDraggableIndex;this.startIndex=t},onSpill:function(t){var e=t.dragEl,n=t.putSortable;this.sortable.captureAnimationState(),n&&n.captureAnimationState();t=B(this.sortable.el,this.startIndex,this.options);t?this.sortable.el.insertBefore(e,t):this.sortable.el.appendChild(e),this.sortable.animateAll(),n&&n.animateAll()},drop:c},a(oe,{pluginName:"revertOnSpill"}),ie.prototype={onSpill:function(t){var e=t.dragEl,t=t.putSortable||this.sortable;t.captureAnimationState(),e.parentNode&&e.parentNode.removeChild(e),t.animateAll()},drop:c},a(ie,{pluginName:"removeOnSpill"});var re,ae,le,se,ce,ue=[],de=[],he=!1,fe=!1,pe=!1;function ge(n,o){de.forEach(function(t,e){e=o.children[t.sortableIndex+(n?Number(e):0)];e?o.insertBefore(t,e):o.appendChild(t)})}function me(){ue.forEach(function(t){t!==le&&t.parentNode&&t.parentNode.removeChild(t)})}return Ft.mount(new function(){function t(){for(var t in this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0},this)"_"===t.charAt(0)&&"function"==typeof this[t]&&(this[t]=this[t].bind(this))}return t.prototype={dragStarted:function(t){t=t.originalEvent;this.sortable.nativeDraggable?h(document,"dragover",this._handleAutoScroll):this.options.supportPointer?h(document,"pointermove",this._handleFallbackAutoScroll):t.touches?h(document,"touchmove",this._handleFallbackAutoScroll):h(document,"mousemove",this._handleFallbackAutoScroll)},dragOverCompleted:function(t){t=t.originalEvent;this.options.dragOverBubble||t.rootEl||this._handleAutoScroll(t)},drop:function(){this.sortable.nativeDraggable?f(document,"dragover",this._handleAutoScroll):(f(document,"pointermove",this._handleFallbackAutoScroll),f(document,"touchmove",this._handleFallbackAutoScroll),f(document,"mousemove",this._handleFallbackAutoScroll)),te(),Jt(),clearTimeout(g),g=void 0},nulling:function(){Vt=Gt=zt=Qt=Zt=Ut=qt=null,$t.length=0},_handleFallbackAutoScroll:function(t){this._handleAutoScroll(t,!0)},_handleAutoScroll:function(e,n){var o,i=this,r=(e.touches?e.touches[0]:e).clientX,a=(e.touches?e.touches[0]:e).clientY,t=document.elementFromPoint(r,a);Vt=e,n||this.options.forceAutoScrollFallback||w||y||u?(ne(e,this.options,t,n),o=M(t,!0),!Qt||Zt&&r===Ut&&a===qt||(Zt&&te(),Zt=setInterval(function(){var t=M(document.elementFromPoint(r,a),!0);t!==o&&(o=t,Jt()),ne(e,i.options,t,n)},10),Ut=r,qt=a)):this.options.bubbleScroll&&M(t,!0)!==O()?ne(e,this.options,M(t,!1),!1):Jt()}},a(t,{pluginName:"scroll",initializeByDefault:!0})}),Ft.mount(ie,oe),Ft.mount(new function(){function t(){this.defaults={swapClass:"sortable-swap-highlight"}}return t.prototype={dragStart:function(t){t=t.dragEl;ee=t},dragOverValid:function(t){var e=t.completed,n=t.target,o=t.onMove,i=t.activeSortable,r=t.changed,a=t.cancel;i.options.swap&&(t=this.sortable.el,i=this.options,n&&n!==t&&(t=ee,ee=!1!==o(n)?(k(n,i.swapClass,!0),n):null,t&&t!==ee&&k(t,i.swapClass,!1)),r(),e(!0),a())},drop:function(t){var e,n,o=t.activeSortable,i=t.putSortable,r=t.dragEl,a=i||this.sortable,l=this.options;ee&&k(ee,l.swapClass,!1),ee&&(l.swap||i&&i.options.swap)&&r!==ee&&(a.captureAnimationState(),a!==o&&o.captureAnimationState(),n=ee,t=(e=r).parentNode,l=n.parentNode,t&&l&&!t.isEqualNode(n)&&!l.isEqualNode(e)&&(i=j(e),r=j(n),t.isEqualNode(l)&&i<r&&r++,t.insertBefore(n,t.children[i]),l.insertBefore(e,l.children[r])),a.animateAll(),a!==o&&o.animateAll())},nulling:function(){ee=null}},a(t,{pluginName:"swap",eventProperties:function(){return{swapItem:ee}}})}),Ft.mount(new function(){function t(o){for(var t in this)"_"===t.charAt(0)&&"function"==typeof this[t]&&(this[t]=this[t].bind(this));o.options.avoidImplicitDeselect||(o.options.supportPointer?h(document,"pointerup",this._deselectMultiDrag):(h(document,"mouseup",this._deselectMultiDrag),h(document,"touchend",this._deselectMultiDrag))),h(document,"keydown",this._checkKeyDown),h(document,"keyup",this._checkKeyUp),this.defaults={selectedClass:"sortable-selected",multiDragKey:null,avoidImplicitDeselect:!1,setData:function(t,e){var n="";ue.length&&ae===o?ue.forEach(function(t,e){n+=(e?", ":"")+t.textContent}):n=e.textContent,t.setData("Text",n)}}}return t.prototype={multiDragKeyDown:!1,isMultiDrag:!1,delayStartGlobal:function(t){t=t.dragEl;le=t},delayEnded:function(){this.isMultiDrag=~ue.indexOf(le)},setupClone:function(t){var e=t.sortable,t=t.cancel;if(this.isMultiDrag){for(var n=0;n<ue.length;n++)de.push(_(ue[n])),de[n].sortableIndex=ue[n].sortableIndex,de[n].draggable=!1,de[n].style["will-change"]="",k(de[n],this.options.selectedClass,!1),ue[n]===le&&k(de[n],this.options.chosenClass,!1);e._hideClone(),t()}},clone:function(t){var e=t.sortable,n=t.rootEl,o=t.dispatchSortableEvent,t=t.cancel;this.isMultiDrag&&(this.options.removeCloneOnHide||ue.length&&ae===e&&(ge(!0,n),o("clone"),t()))},showClone:function(t){var e=t.cloneNowShown,n=t.rootEl,t=t.cancel;this.isMultiDrag&&(ge(!1,n),de.forEach(function(t){R(t,"display","")}),e(),ce=!1,t())},hideClone:function(t){var e=this,n=(t.sortable,t.cloneNowHidden),t=t.cancel;this.isMultiDrag&&(de.forEach(function(t){R(t,"display","none"),e.options.removeCloneOnHide&&t.parentNode&&t.parentNode.removeChild(t)}),n(),ce=!0,t())},dragStartGlobal:function(t){t.sortable;!this.isMultiDrag&&ae&&ae.multiDrag._deselectMultiDrag(),ue.forEach(function(t){t.sortableIndex=j(t)}),ue=ue.sort(function(t,e){return t.sortableIndex-e.sortableIndex}),pe=!0},dragStarted:function(t){var e,n=this,t=t.sortable;this.isMultiDrag&&(this.options.sort&&(t.captureAnimationState(),this.options.animation&&(ue.forEach(function(t){t!==le&&R(t,"position","absolute")}),e=X(le,!1,!0,!0),ue.forEach(function(t){t!==le&&C(t,e)}),he=fe=!0)),t.animateAll(function(){he=fe=!1,n.options.animation&&ue.forEach(function(t){T(t)}),n.options.sort&&me()}))},dragOver:function(t){var e=t.target,n=t.completed,t=t.cancel;fe&&~ue.indexOf(e)&&(n(!1),t())},revert:function(t){var n,o,e=t.fromSortable,i=t.rootEl,r=t.sortable,a=t.dragRect;1<ue.length&&(ue.forEach(function(t){r.addAnimationState({target:t,rect:fe?X(t):a}),T(t),t.fromRect=a,e.removeAnimationState(t)}),fe=!1,n=!this.options.removeCloneOnHide,o=i,ue.forEach(function(t,e){e=o.children[t.sortableIndex+(n?Number(e):0)];e?o.insertBefore(t,e):o.appendChild(t)}))},dragOverCompleted:function(t){var e,n=t.sortable,o=t.isOwner,i=t.insertion,r=t.activeSortable,a=t.parentEl,l=t.putSortable,t=this.options;i&&(o&&r._hideClone(),he=!1,t.animation&&1<ue.length&&(fe||!o&&!r.options.sort&&!l)&&(e=X(le,!1,!0,!0),ue.forEach(function(t){t!==le&&(C(t,e),a.appendChild(t))}),fe=!0),o||(fe||me(),1<ue.length?(o=ce,r._showClone(n),r.options.animation&&!ce&&o&&de.forEach(function(t){r.addAnimationState({target:t,rect:se}),t.fromRect=se,t.thisAnimationDuration=null})):r._showClone(n)))},dragOverAnimationCapture:function(t){var e=t.dragRect,n=t.isOwner,t=t.activeSortable;ue.forEach(function(t){t.thisAnimationDuration=null}),t.options.animation&&!n&&t.multiDrag.isMultiDrag&&(se=a({},e),e=v(le,!0),se.top-=e.f,se.left-=e.e)},dragOverAnimationComplete:function(){fe&&(fe=!1,me())},drop:function(t){var e=t.originalEvent,n=t.rootEl,o=t.parentEl,i=t.sortable,r=t.dispatchSortableEvent,a=t.oldIndex,l=t.putSortable,s=l||this.sortable;if(e){var c,u,d,h=this.options,f=o.children;if(!pe)if(h.multiDragKey&&!this.multiDragKeyDown&&this._deselectMultiDrag(),k(le,h.selectedClass,!~ue.indexOf(le)),~ue.indexOf(le))ue.splice(ue.indexOf(le),1),re=null,z({sortable:i,rootEl:n,name:"deselect",targetEl:le,originalEvent:e});else{if(ue.push(le),z({sortable:i,rootEl:n,name:"select",targetEl:le,originalEvent:e}),e.shiftKey&&re&&i.el.contains(re)){var p=j(re),t=j(le);if(~p&&~t&&p!==t)for(var g,m=p<t?(g=p,t):(g=t,p+1);g<m;g++)~ue.indexOf(f[g])||(k(f[g],h.selectedClass,!0),ue.push(f[g]),z({sortable:i,rootEl:n,name:"select",targetEl:f[g],originalEvent:e}))}else re=le;ae=s}pe&&this.isMultiDrag&&(fe=!1,(o[K].options.sort||o!==n)&&1<ue.length&&(c=X(le),u=j(le,":not(."+this.options.selectedClass+")"),!he&&h.animation&&(le.thisAnimationDuration=null),s.captureAnimationState(),he||(h.animation&&(le.fromRect=c,ue.forEach(function(t){var e;t.thisAnimationDuration=null,t!==le&&(e=fe?X(t):c,t.fromRect=e,s.addAnimationState({target:t,rect:e}))})),me(),ue.forEach(function(t){f[u]?o.insertBefore(t,f[u]):o.appendChild(t),u++}),a===j(le)&&(d=!1,ue.forEach(function(t){t.sortableIndex!==j(t)&&(d=!0)}),d&&(r("update"),r("sort")))),ue.forEach(function(t){T(t)}),s.animateAll()),ae=s),(n===o||l&&"clone"!==l.lastPutMode)&&de.forEach(function(t){t.parentNode&&t.parentNode.removeChild(t)})}},nullingGlobal:function(){this.isMultiDrag=pe=!1,de.length=0},destroyGlobal:function(){this._deselectMultiDrag(),f(document,"pointerup",this._deselectMultiDrag),f(document,"mouseup",this._deselectMultiDrag),f(document,"touchend",this._deselectMultiDrag),f(document,"keydown",this._checkKeyDown),f(document,"keyup",this._checkKeyUp)},_deselectMultiDrag:function(t){if(!(void 0!==pe&&pe||ae!==this.sortable||t&&P(t.target,this.options.draggable,this.sortable.el,!1)||t&&0!==t.button))for(;ue.length;){var e=ue[0];k(e,this.options.selectedClass,!1),ue.shift(),z({sortable:this.sortable,rootEl:this.sortable.el,name:"deselect",targetEl:e,originalEvent:t})}},_checkKeyDown:function(t){t.key===this.options.multiDragKey&&(this.multiDragKeyDown=!0)},_checkKeyUp:function(t){t.key===this.options.multiDragKey&&(this.multiDragKeyDown=!1)}},a(t,{pluginName:"multiDrag",utils:{select:function(t){var e=t.parentNode[K];e&&e.options.multiDrag&&!~ue.indexOf(t)&&(ae&&ae!==e&&(ae.multiDrag._deselectMultiDrag(),ae=e),k(t,e.options.selectedClass,!0),ue.push(t))},deselect:function(t){var e=t.parentNode[K],n=ue.indexOf(t);e&&e.options.multiDrag&&~n&&(k(t,e.options.selectedClass,!1),ue.splice(n,1))}},eventProperties:function(){var n=this,o=[],i=[];return ue.forEach(function(t){var e;o.push({multiDragElement:t,index:t.sortableIndex}),e=fe&&t!==le?-1:fe?j(t,":not(."+n.options.selectedClass+")"):j(t),i.push({multiDragElement:t,index:e})}),{items:r(ue),clones:[].concat(de),oldIndicies:o,newIndicies:i}},optionListeners:{multiDragKey:function(t){return"ctrl"===(t=t.toLowerCase())?t="Control":1<t.length&&(t=t.charAt(0).toUpperCase()+t.substr(1)),t}}})}),Ft});
4710
4711// final JS calls after everything has been loaded
4712document.dispatchEvent( new CustomEvent('events_manager_js_loaded') );
4713//# sourceMappingURL=events-manager.js.map;

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.