const webinarUtils = { getTimestamp: (dateString) => new Date(dateString).getTime(), addDaysToTimestamp: (dateString, days) => { const date = new Date(dateString); date.setDate(date.getDate() + days); return date.getTime(); }, setValueAndTrigger: (element, value) => { if (!element) return; element.value = value.toString(); element.dispatchEvent(new Event("change", { bubbles: true })); }, extractPrefix: (name) => name.replace(/_webinar_date_list$/, ""), updateRemindDate: (doc, prefix, baseDate, index) => { const spanEl = doc.querySelector( `[name="${prefix}_webinar_remind_span_${index}"]` ); const remindEl = doc.querySelector( `[name="${prefix}_webinar_remind_${index}"]` ); if (!spanEl || !remindEl || !baseDate) return; const days = parseInt(spanEl.value, 10) || 0; // Treat NaN as 0 const timestamp = webinarUtils.addDaysToTimestamp(baseDate, -days); webinarUtils.setValueAndTrigger(remindEl, timestamp); }, }; const initializeWebinarForm = (doc) => { const dateListElements = doc.querySelectorAll('[name$="_webinar_date_list"]'); if (dateListElements.length === 0) return false; const prefixes = [ ...new Set( Array.from(dateListElements).map((el) => webinarUtils.extractPrefix(el.name)) ), ]; prefixes.forEach((prefix) => { const dateEl = doc.querySelector(`[name="${prefix}_webinar_date"]`); const radioButtons = doc.querySelectorAll( `[name="${prefix}_webinar_date_list"]` ); const now = new Date(); const oneMonthLater = new Date(); oneMonthLater.setMonth(oneMonthLater.getMonth() + 1); radioButtons.forEach((radio) => { const radioDate = new Date(radio.value); if (radioDate < now || radioDate > oneMonthLater) { const parentLabel = radio.closest("label") || radio.parentElement; if (parentLabel) { parentLabel.style.display = "none"; } } radio.addEventListener("change", () => { if (!radio.checked) return; const selectedValue = radio.value; const timestamp = webinarUtils.getTimestamp(selectedValue); // Set webinar date webinarUtils.setValueAndTrigger(dateEl, timestamp); // Set remind dates [1, 2].forEach((i) => webinarUtils.updateRemindDate(doc, prefix, selectedValue, i)); }); }); }); return true; };