// ============================================================ // bedside/age-weight.js // BEDSIDE — AGE → WEIGHT (single source for all sub-sections). // Top estimator wiring: #bedside-age, #bedside-formula, // #bedside-weight, #btn-bedside-clear. // ============================================================ export function init() { document.addEventListener('input', function(e) { if (e.target && e.target.id === 'bedside-age') recomputeFromAge(); if (e.target && e.target.id === 'bedside-weight') { e.target.dataset.userTyped = '1'; } }); document.addEventListener('change', function(e) { if (e.target && e.target.id === 'bedside-formula') recomputeFromAge(true); }); document.addEventListener('click', function(e) { if (e.target.closest && e.target.closest('#btn-bedside-clear')) { document.getElementById('bedside-age').value = ''; var wtField = document.getElementById('bedside-weight'); wtField.value = ''; delete wtField.dataset.userTyped; var note = document.getElementById('bedside-estimate-note'); if (note) note.innerHTML = ''; } }); // Recompute weight from age using the currently selected formula. // If forceFromFormula is true (formula dropdown changed), overwrite even user-typed weight. function recomputeFromAge(forceFromFormula) { var raw = document.getElementById('bedside-age').value; var note = document.getElementById('bedside-estimate-note'); if (!raw || !raw.trim()) { if (note) note.innerHTML = ''; return; } var months = window._parseAgeMonths ? window._parseAgeMonths(raw) : null; if (months == null || isNaN(months) || months < 0) { if (note) note.innerHTML = 'Could not parse age. Try "3y", "18 months", "15 days".'; return; } var formula = document.getElementById('bedside-formula').value; var est = window._PED_MATH.estimateWeightFromAgeMonths(months); var pickedWeight = formula === 'bestguess' ? est.all.bestGuess : est.all.apls; var pickedLabel = formula === 'bestguess' ? bestGuessBand(months) : aplsBand(months); var wtField = document.getElementById('bedside-weight'); if (forceFromFormula || !wtField.dataset.userTyped) { wtField.value = pickedWeight; delete wtField.dataset.userTyped; // treat as computed again } var ageTxt = months < 12 ? (Math.round(months * 10) / 10) + ' months' : (Math.round(months / 12 * 10) / 10) + ' years'; if (note) note.innerHTML = '' + pickedWeight + ' kg ' + '(' + ageTxt + ', ' + pickedLabel + ') · ' + 'APLS: ' + est.all.apls + ' kg · Best Guess: ' + est.all.bestGuess + ' kg. You can override the weight field.'; } function aplsBand(m) { if (m < 12) return 'APLS 0-12 mo'; var y = m / 12; if (y <= 5) return 'APLS 1-5 yr'; return 'APLS 6-12 yr'; } function bestGuessBand(m) { if (m < 12) return 'Best Guess 1-11 mo'; var y = m / 12; if (y <= 5) return 'Best Guess 1-4 yr'; return 'Best Guess 5-14 yr'; } // Top bedside weight is estimator-only. Sections have their own weight fields and // read them directly (no auto-propagation). Expose the reader on window for // safety (some older code paths may look it up). if (typeof window !== 'undefined') { window._getBedsideWeight = function() { var el = document.getElementById('bedside-weight'); return el ? parseFloat(el.value) || null : null; }; } }