Court Hearings Schedule
Reset All Filters
// Sample data - replace this with your actual JSON const data = { "metadata": { "court": "United States District Court for the Eastern District of Washington", "courtAbbrev": "WAED", "generatedTimestamp": "2026-01-15T14:54:00", "disclaimer": "Schedules are subject to change..." }, "dates": ["01/15/2026", "01/16/2026", "01/20/2026"], "hearings": [ { "id": 1, "date": "01/15/2026", "time": "10:30AM", "datetime": "2026-01-15T10:30:00", "caseNumber": "4:2024-cr-06016-MKD", "judge": "MKD", "caseType": "Criminal", "caseName": "USA v Ahmed", "plaintiff": "USA", "defendant": "Ahmed", "attorneys": { "usao": ["Holland"], "defense": ["Mirr - Yakima Federal Defender"] }, "hearingType": "Sentencing", "location": "Richland Courtroom 189" } ] }; let filteredHearings = [...data.hearings]; function initializePage() { // Set header info document.getElementById('courtName').textContent = data.metadata.court; document.getElementById('generatedTime').textContent = `Generated: ${new Date(data.metadata.generatedTimestamp).toLocaleString()}`; document.getElementById('disclaimer').textContent = data.metadata.disclaimer; // Populate filters populateFilters(); // Display hearings displayHearings(); // Add event listeners document.getElementById('dateFilter').addEventListener('change', applyFilters); document.getElementById('judgeFilter').addEventListener('change', applyFilters); document.getElementById('caseTypeFilter').addEventListener('change', applyFilters); document.getElementById('hearingTypeFilter').addEventListener('change', applyFilters); document.getElementById('locationFilter').addEventListener('change', applyFilters); document.getElementById('searchBox').addEventListener('input', applyFilters); } function populateFilters() { // Get unique values const judges = [...new Set(data.hearings.map(h => h.judge))].sort(); const caseTypes = [...new Set(data.hearings.map(h => h.caseType))].sort(); const hearingTypes = [...new Set(data.hearings.map(h => h.hearingType))].sort(); const locations = [...new Set(data.hearings.map(h => h.location))].sort(); // Populate date filter const dateFilter = document.getElementById('dateFilter'); data.dates.forEach(date => { const option = document.createElement('option'); option.value = date; option.textContent = date; dateFilter.appendChild(option); }); // Populate judge filter const judgeFilter = document.getElementById('judgeFilter'); judges.forEach(judge => { const option = document.createElement('option'); option.value = judge; option.textContent = judge; judgeFilter.appendChild(option); }); // Populate case type filter const caseTypeFilter = document.getElementById('caseTypeFilter'); caseTypes.forEach(type => { const option = document.createElement('option'); option.value = type; option.textContent = type; caseTypeFilter.appendChild(option); }); // Populate hearing type filter const hearingTypeFilter = document.getElementById('hearingTypeFilter'); hearingTypes.forEach(type => { const option = document.createElement('option'); option.value = type; option.textContent = type; hearingTypeFilter.appendChild(option); }); // Populate location filter const locationFilter = document.getElementById('locationFilter'); locations.forEach(location => { const option = document.createElement('option'); option.value = location; option.textContent = location; locationFilter.appendChild(option); }); } function applyFilters() { const dateFilter = document.getElementById('dateFilter').value; const judgeFilter = document.getElementById('judgeFilter').value; const caseTypeFilter = document.getElementById('caseTypeFilter').value; const hearingTypeFilter = document.getElementById('hearingTypeFilter').value; const locationFilter = document.getElementById('locationFilter').value; const searchText = document.getElementById('searchBox').value.toLowerCase(); filteredHearings = data.hearings.filter(hearing => { // Date filter if (dateFilter && hearing.date !== dateFilter) return false; // Judge filter if (judgeFilter && hearing.judge !== judgeFilter) return false; // Case type filter if (caseTypeFilter && hearing.caseType !== caseTypeFilter) return false; // Hearing type filter if (hearingTypeFilter && hearing.hearingType !== hearingTypeFilter) return false; // Location filter if (locationFilter && hearing.location !== locationFilter) return false; // Search filter if (searchText) { const searchableText = [ hearing.caseName, hearing.caseNumber, hearing.plaintiff, hearing.defendant, ...(hearing.attorneys.usao || []), ...(hearing.attorneys.defense || []) ].join(' ').toLowerCase(); if (!searchableText.includes(searchText)) return false; } return true; }); displayHearings(); } function displayHearings() { const hearingsList = document.getElementById('hearingsList'); const hearingCount = document.getElementById('hearingCount'); hearingCount.textContent = `Showing ${filteredHearings.length} of ${data.hearings.length} hearings`; if (filteredHearings.length === 0) { hearingsList.innerHTML = '<div class="no-results">No hearings match your filters.</div>'; return; } hearingsList.innerHTML = filteredHearings.map(hearing => ` <div class="hearing-card"> <div class="hearing-header"> <div class="case-info"> <div class="case-number">${hearing.caseNumber}</div> <div class="case-name">${hearing.caseName}</div> <span class="badge badge-${hearing.caseType.toLowerCase()}">${hearing.caseType}</span> </div> <div class="datetime"> ${hearing.date}<br>${hearing.time} </div> </div> <div class="hearing-details"> <div class="detail-item"> <div class="detail-label">Hearing Type</div> <div class="detail-value">${hearing.hearingType}</div> </div> <div class="detail-item"> <div class="detail-label">Judge</div> <div class="detail-value">${hearing.judge}</div> </div> <div class="detail-item"> <div class="detail-label">Location</div> <div class="detail-value">${hearing.location}</div> </div> <div class="detail-item"> <div class="detail-label">Parties</div> <div class="detail-value">${hearing.plaintiff} v. ${hearing.defendant}</div> </div> ${hearing.attorneys.usao && hearing.attorneys.usao.length > 0 ? ` <div class="detail-item"> <div class="detail-label">USAO</div> <div class="detail-value">${hearing.attorneys.usao.join(', ')}</div> </div> ` : ''} ${hearing.attorneys.defense && hearing.attorneys.defense.length > 0 ? ` <div class="detail-item"> <div class="detail-label">Defense</div> <div class="detail-value">${hearing.attorneys.defense.join(', ')}</div> </div> ` : ''} </div> </div> `).join(''); } function resetFilters() { document.getElementById('dateFilter').value = ''; document.getElementById('judgeFilter').value = ''; document.getElementById('caseTypeFilter').value = ''; document.getElementById('hearingTypeFilter').value = ''; document.getElementById('locationFilter').value = ''; document.getElementById('searchBox').value = ''; applyFilters(); } // Initialize on page load initializePage();