/* 휴가 신청 폼 — 종류에 따른 필드 토글 + 예상 일수 미리보기. 서버(store.compute_days)가 공휴일 포함 정확히 재계산한다. 여기선 주말만 제외한 근사치. */ (function () { "use strict"; var form = document.getElementById("vac-form"); if (!form) return; var type = document.getElementById("vac-type"); var start = document.getElementById("vac-start"); var startHalf = document.getElementById("vac-start-half"); var endField = document.getElementById("vac-end-field"); var end = document.getElementById("vac-end"); var endHalfField = document.getElementById("vac-end-half-field"); var endHalf = document.getElementById("vac-end-half"); var startHalfField = document.getElementById("vac-start-half-field"); var out = document.getElementById("vac-days-out"); function isHalfType(t) { return t === "오전반차" || t === "오후반차"; } function parseDate(s) { if (!s) return null; var p = s.split("-"); if (p.length !== 3) return null; return new Date(+p[0], +p[1] - 1, +p[2]); } function workingDays(sd, ed) { var n = 0; var d = new Date(sd.getTime()); while (d <= ed) { var wd = d.getDay(); // 0=일, 6=토 if (wd !== 0 && wd !== 6) n++; d.setDate(d.getDate() + 1); } return n; } function isWorking(d) { var wd = d.getDay(); return wd !== 0 && wd !== 6; } function recalc() { var t = type.value; var half = isHalfType(t); // 반차 종류면 종료일/구분 숨김, 단일 0.5 endField.style.display = half ? "none" : ""; endHalfField.style.display = half ? "none" : ""; startHalfField.style.display = half ? "none" : ""; if (half) { out.textContent = "0.5"; return; } var sd = parseDate(start.value); var ed = parseDate(end.value) || sd; if (!sd || !ed || ed < sd) { out.textContent = "—"; return; } if (sd.getTime() === ed.getTime()) { out.textContent = (startHalf.value === "am" || startHalf.value === "pm") ? "0.5" : "1"; return; } var n = workingDays(sd, ed); var total = n; if ((startHalf.value === "am" || startHalf.value === "pm") && isWorking(sd)) total -= 0.5; if ((endHalf.value === "am" || endHalf.value === "pm") && isWorking(ed)) total -= 0.5; out.textContent = total > 0 ? String(total) : "0"; } // 시작일 변경 시 종료일이 비었거나 더 빠르면 맞춰줌 start.addEventListener("change", function () { if (!end.value || parseDate(end.value) < parseDate(start.value)) { end.value = start.value; } recalc(); }); [type, end, startHalf, endHalf].forEach(function (el) { if (el) el.addEventListener("change", recalc); }); recalc(); })();