{"id":2248,"date":"2026-04-05T23:32:11","date_gmt":"2026-04-05T23:32:11","guid":{"rendered":"https:\/\/marineconservation.id\/?page_id=2248"},"modified":"2026-04-06T22:25:17","modified_gmt":"2026-04-06T22:25:17","slug":"daily-program","status":"publish","type":"page","link":"https:\/\/marineconservation.id\/id\/daily-program\/","title":{"rendered":"Daily Program"},"content":{"rendered":"<style>.elementor-2248 .elementor-element.elementor-element-95577d2{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;}.elementor-widget-heading .elementor-heading-title{font-family:var( --e-global-typography-primary-font-family ), Sans-serif;font-weight:var( --e-global-typography-primary-font-weight );color:var( --e-global-color-primary );}.elementor-2248 .elementor-element.elementor-element-98e5f4a .elementor-heading-title{color:#00399F;}.elementor-2248 .elementor-element.elementor-element-e9f3456{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;}.elementor-widget-image .widget-image-caption{color:var( --e-global-color-text );font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );}.elementor-2248 .elementor-element.elementor-element-124bb30{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;}<\/style>\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2248\" class=\"elementor elementor-2248\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-95577d2 e-flex e-con-boxed e-con e-parent\" data-id=\"95577d2\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-98e5f4a elementor-widget elementor-widget-heading\" data-id=\"98e5f4a\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Daily Program<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e9f3456 e-flex e-con-boxed e-con e-parent\" data-id=\"e9f3456\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e16e2e4 elementor-widget elementor-widget-image\" data-id=\"e16e2e4\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"724\" src=\"https:\/\/marineconservation.id\/wp-content\/uploads\/2026\/04\/515987507_10221668643985973_2655964326856352541_n-1024x724.jpg\" class=\"attachment-large size-large wp-image-2265\" alt=\"\" srcset=\"https:\/\/marineconservation.id\/wp-content\/uploads\/2026\/04\/515987507_10221668643985973_2655964326856352541_n-1024x724.jpg 1024w, https:\/\/marineconservation.id\/wp-content\/uploads\/2026\/04\/515987507_10221668643985973_2655964326856352541_n-300x212.jpg 300w, https:\/\/marineconservation.id\/wp-content\/uploads\/2026\/04\/515987507_10221668643985973_2655964326856352541_n-768x543.jpg 768w, https:\/\/marineconservation.id\/wp-content\/uploads\/2026\/04\/515987507_10221668643985973_2655964326856352541_n-18x12.jpg 18w, https:\/\/marineconservation.id\/wp-content\/uploads\/2026\/04\/515987507_10221668643985973_2655964326856352541_n.jpg 1280w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-124bb30 e-flex e-con-boxed e-con e-parent\" data-id=\"124bb30\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-144bd53 elementor-widget elementor-widget-html\" data-id=\"144bd53\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"multi-peserta-container\">\r\n  <h2>Program Registration (Multi-Participant)<\/h2>\r\n  <form id=\"multiPesertaForm\" action=\"\">\r\n    <!-- Data pengisi -->\r\n    <div class=\"form-section\">\r\n      <h3>Responsible Person \/ Contact<\/h3>\r\n      <div class=\"form-group\">\r\n        <label>Full Name (Responsible Person) *<\/label>\r\n        <input type=\"text\" id=\"penanggungJawab\" required>\r\n      <\/div>\r\n      <div class=\"form-group\">\r\n        <label>Email (Responsible Person) *<\/label>\r\n        <input type=\"email\" id=\"emailPenanggung\" required>\r\n      <\/div>\r\n      <div class=\"form-group\">\r\n        <label>WhatsApp Number (optional)<\/label>\r\n        <input type=\"text\" id=\"waPenanggung\">\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <hr>\r\n\r\n    <!-- Pilihan jumlah peserta -->\r\n    <div class=\"form-group\">\r\n      <label>Number of Participants *<\/label>\r\n      <select id=\"jumlahPeserta\" required>\r\n        <option value=\"1\">1 participant<\/option>\r\n        <option value=\"2\">2 participants<\/option>\r\n        <option value=\"3\">3 participants<\/option>\r\n        <option value=\"4\">4 participants<\/option>\r\n        <option value=\"5\">5 participants<\/option>\r\n        <option value=\"6\">6 participants<\/option>\r\n        <option value=\"7\">7 participants<\/option>\r\n        <option value=\"8\">8 participants<\/option>\r\n        <option value=\"9\">9 participants<\/option>\r\n        <option value=\"10\">10 participants<\/option>\r\n      <\/select>\r\n    <\/div>\r\n\r\n    <div id=\"pesertaContainer\"><\/div>\r\n\r\n    <button type=\"submit\" id=\"submitMultiBtn\">Save Registration<\/button>\r\n    <div id=\"multiStatus\" class=\"status-message\"><\/div>\r\n  <input type=\"hidden\" name=\"trp-form-language\" value=\"id\"\/><\/form>\r\n<\/div>\r\n\r\n<script>\r\n  \/\/ ========== DAFTAR NEGARA ==========\r\n  const countryList = [\r\n    \"Afghanistan\", \"Albania\", \"Algeria\", \"Andorra\", \"Angola\", \"Antigua and Barbuda\", \"Argentina\", \"Armenia\", \"Australia\", \"Austria\",\r\n    \"Azerbaijan\", \"Bahamas\", \"Bahrain\", \"Bangladesh\", \"Barbados\", \"Belarus\", \"Belgium\", \"Belize\", \"Benin\", \"Bhutan\", \"Bolivia\",\r\n    \"Bosnia and Herzegovina\", \"Botswana\", \"Brazil\", \"Brunei\", \"Bulgaria\", \"Burkina Faso\", \"Burundi\", \"Cabo Verde\", \"Cambodia\",\r\n    \"Cameroon\", \"Canada\", \"Central African Republic\", \"Chad\", \"Chile\", \"China\", \"Colombia\", \"Comoros\", \"Congo\", \"Costa Rica\",\r\n    \"C\u00f4te d'Ivoire\", \"Croatia\", \"Cuba\", \"Cyprus\", \"Czech Republic\", \"Denmark\", \"Djibouti\", \"Dominica\", \"Dominican Republic\",\r\n    \"Ecuador\", \"Egypt\", \"El Salvador\", \"Equatorial Guinea\", \"Eritrea\", \"Estonia\", \"Eswatini\", \"Ethiopia\", \"Fiji\", \"Finland\",\r\n    \"France\", \"Gabon\", \"Gambia\", \"Georgia\", \"Germany\", \"Ghana\", \"Greece\", \"Grenada\", \"Guatemala\", \"Guinea\", \"Guinea-Bissau\",\r\n    \"Guyana\", \"Haiti\", \"Honduras\", \"Hungary\", \"Iceland\", \"India\", \"Indonesia\", \"Iran\", \"Iraq\", \"Ireland\", \"Israel\", \"Italy\",\r\n    \"Jamaica\", \"Japan\", \"Jordan\", \"Kazakhstan\", \"Kenya\", \"Kiribati\", \"Korea North\", \"Korea South\", \"Kosovo\", \"Kuwait\", \"Kyrgyzstan\",\r\n    \"Laos\", \"Latvia\", \"Lebanon\", \"Lesotho\", \"Liberia\", \"Libya\", \"Liechtenstein\", \"Lithuania\", \"Luxembourg\", \"Madagascar\", \"Malawi\",\r\n    \"Malaysia\", \"Maldives\", \"Mali\", \"Malta\", \"Marshall Islands\", \"Mauritania\", \"Mauritius\", \"Mexico\", \"Micronesia\", \"Moldova\",\r\n    \"Monaco\", \"Mongolia\", \"Montenegro\", \"Morocco\", \"Mozambique\", \"Myanmar\", \"Namibia\", \"Nauru\", \"Nepal\", \"Netherlands\", \"New Zealand\",\r\n    \"Nicaragua\", \"Niger\", \"Nigeria\", \"North Macedonia\", \"Norway\", \"Oman\", \"Pakistan\", \"Palau\", \"Palestine\", \"Panama\", \"Papua New Guinea\",\r\n    \"Paraguay\", \"Peru\", \"Philippines\", \"Poland\", \"Portugal\", \"Qatar\", \"Romania\", \"Russia\", \"Rwanda\", \"Saint Kitts and Nevis\",\r\n    \"Saint Lucia\", \"Saint Vincent and the Grenadines\", \"Samoa\", \"San Marino\", \"Sao Tome and Principe\", \"Saudi Arabia\", \"Senegal\",\r\n    \"Serbia\", \"Seychelles\", \"Sierra Leone\", \"Singapore\", \"Slovakia\", \"Slovenia\", \"Solomon Islands\", \"Somalia\", \"South Africa\",\r\n    \"South Sudan\", \"Spain\", \"Sri Lanka\", \"Sudan\", \"Suriname\", \"Sweden\", \"Switzerland\", \"Syria\", \"Taiwan\", \"Tajikistan\", \"Tanzania\",\r\n    \"Thailand\", \"Timor-Leste\", \"Togo\", \"Tonga\", \"Trinidad and Tobago\", \"Tunisia\", \"Turkey\", \"Turkmenistan\", \"Tuvalu\", \"Uganda\",\r\n    \"Ukraine\", \"United Arab Emirates\", \"United Kingdom\", \"United States\", \"Uruguay\", \"Uzbekistan\", \"Vanuatu\", \"Vatican City\",\r\n    \"Venezuela\", \"Vietnam\", \"Yemen\", \"Zambia\", \"Zimbabwe\"\r\n  ];\r\n\r\n  \/\/ ========== FUNGSI BANTU ==========\r\n  function formatDate(date) {\r\n    let year = date.getFullYear();\r\n    let month = String(date.getMonth() + 1).padStart(2, '0');\r\n    let day = String(date.getDate()).padStart(2, '0');\r\n    return `${year}-${month}-${day}`;\r\n  }\r\n\r\n  function addDays(dateStr, days) {\r\n    let date = new Date(dateStr);\r\n    date.setDate(date.getDate() + days);\r\n    return formatDate(date);\r\n  }\r\n\r\n  function generateOneYearDates() {\r\n    const dates = [];\r\n    const today = new Date();\r\n    for (let i = 1; i <= 365; i++) {\r\n      const futureDate = new Date(today);\r\n      futureDate.setDate(today.getDate() + i);\r\n      dates.push(formatDate(futureDate));\r\n    }\r\n    return dates;\r\n  }\r\n\r\n  function groupDatesByMonth(datesArray) {\r\n    const groups = {};\r\n    datesArray.forEach(dateStr => {\r\n      const monthKey = dateStr.substring(0, 7);\r\n      if (!groups[monthKey]) groups[monthKey] = [];\r\n      groups[monthKey].push(dateStr);\r\n    });\r\n    return groups;\r\n  }\r\n\r\n  const allDates = generateOneYearDates();\r\n  const groupedDates = groupDatesByMonth(allDates);\r\n\r\n  function isDateAvailable(dateStr) {\r\n    return allDates.includes(dateStr);\r\n  }\r\n\r\n  function getConsecutiveDates(startDate, duration) {\r\n    let dates = [startDate];\r\n    for (let i = 1; i < duration; i++) {\r\n      let nextDate = addDays(startDate, i);\r\n      if (!isDateAvailable(nextDate)) return null;\r\n      dates.push(nextDate);\r\n    }\r\n    return dates;\r\n  }\r\n\r\n  function renderDateGridForPeserta(pesertaDiv, requiredCount, selectedDates) {\r\n    const containerDiv = pesertaDiv.querySelector('.monthly-dates-container');\r\n    const infoDiv = pesertaDiv.querySelector('.date-info-peserta');\r\n    const errorDiv = pesertaDiv.querySelector('.error-tanggal');\r\n    if (!containerDiv) return;\r\n    \r\n    containerDiv.innerHTML = '';\r\n    if (requiredCount === 1) {\r\n      infoDiv.innerHTML = `Select <strong>1 day<\/strong> (click on any date)`;\r\n    } else {\r\n      infoDiv.innerHTML = `Select <strong>START DATE<\/strong> for ${requiredCount} consecutive days`;\r\n    }\r\n    infoDiv.style.color = selectedDates.length === requiredCount ? 'green' : '#d9534f';\r\n    \r\n    if (selectedDates.length === requiredCount && requiredCount > 1) {\r\n      const range = selectedDates[0] + ' to ' + selectedDates[selectedDates.length-1];\r\n      infoDiv.innerHTML += `<br>\u2705 Selected: ${range}`;\r\n    }\r\n    \r\n    for (const [monthKey, datesOfMonth] of Object.entries(groupedDates)) {\r\n      const monthName = new Date(monthKey + '-01').toLocaleDateString('en-US', { year: 'numeric', month: 'long' });\r\n      const monthDiv = document.createElement('div');\r\n      monthDiv.className = 'month-group';\r\n      monthDiv.innerHTML = `<div class=\"month-title\">\ud83d\udcc5 ${monthName}<\/div><div class=\"date-grid-month\"><\/div>`;\r\n      const gridDiv = monthDiv.querySelector('.date-grid-month');\r\n      \r\n      datesOfMonth.forEach(dateStr => {\r\n        const btn = document.createElement('button');\r\n        btn.type = 'button';\r\n        btn.className = 'date-btn';\r\n        btn.textContent = dateStr.split('-').reverse().join('\/');\r\n        if (selectedDates.includes(dateStr)) btn.classList.add('selected');\r\n        \r\n        btn.addEventListener('click', (e) => {\r\n          e.preventDefault();\r\n          let currentSelected = JSON.parse(pesertaDiv.getAttribute('data-selected-dates') || '[]');\r\n          \r\n          if (requiredCount === 1) {\r\n            if (currentSelected.includes(dateStr)) currentSelected = [];\r\n            else currentSelected = [dateStr];\r\n          } else {\r\n            const consecutive = getConsecutiveDates(dateStr, requiredCount);\r\n            if (!consecutive) {\r\n              errorDiv.innerText = `Cannot start ${requiredCount} consecutive days from this date.`;\r\n              setTimeout(() => errorDiv.innerText = '', 2000);\r\n              return;\r\n            }\r\n            currentSelected = consecutive;\r\n          }\r\n          pesertaDiv.setAttribute('data-selected-dates', JSON.stringify(currentSelected));\r\n          renderDateGridForPeserta(pesertaDiv, requiredCount, currentSelected);\r\n        });\r\n        gridDiv.appendChild(btn);\r\n      });\r\n      containerDiv.appendChild(monthDiv);\r\n    }\r\n  }\r\n\r\n  \/\/ Fungsi untuk membuat dropdown negara\r\n  function createCountryDropdown(selectedValue = '') {\r\n    let html = '<select class=\"negaraPeserta\">';\r\n    html += '<option value=\"\">-- Select Country --<\/option>';\r\n    countryList.forEach(country => {\r\n      const selected = (country === selectedValue) ? 'selected' : '';\r\n      html += `<option value=\"${country}\" ${selected}>${country}<\/option>`;\r\n    });\r\n    html += '<\/select>';\r\n    return html;\r\n  }\r\n\r\n  \/\/ Membuat kartu peserta\r\n  function createPesertaCard(index, isFirst = false) {\r\n    const card = document.createElement('div');\r\n    card.className = 'peserta-card';\r\n    card.setAttribute('data-peserta-index', index);\r\n    card.setAttribute('data-selected-dates', JSON.stringify([]));\r\n    \r\n    let sameAsResponsibleHtml = '';\r\n    if (isFirst) {\r\n      sameAsResponsibleHtml = `\r\n        <div class=\"form-group\">\r\n          <label style=\"display: inline-block; margin-right: 10px;\">\r\n            <input type=\"checkbox\" id=\"sameAsResponsible_${index}\" class=\"same-as-responsible\"> Same as responsible person (auto-fill name & email)\r\n          <\/label>\r\n        <\/div>\r\n      `;\r\n    }\r\n    \r\n    card.innerHTML = `\r\n      <h3>Participant ${index + 1}<\/h3>\r\n      ${sameAsResponsibleHtml}\r\n      <div class=\"form-group\">\r\n        <label>Full Name *<\/label>\r\n        <input type=\"text\" class=\"namaPeserta\" required>\r\n      <\/div>\r\n      <div class=\"form-group\">\r\n        <label>Email *<\/label>\r\n        <input type=\"email\" class=\"emailPeserta\" required>\r\n      <\/div>\r\n      <div class=\"form-group\">\r\n        <label>Country *<\/label>\r\n        ${createCountryDropdown()}\r\n      <\/div>\r\n      <div class=\"form-group\">\r\n        <label>Age *<\/label>\r\n        <input type=\"number\" class=\"umurPeserta\" min=\"0\" max=\"120\" required>\r\n      <\/div>\r\n      <div class=\"form-group\">\r\n        <label>Diving License Level *<\/label>\r\n        <select class=\"lisensiPeserta\" required>\r\n          <option value=\"\">-- Select License --<\/option>\r\n          <option value=\"Open Water Diver\">Open Water Diver<\/option>\r\n          <option value=\"Advanced Open Water Diver\">Advanced Open Water Diver<\/option>\r\n          <option value=\"Rescue Diver\">Rescue Diver<\/option>\r\n          <option value=\"Dive Master\">Dive Master<\/option>\r\n          <option value=\"Instructor\">Instructor<\/option>\r\n          <option value=\"Course Director\">Course Director<\/option>\r\n        <\/select>\r\n      <\/div>\r\n      <div class=\"form-group\">\r\n        <label>Dive Log (number of dives) *<\/label>\r\n        <input type=\"number\" class=\"diveLogPeserta\" min=\"0\" step=\"1\" required>\r\n      <\/div>\r\n      <div class=\"form-group\">\r\n        <label>Select Program *<\/label>\r\n        <select class=\"programPeserta\" required>\r\n          <option value=\"\">-- Select Program --<\/option>\r\n          <option value=\"1 day program - IDR 2.300.000\">1 Day Program - IDR 2.300.000<\/option>\r\n          <option value=\"3 days program - IDR 5.300.000\">3 Days Program - IDR 5.300.000<\/option>\r\n          <option value=\"7 days program - IDR 9.800.000\">7 Days Program - IDR 9.800.000<\/option>\r\n        <\/select>\r\n      <\/div>\r\n      <div class=\"form-group\">\r\n        <label>Select Dates<\/label>\r\n        <div class=\"date-info-peserta\"><\/div>\r\n        <div class=\"monthly-dates-container\"><\/div>\r\n        <div class=\"error-tanggal\" style=\"color:red; font-size:12px;\"><\/div>\r\n      <\/div>\r\n      <hr>\r\n    `;\r\n    \r\n    \/\/ Jika peserta pertama, pasang event listener untuk checkbox auto-fill\r\n    if (isFirst) {\r\n      const chk = card.querySelector('.same-as-responsible');\r\n      const namaInput = card.querySelector('.namaPeserta');\r\n      const emailInput = card.querySelector('.emailPeserta');\r\n      chk.addEventListener('change', function() {\r\n        if (this.checked) {\r\n          const respNama = document.getElementById('penanggungJawab').value;\r\n          const respEmail = document.getElementById('emailPenanggung').value;\r\n          namaInput.value = respNama;\r\n          emailInput.value = respEmail;\r\n          \/\/ Optional: disable fields? Biarkan tetap editable, tapi jika ingin di-lock bisa ditambahkan\r\n        } else {\r\n          namaInput.value = '';\r\n          emailInput.value = '';\r\n        }\r\n      });\r\n      \/\/ Juga update jika penanggung jawab berubah setelah dicentang\r\n      const updateAutoFill = () => {\r\n        if (chk.checked) {\r\n          namaInput.value = document.getElementById('penanggungJawab').value;\r\n          emailInput.value = document.getElementById('emailPenanggung').value;\r\n        }\r\n      };\r\n      document.getElementById('penanggungJawab').addEventListener('input', updateAutoFill);\r\n      document.getElementById('emailPenanggung').addEventListener('input', updateAutoFill);\r\n    }\r\n    \r\n    \/\/ Program change event untuk update grid tanggal\r\n    const programSelect = card.querySelector('.programPeserta');\r\n    const update = () => {\r\n      let required = 0;\r\n      const prog = programSelect.value;\r\n      if (prog.includes('1 day')) required = 1;\r\n      else if (prog.includes('3 days')) required = 3;\r\n      else if (prog.includes('7 days')) required = 7;\r\n      \r\n      let selected = JSON.parse(card.getAttribute('data-selected-dates') || '[]');\r\n      if (selected.length !== required) selected = [];\r\n      card.setAttribute('data-selected-dates', JSON.stringify(selected));\r\n      renderDateGridForPeserta(card, required, selected);\r\n    };\r\n    programSelect.addEventListener('change', update);\r\n    update();\r\n    \r\n    return card;\r\n  }\r\n\r\n  function renderPesertaByCount(count) {\r\n    const container = document.getElementById('pesertaContainer');\r\n    container.innerHTML = '';\r\n    for (let i = 0; i < count; i++) {\r\n      const isFirst = (i === 0);\r\n      container.appendChild(createPesertaCard(i, isFirst));\r\n    }\r\n  }\r\n\r\n  \/\/ Submit: simpan ke localStorage\r\n  document.getElementById('multiPesertaForm').addEventListener('submit', (e) => {\r\n    e.preventDefault();\r\n    const penanggungJawab = document.getElementById('penanggungJawab').value.trim();\r\n    const emailPenanggung = document.getElementById('emailPenanggung').value.trim();\r\n    const waPenanggung = document.getElementById('waPenanggung').value.trim();\r\n    if (!penanggungJawab || !emailPenanggung) {\r\n      document.getElementById('multiStatus').innerHTML = '<span style=\"color:red;\">Responsible person name and email are required.<\/span>';\r\n      return;\r\n    }\r\n    \r\n    const pesertaCards = document.querySelectorAll('.peserta-card');\r\n    const registrations = [];\r\n    let valid = true;\r\n    let errorMsg = '';\r\n    \r\n    for (let i = 0; i < pesertaCards.length; i++) {\r\n      const card = pesertaCards[i];\r\n      const nama = card.querySelector('.namaPeserta').value.trim();\r\n      const email = card.querySelector('.emailPeserta').value.trim();\r\n      const negara = card.querySelector('.negaraPeserta').value;\r\n      const umur = card.querySelector('.umurPeserta').value;\r\n      const lisensi = card.querySelector('.lisensiPeserta').value;\r\n      const diveLog = card.querySelector('.diveLogPeserta').value;\r\n      const program = card.querySelector('.programPeserta').value;\r\n      let selectedDates = JSON.parse(card.getAttribute('data-selected-dates') || '[]');\r\n      \r\n      let required = 0;\r\n      if (program.includes('1 day')) required = 1;\r\n      else if (program.includes('3 days')) required = 3;\r\n      else if (program.includes('7 days')) required = 7;\r\n      \r\n      if (!nama || !email || !negara || !umur || !lisensi || !diveLog || !program) {\r\n        valid = false;\r\n        errorMsg = `Participant ${i+1}: All fields (Name, Email, Country, Age, License, Dive Log, Program) are required.`;\r\n        break;\r\n      }\r\n      if (selectedDates.length !== required) {\r\n        valid = false;\r\n        errorMsg = `Participant ${i+1}: Select exactly ${required} day(s).`;\r\n        break;\r\n      }\r\n      if (!\/^[^\\s@]+@([^\\s@.,]+\\.)+[^\\s@.,]{2,}$\/.test(email)) {\r\n        valid = false;\r\n        errorMsg = `Participant ${i+1}: Invalid email.`;\r\n        break;\r\n      }\r\n      if (umur < 0 || umur > 120) {\r\n        valid = false;\r\n        errorMsg = `Participant ${i+1}: Age must be between 0-120.`;\r\n        break;\r\n      }\r\n      if (diveLog < 0) {\r\n        valid = false;\r\n        errorMsg = `Participant ${i+1}: Dive log must be a positive number.`;\r\n        break;\r\n      }\r\n      \r\n      registrations.push({\r\n        timestamp: new Date().toISOString(),\r\n        penanggungJawab, emailPenanggung, waPenanggung,\r\n        nama, email, negara, umur, lisensi, diveLog,\r\n        program, tanggal: selectedDates.join(', ')\r\n      });\r\n    }\r\n    \r\n    if (!valid) {\r\n      document.getElementById('multiStatus').innerHTML = `<span style=\"color:red;\">${errorMsg}<\/span>`;\r\n      return;\r\n    }\r\n    \r\n    let existing = localStorage.getItem('guestList');\r\n    let list = existing ? JSON.parse(existing) : [];\r\n    list.push(...registrations);\r\n    localStorage.setItem('guestList', JSON.stringify(list));\r\n    \r\n    document.getElementById('multiStatus').innerHTML = '<span style=\"color:green;\">\u2705 Registrations saved successfully!<\/span>';\r\n    \r\n    \/\/ Reset form\r\n    document.getElementById('multiPesertaForm').reset();\r\n    document.getElementById('jumlahPeserta').value = '1';\r\n    renderPesertaByCount(1);\r\n  });\r\n  \r\n  document.getElementById('jumlahPeserta').addEventListener('change', (e) => {\r\n    renderPesertaByCount(parseInt(e.target.value, 10));\r\n  });\r\n  renderPesertaByCount(1);\r\n<\/script>\r\n\r\n<style>\r\n  .multi-peserta-container {\r\n    max-width: 1200px;\r\n    margin: 20px auto;\r\n    background: #fff;\r\n    padding: 25px;\r\n    border-radius: 16px;\r\n    box-shadow: 0 4px 12px rgba(0,0,0,0.1);\r\n    font-family: system-ui, -apple-system, 'Segoe UI', Roboto;\r\n  }\r\n  .form-group { margin-bottom: 18px; }\r\n  label { font-weight: 600; display: block; margin-bottom: 6px; }\r\n  input, select {\r\n    width: 100%;\r\n    padding: 10px 12px;\r\n    border: 1px solid #ccc;\r\n    border-radius: 8px;\r\n    font-size: 15px;\r\n  }\r\n  .peserta-card {\r\n    background: #f8f9fa;\r\n    padding: 20px;\r\n    border-radius: 14px;\r\n    margin-bottom: 24px;\r\n    border: 1px solid #e0e0e0;\r\n  }\r\n  .month-group {\r\n    margin-bottom: 20px;\r\n    border: 1px solid #ddd;\r\n    border-radius: 10px;\r\n    background: white;\r\n    padding: 12px;\r\n  }\r\n  .month-title {\r\n    font-weight: bold;\r\n    font-size: 18px;\r\n    background: #e9ecef;\r\n    padding: 8px 12px;\r\n    margin: -12px -12px 12px -12px;\r\n    border-radius: 10px 10px 0 0;\r\n    border-bottom: 1px solid #ccc;\r\n  }\r\n  .date-grid-month {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fill, minmax(85px, 1fr));\r\n    gap: 8px;\r\n    max-height: 200px;\r\n    overflow-y: auto;\r\n    padding: 8px;\r\n  }\r\n  .date-btn {\r\n    background: #e9ecef;\r\n    border: 1px solid #adb5bd;\r\n    border-radius: 6px;\r\n    padding: 6px 4px;\r\n    cursor: pointer;\r\n    font-size: 13px;\r\n    text-align: center;\r\n  }\r\n  .date-btn.selected {\r\n    background: #28a745;\r\n    color: white;\r\n  }\r\n  .date-info-peserta {\r\n    font-size: 14px;\r\n    margin-bottom: 12px;\r\n    font-weight: 500;\r\n  }\r\n  #submitMultiBtn {\r\n    background: #007bff;\r\n    color: white;\r\n    border: none;\r\n    padding: 12px 24px;\r\n    border-radius: 8px;\r\n    font-size: 16px;\r\n    cursor: pointer;\r\n    width: 100%;\r\n    font-weight: bold;\r\n  }\r\n  .status-message {\r\n    margin-top: 20px;\r\n    text-align: center;\r\n    font-size: 15px;\r\n  }\r\n  hr { margin: 20px 0; }\r\n  .monthly-dates-container {\r\n    max-height: 600px;\r\n    overflow-y: auto;\r\n    border: 1px solid #ddd;\r\n    border-radius: 12px;\r\n    padding: 10px;\r\n    background: #fefefe;\r\n  }\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Daily Program Program Registration (Multi-Participant) Responsible Person \/ Contact Full Name (Responsible Person) * Email (Responsible Person) * WhatsApp Number [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-2248","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.3 (Yoast SEO v24.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Daily Program - marineconservation.id<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/marineconservation.id\/id\/daily-program\/\" \/>\n<meta property=\"og:locale\" content=\"id_ID\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Daily Program\" \/>\n<meta property=\"og:description\" content=\"Daily Program Program Registration (Multi-Participant) Responsible Person \/ Contact Full Name (Responsible Person) * Email (Responsible Person) * WhatsApp Number [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/marineconservation.id\/id\/daily-program\/\" \/>\n<meta property=\"og:site_name\" content=\"marineconservation.id\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61572311944591\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-06T22:25:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/marineconservation.id\/wp-content\/uploads\/2026\/04\/515987507_10221668643985973_2655964326856352541_n.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"905\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimasi waktu membaca\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 menit\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/marineconservation.id\/daily-program\/\",\"url\":\"https:\/\/marineconservation.id\/daily-program\/\",\"name\":\"Daily Program - marineconservation.id\",\"isPartOf\":{\"@id\":\"https:\/\/marineconservation.id\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/marineconservation.id\/daily-program\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/marineconservation.id\/daily-program\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/marineconservation.id\/wp-content\/uploads\/2026\/04\/515987507_10221668643985973_2655964326856352541_n-1024x724.jpg\",\"datePublished\":\"2026-04-05T23:32:11+00:00\",\"dateModified\":\"2026-04-06T22:25:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/marineconservation.id\/daily-program\/#breadcrumb\"},\"inLanguage\":\"id\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/marineconservation.id\/daily-program\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\/\/marineconservation.id\/daily-program\/#primaryimage\",\"url\":\"https:\/\/marineconservation.id\/wp-content\/uploads\/2026\/04\/515987507_10221668643985973_2655964326856352541_n-1024x724.jpg\",\"contentUrl\":\"https:\/\/marineconservation.id\/wp-content\/uploads\/2026\/04\/515987507_10221668643985973_2655964326856352541_n-1024x724.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/marineconservation.id\/daily-program\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/marineconservation.id\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Daily Program\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/marineconservation.id\/#website\",\"url\":\"https:\/\/marineconservation.id\/\",\"name\":\"marineconservation.id\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/marineconservation.id\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/marineconservation.id\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"id\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/marineconservation.id\/#organization\",\"name\":\"marineconservation.id\",\"url\":\"https:\/\/marineconservation.id\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\/\/marineconservation.id\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/marineconservation.id\/wp-content\/uploads\/2025\/02\/Marine-Conservation-Indonesia.png\",\"contentUrl\":\"https:\/\/marineconservation.id\/wp-content\/uploads\/2025\/02\/Marine-Conservation-Indonesia.png\",\"width\":500,\"height\":500,\"caption\":\"marineconservation.id\"},\"image\":{\"@id\":\"https:\/\/marineconservation.id\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/profile.php?id=61572311944591\",\"https:\/\/www.instagram.com\/marineconservation.id\/\",\"https:\/\/www.youtube.com\/watch?v=nOmjtk-dTg8&list=LL\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Daily Program - marineconservation.id","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/marineconservation.id\/id\/daily-program\/","og_locale":"id_ID","og_type":"article","og_title":"Daily Program","og_description":"Daily Program Program Registration (Multi-Participant) Responsible Person \/ Contact Full Name (Responsible Person) * Email (Responsible Person) * WhatsApp Number [&hellip;]","og_url":"https:\/\/marineconservation.id\/id\/daily-program\/","og_site_name":"marineconservation.id","article_publisher":"https:\/\/www.facebook.com\/profile.php?id=61572311944591","article_modified_time":"2026-04-06T22:25:17+00:00","og_image":[{"width":1280,"height":905,"url":"https:\/\/marineconservation.id\/wp-content\/uploads\/2026\/04\/515987507_10221668643985973_2655964326856352541_n.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Estimasi waktu membaca":"1 menit"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/marineconservation.id\/daily-program\/","url":"https:\/\/marineconservation.id\/daily-program\/","name":"Daily Program - marineconservation.id","isPartOf":{"@id":"https:\/\/marineconservation.id\/#website"},"primaryImageOfPage":{"@id":"https:\/\/marineconservation.id\/daily-program\/#primaryimage"},"image":{"@id":"https:\/\/marineconservation.id\/daily-program\/#primaryimage"},"thumbnailUrl":"https:\/\/marineconservation.id\/wp-content\/uploads\/2026\/04\/515987507_10221668643985973_2655964326856352541_n-1024x724.jpg","datePublished":"2026-04-05T23:32:11+00:00","dateModified":"2026-04-06T22:25:17+00:00","breadcrumb":{"@id":"https:\/\/marineconservation.id\/daily-program\/#breadcrumb"},"inLanguage":"id","potentialAction":[{"@type":"ReadAction","target":["https:\/\/marineconservation.id\/daily-program\/"]}]},{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/marineconservation.id\/daily-program\/#primaryimage","url":"https:\/\/marineconservation.id\/wp-content\/uploads\/2026\/04\/515987507_10221668643985973_2655964326856352541_n-1024x724.jpg","contentUrl":"https:\/\/marineconservation.id\/wp-content\/uploads\/2026\/04\/515987507_10221668643985973_2655964326856352541_n-1024x724.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/marineconservation.id\/daily-program\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/marineconservation.id\/"},{"@type":"ListItem","position":2,"name":"Daily Program"}]},{"@type":"WebSite","@id":"https:\/\/marineconservation.id\/#website","url":"https:\/\/marineconservation.id\/","name":"marineconservation.id","description":"","publisher":{"@id":"https:\/\/marineconservation.id\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/marineconservation.id\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"id"},{"@type":"Organization","@id":"https:\/\/marineconservation.id\/#organization","name":"marineconservation.id","url":"https:\/\/marineconservation.id\/","logo":{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/marineconservation.id\/#\/schema\/logo\/image\/","url":"https:\/\/marineconservation.id\/wp-content\/uploads\/2025\/02\/Marine-Conservation-Indonesia.png","contentUrl":"https:\/\/marineconservation.id\/wp-content\/uploads\/2025\/02\/Marine-Conservation-Indonesia.png","width":500,"height":500,"caption":"marineconservation.id"},"image":{"@id":"https:\/\/marineconservation.id\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/profile.php?id=61572311944591","https:\/\/www.instagram.com\/marineconservation.id\/","https:\/\/www.youtube.com\/watch?v=nOmjtk-dTg8&list=LL"]}]}},"_links":{"self":[{"href":"https:\/\/marineconservation.id\/id\/wp-json\/wp\/v2\/pages\/2248","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/marineconservation.id\/id\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/marineconservation.id\/id\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/marineconservation.id\/id\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/marineconservation.id\/id\/wp-json\/wp\/v2\/comments?post=2248"}],"version-history":[{"count":28,"href":"https:\/\/marineconservation.id\/id\/wp-json\/wp\/v2\/pages\/2248\/revisions"}],"predecessor-version":[{"id":2297,"href":"https:\/\/marineconservation.id\/id\/wp-json\/wp\/v2\/pages\/2248\/revisions\/2297"}],"wp:attachment":[{"href":"https:\/\/marineconservation.id\/id\/wp-json\/wp\/v2\/media?parent=2248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}