/* * @author Usman Naeem */ async function load_timezones(select_id, selected_time_zone, select_local_for_unselected, preferred_check) { try { const prefferedTimezonesOnlyElement = preferred_check ? getElement("preferred_timezones_only") : "undefined"; if (!Intl.supportedValuesOf || (prefferedTimezonesOnlyElement && prefferedTimezonesOnlyElement.checked)) { const timeZones = ['Australia/Sydney', 'Asia/Tokyo', 'Asia/Hong_Kong', 'Asia/Singapore', 'Asia/Karachi', 'Asia/Dubai', 'Europe/London', 'America/New_York']; if (!selected_time_zone) { selected_time_zone = 'America/New_York'; } if (Intl.supportedValuesOf) { if (!selected_time_zone && select_local_for_unselected) { selected_time_zone = localTimezone; } if (!timeZones.includes(selected_time_zone)) { timeZones.push(selected_time_zone); } const localTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone; if (!timeZones.includes(localTimezone)) { timeZones.push(localTimezone); } } await add_timezone_options(select_id, timeZones, selected_time_zone).catch((error) => { throw new Error("Failed to load timezones"); }); } else { const localTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone; if (!selected_time_zone) { selected_time_zone = select_local_for_unselected ? localTimezone : 'America/New_York'; } const allTimeZones = Intl.supportedValuesOf('timeZone'); await add_timezone_options(select_id, allTimeZones, selected_time_zone); } } catch (error) { throw new Error("Failed to load timezones"); } } async function add_timezone_options(select_id, timeZones, selectedTimezone) { const timezoneElement = getElement(select_id); timezoneElement.innerHTML = ""; const zoneCityoneMap = new Map(); const cities = []; timeZones.forEach(timeZone => { const city = timeZone.substring(timeZone.indexOf("/") + 1).replaceAll("_", " "); cities.push(city); zoneCityoneMap.set(city, timeZone); }); cities.sort(); if (!selectedTimezone) { selectedTimezone = zoneCityoneMap.get(timeZones[0]); } cities.forEach(city => { var optionElement = document.createElement('option'); const timeZone = zoneCityoneMap.get(city); optionElement.value = timeZone; optionElement.innerHTML = city; if (selectedTimezone === timeZone) { optionElement.selected = true; } timezoneElement.appendChild(optionElement); }); }