/* global jQuery */

const configs = window.gfMultiDatePickerConfig || [];

function initializeMultiDatePickers() {
	const forms = document.querySelectorAll('.gform_wrapper');

	if (!forms.length) return;

	if (typeof jQuery === 'undefined' || typeof jQuery.fn.datepicker !== 'function') {
		console.warn('jQuery UI Datepicker is not available.');
		return;
	}

	configs.forEach((config) => {
		const gfInput = document.querySelector(`#input_${config.form_id}_${config.field_id}`);
		const hiddenField = document.querySelector(
			`#input_${config.form_id}_${config.hidden_field_id}`,
		);

		if (!gfInput || !hiddenField) return;

		// Hide original input
		gfInput.style.display = 'none';

		// Check if visible input already exists to avoid duplicates
		let visibleInput = gfInput.parentNode.querySelector('.multi-date-visible');
		if (!visibleInput) {
			visibleInput = document.createElement('input');
			visibleInput.type = 'text';
			visibleInput.className = 'multi-date-visible';
			visibleInput.placeholder = 'Select dates';
			visibleInput.readOnly = true;
			gfInput.parentNode.insertBefore(visibleInput, gfInput);
		}

		// Parse dates from hidden field and set visible input value on init
		const selectedDates = new Set((hiddenField.value || '').split(', ').filter(Boolean));
		visibleInput.value = Array.from(selectedDates).join(', ');

		jQuery(gfInput).datepicker('destroy'); // remove default GF datepicker

		// Destroy any existing datepicker on visibleInput before initializing
		if (jQuery(visibleInput).hasClass('hasDatepicker')) {
			jQuery(visibleInput).datepicker('destroy');
		}

		jQuery(visibleInput).datepicker({
			dateFormat: config.date_format,
			changeMonth: true,
			changeYear: true,
			yearRange: '-0:+20',
			beforeShow: (inputElem, inst) => {
				inputElem.classList.add('multi-date-picker-initialized');

				const dpWrap = inst.dpDiv[0];
				dpWrap.classList.add(
					'gform-theme-datepicker',
					'gform-theme--orbital',
					'gform-theme--framework',
					'gform-theme--foundation',
				);

				// Prevent page reload on month nav
				setTimeout(() => {
					const widget = document.querySelector('.ui-datepicker');
					if (widget && !widget.dataset.listenerSet) {
						widget.dataset.listenerSet = 'true';
						widget.addEventListener('click', (event) => {
							const target = event.target.closest(
								'.ui-datepicker-prev, .ui-datepicker-next',
							);
							if (target) {
								event.preventDefault();
								event.stopPropagation();
							}
						});
					}
				}, 10);
			},
			beforeShowDay: (date) => {
				const dateString = jQuery.datepicker.formatDate('mm/dd/yy', date);
				const isSelected = selectedDates.has(dateString);
				return [true, isSelected ? 'ui-state-highlight' : ''];
			},
			onSelect: (dateText, inst) => {
				inst.inline = true;

				if (selectedDates.has(dateText)) {
					selectedDates.delete(dateText);
				} else {
					selectedDates.add(dateText);
				}

				const datesArray = Array.from(selectedDates);
				visibleInput.value = datesArray.join(', '); // Show all selected
				hiddenField.value = datesArray.join(', '); // Store all selected
				gfInput.value = datesArray[0] || ''; // Submit only one
			},
			onClose: (dateText, inst) => {
				inst.inline = false;
			},
		});
	});
}

// Initialize on DOM ready and every AJAX form render (e.g., validation error)
document.addEventListener('DOMContentLoaded', initializeMultiDatePickers);

jQuery(document).on('gform_post_render', function () {
	initializeMultiDatePickers();
});
;
/*! This file is auto-generated */
"use strict";var wp;(wp||={}).domReady=(()=>{var o=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var f=(e,t)=>{for(var n in t)o(e,n,{get:t[n],enumerable:!0})},m=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let d of a(t))!i.call(e,d)&&d!==n&&o(e,d,{get:()=>t[d],enumerable:!(r=u(t,d))||r.enumerable});return e};var c=e=>m(o({},"__esModule",{value:!0}),e);var p={};f(p,{default:()=>y});function y(e){if(!(typeof document>"u")){if(document.readyState==="complete"||document.readyState==="interactive")return void e();document.addEventListener("DOMContentLoaded",e)}}return c(p);})();
if (typeof wp.domReady === 'object' && wp.domReady.default) { wp.domReady = wp.domReady.default; }
;
/*! This file is auto-generated */
"use strict";var wp;(wp||={}).hooks=(()=>{var v=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var w=(e,n)=>{for(var s in n)v(e,s,{get:n[s],enumerable:!0})},D=(e,n,s,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of g(n))!I.call(e,t)&&t!==s&&v(e,t,{get:()=>n[t],enumerable:!(r=S(n,t))||r.enumerable});return e};var T=e=>D(v({},"__esModule",{value:!0}),e);var le={};w(le,{actions:()=>ae,addAction:()=>J,addFilter:()=>K,applyFilters:()=>N,applyFiltersAsync:()=>ee,createHooks:()=>F,currentAction:()=>te,currentFilter:()=>re,defaultHooks:()=>b,didAction:()=>ie,didFilter:()=>se,doAction:()=>X,doActionAsync:()=>Y,doingAction:()=>ne,doingFilter:()=>oe,filters:()=>ce,hasAction:()=>P,hasFilter:()=>Q,removeAction:()=>L,removeAllActions:()=>U,removeAllFilters:()=>W,removeFilter:()=>M});function z(e){return typeof e!="string"||e===""?(console.error("The namespace must be a non-empty string."),!1):/^[a-zA-Z][a-zA-Z0-9_.\-\/]*$/.test(e)?!0:(console.error("The namespace can only contain numbers, letters, dashes, periods, underscores and slashes."),!1)}var m=z;function E(e){return typeof e!="string"||e===""?(console.error("The hook name must be a non-empty string."),!1):/^__/.test(e)?(console.error("The hook name cannot begin with `__`."),!1):/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(e)?!0:(console.error("The hook name can only contain numbers, letters, dashes, periods and underscores."),!1)}var f=E;function Z(e,n){return function(r,t,a,i=10){let c=e[n];if(!f(r)||!m(t))return;if(typeof a!="function"){console.error("The hook callback must be a function.");return}if(typeof i!="number"){console.error("If specified, the hook priority must be a number.");return}let l={callback:a,priority:i,namespace:t};if(c[r]){let o=c[r].handlers,d;for(d=o.length;d>0&&!(i>=o[d-1].priority);d--);d===o.length?o[d]=l:o.splice(d,0,l),c.__current.forEach(h=>{h.name===r&&h.currentIndex>=d&&h.currentIndex++})}else c[r]={handlers:[l],runs:0};r!=="hookAdded"&&e.doAction("hookAdded",r,t,a,i)}}var H=Z;function C(e,n,s=!1){return function(t,a){let i=e[n];if(!f(t)||!s&&!m(a))return;if(!i[t])return 0;let c=0;if(s)c=i[t].handlers.length,i[t]={runs:i[t].runs,handlers:[]};else{let l=i[t].handlers;for(let o=l.length-1;o>=0;o--)l[o].namespace===a&&(l.splice(o,1),c++,i.__current.forEach(d=>{d.name===t&&d.currentIndex>=o&&d.currentIndex--}))}return t!=="hookRemoved"&&e.doAction("hookRemoved",t,a),c}}var p=C;function O(e,n){return function(r,t){let a=e[n];return typeof t<"u"?r in a&&a[r].handlers.some(i=>i.namespace===t):r in a}}var _=O;function j(e,n,s,r){return function(a,...i){let c=e[n];c[a]||(c[a]={handlers:[],runs:0}),c[a].runs++;let l=c[a].handlers;if(!l||!l.length)return s?i[0]:void 0;let o={name:a,currentIndex:0};async function d(){try{c.__current.add(o);let u=s?i[0]:void 0;for(;o.currentIndex<l.length;)u=await l[o.currentIndex].callback.apply(null,i),s&&(i[0]=u),o.currentIndex++;return s?u:void 0}finally{c.__current.delete(o)}}function h(){try{c.__current.add(o);let u=s?i[0]:void 0;for(;o.currentIndex<l.length;)u=l[o.currentIndex].callback.apply(null,i),s&&(i[0]=u),o.currentIndex++;return s?u:void 0}finally{c.__current.delete(o)}}return(r?d:h)()}}var A=j;function $(e,n){return function(){let r=e[n];return Array.from(r.__current).at(-1)?.name??null}}var y=$;function V(e,n){return function(r){let t=e[n];return typeof r>"u"?t.__current.size>0:Array.from(t.__current).some(a=>a.name===r)}}var k=V;function q(e,n){return function(r){let t=e[n];if(f(r))return t[r]&&t[r].runs?t[r].runs:0}}var x=q;var B=class{actions;filters;addAction;addFilter;removeAction;removeFilter;hasAction;hasFilter;removeAllActions;removeAllFilters;doAction;doActionAsync;applyFilters;applyFiltersAsync;currentAction;currentFilter;doingAction;doingFilter;didAction;didFilter;constructor(){this.actions=Object.create(null),this.actions.__current=new Set,this.filters=Object.create(null),this.filters.__current=new Set,this.addAction=H(this,"actions"),this.addFilter=H(this,"filters"),this.removeAction=p(this,"actions"),this.removeFilter=p(this,"filters"),this.hasAction=_(this,"actions"),this.hasFilter=_(this,"filters"),this.removeAllActions=p(this,"actions",!0),this.removeAllFilters=p(this,"filters",!0),this.doAction=A(this,"actions",!1,!1),this.doActionAsync=A(this,"actions",!1,!0),this.applyFilters=A(this,"filters",!0,!1),this.applyFiltersAsync=A(this,"filters",!0,!0),this.currentAction=y(this,"actions"),this.currentFilter=y(this,"filters"),this.doingAction=k(this,"actions"),this.doingFilter=k(this,"filters"),this.didAction=x(this,"actions"),this.didFilter=x(this,"filters")}};function G(){return new B}var F=G;var b=F(),{addAction:J,addFilter:K,removeAction:L,removeFilter:M,hasAction:P,hasFilter:Q,removeAllActions:U,removeAllFilters:W,doAction:X,doActionAsync:Y,applyFilters:N,applyFiltersAsync:ee,currentAction:te,currentFilter:re,doingAction:ne,doingFilter:oe,didAction:ie,didFilter:se,actions:ae,filters:ce}=b;return T(le);})();
;
