function updateParents(item, partial) { let parentul = item.parentNode; if ("menu" == parentul.id) return; let parentli = parentul.parentNode; let foundap = 0; let foundact = 0; let founddeact = 0; if (partial) foundap = 1; else { for (let i = 0; i < parentul.childNodes.length; i++) { let node = parentul.childNodes[i]; if (node.dataset.active == 'partial') { foundap = 1; break; } else if (node.dataset.active == 'yes') foundact = 1; else founddeact = 1; if (2 == (foundact + founddeact)) { foundap = 1; break; } } } var cb = document.querySelector("#cb-" + parentli.id); if (foundap) { parentli.dataset.active = 'partial'; if (cb) { cb.indeterminate = true; cb.checked = false; } } else if (foundact) { parentli.dataset.active = 'yes'; if (cb) { cb.indeterminate = false; cb.checked = true; } if (cb) cb.checked = true; } else { parentli.dataset.active = 'no'; if (cb) { cb.indeterminate = false; cb.checked = false; } } updateParents(parentli, foundap); } function highlightMarker(id, highlight) { if (markers[id] && null != markers[id].getMap() && markers[id].setAnimation) { markers[id].setAnimation(highlight ? google.maps.Animation.BOUNCE : null); } } function activateMarker(marker, activate) { if (marker) { if ("function" == typeof marker.setMap) { marker = [marker]; } if (activate) { marker.forEach(m => { m.setMap(map); if (m.setAnimation) { m.setAnimation(google.maps.Animation.BOUNCE); setTimeout(() => m.setAnimation(null), 500); } }); } else { marker.forEach(m => m.setMap(null)); } } } function doDeactivate(item) { var cb = document.querySelector("#cb-" + item.id); if (cb) { cb.indeterminate = false; cb.checked = false; } item.dataset.active = 'no'; activateMarker(markers[item.id], false); let subitems = item.querySelector("ul"); if (null != subitems) subitems.childNodes.forEach(n => doDeactivate(n)); updateParents(item); } function doActivate(item) { var cb = document.querySelector("#cb-" + item.id); if (cb) { cb.indeterminate = false; cb.checked = true; } item.dataset.active = 'yes'; activateMarker(markers[item.id], true); let subitems = item.querySelector("ul"); if (null != subitems) subitems.childNodes.forEach(n => doActivate(n)); updateParents(item); } function updateURL() { marr = []; for (let m in markers) { if ("function" == typeof markers[m].getMap) { if (null != markers[m].getMap()) marr.push(m); } else if ("function" == typeof markers[m][0].getMap && null != markers[m][0].getMap()) { marr.push(m); } } let page = love ? "love.html" : ""; window.history.replaceState(null, "Fairfax", "./" + page + "?m=" + marr.join(",")); } function toggleActivate(id) { let item = document.querySelector("#" + id); if (item.dataset.active == 'yes') { doDeactivate(item); } else { doActivate(item); } updateURL(); }