{"id":74712,"date":"2025-06-25T22:10:56","date_gmt":"2025-06-26T03:10:56","guid":{"rendered":"https:\/\/nazarene.org\/lista-de-oportunidades\/"},"modified":"2026-07-17T01:45:54","modified_gmt":"2026-07-17T06:45:54","slug":"lista-de-oportunidades","status":"publish","type":"page","link":"https:\/\/nazarene.org\/es\/lista-de-oportunidades\/","title":{"rendered":"Lista de Oportunidades"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"74712\" class=\"elementor elementor-74712 elementor-52738\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6cbdd8b e-flex e-con-boxed e-con e-parent\" data-id=\"6cbdd8b\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;,&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2786ea5 elementor-widget elementor-widget-image\" data-id=\"2786ea5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1993\" height=\"1842\" src=\"https:\/\/nazarene.org\/wp-content\/uploads\/2025\/10\/Nazarene-Missions-Teams_White_EN.png\" class=\"attachment-full size-full wp-image-74713\" alt=\"\" srcset=\"https:\/\/nazarene.org\/wp-content\/uploads\/2025\/10\/Nazarene-Missions-Teams_White_EN.png 1993w, https:\/\/nazarene.org\/wp-content\/uploads\/2025\/10\/Nazarene-Missions-Teams_White_EN-300x277.png 300w, https:\/\/nazarene.org\/wp-content\/uploads\/2025\/10\/Nazarene-Missions-Teams_White_EN-1024x946.png 1024w, https:\/\/nazarene.org\/wp-content\/uploads\/2025\/10\/Nazarene-Missions-Teams_White_EN-768x710.png 768w, https:\/\/nazarene.org\/wp-content\/uploads\/2025\/10\/Nazarene-Missions-Teams_White_EN-1536x1420.png 1536w\" sizes=\"(max-width: 1993px) 100vw, 1993px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ad69ad0 elementor-widget elementor-widget-heading\" data-id=\"ad69ad0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Lista de Oportunidades<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1345c2a e-flex e-con-boxed e-con e-parent\" data-id=\"1345c2a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b82d73e elementor-widget elementor-widget-shortcode\" data-id=\"b82d73e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">    <div class=\"project-layout\">\r\n        \r\n        <div class=\"project-main\">\r\n            <div class=\"breadcrumbs-sort\">\r\n\t\t\t\t\r\n\t\t\t\t<!-- Breadcrumbs -->\r\n\t\t\t\t<div class=\"breadcrumbs\">\r\n\t\t\t\t\t<p class=\"bread-link\"><a href=\"https:\/\/nazarene.org\/global-missions\">Global Missions<\/a><\/p>\r\n\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/nazarene.org\/wp-content\/uploads\/2025\/11\/Arrow-Right-Icon.svg\" alt=\"arrow-right\">\r\n\t\t\t\t\t<p class=\"bread-link\"><a href=\"https:\/\/nazarene.org\/teams\">Teams<\/a><\/p>\r\n\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/nazarene.org\/wp-content\/uploads\/2025\/11\/Arrow-Right-Icon.svg\" alt=\"arrow-right\">\r\n\t\t\t\t\t<p class=\"bread-link-active\">Opportunity Listing<\/p>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\r\n\t\t\t\t<!-- Filter Sort -->\r\n\t\t\t\t<div class=\"filter-sort\">\r\n\t\t\t\t\t<label for=\"filter-sort-select\">Sort by:<\/label>\r\n\t\t\t\t\t<select id=\"filter-sort-select\">\r\n\t\t\t\t\t\t<option value=\"latest\" selected>Latest<\/option>\r\n\t\t\t\t\t\t<option value=\"oldest\">Oldest<\/option>\r\n\t\t\t\t\t\t<option value=\"az\">A \u2192 Z<\/option>\r\n\t\t\t\t\t\t<option value=\"za\">Z \u2192 A<\/option>\r\n\t\t\t\t\t<\/select>\r\n\t\t\t\t<\/div>\r\n\t\t\t<\/div>\r\n\r\n            <div id=\"project-db-results\"><\/div>\r\n        <\/div>\r\n\t\t\r\n\t\t<!-- Breadcrumbs & Sidebar -->\r\n\t\t<div class=\"bread-sidebar\">\r\n\t\t\t\r\n\t\t\t<!-- Breadcrumbs -->\r\n\t\t\t<div class=\"breadcrumbs-mobile\">\r\n\t\t\t\t<p class=\"bread-link\"><a href=\"https:\/\/nazarene.org\/global-missions\">Global Missions<\/a><\/p>\r\n\t\t\t\t<img decoding=\"async\" src=\"https:\/\/nazarene.org\/wp-content\/uploads\/2025\/11\/Arrow-Right-Icon.svg\" alt=\"arrow-right\">\r\n\t\t\t\t<p class=\"bread-link\"><a href=\"https:\/\/nazarene.org\/teams\">Teams<\/a><\/p>\r\n\t\t\t\t<img decoding=\"async\" src=\"https:\/\/nazarene.org\/wp-content\/uploads\/2025\/11\/Arrow-Right-Icon.svg\" alt=\"arrow-right\">\r\n\t\t\t\t<p class=\"bread-link-active\">Opportunity Listing<\/p>\r\n\t\t\t<\/div>\r\n\r\n\t\t\t<!-- Sidebar -->\r\n\t\t\t<aside class=\"project-sidebar\">\r\n\t\t\t\t<div id=\"project-db-filters\">\r\n\t\t\t\t\t<div class=\"filter-search\">\r\n\t\t\t\t\t\t<input type=\"text\" id=\"filter-search\" placeholder=\"Search projects...\">\r\n\t\t\t\t\t<\/div>\r\n\r\n\t\t\t\t\t<div class=\"filter-actions\">\r\n\t\t\t\t\t\t<button type=\"button\" id=\"filter-reset\">Reset Filters<\/button>\r\n\t\t\t\t\t<\/div>\r\n\r\n\t\t\t\t\t<div class=\"filter-others\">\r\n\t\t\t\t\t\t<div class=\"filter-group featured\" id=\"filter-featured-wrapper\">\r\n\t\t\t\t\t\t\t<label class=\"filter-option\" for=\"filter-featured\">\r\n\t\t\t\t\t\t\t\t<input type=\"checkbox\" name=\"filter-featured\" value=\"1\" id=\"filter-featured\">\r\n\t\t\t\t\t\t\t\tRegional Priorities\r\n\t\t\t\t\t\t\t<\/label>\r\n\t\t\t\t\t\t<\/div>\r\n\r\n\t\t\t\t\t\t<div class=\"filter-group team-rv\" id=\"filter-team-rv-wrapper\">\r\n\t\t\t\t\t\t\t<label class=\"filter-option\" for=\"filter-team-rv\">\r\n\t\t\t\t\t\t\t\t<input type=\"checkbox\" name=\"filter-team-rv\" value=\"1\" id=\"filter-team-rv\">\r\n\t\t\t\t\t\t\t\tRV Space (USA only)\r\n\t\t\t\t\t\t\t<\/label>\r\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"filter-group region collapsible\" id=\"filter-region-wrapper\">\r\n\t\t\t\t\t\t<div class=\"filter-header\">\r\n\t\t\t\t\t\t\t<p class=\"filter-title\">Region<\/p>\r\n\t\t\t\t\t\t\t<span class=\"collapse-icon\"><\/span>\r\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t<div class=\"filter-content\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"filter-option\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"checkbox\" name=\"filter-region\" value=\"Africa\">\r\n\t\t\t\t\t\t\t\t\tAfrica\t\t\t\t\t\t\t\t<\/label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"filter-option\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"checkbox\" name=\"filter-region\" value=\"Asia-Pacific\">\r\n\t\t\t\t\t\t\t\t\tAsia-Pacific\t\t\t\t\t\t\t\t<\/label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"filter-option\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"checkbox\" name=\"filter-region\" value=\"Eurasia\">\r\n\t\t\t\t\t\t\t\t\tEurasia\t\t\t\t\t\t\t\t<\/label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"filter-option\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"checkbox\" name=\"filter-region\" value=\"Mesoamerica\">\r\n\t\t\t\t\t\t\t\t\tMesoamerica\t\t\t\t\t\t\t\t<\/label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"filter-option\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"checkbox\" name=\"filter-region\" value=\"South America\">\r\n\t\t\t\t\t\t\t\t\tSouth America\t\t\t\t\t\t\t\t<\/label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"filter-option\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"checkbox\" name=\"filter-region\" value=\"USA &amp; Canada\">\r\n\t\t\t\t\t\t\t\t\tUSA &amp; Canada\t\t\t\t\t\t\t\t<\/label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"filter-group collapsible\" id=\"filter-category-wrapper\">\r\n\t\t\t\t\t\t<div class=\"filter-header\">\r\n\t\t\t\t\t\t\t<p class=\"filter-title\">Category<\/p>\r\n\t\t\t\t\t\t\t<span class=\"collapse-icon\"><\/span>\r\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t<div class=\"filter-content\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"filter-option\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"radio\" name=\"filter-category\" value=\"Compassionate Ministry\">\r\n\t\t\t\t\t\t\t\t\tCompassionate Ministry\t\t\t\t\t\t\t\t<\/label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"filter-option\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"radio\" name=\"filter-category\" value=\"Construction and Property\">\r\n\t\t\t\t\t\t\t\t\tConstruction and Property\t\t\t\t\t\t\t\t<\/label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"filter-option\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"radio\" name=\"filter-category\" value=\"Discipleship\">\r\n\t\t\t\t\t\t\t\t\tDiscipleship\t\t\t\t\t\t\t\t<\/label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"filter-option\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"radio\" name=\"filter-category\" value=\"Equipping\">\r\n\t\t\t\t\t\t\t\t\tEquipping\t\t\t\t\t\t\t\t<\/label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"filter-option\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"radio\" name=\"filter-category\" value=\"Minister Care\">\r\n\t\t\t\t\t\t\t\t\tMinister Care\t\t\t\t\t\t\t\t<\/label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"filter-option\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"radio\" name=\"filter-category\" value=\"Reaching the Unreached\">\r\n\t\t\t\t\t\t\t\t\tReaching the Unreached\t\t\t\t\t\t\t\t<\/label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<label class=\"filter-option\">\r\n\t\t\t\t\t\t\t\t\t<input type=\"radio\" name=\"filter-category\" value=\"Technology and Communications\">\r\n\t\t\t\t\t\t\t\t\tTechnology and Communications\t\t\t\t\t\t\t\t<\/label>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<!-- \"Sports\" and \"Medical Care\" are synthetic Category options: they are NOT values\r\n\t\t\t\t\t\t\t     in teams.category, they are backed by the team_activities \/ team_project_activities\r\n\t\t\t\t\t\t\t     join tables (activity_id 60 and 23 respectively).\r\n\t\t\t\t\t\t\t     See the AJAX handler for the special-case filtering logic. -->\r\n\t\t\t\t\t\t\t<label class=\"filter-option\">\r\n\t\t\t\t\t\t\t\t<input type=\"radio\" name=\"filter-category\" value=\"Sports\">\r\n\t\t\t\t\t\t\t\tSports\r\n\t\t\t\t\t\t\t<\/label>\r\n\t\t\t\t\t\t\t<label class=\"filter-option\">\r\n\t\t\t\t\t\t\t\t<input type=\"radio\" name=\"filter-category\" value=\"Medical Care\">\r\n\t\t\t\t\t\t\t\tMedical Care\r\n\t\t\t\t\t\t\t<\/label>\r\n\t\t\t\t\t\t\t<label class=\"filter-option\">\r\n\t\t\t\t\t\t\t\t<input type=\"radio\" name=\"filter-category\" value=\"\" checked>\r\n\t\t\t\t\t\t\t\tAll Categories\r\n\t\t\t\t\t\t\t<\/label>\r\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t<\/aside>\r\n\t\t\t\r\n\t\t<\/div>\r\n        \r\n    <\/div>\r\n\r\n    \r\n\r\n\r\n<!-- ===== SCRIPT ===== -->\r\n\r\n    <script>\r\n    document.addEventListener('DOMContentLoaded', () => {\r\n        const filters = {\r\n            search: document.getElementById('filter-search'),\r\n            results: document.getElementById('project-db-results'),\r\n            sort: document.getElementById('filter-sort-select'),\r\n            featured: document.getElementById('filter-featured'), \r\n            teamRv: document.getElementById('filter-team-rv')\r\n        };\r\n\t\t\r\n\t\tfunction initCollapsibleFilters() {\r\n\t\t\tdocument.querySelectorAll('.filter-group.collapsible').forEach(group => {\r\n\t\t\t\tconst header = group.querySelector('.filter-header');\r\n\r\n\t\t\t\tif (!header) return; \r\n\r\n\t\t\t\theader.addEventListener('click', () => {\r\n\t\t\t\t\tgroup.classList.toggle('collapsed');\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t\tinitCollapsibleFilters();\r\n\r\n\t\t\r\n        function getRadioValue(name) {\r\n            const radios = document.querySelectorAll(`input[name=\"${name}\"]`);\r\n            for (let r of radios) if (r.checked) return r.value;\r\n            return '';\r\n        }\r\n\r\n        function getCheckboxValues(name) {\r\n            return Array.from(document.querySelectorAll(`input[name=\"${name}\"]:checked`)).map(cb => cb.value);\r\n        }\r\n\r\n        \/**\r\n         * Updates the filter options availability based on the current selections.\r\n         * Only categories (including the synthetic \"Sports\" option) are disabled\/enabled\r\n         * based on selected regions.\r\n         *\/\r\n        function updateFilters(allProjects) {\r\n            const selectedRegions = getCheckboxValues('filter-region');\r\n            \r\n            \/\/ 1. Determine available categories based on currently selected regions.\r\n            const filteredByRegion = selectedRegions.length > 0\r\n                ? allProjects.filter(p => selectedRegions.includes(p.region))\r\n                : allProjects;\r\n            \r\n            const availableCategories = new Set(filteredByRegion.map(p => p.category));\r\n            \/\/ Synthetic Category options (keyed by lowercase radio value) \u2014 add new entries\r\n            \/\/ here as new synthetic options are introduced, keeping keys in sync with the\r\n            \/\/ hasX fields returned in availabilityProjects.\r\n            const syntheticCategoryAvailability = {\r\n                sports: filteredByRegion.some(p => p.hasSports),\r\n                'medical care': filteredByRegion.some(p => p.hasMedicalCare),\r\n            };\r\n\r\n            \/\/ --- Category Radios (Availability is based on Region selection) ---\r\n            document.querySelectorAll('input[name=\"filter-category\"]').forEach(radio => {\r\n                const parent = radio.parentElement;\r\n                const key = radio.value.toLowerCase();\r\n\r\n                if (radio.value === \"\") {\r\n                    \/\/ 'All Categories' is always available\r\n                    radio.disabled = false;\r\n                    parent.style.opacity = 1;\r\n                } else if (key in syntheticCategoryAvailability) {\r\n                    \/\/ Synthetic option \u2014 availability comes from hasX flags, not teams.category\r\n                    const available = syntheticCategoryAvailability[key];\r\n                    radio.disabled = !available;\r\n                    parent.style.opacity = available ? 1 : 0.5;\r\n                } else if (!availableCategories.has(radio.value)) {\r\n                    radio.disabled = true;\r\n                    parent.style.opacity = 0.5;\r\n                } else {\r\n                    radio.disabled = false;\r\n                    parent.style.opacity = 1;\r\n                }\r\n            });\r\n\r\n            \/\/ --- Region Checkboxes (Always Enabled - Per User Request) ---\r\n            document.querySelectorAll('input[name=\"filter-region\"]').forEach(checkbox => {\r\n                const parent = checkbox.parentElement;\r\n                checkbox.disabled = false;\r\n                parent.style.opacity = 1;\r\n            });\r\n            \r\n            \/\/ Featured checkbox always enabled\r\n             if (filters.featured) {\r\n                 const parent = filters.featured.parentElement;\r\n                 filters.featured.disabled = false;\r\n                 parent.style.opacity = 1;\r\n             }\r\n            \r\n            \/\/ RV Space checkbox always enabled\r\n             if (filters.teamRv) {\r\n                 const parent = filters.teamRv.parentElement;\r\n                 filters.teamRv.disabled = false;\r\n                 parent.style.opacity = 1;\r\n             }\r\n        }\r\n\t\t\r\n\t\t\/\/ Preload Skeleton\r\n        function showSkeletons(count = 6) {\r\n            if (!filters.results) return;\r\n            let skeletons = '';\r\n            for (let i = 0; i < count; i++) {\r\n                \/\/ Skeletons are now using class names without inline styles\r\n                skeletons += `\r\n                    <div class=\"project-card skeleton-loading\">\r\n                        <div class=\"project-thumbnail skeleton-thumb\"><\/div>\r\n                        <div class=\"project-content\">\r\n                            <div class=\"skeleton-line full\"><\/div>\r\n                            <div class=\"skeleton-line medium\"><\/div>\r\n                            <div class=\"skeleton-line short\"><\/div>\r\n                        <\/div>\r\n                    <\/div>`;\r\n            }\r\n            filters.results.innerHTML = `<div class=\"project-cards\">${skeletons}<\/div>`;\r\n        }\r\n\r\n        function fetchProjects(page = 1) {\r\n            showSkeletons();\r\n\r\n            const selectedRegions = getCheckboxValues('filter-region');\r\n            const isFeatured = filters.featured.checked ? '1' : ''; \r\n            const hasTeamRv = filters.teamRv.checked ? '1' : ''; \/\/ Get RV Space state\r\n\r\n            const formData = new FormData();\r\n            formData.append('action', 'project_db_filter');\r\n            formData.append('nonce', 'c7c6867952');\r\n            formData.append('region', selectedRegions.join(',')); \/\/ Send as comma-separated string\r\n            formData.append('category', getRadioValue('filter-category'));\r\n            formData.append('featured', isFeatured); \/\/ Send featured state\r\n            formData.append('team_rv', hasTeamRv); \/\/ Send RV Space state\r\n            formData.append('sort', filters.sort.value);\r\n            formData.append('search', filters.search.value);\r\n            formData.append('page', page);\r\n\r\n            \/\/ Update URL parameters\r\n\t\t\tconst params = new URLSearchParams();\r\n\r\n\t\t\tif (selectedRegions.length) params.set('region', selectedRegions.join(','));\r\n\t\t\tconst category = getRadioValue('filter-category');\r\n\t\t\tif (category) params.set('category', category);\r\n\t\t\tif (isFeatured === '1') params.set('featured', isFeatured);\r\n\t\t\tif (hasTeamRv === '1') params.set('team_rv', hasTeamRv);\r\n\t\t\tif (filters.sort.value && filters.sort.value !== 'latest') params.set('sort', filters.sort.value);\r\n\t\t\tif (filters.search.value) params.set('search', filters.search.value);\r\n\r\n\t\t\tconst url = params.toString() ? `${window.location.pathname}?${params.toString()}` : window.location.pathname;\r\n\t\t\twindow.history.replaceState({}, '', url);\r\n\r\n            fetch('https:\/\/nazarene.org\/wp-admin\/admin-ajax.php', { method: 'POST', body: formData })\r\n                .then(r => r.json())\r\n                .then(response => {\r\n                    if (response.success) {\r\n                        filters.results.innerHTML = response.data.html;\r\n                        \/\/ updateFilters now uses the availability data provided by the backend.\r\n                        updateFilters(response.data.availabilityProjects);\r\n\r\n                        requestAnimationFrame(() => {\r\n                            filters.results.querySelectorAll(\".project-card\").forEach((card, i) => {\r\n                                setTimeout(() => {\r\n                                    card.classList.remove(\"not-loaded\");\r\n                                    card.classList.add(\"loaded\");\r\n                                }, i * 100);\r\n                            });\r\n                        });\r\n\r\n                        document.querySelectorAll('.pagination-btn').forEach(btn => {\r\n                            btn.addEventListener('click', () => {\r\n                                const newPage = parseInt(btn.getAttribute('data-page'));\r\n                                if (!isNaN(newPage)) {\r\n                                    window.scrollTo({ top: 0, behavior: \"smooth\" });\r\n                                    fetchProjects(newPage);\r\n                                }\r\n                            });\r\n                        });\r\n                    } else {\r\n                        filters.results.innerHTML = '<p>No results found.<\/p>';\r\n                        updateFilters([]);\r\n                    }\r\n                })\r\n                .catch(() => { filters.results.innerHTML = 'Error fetching data.'; });\r\n        }\r\n\r\n        \/\/ Debounced live search\r\n        let searchTimer;\r\n        filters.search.addEventListener('input', () => {\r\n            clearTimeout(searchTimer);\r\n            searchTimer = setTimeout(() => fetchProjects(1), 300);\r\n        });\r\n\r\n        \/\/ Auto-apply on filter change\r\n        document.querySelectorAll('input[name=\"filter-region\"], input[name=\"filter-category\"], input[name=\"filter-featured\"], input[name=\"filter-team-rv\"]').forEach(input => {\r\n            input.addEventListener('change', () => fetchProjects(1));\r\n        });\r\n        filters.sort.addEventListener('change', () => fetchProjects(1));\r\n\r\n        \/\/ Reset button\r\n        document.getElementById('filter-reset').addEventListener('click', () => {\r\n            document.querySelectorAll('input[name=\"filter-region\"]').forEach(checkbox => {\r\n                checkbox.checked = false;\r\n            });\r\n            document.querySelector('input[name=\"filter-category\"][value=\"\"]').checked = true;\r\n            filters.featured.checked = false; \r\n            filters.teamRv.checked = false; \/\/ Reset RV Space filter\r\n            filters.search.value = '';\r\n            filters.sort.value = 'latest';\r\n            fetchProjects(1);\r\n        });\r\n\r\n\t\t\/\/ Ensure URL has all query params even if empty before first fetch\r\n\t\t(function initUrlParams() {\r\n\t\t\tconst params = new URLSearchParams(window.location.search);\r\n\r\n\t\t\tif (!params.has('region')) params.set('region', '');\r\n\t\t\tif (!params.has('category')) params.set('category', '');\r\n\t\t\tif (!params.has('featured')) params.set('featured', '');\r\n\t\t\tif (!params.has('team_rv')) params.set('team_rv', '');\r\n\t\t\tif (!params.has('sort')) params.set('sort', 'latest');\r\n\t\t\tif (!params.has('search')) params.set('search', '');\r\n\t\t\t\r\n\t\t\t\/\/ Replace URL without reloading\r\n\t\t\twindow.history.replaceState({}, '', `${window.location.pathname}?${params.toString()}`);\r\n\r\n\t\t\t\/\/ --- 2. Now preselect filters from URL ---\r\n\t\t\tconst regionParam = params.get('region');\r\n\t\t\tconst categoryParam = params.get('category');\r\n\t\t\tconst searchParam = params.get('search');\r\n\t\t\tconst sortParam = params.get('sort');\r\n\t\t\tconst featuredParam = params.get('featured'); \r\n\t\t\tconst teamRvParam = params.get('team_rv');\r\n\r\n\t\t\tif (regionParam) {\r\n\t\t\t\tconst regionsFromUrl = regionParam.split(',').map(r => r.trim().toLowerCase());\r\n\t\t\t\tdocument.querySelectorAll('input[name=\"filter-region\"]').forEach(checkbox => {\r\n\t\t\t\t\tif (regionsFromUrl.includes(checkbox.value.toLowerCase())) checkbox.checked = true;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (categoryParam) {\r\n\t\t\t\tdocument.querySelectorAll('input[name=\"filter-category\"]').forEach(radio => {\r\n\t\t\t\t\tif (radio.value.toLowerCase() === categoryParam.toLowerCase()) radio.checked = true;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (featuredParam === '1') filters.featured.checked = true;\r\n\t\t\tif (teamRvParam === '1') filters.teamRv.checked = true;\r\n\t\t\tif (searchParam) filters.search.value = searchParam;\r\n\t\t\tif (sortParam && filters.sort.querySelector(`option[value=\"${sortParam}\"]`)) filters.sort.value = sortParam;\r\n\r\n\t\t\t\/\/ --- 3. Then fetch projects ---\r\n\t\t\tfetchProjects();\r\n\t\t})();\r\n    });\r\n    <\/script>\r\n\r\n<!-- ================== -->\r\n\r\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Lista de Oportunidades<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"content-type":"","_jet_sm_ready_style":"","_jet_sm_style":"","_jet_sm_controls_values":"","_jet_sm_fonts_collection":"","_jet_sm_fonts_links":"","footnotes":""},"class_list":["post-74712","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.9 (Yoast SEO v27.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Lista de Oportunidades - Church of the Nazarene<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/nazarene.org\/es\/lista-de-oportunidades\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Lista de Oportunidades\" \/>\n<meta property=\"og:description\" content=\"Lista de Oportunidades\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nazarene.org\/es\/lista-de-oportunidades\/\" \/>\n<meta property=\"og:site_name\" content=\"Church of the Nazarene\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/NazareneOfficial\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-17T06:45:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/nazarene.org\/wp-content\/uploads\/2025\/10\/Nazarene-Missions-Teams_White_EN.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1993\" \/>\n\t<meta property=\"og:image:height\" content=\"1842\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@Nazarene\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/nazarene.org\\\/es\\\/lista-de-oportunidades\\\/\",\"url\":\"https:\\\/\\\/nazarene.org\\\/es\\\/lista-de-oportunidades\\\/\",\"name\":\"Lista de Oportunidades - Church of the Nazarene\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nazarene.org\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/nazarene.org\\\/es\\\/lista-de-oportunidades\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/nazarene.org\\\/es\\\/lista-de-oportunidades\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/nazarene.org\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/Nazarene-Missions-Teams_White_EN.png\",\"datePublished\":\"2025-06-26T03:10:56+00:00\",\"dateModified\":\"2026-07-17T06:45:54+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/nazarene.org\\\/es\\\/lista-de-oportunidades\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/nazarene.org\\\/es\\\/lista-de-oportunidades\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/nazarene.org\\\/es\\\/lista-de-oportunidades\\\/#primaryimage\",\"url\":\"https:\\\/\\\/nazarene.org\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/Nazarene-Missions-Teams_White_EN.png\",\"contentUrl\":\"https:\\\/\\\/nazarene.org\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/Nazarene-Missions-Teams_White_EN.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/nazarene.org\\\/es\\\/lista-de-oportunidades\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/nazarene.org\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Lista de Oportunidades\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/nazarene.org\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/nazarene.org\\\/es\\\/\",\"name\":\"Church of the Nazarene\",\"description\":\"Making Christlike Disciples in the Nations\",\"publisher\":{\"@id\":\"https:\\\/\\\/nazarene.org\\\/es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/nazarene.org\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/nazarene.org\\\/es\\\/#organization\",\"name\":\"Church of the Nazarene\",\"url\":\"https:\\\/\\\/nazarene.org\\\/es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/nazarene.org\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/nazarene.org\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/Naz_Desktop_Black_Logo-1.svg\",\"contentUrl\":\"https:\\\/\\\/nazarene.org\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/Naz_Desktop_Black_Logo-1.svg\",\"width\":258,\"height\":36,\"caption\":\"Church of the Nazarene\"},\"image\":{\"@id\":\"https:\\\/\\\/nazarene.org\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/NazareneOfficial\\\/\",\"https:\\\/\\\/x.com\\\/Nazarene\",\"https:\\\/\\\/www.instagram.com\\\/nazareneofficial\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Lista de Oportunidades - Church of the Nazarene","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/nazarene.org\/es\/lista-de-oportunidades\/","og_locale":"es_ES","og_type":"article","og_title":"Lista de Oportunidades","og_description":"Lista de Oportunidades","og_url":"https:\/\/nazarene.org\/es\/lista-de-oportunidades\/","og_site_name":"Church of the Nazarene","article_publisher":"https:\/\/www.facebook.com\/NazareneOfficial\/","article_modified_time":"2026-07-17T06:45:54+00:00","og_image":[{"width":1993,"height":1842,"url":"https:\/\/nazarene.org\/wp-content\/uploads\/2025\/10\/Nazarene-Missions-Teams_White_EN.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@Nazarene","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/nazarene.org\/es\/lista-de-oportunidades\/","url":"https:\/\/nazarene.org\/es\/lista-de-oportunidades\/","name":"Lista de Oportunidades - Church of the Nazarene","isPartOf":{"@id":"https:\/\/nazarene.org\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/nazarene.org\/es\/lista-de-oportunidades\/#primaryimage"},"image":{"@id":"https:\/\/nazarene.org\/es\/lista-de-oportunidades\/#primaryimage"},"thumbnailUrl":"https:\/\/nazarene.org\/wp-content\/uploads\/2025\/10\/Nazarene-Missions-Teams_White_EN.png","datePublished":"2025-06-26T03:10:56+00:00","dateModified":"2026-07-17T06:45:54+00:00","breadcrumb":{"@id":"https:\/\/nazarene.org\/es\/lista-de-oportunidades\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nazarene.org\/es\/lista-de-oportunidades\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/nazarene.org\/es\/lista-de-oportunidades\/#primaryimage","url":"https:\/\/nazarene.org\/wp-content\/uploads\/2025\/10\/Nazarene-Missions-Teams_White_EN.png","contentUrl":"https:\/\/nazarene.org\/wp-content\/uploads\/2025\/10\/Nazarene-Missions-Teams_White_EN.png"},{"@type":"BreadcrumbList","@id":"https:\/\/nazarene.org\/es\/lista-de-oportunidades\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/nazarene.org\/es\/"},{"@type":"ListItem","position":2,"name":"Lista de Oportunidades"}]},{"@type":"WebSite","@id":"https:\/\/nazarene.org\/es\/#website","url":"https:\/\/nazarene.org\/es\/","name":"Church of the Nazarene","description":"Making Christlike Disciples in the Nations","publisher":{"@id":"https:\/\/nazarene.org\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/nazarene.org\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/nazarene.org\/es\/#organization","name":"Church of the Nazarene","url":"https:\/\/nazarene.org\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/nazarene.org\/es\/#\/schema\/logo\/image\/","url":"https:\/\/nazarene.org\/wp-content\/uploads\/2024\/06\/Naz_Desktop_Black_Logo-1.svg","contentUrl":"https:\/\/nazarene.org\/wp-content\/uploads\/2024\/06\/Naz_Desktop_Black_Logo-1.svg","width":258,"height":36,"caption":"Church of the Nazarene"},"image":{"@id":"https:\/\/nazarene.org\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/NazareneOfficial\/","https:\/\/x.com\/Nazarene","https:\/\/www.instagram.com\/nazareneofficial\/"]}]}},"_links":{"self":[{"href":"https:\/\/nazarene.org\/es\/wp-json\/wp\/v2\/pages\/74712","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nazarene.org\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/nazarene.org\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/nazarene.org\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nazarene.org\/es\/wp-json\/wp\/v2\/comments?post=74712"}],"version-history":[{"count":3,"href":"https:\/\/nazarene.org\/es\/wp-json\/wp\/v2\/pages\/74712\/revisions"}],"predecessor-version":[{"id":74716,"href":"https:\/\/nazarene.org\/es\/wp-json\/wp\/v2\/pages\/74712\/revisions\/74716"}],"wp:attachment":[{"href":"https:\/\/nazarene.org\/es\/wp-json\/wp\/v2\/media?parent=74712"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}