{"id":20403,"date":"2026-04-12T15:30:09","date_gmt":"2026-04-12T15:30:09","guid":{"rendered":"https:\/\/www.usviodr.com\/?page_id=20403"},"modified":"2026-04-12T15:30:10","modified_gmt":"2026-04-12T15:30:10","slug":"search-by-project","status":"publish","type":"page","link":"https:\/\/www.usviodr.com\/es\/search-by-project\/","title":{"rendered":"Search by project"},"content":{"rendered":"    <div class=\"pri-projects-section\" id=\"pri-sec-6a1b68adabf00\">\n    <style>\n    @import url('https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@400;500;600;700;800&display=swap');\n    #pri-sec-6a1b68adabf00 *, #pri-sec-6a1b68adabf00 *::before, #pri-sec-6a1b68adabf00 *::after { box-sizing:border-box; }\n    .pri-projects-section { font-family:'Poppins',sans-serif; max-width:1200px; margin:0 auto; padding:40px 20px 60px; }\n\n    .pri-top-bar { display:flex; align-items:center; flex-wrap:wrap; gap:16px; margin-bottom:28px; }\n    .pri-section-title { font-size:clamp(22px,3vw,34px); font-weight:800; color:#0768a9; margin:0; }\n    .pri-search-row { display:flex; align-items:center; border:1.5px solid #d0d5dd; border-radius:6px; overflow:hidden; background:#fff; }\n    .pri-search-input { border:none; padding:10px 16px; font-size:14px; width:750px; outline:none; }\n    .pri-search-btn { background:none; border:none; padding:10px 14px; cursor:pointer; color:#0768a9; font-size:18px; line-height:1; display:flex; align-items:center; }\n    .pri-search-btn:hover { background:#f0f8ff; }\n    \n    .pri-alpha-filter { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 20px; padding: 12px; background: #f8f9fa; border-radius: 8px; border: 1px solid #e9ecef; }\n    .pri-alpha-btn { background: #fff; border: 1px solid #dee2e6; border-radius: 6px; padding: 6px 12px; font-size: 14px; font-weight: 600; cursor: pointer; transition: all 0.2s ease; color: #495057; min-width: 40px; text-align: center; }\n    .pri-alpha-btn:hover { background: #e9ecef; border-color: #adb5bd; }\n    .pri-alpha-btn.active { background: #0768a9; border-color: #0768a9; color: #fff; }\n    .pri-alpha-clear { background: #f8f9fa; border-color: #dee2e6; color: #dc3545; }\n    .pri-alpha-clear:hover { background: #dc3545; border-color: #dc3545; color: #fff; }\n\n    .pri-disclaimer { background: #fef3c7; border-left: 4px solid #ffc20f; padding: 10px 20px; margin-bottom: 20px; font-size: 12px; color: #856404; border-radius: 4px; margin-top:10px; }\n    .pri-disclaimer p { margin: 0; font-weight:100; }\n\n    .pri-main-layout { display:flex; align-items:flex-start; border:1.5px solid #d0d5dd; border-radius:8px; overflow:hidden; }\n    .pri-sidebar { width:335px; min-width:335px; border-right:1.5px solid #d0d5dd; background:#fff; display:flex; flex-direction:column; }\n    .pri-scroll-area { overflow-y:auto; max-height:620px; }\n\n    .pri-all-acc-group { border-bottom:1px solid #e0e0e0; }\n    .pri-all-acc-header { padding:11px 16px; font-size:14px; font-weight:700; color:#0768a9; cursor:pointer; display:flex; align-items:center; justify-content:space-between; gap:8px; background:#fff; user-select:none; border-bottom:2px solid #ffc20f; transition:all 0.3s ease; }\n    .pri-all-acc-header:hover { background:#f8f8f8; }\n    .pri-all-acc-header.open { background:#ffc20f; color:#0056b3; }\n    .pri-all-acc-header img { height:18px; transition:transform 0.3s ease; }\n    .pri-all-acc-header.open img { transform:rotate(90deg); }\n    .pri-all-acc-items { display:none; background:#fff; overflow:hidden; transition:max-height 0.3s ease; }\n    .pri-all-acc-items.open { display:block; }\n    .pri-all-acc-items-list { margin:0; padding:0; }\n    .pri-all-acc-items-list li { list-style:none; padding:9px 16px; font-size:16px; color:#444; cursor:pointer; border-bottom:1px solid #f0f0f0; transition:background .13s,color .13s; line-height:1.4; }\n    .pri-all-acc-items-list li:hover { background:#e8f4fc; color:#0768a9; }\n    .pri-all-acc-items-list li.active { background:#ffb613; color:#fff; font-weight:700; }\n    .pri-all-pagination { display:flex; justify-content:center; align-items:center; gap:8px; padding:12px; background:#f9f9f9; border-top:1px solid #e0e0e0; }\n    .pri-all-pagination button { padding:4px 10px; background:#fff; border:1px solid #ddd; border-radius:4px; cursor:pointer; font-size:12px; transition:all .2s; }\n    .pri-all-pagination button:hover:not(:disabled) { background:#ffc20f; border-color:#ffc20f; color:#0056b3; }\n    .pri-all-pagination button:disabled { opacity:0.5; cursor:not-allowed; }\n    .pri-all-pagination span { font-size:12px; color:#666; }\n\n    .pri-acc-group { border-bottom:1px solid #f0f0f0; }\n    .pri-acc-header { padding:11px 16px; font-size:16px; font-weight:600; color:#333; cursor:pointer; display:flex; align-items:center; justify-content:space-between; gap:8px; background:#fff; user-select:none; transition:all 0.3s ease; }\n    .pri-acc-header:hover { background:#f8f8f8; }\n    .pri-acc-header.open { color:#ffffff; background:#ffb613; }\n    .pri-acc-header img { height:18px; transition:transform 0.3s ease; }\n    .pri-acc-header.open img { transform:rotate(90deg); }\n    .pri-acc-items { display:none; background:#fafafa; overflow:hidden; transition:max-height 0.3s ease; }\n    .pri-acc-items.open { display:block; }\n    .pri-acc-items li { list-style:none; padding:9px 16px 9px 26px; font-size:16px; color:#444; cursor:pointer; border-bottom:1px solid #f4f4f4; transition:background .13s,color .13s; line-height:1.4; display:flex; align-items:center; gap:10px; }\n    .pri-acc-items li:hover { background:#e8f4fc; color:#0768a9; }\n    .pri-acc-items li.active { background:#ffffff; color:#000000; font-weight:700; }\n    .pri-acc-items li:last-child { border-bottom:none; }\n    .pri-acc-items, .pri-flat-list { padding:0; margin:0; }\n    .pri-acc-item-icon { font-size: 20px; min-width: 32px; text-align: center; }\n    .pri-acc-item-text { flex: 1; }\n\n    .pri-detail-panel { flex:1; min-width:0; background:#fff;padding:20px; }\n    .pri-detail-table { width:100%; border-collapse:collapse; font-size:16px;text-align:left; }\n    .pri-detail-table tr:last-child { border-bottom:none; }\n    .pri-detail-table td { padding:14px 18px; vertical-align:top; }\n    .pri-detail-table td:first-child { width:40%; color:#ffffff; font-weight:500; background:#0768a9; border-right:0.5px solid #e5e7eb;font-size:16px; }\n    .pri-detail-table td:last-child { color:#fff; background:#0768a9; }\n    .pri-detail-table tr th { padding:10px; background-color:#0769a9; color:#ffffff; border:0.5px solid #ffffff; border-top:none; font-weight:100; border-bottom:none; }\n\n    .pri-gallery-section { padding:20px 0px; border-top:1.5px solid #d0d5dd; }\n    .pri-gallery-grid { display:flex; gap:12px; flex-wrap:wrap; }\n    .pri-gallery-item-fe { position:relative; border-radius:8px; overflow:hidden; cursor:pointer; flex:0 0 calc(33.333% - 8px); aspect-ratio:4\/3; background:#eee; }\n    .pri-gallery-item-fe img { width:100%; height:100%; object-fit:cover; display:block; transition:transform .3s; }\n    .pri-gallery-item-fe:hover img { transform:scale(1.05); }\n    .pri-gallery-label { position:absolute; bottom:10px; left:0; right:0; background:rgba(0,0,0,0.7); color:#fff; padding:5px 10px; font-size:12px; font-weight:500; }\n    .pri-gallery-nav { display:flex; justify-content:flex-end; gap:10px; margin-top:12px; }\n    .pri-gallery-arrow { width:34px; height:34px; border:2px solid #0768a9; border-radius:50%; background:#fff; color:#0768a9; cursor:pointer; display:flex; align-items:center; justify-content:center; font-size:18px; transition:background .2s,color .2s; }\n    .pri-gallery-arrow:hover { background:#0768a9; color:#fff; }\n\n    .pri-lightbox { position:fixed; inset:0; background:rgba(0,0,0,.88); z-index:999999; display:flex; align-items:center; justify-content:center; padding:20px; }\n    .pri-lightbox-inner { position:relative; max-width:900px; width:100%; text-align:center; }\n    .pri-lightbox img { max-width:100%; max-height:80vh; border-radius:8px; box-shadow:0 8px 40px rgba(0,0,0,.5); }\n    .pri-lightbox-caption { color:#fff; margin-top:12px; font-size:15px; }\n    .pri-lightbox-close { position:absolute; top:-14px; right:-14px; background:#fff; border:none; border-radius:50%; width:36px; height:36px; font-size:20px; cursor:pointer; display:flex; align-items:center; justify-content:center; color:#333; }\n    .pri-lightbox-close:hover { background:#eee; }\n\n    .pri-loading { display:flex; flex-direction:column; align-items:center; padding:50px 20px; color:#666; }\n    .pri-spinner { width:32px; height:32px; border:3px solid #f0f0f0; border-top:3px solid #0768a9; border-radius:50%; animation:pri-spin .85s linear infinite; margin-bottom:10px; }\n    @keyframes pri-spin { to { transform:rotate(360deg); } }\n\n    @media(max-width:768px){\n        .pri-main-layout { flex-direction:column; }\n        .pri-sidebar { width:100%; border-right:none; border-bottom:1.5px solid #d0d5dd; }\n        .pri-gallery-item-fe { flex:0 0 calc(50% - 6px); }\n        .pri-top-bar { flex-direction:column; align-items:flex-start; }\n        .pri-search-input { width:200px; }\n        .pri-alpha-filter { justify-content: center; }\n    }\n    <\/style>\n\n    <div class=\"pri-main-layout\">\n        <div class=\"pri-sidebar\">\n            <div class=\"pri-all-acc-group\">\n                <div class=\"pri-all-acc-header\" id=\"pri-sec-6a1b68adabf00-all-projects-header\">\n                    <span>All Projects<\/span>\n                    <img decoding=\"async\" src=\"https:\/\/www.usviodr.com\/wp-content\/themes\/ord-theme\/assets\/images\/projectarrow.png\" alt=\"expand\">\n                <\/div>\n                <div class=\"pri-all-acc-items\" id=\"pri-sec-6a1b68adabf00-all-projects-list\">\n                    <div class=\"pri-loading\"><div class=\"pri-spinner\" style=\"width:24px;height:24px;\"><\/div><p>Cargando...<\/p><\/div>\n                <\/div>\n                <div class=\"pri-all-pagination\" id=\"pri-sec-6a1b68adabf00-all-pagination\" style=\"display:none;\">\n                    <button class=\"pri-prev-page\" disabled>\u00ab Anterior<\/button>\n                    <span id=\"pri-sec-6a1b68adabf00-page-info\">P\u00e1gina 1 of 1<\/span>\n                    <button class=\"pri-next-page\" disabled>Siguiente \u00bb<\/button>\n                <\/div>\n            <\/div>\n\n            <div class=\"pri-scroll-area\" id=\"pri-sec-6a1b68adabf00-scroll\">\n                <div id=\"pri-sec-6a1b68adabf00-accordion\" style=\"display:none;\"><\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"pri-detail-panel\" id=\"pri-sec-6a1b68adabf00-detail\">\n            <table class=\"pri-detail-table\"><tr><th>Nombre del proyecto<\/th><td>Replacement of GJFL Building<\/td><\/tr><tr><th>Descripci\u00f3n del proyecto<\/th><td>Demolition &amp; Replacement Re-Build of the Governor Juan F. Luis Hospital<\/td><\/tr><tr><th>Funding Source<\/th><td>PA<\/td><\/tr><tr><th>Agencia GVI<\/th><td>Governor Juan F. Luis Hospital<\/td><\/tr><tr><th>Target Start Date<\/th><td>2\/1\/2021<\/td><\/tr><tr><th>Target Completion Date<\/th><td>10\/1\/2031<\/td><\/tr><tr><th>Coste estimado del proyecto<\/th><td>$931,940,469.10<\/td><\/tr><tr><th>Ubicaci\u00f3n<\/th><td>St. Croix<\/td><\/tr><tr><th>Project Phase<\/th><td>Solicitation-Construction<\/td><\/tr><\/table><div class=\"pri-gallery-section\"><div class=\"pri-gallery-grid\"><div class=\"pri-gallery-item-fe\" data-gi=\"0\"><img decoding=\"async\" src=\"https:\/\/dev-us-vi-odr-latest.pantheonsite.io\/wp-content\/uploads\/2026\/03\/stjohn-367x241-1.png\" alt=\"tesing1\" loading=\"lazy\"><span class=\"pri-gallery-label\">tesing1<\/span><\/div><\/div><\/div>        <\/div>\n    <\/div>\n\n    <div class=\"pri-lightbox\" id=\"pri-sec-6a1b68adabf00-lightbox\" style=\"display:none;\">\n        <div class=\"pri-lightbox-inner\">\n            <button class=\"pri-lightbox-close\" id=\"pri-sec-6a1b68adabf00-lb-close\" type=\"button\">\u2715<\/button>\n            <img decoding=\"async\" src=\"\" alt=\"\" id=\"pri-sec-6a1b68adabf00-lb-img\">\n            <div class=\"pri-lightbox-caption\" id=\"pri-sec-6a1b68adabf00-lb-cap\"><\/div>\n        <\/div>\n    <\/div>\n        <div class=\"pri-disclaimer\">\n        <p>Tenga en cuenta: Las fechas de inicio y fin de los proyectos en curso o que no han comenzado la construcci\u00f3n son fechas objetivo y est\u00e1n sujetas a cambios.<\/p>\n    <\/div>\n        <\/div>\n\n    <script>\n    (function($){\n    'use strict';\n    $(document).ready(function(){\n\n        var secId   = 'pri-sec-6a1b68adabf00';\n        var nonce   = '0004b9ab48';\n        var ajaxUrl = 'https:\/\/www.usviodr.com\/wp-admin\/admin-ajax.php';\n        var GPP     = 3;\n\n        var accData = {\n            sector:   [\"#REF!\",\"Emergency Services\",\"Health and Human Services\",\"Housing\",\"Other\",\"Private Non-Profit\",\"Public Buildings\",\"Schools\",\"Transportation\",\"Utilities\"],\n            location: [\"St. Croix\",\"St. John\",\"St. Thomas\",\"Territory-Wide\",\"Water Island\"],\n            agency:   [\"Governor Juan F. Luis Hospital\",\"Jackson Development\",\"Lutheran Social Services of the V.I. Inc.\",\"Schneider Regional Medical Center\",\"St. Croix Foundation\",\"St. Croix Landmarks Society\",\"St. John Community Foundation\",\"The West Indian Company Ltd.\",\"USVI Economic Development Authority\",\"United Caribbean Association, Inc.\",\"University of the Virgin Islands\",\"V.I. Bureau of Corrections\",\"V.I. Bureau of Motor Vehicles\",\"V.I. Dept. of Agriculture\",\"V.I. Dept. of Education\",\"V.I. Dept. of Health\",\"V.I. Dept. of Human Services\",\"V.I. Dept. of Planning and Natural Resources\",\"V.I. Dept. of Public Works\",\"V.I. Dept. of Sports, Parks and Recreation\",\"V.I. Fire & Emergency Medical Services\",\"V.I. Housing Authority\",\"V.I. Housing Finance Authority\",\"V.I. Next Generation Network (VINGN)\",\"V.I. Office of the Lieutenant Governor\",\"V.I. Police Department\",\"V.I. Public Broadcasting System\",\"V.I. Territorial Emergency Management Agency\",\"V.I. Waste Management Authority\",\"V.I. Water and Power Authority\"]        };\n        \n        var sectorIcons = {\n                            '#REF!': '\ud83d\udccb',\n                            'Emergency Services': '\ud83d\udccb',\n                            'Health and Human Services': '\ud83d\udccb',\n                            'Housing': '\ud83c\udfe0',\n                            'Other': '\ud83d\udccb',\n                            'Private Non-Profit': '\ud83d\udccb',\n                            'Public Buildings': '\ud83d\udccb',\n                            'Schools': '\ud83d\udccb',\n                            'Transportation': '\ud83d\ude97',\n                            'Utilities': '\ud83d\udd27',\n                    };\n\n        var $allHeader   = $('#' + secId + '-all-projects-header');\n        var $allList     = $('#' + secId + '-all-projects-list');\n        var $allPagination = $('#' + secId + '-all-pagination');\n        var $accordion   = $('#' + secId + '-accordion');\n        var $detail      = $('#' + secId + '-detail');\n        var $search      = $('#' + secId + '-search');\n        var $lightbox    = $('#' + secId + '-lightbox');\n        var $lbImg       = $('#' + secId + '-lb-img');\n        var $lbCap       = $('#' + secId + '-lb-cap');\n        var $lbClose     = $('#' + secId + '-lb-close');\n        \n        var $alphaFilterBar = $('.pri-alpha-filter');\n        var currentAlphaFilter = '';\n\n        var labelMap   = { sector:'Project Type', location:'Location', agency:'Agency' };\n        var currentAllPage = 1;\n        var totalAllPages = 1;\n        var currentAllProjects = [];\n        var activeFilterType = 'sector';\n        var activeFilterValue = '';\n        var currentGalleryPage = 0;\n        var pendingProjectId = null;\n\n        function closeAllAccordions() {\n            $allHeader.removeClass('open');\n            $allList.removeClass('open');\n            $allPagination.hide();\n            \n            if ($accordion.is(':visible')) {\n                $accordion.hide();\n                $accordion.find('.pri-acc-header').removeClass('open');\n                $accordion.find('.pri-acc-items').removeClass('open');\n            }\n        }\n\n        function esc(v){\n            if (v===null||v===undefined) return '';\n            return String(v).replace(\/&\/g, '&amp;')\n                            .replace(\/<\/g, '&lt;')\n                            .replace(\/>\/g, '&gt;')\n                            .replace(\/\"\/g, '&quot;')\n                            .replace(\/'\/g, '&#39;');\n        }\n\n        function loadDetail(id){\n            $detail.html('<div class=\"pri-loading\"><div class=\"pri-spinner\"><\/div><p>Cargando...<\/p><\/div>');\n            $.post(ajaxUrl, { action:'ord_pri_get_project', nonce:nonce, project_id:id })\n             .done(function(r){ r.success ? renderDetail(r.data) : $detail.html('<p style=\"padding:20px;color:#c00;\">'+esc(r.data)+'<\/p>'); })\n             .fail(function(){ $detail.html('<p style=\"padding:20px;color:#c00;\">Error al cargar los proyectos.<\/p>'); });\n        }\n\n        function renderDetail(p){\n            var rows = [\n                ['Nombre del proyecto',p.name], \n                ['Descripci\u00f3n del proyecto',p.description],\n                ['Funding Source',p.category], \n                ['Agencia GVI',p.agency],\n                ['Target Start Date',p.start_date], \n                ['Target Completion Date',p.end_date],\n                ['Coste estimado del proyecto',p.total_project_cost], \n                ['Ubicaci\u00f3n',p.district],\n                ['Project Phase',p.project_phase], \n                ['Award Status',p.award_status]\n            ];\n            var tbl = '<table class=\"pri-detail-table\">';\n            rows.forEach(function(r){ if(r[1]) tbl += '<tr><th>' + esc(r[0]) + '<\/th><td>' + esc(r[1]) + '<\/td>'; });\n            tbl += '<\/table>';\n\n            var gl = p.gallery||[], gHtml = '';\n            if(gl.length){\n                gHtml = '<div class=\"pri-gallery-section\"><div class=\"pri-gallery-grid\" id=\"'+secId+'-gg\">';\n                gl.forEach(function(img,i){\n                    var display = (i >= currentGalleryPage * GPP && i < (currentGalleryPage + 1) * GPP) ? '' : ' style=\"display:none;\"';\n                    gHtml += '<div class=\"pri-gallery-item-fe\" data-gi=\"'+i+'\"' + display + '>'+\n                        '<img decoding=\"async\" src=\"'+esc(img.url)+'\" alt=\"'+esc(img.label)+'\" loading=\"lazy\">'+\n                        (img.label?'<span class=\"pri-gallery-label\">'+esc(img.label)+'<\/span>':'')+\n                        '<\/div>';\n                });\n                gHtml += '<\/div>';\n                if(gl.length > GPP){\n                    var totalPages = Math.ceil(gl.length \/ GPP);\n                    gHtml += '<div class=\"pri-gallery-nav\">'+\n                        '<button class=\"pri-gallery-arrow pri-gallery-prev\" data-page=\"prev\" type=\"button\">&#8249;<\/button>'+\n                        '<span style=\"font-size:12px;margin:0 8px;\">' + (currentGalleryPage + 1) + ' \/ ' + totalPages + '<\/span>'+\n                        '<button class=\"pri-gallery-arrow pri-gallery-next\" data-page=\"next\" type=\"button\">&#8250;<\/button>'+\n                        '<\/div>';\n                }\n                gHtml += '<\/div>';\n            }\n            $detail.html(tbl+gHtml);\n            $detail.data('gallery', gl);\n            \n            currentGalleryPage = 0;\n            \n            $detail.find('.pri-gallery-prev').off('click').on('click', function(){\n                var glData = $detail.data('gallery') || [];\n                var totalPages = Math.ceil(glData.length \/ GPP);\n                if(currentGalleryPage > 0){\n                    currentGalleryPage--;\n                    updateGalleryDisplay(glData);\n                }\n            });\n            \n            $detail.find('.pri-gallery-next').off('click').on('click', function(){\n                var glData = $detail.data('gallery') || [];\n                var totalPages = Math.ceil(glData.length \/ GPP);\n                if(currentGalleryPage < totalPages - 1){\n                    currentGalleryPage++;\n                    updateGalleryDisplay(glData);\n                }\n            });\n        }\n        \n        function updateGalleryDisplay(glData){\n            var start = currentGalleryPage * GPP;\n            var end = start + GPP;\n            var $items = $detail.find('.pri-gallery-item-fe');\n            $items.each(function(i){\n                if(i >= start && i < end){\n                    $(this).show();\n                } else {\n                    $(this).hide();\n                }\n            });\n            \n            var totalPages = Math.ceil(glData.length \/ GPP);\n            $detail.find('.pri-gallery-nav span').text((currentGalleryPage + 1) + ' \/ ' + totalPages);\n        }\n\n        $(document).on('click','#'+secId+'-detail .pri-gallery-item-fe',function(){\n            var i=+$(this).data('gi'), g=$detail.data('gallery')||[];\n            if(!g[i]) return;\n            $lbImg.attr('src',g[i].url||''); $lbCap.text(g[i].label||''); $lightbox.fadeIn(200);\n        });\n        $lbClose.on('click',function(){ $lightbox.fadeOut(200); });\n        $lightbox.on('click',function(e){ if($(e.target).is($lightbox)) $lightbox.fadeOut(200); });\n        $(document).on('keyup',function(e){ if(e.key==='Escape') $lightbox.fadeOut(200); });\n\n        function loadAllProjects(page, searchTerm, alphaFilter, callback) {\n            currentAllPage = page;\n            $allList.html('<div class=\"pri-loading\"><div class=\"pri-spinner\" style=\"width:24px;height:24px;\"><\/div><p>Cargando...<\/p><\/div>');\n            \n            var data = {\n                action: 'ord_pri_get_list',\n                nonce: nonce,\n                filter_type: 'all',\n                filter_value: '',\n                search: searchTerm,\n                page: page,\n                alpha_filter: alphaFilter\n            };\n            \n            $.post(ajaxUrl, data)\n             .done(function(r){\n                if(r.success && r.data.items){\n                    currentAllProjects = r.data.items;\n                    totalAllPages = r.data.total_pages;\n                    \n                    var html = '<ul class=\"pri-all-acc-items-list\">';\n                    r.data.items.forEach(function(item, idx){\n                        var activeClass = (idx === 0 && page === 1 && currentAllProjects.length > 0 && !$accordion.is(':visible')) ? 'active' : '';\n                        html += '<li data-project-id=\"'+esc(item.id)+'\" class=\"'+activeClass+'\">'+esc(item.name)+'<\/li>';\n                    });\n                    html += '<\/ul>';\n                    $allList.html(html);\n                    \n                    if (r.data.total_pages > 1) {\n                        $allPagination.show();\n                        var $pageInfo = $('#'+secId+'-page-info');\n                        $pageInfo.html('P\u00e1gina ' + r.data.current_page + ' of ' + r.data.total_pages);\n                        \n                        $('.pri-prev-page').prop('disabled', r.data.current_page <= 1);\n                        $('.pri-next-page').prop('disabled', r.data.current_page >= r.data.total_pages);\n                    } else {\n                        $allPagination.hide();\n                    }\n                    \n                    if (callback && typeof callback === 'function') {\n                        callback();\n                    } else if (page === 1 && activeFilterType === 'all' && !$accordion.is(':visible')) {\n                        if (r.data.items.length > 0) {\n                            loadDetail(r.data.items[0].id);\n                        }\n                    }\n                } else {\n                    $allList.html('<div style=\"padding:20px;text-align:center;color:#888;\">No se han encontrado proyectos prioritarios.<\/div>');\n                    $allPagination.hide();\n                    if (callback && typeof callback === 'function') callback();\n                }\n             })\n             .fail(function(){\n                $allList.html('<div style=\"padding:20px;text-align:center;color:#c00;\">Error al cargar los proyectos.<\/div>');\n                $allPagination.hide();\n                if (callback && typeof callback === 'function') callback();\n             });\n        }\n        \n        function refreshAllProjects() {\n            loadAllProjects(1, $search.val().trim(), currentAlphaFilter);\n        }\n        \n        $allHeader.on('click', function(e){\n            e.preventDefault();\n            var wasOpen = $(this).hasClass('open');\n            \n            if (!wasOpen) {\n                closeAllAccordions();\n                \n                activeFilterType = 'all';\n                activeFilterValue = '';\n                $(this).addClass('open');\n                $allList.addClass('open');\n                refreshAllProjects();\n            } else {\n                $(this).removeClass('open');\n                $allList.removeClass('open');\n                $allPagination.hide();\n            }\n        });\n        \n        $(document).on('click', '#'+secId+'-all-pagination .pri-prev-page', function(){\n            if (currentAllPage > 1) {\n                loadAllProjects(currentAllPage - 1, $search.val().trim(), currentAlphaFilter);\n            }\n        });\n        \n        $(document).on('click', '#'+secId+'-all-pagination .pri-next-page', function(){\n            if (currentAllPage < totalAllPages) {\n                loadAllProjects(currentAllPage + 1, $search.val().trim(), currentAlphaFilter);\n            }\n        });\n        \n        $(document).on('click', '#'+secId+'-all-projects-list li', function(){\n            $('#'+secId+'-all-projects-list li').removeClass('active');\n            $(this).addClass('active');\n            loadDetail($(this).data('project-id'));\n        });\n\n        function showFilterAccordionMode(type){\n            var values = accData[type]||[];\n            if(!values.length){ \n                $accordion.html('<div style=\"padding:20px;text-align:center;\">No ' + labelMap[type] + ' data available.<\/div>').show();\n                return; \n            }\n            \n            activeFilterType = type;\n            activeFilterValue = '';\n            \n            closeAllAccordions();\n            \n            $accordion.show().html('<div class=\"pri-loading\"><div class=\"pri-spinner\" style=\"width:24px;height:24px;margin:0 auto;\"><\/div><\/div>');\n            \n            var defs = values.map(function(val){\n                return $.post(ajaxUrl,{ action:'ord_pri_get_list', nonce:nonce, filter_type:type, filter_value:val, search:'', alpha_filter: currentAlphaFilter });\n            });\n            \n            $.when.apply($, defs).then(function(){\n                var results = defs.length===1 ? [arguments] : Array.from(arguments);\n                var html = '';\n                \n                results.forEach(function(res, idx){\n                    var data = defs.length===1 ? res[0] : res[0];\n                    if(!data||!data.success||!data.data.length) return;\n                    var groupVal = values[idx];\n                    \n                    var iconHtml = '';\n                    if (type === 'sector' && sectorIcons[groupVal]) {\n                        iconHtml = '<span class=\"pri-acc-item-icon\">' + sectorIcons[groupVal] + '<\/span>';\n                    } else if (type === 'sector') {\n                        iconHtml = '<span class=\"pri-acc-item-icon\">\ud83d\udccb<\/span>';\n                    } else {\n                        iconHtml = '<span class=\"pri-acc-item-icon\"><\/span>';\n                    }\n                    \n                    html += '<div class=\"pri-acc-group\">'+\n                        '<div class=\"pri-acc-header\">'+\n                            '<span>' + esc(groupVal) + '<\/span>' +\n                            '<img decoding=\"async\" src=\"https:\/\/www.usviodr.com\/wp-content\/themes\/ord-theme\/assets\/images\/projectarrow.png\" alt=\"expand\">'+\n                        '<\/div>'+\n                        '<ul class=\"pri-acc-items\">';\n                    data.data.forEach(function(p){\n                        html += '<li data-project-id=\"'+esc(p.id)+'\">'+\n                                    iconHtml +\n                                    '<span class=\"pri-acc-item-text\">'+esc(p.name)+'<\/span>'+\n                                '<\/li>';\n                    });\n                    html += '<\/ul><\/div>';\n                });\n                \n                if(!html){ $accordion.html('<div style=\"padding:20px;text-align:center;\">No projects found.<\/div>'); return; }\n                $accordion.html(html);\n            }).fail(function(){\n                $accordion.html('<div style=\"padding:20px;text-align:center;color:#c00;\">Error al cargar los proyectos.<\/div>');\n            });\n        }\n        \n        $(document).on('click','#'+secId+'-accordion .pri-acc-header',function(){\n            var $h=$(this), $i=$h.next('.pri-acc-items'), wasOpen=$h.hasClass('open');\n            \n            $accordion.find('.pri-acc-header').each(function(){\n                if($(this)[0] !== $h[0]){\n                    $(this).removeClass('open');\n                    $(this).next('.pri-acc-items').removeClass('open');\n                }\n            });\n            \n            if(!wasOpen){ \n                $h.addClass('open'); \n                $i.addClass('open'); \n                var $firstItem = $i.find('li').first();\n                if($firstItem.length){\n                    $accordion.find('.pri-acc-items li').removeClass('active');\n                    $firstItem.addClass('active');\n                    loadDetail($firstItem.data('project-id'));\n                }\n            } else {\n                $h.removeClass('open');\n                $i.removeClass('open');\n            }\n        });\n        \n        $(document).on('click','#'+secId+'-accordion .pri-acc-items li',function(){\n            $accordion.find('.pri-acc-items li').removeClass('active');\n            $(this).addClass('active');\n            loadDetail($(this).data('project-id'));\n        });\n        \n        function runSearch(term){\n            activeFilterType = 'all';\n            activeFilterValue = '';\n            \n            if ($accordion.is(':visible')) {\n                $accordion.hide();\n                $accordion.find('.pri-acc-header').removeClass('open');\n                $accordion.find('.pri-acc-items').removeClass('open');\n            }\n            \n            if (!$allHeader.hasClass('open')) {\n                $allHeader.addClass('open');\n                $allList.addClass('open');\n            }\n            \n            loadAllProjects(1, term, currentAlphaFilter);\n        }\n        \n        $alphaFilterBar.on('click', '.pri-alpha-btn', function(){\n            var alpha = $(this).data('alpha');\n            \n            $alphaFilterBar.find('.pri-alpha-btn').removeClass('active');\n            \n            if (alpha === 'clear') {\n                currentAlphaFilter = '';\n                $(this).addClass('active');\n            } else {\n                currentAlphaFilter = alpha;\n                $(this).addClass('active');\n            }\n            \n            activeFilterType = 'all';\n            activeFilterValue = '';\n            \n            if ($accordion.is(':visible')) {\n                $accordion.hide();\n                $accordion.find('.pri-acc-header').removeClass('open');\n                $accordion.find('.pri-acc-items').removeClass('open');\n            }\n            \n            if (!$allHeader.hasClass('open')) {\n                $allHeader.addClass('open');\n                $allList.addClass('open');\n            }\n            \n            loadAllProjects(1, $search.val().trim(), currentAlphaFilter);\n        });\n        \n        function debounce(fn,ms){ var t; return function(){ var a=arguments; clearTimeout(t); t=setTimeout(function(){ fn.apply(null,a); },ms); }; }\n        $search.on('input', debounce(function(){ runSearch($search.val().trim()); }, 450));\n        $('#'+secId+'-search-btn').on('click',function(){ runSearch($search.val().trim()); });\n        \n        $(document).on('priHeroFilter', function(e, type){\n            $search.val('');\n            showFilterAccordionMode(type);\n        });\n        \n        function selectProjectById(projId, scrollToSection) {\n            var $targetLi = $('.pri-all-acc-items-list li[data-project-id=\"' + projId + '\"]');\n            if ($targetLi.length) {\n                $('.pri-all-acc-items-list li').removeClass('active');\n                $targetLi.addClass('active');\n                loadDetail(projId);\n                \n                if (scrollToSection !== false) {\n                    var $container = $('.pri-all-acc-items-list').closest('.pri-all-acc-items');\n                    var scrollTop = $targetLi.offset().top - $container.offset().top + $container.scrollTop();\n                    $container.animate({ scrollTop: scrollTop - 100 }, 300);\n                }\n                return true;\n            }\n            return false;\n        }\n        \n        var urlParams = new URLSearchParams(window.location.search);\n        var projectId = urlParams.get('project');\n        \n        var savedFilter = localStorage.getItem('pri_active_filter');\n        var filterToApply = (savedFilter && savedFilter !== '') ? savedFilter : 'sector';\n        \n        setTimeout(function() {\n            showFilterAccordionMode(filterToApply);\n        }, 100);\n        \n        if (projectId) {\n            pendingProjectId = projectId;\n            $allHeader.addClass('open');\n            $allList.addClass('open');\n            loadAllProjects(1, '', '', function() {\n                if (pendingProjectId) {\n                    setTimeout(function() {\n                        selectProjectById(pendingProjectId, true);\n                        pendingProjectId = null;\n                    }, 200);\n                }\n            });\n        }\n        \n        window.ordPriSelectProject = function(projId) {\n            if (!$allHeader.hasClass('open')) {\n                $allHeader.trigger('click');\n                setTimeout(function() {\n                    selectProjectById(projId, true);\n                }, 400);\n            } else {\n                selectProjectById(projId, true);\n            }\n        };\n        \n    });\n    })(jQuery);\n    <\/script>\n    \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"full-width","meta":{"project_id":"","notification":"","due_date":"","status":"","show_rebuild":"","footnotes":""},"class_list":["post-20403","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Search by project - US VI ODR<\/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:\/\/www.usviodr.com\/fr\/search-by-project\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Search by project - US VI ODR\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.usviodr.com\/fr\/search-by-project\/\" \/>\n<meta property=\"og:site_name\" content=\"US VI ODR\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/odrusvi\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-12T15:30:10+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@USVIODR\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.usviodr.com\\\/fr\\\/search-by-project\\\/\",\"url\":\"https:\\\/\\\/www.usviodr.com\\\/fr\\\/search-by-project\\\/\",\"name\":\"Search by project - US VI ODR\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.usviodr.com\\\/es\\\/#website\"},\"datePublished\":\"2026-04-12T15:30:09+00:00\",\"dateModified\":\"2026-04-12T15:30:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.usviodr.com\\\/fr\\\/search-by-project\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.usviodr.com\\\/fr\\\/search-by-project\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.usviodr.com\\\/fr\\\/search-by-project\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.usviodr.com\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Search by project\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.usviodr.com\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/www.usviodr.com\\\/es\\\/\",\"name\":\"US VI ODR\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.usviodr.com\\\/es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.usviodr.com\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.usviodr.com\\\/es\\\/#organization\",\"name\":\"US VI ODR\",\"url\":\"https:\\\/\\\/www.usviodr.com\\\/es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.usviodr.com\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.usviodr.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/ODR-LOGO.png\",\"contentUrl\":\"https:\\\/\\\/www.usviodr.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/ODR-LOGO.png\",\"width\":105,\"height\":105,\"caption\":\"US VI ODR\"},\"image\":{\"@id\":\"https:\\\/\\\/www.usviodr.com\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/odrusvi\",\"https:\\\/\\\/x.com\\\/USVIODR\",\"https:\\\/\\\/www.instagram.com\\\/usviofficeofdisasterrecovery\\\/?hl=en\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Search by project - US VI ODR","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:\/\/www.usviodr.com\/fr\/search-by-project\/","og_locale":"es_ES","og_type":"article","og_title":"Search by project - US VI ODR","og_url":"https:\/\/www.usviodr.com\/fr\/search-by-project\/","og_site_name":"US VI ODR","article_publisher":"https:\/\/www.facebook.com\/odrusvi","article_modified_time":"2026-04-12T15:30:10+00:00","twitter_card":"summary_large_image","twitter_site":"@USVIODR","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.usviodr.com\/fr\/search-by-project\/","url":"https:\/\/www.usviodr.com\/fr\/search-by-project\/","name":"Search by project - US VI ODR","isPartOf":{"@id":"https:\/\/www.usviodr.com\/es\/#website"},"datePublished":"2026-04-12T15:30:09+00:00","dateModified":"2026-04-12T15:30:10+00:00","breadcrumb":{"@id":"https:\/\/www.usviodr.com\/fr\/search-by-project\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.usviodr.com\/fr\/search-by-project\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.usviodr.com\/fr\/search-by-project\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.usviodr.com\/es\/"},{"@type":"ListItem","position":2,"name":"Search by project"}]},{"@type":"WebSite","@id":"https:\/\/www.usviodr.com\/es\/#website","url":"https:\/\/www.usviodr.com\/es\/","name":"US VI ODR","description":"","publisher":{"@id":"https:\/\/www.usviodr.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.usviodr.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.usviodr.com\/es\/#organization","name":"US VI ODR","url":"https:\/\/www.usviodr.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.usviodr.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/www.usviodr.com\/wp-content\/uploads\/2026\/01\/ODR-LOGO.png","contentUrl":"https:\/\/www.usviodr.com\/wp-content\/uploads\/2026\/01\/ODR-LOGO.png","width":105,"height":105,"caption":"US VI ODR"},"image":{"@id":"https:\/\/www.usviodr.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/odrusvi","https:\/\/x.com\/USVIODR","https:\/\/www.instagram.com\/usviofficeofdisasterrecovery\/?hl=en"]}]}},"_links":{"self":[{"href":"https:\/\/www.usviodr.com\/es\/wp-json\/wp\/v2\/pages\/20403","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.usviodr.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.usviodr.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.usviodr.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.usviodr.com\/es\/wp-json\/wp\/v2\/comments?post=20403"}],"version-history":[{"count":1,"href":"https:\/\/www.usviodr.com\/es\/wp-json\/wp\/v2\/pages\/20403\/revisions"}],"predecessor-version":[{"id":20404,"href":"https:\/\/www.usviodr.com\/es\/wp-json\/wp\/v2\/pages\/20403\/revisions\/20404"}],"wp:attachment":[{"href":"https:\/\/www.usviodr.com\/es\/wp-json\/wp\/v2\/media?parent=20403"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}