Official websites use .gov
A .gov website belongs to an official government organization in the United States.

Secure .gov websites use HTTPS
A lock ( ) or https:// means you’ve safely connected to the .gov website. Share sensitive information only on official, secure websites.

Hearings Calendar Dev

Court Hearings Schedule

 

 
Date All Dates
Judge All Judges
Case Type All Types
Hearing Type All Hearing Types
Location All Locations

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();