Click a link below to learn more

Thank You!

Please check your email for confirmation of appointment.

Meal Spinning Wheel

🍽️ What Should I Eat?

Spin the wheel and discover your next meal!

Movie Search v2

🎬 Movie Search v2

const API_KEY = "owPqb7GuUmBAhtD2BRoys9vslgDHufp0KVep72KP"; const API_BASE = "https://api.watchmode.com/v1"; const RESULTS_PER_PAGE = 10; const searchBox = document.getElementById("searchBox"); const resultsDiv = document.getElementById("results"); const detailsDiv = document.getElementById("details"); const countryFilter = document.getElementById("countryFilter"); const searchButton = document.getElementById("searchButton"); searchBox.addEventListener("keydown", e => { if(e.key==="Enter") doSearch(); }); searchButton.addEventListener("click", doSearch); async function doSearch() { const query = searchBox.value.trim(); if(!query) return; resultsDiv.innerHTML = '
🔍 Searching...
'; detailsDiv.innerHTML = ""; try { const res = await fetch(`${API_BASE}/search/?apiKey=${API_KEY}&search_field=name&search_value=${encodeURIComponent(query)}&types=movie,tv`); const data = await res.json(); let results = data.title_results || []; results = results.slice(0, RESULTS_PER_PAGE); if(results.length === 0){ resultsDiv.innerHTML = '
😔 No results found. Try a different search term.
'; return; } resultsDiv.innerHTML = ""; results.forEach(item => { const div = document.createElement("div"); div.className = "result-item"; const img = document.createElement("img"); img.src = item.image_url || "https://via.placeholder.com/60x90?text=No+Image"; img.alt = item.title || item.name; const textDiv = document.createElement("div"); textDiv.className = "result-text"; const titleDiv = document.createElement("div"); titleDiv.className = "result-title"; titleDiv.textContent = item.title || item.name; const yearDiv = document.createElement("div"); yearDiv.className = "result-year"; yearDiv.textContent = item.year ? `Released: ${item.year}` : "Release year unknown"; textDiv.appendChild(titleDiv); textDiv.appendChild(yearDiv); div.appendChild(img); div.appendChild(textDiv); div.addEventListener("click", () => loadDetails(item.id, countryFilter.value)); resultsDiv.appendChild(div); }); } catch(err){ resultsDiv.innerHTML = `
❌ Error: ${err.message}
`; } } async function loadDetails(titleId, country){ resultsDiv.innerHTML = ""; detailsDiv.innerHTML = '
📖 Loading details...
'; try{ const res = await fetch(`${API_BASE}/title/${titleId}/details/?apiKey=${API_KEY}&append_to_response=sources`); const data = await res.json(); let sources = data.sources || []; if(country) sources = sources.filter(s => s.region === country); const sourcesByType = {}; sources.forEach(s => { const type = s.type || 'other'; if(!sourcesByType[type]) sourcesByType[type] = new Set(); sourcesByType[type].add(s.name); }); let sourcesHtml = ''; if(Object.keys(sourcesByType).length > 0){ sourcesHtml = '

🎭 Available On:

'; const typeLabels = {free:'🆓 Free', sub:'📺 Subscription', rent:'💰 Rent', buy:'🛒 Buy', other:'📱 Other'}; Object.keys(sourcesByType).forEach(type=>{ const label = typeLabels[type] || `📱 ${type}`; sourcesHtml += `

${label}

${Array.from(sourcesByType[type]).map(name=>`${name}`).join('')}
`; }); sourcesHtml += '
'; } else { sourcesHtml = '

🎭 Available On:

😞 No streaming sources available for the selected country.
'; } detailsDiv.innerHTML = ` ← Back to results

${data.title || "Title Details"}

🎬 Watch on FMovies ${data.poster || data.backdrop ? `${data.title} poster` : ""}

📖 Plot:

${data.plot_overview || "Plot information not available."}

${sourcesHtml} `; } catch(err){ detailsDiv.innerHTML = `
❌ Error loading details: ${err.message}
`; } } function backToResults(){ detailsDiv.innerHTML = ""; doSearch(); searchBox.focus(); } window.addEventListener('load', ()=>{ searchBox.focus(); });