{"id":1032,"date":"2026-01-14T13:47:52","date_gmt":"2026-01-14T13:47:52","guid":{"rendered":"https:\/\/allintheloop.com\/nata-2026-convention\/?page_id=1032"},"modified":"2026-01-14T13:50:27","modified_gmt":"2026-01-14T13:50:27","slug":"student-schedule","status":"publish","type":"page","link":"https:\/\/allintheloop.com\/nata-2026-convention\/student-schedule\/","title":{"rendered":"Student Schedule"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1032\" class=\"elementor elementor-1032\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3681afd e-flex e-con-boxed e-con e-parent\" data-id=\"3681afd\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5bfadb4 elementor-widget elementor-widget-heading\" data-id=\"5bfadb4\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Student Schedule<\/h2>\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-d3fec28 e-flex e-con-boxed e-con e-parent\" data-id=\"d3fec28\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ab731a8 elementor-widget elementor-widget-shortcode\" data-id=\"ab731a8\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">    <section class=\"schedule-section style-two\">\n                <!-- SIDEBAR FILTER PANEL -->\n        <div class=\"filter-sidebar\">\n            <div class=\"filter-sidebar-inner\">\n                <div class=\"filter-header\">\n                    <h3>Filter by Type<\/h3>\n                    <button class=\"filter-close-btn\">&times;<\/button>\n                <\/div>\n                <div class=\"filter-clear-bar\" style=\"padding: 0 20px 15px; display: none;\">\n                    <button class=\"clear-filter-btn\" style=\"\n                        background: transparent;\n                        border: 1px solid #dc3545;\n                        color: #dc3545;\n                        padding: 8px 16px;\n                        border-radius: 6px;\n                        cursor: pointer;\n                        font-size: 14px;\n                        font-weight: 500;\n                        display: flex;\n                        align-items: center;\n                        gap: 6px;\n                        transition: all 0.2s ease;\n                    \">\n                        <i class=\"fa fa-times-circle\"><\/i> Clear Selections\n                    <\/button>\n                <\/div>\n        \n                <div class=\"filter-body\">\n                    <!-- Dynamic Types -->\n                    \n                    <div class=\"filter-group\">\n                        <h5 class=\"group-title\" data-group=\"0\">\n                            Access                            <span class=\"toggle-icon\">\u25bc<\/span>\n                        <\/h5>\n\n                        <ul class=\"filter-checkbox-list\" id=\"group-0\">\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45236\"\n                                            data-group=\"6971\"\n                                            data-type-color=\"#2E2D66\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                            Pre-registration required.                                        <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45275\"\n                                            data-group=\"6971\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                    <\/ul>\n                    <\/div>\n\n                    \n                    <div class=\"filter-group\">\n                        <h5 class=\"group-title\" data-group=\"1\">\n                            Domains                            <span class=\"toggle-icon\">\u25bc<\/span>\n                        <\/h5>\n\n                        <ul class=\"filter-checkbox-list\" id=\"group-1\">\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45237\"\n                                            data-group=\"6973\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45238\"\n                                            data-group=\"6973\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45262\"\n                                            data-group=\"6973\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45239\"\n                                            data-group=\"6973\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45255\"\n                                            data-group=\"6973\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45242\"\n                                            data-group=\"6973\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45265\"\n                                            data-group=\"6973\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45256\"\n                                            data-group=\"6973\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                    <\/ul>\n                    <\/div>\n\n                    \n                    <div class=\"filter-group\">\n                        <h5 class=\"group-title\" data-group=\"2\">\n                            Event Format                            <span class=\"toggle-icon\">\u25bc<\/span>\n                        <\/h5>\n\n                        <ul class=\"filter-checkbox-list\" id=\"group-2\">\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45241\"\n                                            data-group=\"7177\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45257\"\n                                            data-group=\"7177\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45267\"\n                                            data-group=\"7177\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45260\"\n                                            data-group=\"7177\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45246\"\n                                            data-group=\"7177\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"46180\"\n                                            data-group=\"7177\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"46179\"\n                                            data-group=\"7177\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                    <\/ul>\n                    <\/div>\n\n                    \n                    <div class=\"filter-group\">\n                        <h5 class=\"group-title\" data-group=\"3\">\n                            On Demand                            <span class=\"toggle-icon\">\u25bc<\/span>\n                        <\/h5>\n\n                        <ul class=\"filter-checkbox-list\" id=\"group-3\">\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45248\"\n                                            data-group=\"7009\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                    <\/ul>\n                    <\/div>\n\n                    \n                    <div class=\"filter-group\">\n                        <h5 class=\"group-title\" data-group=\"4\">\n                            Pathways                            <span class=\"toggle-icon\">\u25bc<\/span>\n                        <\/h5>\n\n                        <ul class=\"filter-checkbox-list\" id=\"group-4\">\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45249\"\n                                            data-group=\"6991\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45243\"\n                                            data-group=\"6991\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45266\"\n                                            data-group=\"6991\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45258\"\n                                            data-group=\"6991\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45247\"\n                                            data-group=\"6991\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45268\"\n                                            data-group=\"6991\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45270\"\n                                            data-group=\"6991\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45264\"\n                                            data-group=\"6991\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45259\"\n                                            data-group=\"6991\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45253\"\n                                            data-group=\"6991\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45250\"\n                                            data-group=\"6991\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45244\"\n                                            data-group=\"6991\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45251\"\n                                            data-group=\"6991\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45252\"\n                                            data-group=\"6991\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45269\"\n                                            data-group=\"6991\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45245\"\n                                            data-group=\"6991\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45254\"\n                                            data-group=\"6991\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                    <\/ul>\n                    <\/div>\n\n                    \n                    <div class=\"filter-group\">\n                        <h5 class=\"group-title\" data-group=\"5\">\n                            Skill Level                            <span class=\"toggle-icon\">\u25bc<\/span>\n                        <\/h5>\n\n                        <ul class=\"filter-checkbox-list\" id=\"group-5\">\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45240\"\n                                            data-group=\"6981\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45263\"\n                                            data-group=\"6981\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45261\"\n                                            data-group=\"6981\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                    <\/ul>\n                    <\/div>\n\n                    \n                    <div class=\"filter-group\">\n                        <h5 class=\"group-title\" data-group=\"6\">\n                            Track                            <span class=\"toggle-icon\">\u25bc<\/span>\n                        <\/h5>\n\n                        <ul class=\"filter-checkbox-list\" id=\"group-6\">\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"47389\"\n                                            data-group=\"8160\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45234\"\n                                            data-group=\"8160\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                            <li>\n                                    <label>\n                                        <input type=\"checkbox\"\n                                            class=\"filter-checkbox\"\n                                            value=\"45233\"\n                                            data-group=\"8160\"\n                                            data-type-color=\"#0073aa\">\n                                        \n                                        <span class=\"checkbox-label\">\n                                                                                    <\/span>\n                                    <\/label>\n                                <\/li>\n                                                    <\/ul>\n                    <\/div>\n\n                                                            <div class=\"filter-footer\">\n                        <div class=\"filter-mode-toggle\">\n                            <label class=\"toggle-label\">\n                                <input type=\"radio\" name=\"filter-mode\" value=\"and\" checked>\n                                <span>AND<\/span>\n                            <\/label>\n                            <label class=\"toggle-label\">\n                                <input type=\"radio\" name=\"filter-mode\" value=\"or\">\n                                <span>OR<\/span>\n                            <\/label>\n                        <\/div>\n                        <button class=\"apply-filter-btn\">Apply Filter<\/button>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n        \n        <!-- BACKDROP -->\n        <div class=\"filter-backdrop\"><\/div>\n        \n                <div class=\"schedule-section-inner\">\n            <div class=\"schedule-tabs style-two tabs-box\">\n                <!-- ============================== -->\n                <!--     SEARCH BAR ADDED HERE     -->\n                <!-- ============================== -->\n                <div class=\"schedule-search-filter-main\">\n                    <div class=\"schedule-search-wrapper\" style=\"margin-bottom: 25px; text-align:center; position: relative; display: flex; align-items: center; gap: 10px;\">\n                        <input type=\"text\" id=\"scheduleSearch\" \n                            placeholder=\"Search sessions...\"\n                            style=\"\n                                width: 60%;\n                                padding: 12px 15px;\n                                font-size: 16px;\n                                border: 1px solid #ccc;\n                                border-radius: 8px;\n                            \">\n                        <button type=\"button\" id=\"clearSearchBtn\" \n                            style=\"\n                                padding: 12px 20px;\n                                font-size: 14px;\n                                background: #dc3545;\n                                color: #fff;\n                                border: none;\n                                border-radius: 8px;\n                                cursor: pointer;\n                                display: none;\n                            \">\n                            <i class=\"fa fa-times\"><\/i> Clear\n                        <\/button>\n                    <\/div>  \n                    <button type=\"button\" id=\"clearFilterMainBtn\" \n                        style=\"\n                            padding: 10px 18px;\n                            font-size: 14px;\n                            background: #dc3545;\n                            color: #fff;\n                            border: none;\n                            border-radius: 6px;\n                            cursor: pointer;\n                            margin-left: 10px;\n                            display: none;\n                            margin-bottom: 25px;\n                            margin-right: 10px;\n                        \">\n                        <i class=\"fa fa-times\"><\/i> Clear Filter\n                    <\/button> \n                    <button class=\"open-filter-btn\">\n                        <i class=\"fa fa-filter\"><\/i> Filter\n                    <\/button>\n                    \n                <\/div>\n                <!-- Tabs Navigation -->\n                <div class=\"tab-buttons-wrapper\">\n                    <button class=\"carousel-nav-btn carousel-prev\" type=\"button\">\n                        <i class=\"fa fa-chevron-left\"><\/i>\n                    <\/button>\n                    <div class=\"tab-buttons-carousel-container\">\n                        <ul class=\"tab-buttons-carousel\">\n                                                            <li class=\"tab-btn-item\">\n                                    <div class=\"tab-btn active-btn\"\n                                        data-tab=\"#tab-1\"\n                                        data-index=\"0\"\n                                        data-date=\"2026-06-30\">\n                                        <span class=\"date\">30<\/span>\n                                        <span class=\"month\">Jun<\/span>\n                                        \n                                        <span class=\"day-name\">TUE<\/span>\n                                    <\/div>\n                                <\/li>\n                                                            <li class=\"tab-btn-item\">\n                                    <div class=\"tab-btn \"\n                                        data-tab=\"#tab-2\"\n                                        data-index=\"1\"\n                                        data-date=\"2026-07-01\">\n                                        <span class=\"date\">01<\/span>\n                                        <span class=\"month\">Jul<\/span>\n                                        \n                                        <span class=\"day-name\">WED<\/span>\n                                    <\/div>\n                                <\/li>\n                                                            <li class=\"tab-btn-item\">\n                                    <div class=\"tab-btn \"\n                                        data-tab=\"#tab-3\"\n                                        data-index=\"2\"\n                                        data-date=\"2026-07-02\">\n                                        <span class=\"date\">02<\/span>\n                                        <span class=\"month\">Jul<\/span>\n                                        \n                                        <span class=\"day-name\">THU<\/span>\n                                    <\/div>\n                                <\/li>\n                                                    <\/ul>\n                    <\/div>\n                    <button class=\"carousel-nav-btn carousel-next\" type=\"button\">\n                        <i class=\"fa fa-chevron-right\"><\/i>\n                    <\/button>\n                <\/div>\n\n                <div class=\"tabs-content\" \n                     data-ajax-url=\"https:\/\/allintheloop.com\/nata-2026-convention\/wp-admin\/admin-ajax.php\"\n                     data-nonce=\"9fa70e6c4c\">\n                                            <div class=\"tab active-tab color-1\"\n                             id=\"tab-1\"\n                             data-date=\"2026-06-30\"\n                             data-loaded=\"true\"\n                             >\n                            \n                            <div class=\"schedule-timeline\">\n                                \n                                <div class=\"schedule-block color-1  \n                                     \"\n                                     data-message=\"You do not have access to this session.\"\n                                     data-search=\"student town hall: a global game plan: navigating an international career and lessons learned abroad this year, the student town hall is being presented by jared maisel, ms, atc, staohk-reg.there has been growth in athletic training and similar professions internationally, but the formal systems and programs to bring a practitioner abroad remain limited. this session will focus on equipping attendees with current trends in the global landscape for athletic trainers, including opportunities, challenges and how to prepare oneself to maximize chances of success for a professional life abroad. the aim of this session is to generate curiosity, passion and engagement for the international development of athletic training and equip young professionals with a personal inventory and road map.sponsored by:\" data-types=\"\">\n\n                                    <div class=\"inner-box\">\n                                        <div class=\"inner\">\n\n                                            <div class=\"date\">\n                                                10:00 AM - 11:30 AM                                            <\/div>\n\n                                            <!-- Favourite -->\n                                            \n                                            <!-- Title -->\n                                            <h4>\n                                                                                                    <a class=\"agenda-link\" href=\"https:\/\/allintheloop.com\/nata-2026-convention\/schedule-details\/?agenda_id=rwKsQTU%2F2tI1UPQxNjC9eA%3D%3D\">\n                                                        Student Town Hall: A Global Game Plan: Navigating an International Career and Lessons Learned Abroad                                                    <\/a>\n                                                                                                <\/h4>\n\n                                                                                            <div class=\"text\"><p><a href=\"https:\/\/attend.wordly.ai\/join\/LDEV-5181\" style=\"text-decoration:none\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/allintheloop.info\/media\/4990\/6a1ee8b9c1f62_.png\" width=\"75%\"><\/a><\/p><p>This year, the Student Town Hall is being presented by Jared Maisel, MS, ATC, STAoHK-Reg.<br><br>There has been growth in athletic training and similar professions internationally, but the formal systems and programs to bring a practitioner abroad remain limited. This session will focus on equipping attendees with current trends in the global landscape for athletic trainers, including opportunities, challenges and how to prepare oneself to maximize chances of success for a professional life abroad. The aim of this session is to generate curiosity, passion and engagement for the international development of athletic training and equip young professionals with a personal inventory and road map.<br><br>Sponsored by:<br><br><img decoding=\"async\" src=\"https:\/\/allintheloop.info\/media\/4990\/6a071a8db98e2_.png\" width=\"35%\"><\/p><\/div>\n                                            \n                                             \n                                            <!-- Tags -->\n                                                                                        \n                                            \n                                            \n                                            <!-- Location -->\n                                                                                            <div class=\"agenda-locations\">\n                                                    <span class=\"icon fa fa-map-marker-alt\"><\/span>\n                                                    PCC, 103A                                                <\/div>\n                                            \n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n\n                                \n                                <div class=\"schedule-block color-2  \n                                     \"\n                                     data-message=\"You do not have access to this session.\"\n                                     data-search=\"student lecture 1: how to network and promote yourself for an athletic training position presented by michael goldenberg, ms, atc, ceswhen an employer is trying to hire their next employee, the first step is usually separating candidates into two piles: \u201cyes, i\u2019m interested in this person\u201d or \u201cno, i\u2019m not interested.\u201d employers use many different approaches to separate candidates. one might be in form of a verbal recommendation from a colleague or friend. another would be the potential employee making a good first impression when they meet the employer at an in-person or on-line event. this presentation will focus on how to properly network in a variety of situations to increase one\u2019s professional network and make that good first impression so an at will call the employer on their behalf. using both a lecture and hands-on approach, the attendee will develop and practice an elevator speech, and learn how to join a conversation at an in-person conference. the presenter will also focus on how to target and digitally network with individuals to help them further their career.\" data-types=\"\">\n\n                                    <div class=\"inner-box\">\n                                        <div class=\"inner\">\n\n                                            <div class=\"date\">\n                                                11:40 AM - 12:35 PM                                            <\/div>\n\n                                            <!-- Favourite -->\n                                            \n                                            <!-- Title -->\n                                            <h4>\n                                                                                                    <a class=\"agenda-link\" href=\"https:\/\/allintheloop.com\/nata-2026-convention\/schedule-details\/?agenda_id=h%2F%2BmRqNCahBCrC7jM57dgg%3D%3D\">\n                                                        Student Lecture 1: How To Network and Promote Yourself for an Athletic Training Position                                                    <\/a>\n                                                                                                <\/h4>\n\n                                                                                            <div class=\"text\"><p><a href=\"https:\/\/attend.wordly.ai\/join\/LDEV-5181\" style=\"text-decoration:none\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/allintheloop.info\/media\/4990\/6a1ee8b9c1f62_.png\" width=\"75%\"><\/a><\/p><p>Presented by Michael Goldenberg, MS, ATC, CES<br><br>When an employer is trying to hire their next employee, the first step is usually separating candidates into two piles: \u201cYes, I\u2019m interested in this person\u201d or \u201cNo, I\u2019m not interested.\u201d Employers use many different approaches to separate candidates. One might be in form of a verbal recommendation from a colleague or friend. Another would be the potential employee making a good first impression when they meet the employer at an in-person or on-line event. This presentation will focus on how to properly network in a variety of situations to increase one\u2019s professional network and make that good first impression so an AT will call the employer on their behalf. Using both a lecture and hands-on approach, the attendee will develop and practice an elevator speech, and learn how to join a conversation at an in-person conference. The presenter will also focus on how to target and digitally network with individuals to help them further their career.<\/p><\/div>\n                                            \n                                             \n                                            <!-- Tags -->\n                                                                                        \n                                            \n                                            \n                                            <!-- Location -->\n                                                                                            <div class=\"agenda-locations\">\n                                                    <span class=\"icon fa fa-map-marker-alt\"><\/span>\n                                                    PCC, 103A                                                <\/div>\n                                            \n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n\n                                                            <\/div>\n                        <\/div>\n                                            <div class=\"tab  color-2\"\n                             id=\"tab-2\"\n                             data-date=\"2026-07-01\"\n                             data-loaded=\"false\"\n                             style=\"display:none;\">\n                            \n                            <div class=\"schedule-timeline\">\n                                                                    <p style=\"text-align:center;padding:40px;color:#fff;\">Loading agenda...<\/p>\n                                                            <\/div>\n                        <\/div>\n                                            <div class=\"tab  color-3\"\n                             id=\"tab-3\"\n                             data-date=\"2026-07-02\"\n                             data-loaded=\"false\"\n                             style=\"display:none;\">\n                            \n                            <div class=\"schedule-timeline\">\n                                                                    <p style=\"text-align:center;padding:40px;color:#fff;\">Loading agenda...<\/p>\n                                                            <\/div>\n                        <\/div>\n                                    <\/div>\n            <\/div>\n        <\/div>\n        \n        <!-- Pagination -->\n            <\/section>\n    \n    <!-- Global Schedule Data -->\n    <script>\n    window.scheduleUserData = {\n        isLoggedIn: false,\n        eventId: '4990',\n        userId: '',\n        userAgendaIds: [],\n        scheduleDetailUrl: 'https:\/\/allintheloop.com\/nata-2026-convention\/schedule-details\/',\n        templateDirUri: 'https:\/\/allintheloop.com\/nata-2026-convention\/wp-content\/themes\/hello-elementor',\n        firstDate: '2026-06-30',\n        currentLoadedDate: '2026-06-30',\n        initialAgendaData: [{\"agenda_id\":\"566690\",\"Start_date\":\"2026-06-30\",\"Start_time\":\"10:00:00\",\"End_date\":\"2026-06-30\",\"End_time\":\"11:30:00\",\"checking_datetime\":\"\",\"Maximum_People\":1,\"Heading\":\"Student Town Hall: A Global Game Plan: Navigating an International Career and Lessons Learned Abroad\",\"Types\":\"\",\"Agenda_status\":\"1\",\"Speaker_id\":\"\",\"Chair_id\":\"\",\"sponsor_id\":\"\",\"type_ids\":[],\"document_id\":\"\",\"document_ids\":\"\",\"presentation_id\":\"\",\"Address_map\":\"\",\"other_types\":\"\",\"location\":\"PCC, 103A\",\"short_desc\":\"\",\"description\":\"<p><a href='https:\\\/\\\/attend.wordly.ai\\\/join\\\/LDEV-5181' style='text-decoration:none;' target='_blank'><img src='https:\\\/\\\/allintheloop.info\\\/media\\\/4990\\\/6a1ee8b9c1f62_.png' width='75%'><\\\/a><\\\/p><p>This year, the Student Town Hall is being presented by Jared Maisel, MS, ATC, STAoHK-Reg.<br><br>There has been growth in athletic training and similar professions internationally, but the formal systems and programs to bring a practitioner abroad remain limited. This session will focus on equipping attendees with current trends in the global landscape for athletic trainers, including opportunities, challenges and how to prepare oneself to maximize chances of success for a professional life abroad. The aim of this session is to generate curiosity, passion and engagement for the international development of athletic training and equip young professionals with a personal inventory and road map.<br><br>Sponsored by:<br><br><img src=\\\"https:\\\/\\\/allintheloop.info\\\/media\\\/4990\\\/6a071a8db98e2_.png\\\" width=\\\"35%\\\"><\\\/p>\",\"Event_show_time_zone\":\"UTC-4\",\"time_zone\":\"\",\"Documents\":\"\",\"session_image\":\"\",\"thumbnail\":\"\",\"s3_image\":\"\",\"s3_image_thumbnail\":\"\",\"show_checking_in\":\"0\",\"speaker\":\"\",\"sponsor\":\"\",\"chair\":\"\",\"survey_id\":\"\",\"session_tracks\":\"\",\"hide_save_session\":\"0\",\"Address_map_id\":\"\",\"Map_title\":\"\",\"tname\":\"\",\"font_color\":null,\"document_file\":\"\",\"custom_location\":\"PCC, 103A\",\"show_rating\":\"0\",\"qasession_id\":\"0\",\"allow_comments\":\"0\",\"video_link\":\"\",\"multi_broadcasters\":[],\"check_dwg_files\":\"0\",\"show_places_remaining\":\"0\",\"is_live_stream\":\"0\",\"video_link_ondemand\":\"\",\"is_meeting_room\":\"0\",\"is_green_room\":\"0\",\"is_zoom_link\":\"0\",\"zoom_link\":\"\",\"is_hide_ls_discussion\":\"\",\"is_hide_mr_discussion\":\"0\",\"is_hide_mr_presenters\":\"0\",\"moderation\":\"0\",\"remaining_place_message\":\"\",\"video_description\":\"\",\"isExpoFpFplan\":\"\",\"expoFP_Url\":\"\",\"show_reminder_button\":\"0\",\"location_time_zone\":\"America\\\/New_York\",\"type_id\":\"\",\"sort_order\":\"0\",\"is_on_demand\":\"0\",\"category_ids\":[\"12539\"],\"font_icon\":\"\",\"is_checked_in\":false,\"user_flag\":\"0\",\"start_time_for_reversetimer\":\"10:00 am\",\"show_comment_box\":\"1\",\"show_feedback\":\"0\",\"max_count\":\"14\",\"is_map_visible_btn\":\"0\",\"map_details\":[],\"multi_broadcasters_details\":[],\"documents_data\":[],\"rating\":\"\",\"is_saved\":\"0\",\"check_max_people\":\"0\",\"available_user\":\"14\",\"checkout\":\"0\",\"is_user_checkin\":\"0\",\"scan_badge\":\"0\",\"is_next_session\":\"0\",\"utc_date\":\"2026-08-12\",\"utc_time\":\"07:33:12\",\"timestamp\":1782813600,\"speakers\":[],\"chairs\":[],\"sponsors\":[],\"exhibitors\":[],\"time_slot\":\"morning\",\"search_text\":\"student town hall: a global game plan: navigating an international career and lessons learned abroad this year, the student town hall is being presented by jared maisel, ms, atc, staohk-reg.there has been growth in athletic training and similar professions internationally, but the formal systems and programs to bring a practitioner abroad remain limited. this session will focus on equipping attendees with current trends in the global landscape for athletic trainers, including opportunities, challenges and how to prepare oneself to maximize chances of success for a professional life abroad. the aim of this session is to generate curiosity, passion and engagement for the international development of athletic training and equip young professionals with a personal inventory and road map.sponsored by:\"},{\"agenda_id\":\"566625\",\"Start_date\":\"2026-06-30\",\"Start_time\":\"11:40:00\",\"End_date\":\"2026-06-30\",\"End_time\":\"12:35:00\",\"checking_datetime\":\"\",\"Maximum_People\":1,\"Heading\":\"Student Lecture 1: How To Network and Promote Yourself for an Athletic Training Position\",\"Types\":\"\",\"Agenda_status\":\"1\",\"Speaker_id\":\"\",\"Chair_id\":\"\",\"sponsor_id\":\"\",\"type_ids\":[],\"document_id\":\"\",\"document_ids\":\"\",\"presentation_id\":\"\",\"Address_map\":\"\",\"other_types\":\"\",\"location\":\"PCC, 103A\",\"short_desc\":\"\",\"description\":\"<p><a href='https:\\\/\\\/attend.wordly.ai\\\/join\\\/LDEV-5181' style='text-decoration:none;' target='_blank'><img src='https:\\\/\\\/allintheloop.info\\\/media\\\/4990\\\/6a1ee8b9c1f62_.png' width='75%'><\\\/a><\\\/p><p>Presented by Michael Goldenberg, MS, ATC, CES<br><br>When an employer is trying to hire their next employee, the first step is usually separating candidates into two piles: \\u201cYes, I\\u2019m interested in this person\\u201d or \\u201cNo, I\\u2019m not interested.\\u201d Employers use many different approaches to separate candidates. One might be in form of a verbal recommendation from a colleague or friend. Another would be the potential employee making a good first impression when they meet the employer at an in-person or on-line event. This presentation will focus on how to properly network in a variety of situations to increase one\\u2019s professional network and make that good first impression so an AT will call the employer on their behalf. Using both a lecture and hands-on approach, the attendee will develop and practice an elevator speech, and learn how to join a conversation at an in-person conference. The presenter will also focus on how to target and digitally network with individuals to help them further their career.<\\\/p>\",\"Event_show_time_zone\":\"UTC-4\",\"time_zone\":\"\",\"Documents\":\"\",\"session_image\":\"\",\"thumbnail\":\"\",\"s3_image\":\"\",\"s3_image_thumbnail\":\"\",\"show_checking_in\":\"0\",\"speaker\":\"\",\"sponsor\":\"\",\"chair\":\"\",\"survey_id\":\"\",\"session_tracks\":\"\",\"hide_save_session\":\"0\",\"Address_map_id\":\"\",\"Map_title\":\"\",\"tname\":\"\",\"font_color\":null,\"document_file\":\"\",\"custom_location\":\"PCC, 103A\",\"show_rating\":\"0\",\"qasession_id\":\"0\",\"allow_comments\":\"0\",\"video_link\":\"\",\"multi_broadcasters\":[],\"check_dwg_files\":\"0\",\"show_places_remaining\":\"0\",\"is_live_stream\":\"0\",\"video_link_ondemand\":\"\",\"is_meeting_room\":\"0\",\"is_green_room\":\"0\",\"is_zoom_link\":\"\",\"zoom_link\":\"\",\"is_hide_ls_discussion\":\"\",\"is_hide_mr_discussion\":\"0\",\"is_hide_mr_presenters\":\"0\",\"moderation\":\"0\",\"remaining_place_message\":\"\",\"video_description\":\"\",\"isExpoFpFplan\":\"\",\"expoFP_Url\":\"\",\"show_reminder_button\":\"0\",\"location_time_zone\":\"America\\\/New_York\",\"type_id\":\"\",\"sort_order\":\"0\",\"is_on_demand\":\"0\",\"category_ids\":[\"12539\"],\"font_icon\":\"\",\"is_checked_in\":false,\"user_flag\":\"0\",\"start_time_for_reversetimer\":\"11:40 am\",\"show_comment_box\":\"1\",\"show_feedback\":\"0\",\"max_count\":\"14\",\"is_map_visible_btn\":\"0\",\"map_details\":[],\"multi_broadcasters_details\":[],\"documents_data\":[],\"rating\":\"\",\"is_saved\":\"0\",\"check_max_people\":\"0\",\"available_user\":\"14\",\"checkout\":\"0\",\"is_user_checkin\":\"0\",\"scan_badge\":\"0\",\"is_next_session\":\"0\",\"utc_date\":\"2026-08-12\",\"utc_time\":\"07:33:12\",\"timestamp\":1782819600,\"speakers\":[],\"chairs\":[],\"sponsors\":[],\"exhibitors\":[],\"time_slot\":\"morning\",\"search_text\":\"student lecture 1: how to network and promote yourself for an athletic training position presented by michael goldenberg, ms, atc, ceswhen an employer is trying to hire their next employee, the first step is usually separating candidates into two piles: \\u201cyes, i\\u2019m interested in this person\\u201d or \\u201cno, i\\u2019m not interested.\\u201d employers use many different approaches to separate candidates. one might be in form of a verbal recommendation from a colleague or friend. another would be the potential employee making a good first impression when they meet the employer at an in-person or on-line event. this presentation will focus on how to properly network in a variety of situations to increase one\\u2019s professional network and make that good first impression so an at will call the employer on their behalf. using both a lecture and hands-on approach, the attendee will develop and practice an elevator speech, and learn how to join a conversation at an in-person conference. the presenter will also focus on how to target and digitally network with individuals to help them further their career.\"}],\n        allDates: [\"2026-06-30\",\"2026-07-01\",\"2026-07-02\"],\n        categoryId: '12539'\n    };\n    \/\/ Seed per-date agenda cache from the initial server render (CCIM pattern)\n    window.scheduleAgendaByDate = {\"2026-06-30\":[{\"agenda_id\":\"566690\",\"Start_date\":\"2026-06-30\",\"Start_time\":\"10:00:00\",\"End_date\":\"2026-06-30\",\"End_time\":\"11:30:00\",\"checking_datetime\":\"\",\"Maximum_People\":1,\"Heading\":\"Student Town Hall: A Global Game Plan: Navigating an International Career and Lessons Learned Abroad\",\"Types\":\"\",\"Agenda_status\":\"1\",\"Speaker_id\":\"\",\"Chair_id\":\"\",\"sponsor_id\":\"\",\"type_ids\":[],\"document_id\":\"\",\"document_ids\":\"\",\"presentation_id\":\"\",\"Address_map\":\"\",\"other_types\":\"\",\"location\":\"PCC, 103A\",\"short_desc\":\"\",\"description\":\"<p><a href='https:\\\/\\\/attend.wordly.ai\\\/join\\\/LDEV-5181' style='text-decoration:none;' target='_blank'><img src='https:\\\/\\\/allintheloop.info\\\/media\\\/4990\\\/6a1ee8b9c1f62_.png' width='75%'><\\\/a><\\\/p><p>This year, the Student Town Hall is being presented by Jared Maisel, MS, ATC, STAoHK-Reg.<br><br>There has been growth in athletic training and similar professions internationally, but the formal systems and programs to bring a practitioner abroad remain limited. This session will focus on equipping attendees with current trends in the global landscape for athletic trainers, including opportunities, challenges and how to prepare oneself to maximize chances of success for a professional life abroad. The aim of this session is to generate curiosity, passion and engagement for the international development of athletic training and equip young professionals with a personal inventory and road map.<br><br>Sponsored by:<br><br><img src=\\\"https:\\\/\\\/allintheloop.info\\\/media\\\/4990\\\/6a071a8db98e2_.png\\\" width=\\\"35%\\\"><\\\/p>\",\"Event_show_time_zone\":\"UTC-4\",\"time_zone\":\"\",\"Documents\":\"\",\"session_image\":\"\",\"thumbnail\":\"\",\"s3_image\":\"\",\"s3_image_thumbnail\":\"\",\"show_checking_in\":\"0\",\"speaker\":\"\",\"sponsor\":\"\",\"chair\":\"\",\"survey_id\":\"\",\"session_tracks\":\"\",\"hide_save_session\":\"0\",\"Address_map_id\":\"\",\"Map_title\":\"\",\"tname\":\"\",\"font_color\":null,\"document_file\":\"\",\"custom_location\":\"PCC, 103A\",\"show_rating\":\"0\",\"qasession_id\":\"0\",\"allow_comments\":\"0\",\"video_link\":\"\",\"multi_broadcasters\":[],\"check_dwg_files\":\"0\",\"show_places_remaining\":\"0\",\"is_live_stream\":\"0\",\"video_link_ondemand\":\"\",\"is_meeting_room\":\"0\",\"is_green_room\":\"0\",\"is_zoom_link\":\"0\",\"zoom_link\":\"\",\"is_hide_ls_discussion\":\"\",\"is_hide_mr_discussion\":\"0\",\"is_hide_mr_presenters\":\"0\",\"moderation\":\"0\",\"remaining_place_message\":\"\",\"video_description\":\"\",\"isExpoFpFplan\":\"\",\"expoFP_Url\":\"\",\"show_reminder_button\":\"0\",\"location_time_zone\":\"America\\\/New_York\",\"type_id\":\"\",\"sort_order\":\"0\",\"is_on_demand\":\"0\",\"category_ids\":[\"12539\"],\"font_icon\":\"\",\"is_checked_in\":false,\"user_flag\":\"0\",\"start_time_for_reversetimer\":\"10:00 am\",\"show_comment_box\":\"1\",\"show_feedback\":\"0\",\"max_count\":\"14\",\"is_map_visible_btn\":\"0\",\"map_details\":[],\"multi_broadcasters_details\":[],\"documents_data\":[],\"rating\":\"\",\"is_saved\":\"0\",\"check_max_people\":\"0\",\"available_user\":\"14\",\"checkout\":\"0\",\"is_user_checkin\":\"0\",\"scan_badge\":\"0\",\"is_next_session\":\"0\",\"utc_date\":\"2026-08-12\",\"utc_time\":\"07:33:12\",\"timestamp\":1782813600,\"speakers\":[],\"chairs\":[],\"sponsors\":[],\"exhibitors\":[],\"time_slot\":\"morning\",\"search_text\":\"student town hall: a global game plan: navigating an international career and lessons learned abroad this year, the student town hall is being presented by jared maisel, ms, atc, staohk-reg.there has been growth in athletic training and similar professions internationally, but the formal systems and programs to bring a practitioner abroad remain limited. this session will focus on equipping attendees with current trends in the global landscape for athletic trainers, including opportunities, challenges and how to prepare oneself to maximize chances of success for a professional life abroad. the aim of this session is to generate curiosity, passion and engagement for the international development of athletic training and equip young professionals with a personal inventory and road map.sponsored by:\"},{\"agenda_id\":\"566625\",\"Start_date\":\"2026-06-30\",\"Start_time\":\"11:40:00\",\"End_date\":\"2026-06-30\",\"End_time\":\"12:35:00\",\"checking_datetime\":\"\",\"Maximum_People\":1,\"Heading\":\"Student Lecture 1: How To Network and Promote Yourself for an Athletic Training Position\",\"Types\":\"\",\"Agenda_status\":\"1\",\"Speaker_id\":\"\",\"Chair_id\":\"\",\"sponsor_id\":\"\",\"type_ids\":[],\"document_id\":\"\",\"document_ids\":\"\",\"presentation_id\":\"\",\"Address_map\":\"\",\"other_types\":\"\",\"location\":\"PCC, 103A\",\"short_desc\":\"\",\"description\":\"<p><a href='https:\\\/\\\/attend.wordly.ai\\\/join\\\/LDEV-5181' style='text-decoration:none;' target='_blank'><img src='https:\\\/\\\/allintheloop.info\\\/media\\\/4990\\\/6a1ee8b9c1f62_.png' width='75%'><\\\/a><\\\/p><p>Presented by Michael Goldenberg, MS, ATC, CES<br><br>When an employer is trying to hire their next employee, the first step is usually separating candidates into two piles: \\u201cYes, I\\u2019m interested in this person\\u201d or \\u201cNo, I\\u2019m not interested.\\u201d Employers use many different approaches to separate candidates. One might be in form of a verbal recommendation from a colleague or friend. Another would be the potential employee making a good first impression when they meet the employer at an in-person or on-line event. This presentation will focus on how to properly network in a variety of situations to increase one\\u2019s professional network and make that good first impression so an AT will call the employer on their behalf. Using both a lecture and hands-on approach, the attendee will develop and practice an elevator speech, and learn how to join a conversation at an in-person conference. The presenter will also focus on how to target and digitally network with individuals to help them further their career.<\\\/p>\",\"Event_show_time_zone\":\"UTC-4\",\"time_zone\":\"\",\"Documents\":\"\",\"session_image\":\"\",\"thumbnail\":\"\",\"s3_image\":\"\",\"s3_image_thumbnail\":\"\",\"show_checking_in\":\"0\",\"speaker\":\"\",\"sponsor\":\"\",\"chair\":\"\",\"survey_id\":\"\",\"session_tracks\":\"\",\"hide_save_session\":\"0\",\"Address_map_id\":\"\",\"Map_title\":\"\",\"tname\":\"\",\"font_color\":null,\"document_file\":\"\",\"custom_location\":\"PCC, 103A\",\"show_rating\":\"0\",\"qasession_id\":\"0\",\"allow_comments\":\"0\",\"video_link\":\"\",\"multi_broadcasters\":[],\"check_dwg_files\":\"0\",\"show_places_remaining\":\"0\",\"is_live_stream\":\"0\",\"video_link_ondemand\":\"\",\"is_meeting_room\":\"0\",\"is_green_room\":\"0\",\"is_zoom_link\":\"\",\"zoom_link\":\"\",\"is_hide_ls_discussion\":\"\",\"is_hide_mr_discussion\":\"0\",\"is_hide_mr_presenters\":\"0\",\"moderation\":\"0\",\"remaining_place_message\":\"\",\"video_description\":\"\",\"isExpoFpFplan\":\"\",\"expoFP_Url\":\"\",\"show_reminder_button\":\"0\",\"location_time_zone\":\"America\\\/New_York\",\"type_id\":\"\",\"sort_order\":\"0\",\"is_on_demand\":\"0\",\"category_ids\":[\"12539\"],\"font_icon\":\"\",\"is_checked_in\":false,\"user_flag\":\"0\",\"start_time_for_reversetimer\":\"11:40 am\",\"show_comment_box\":\"1\",\"show_feedback\":\"0\",\"max_count\":\"14\",\"is_map_visible_btn\":\"0\",\"map_details\":[],\"multi_broadcasters_details\":[],\"documents_data\":[],\"rating\":\"\",\"is_saved\":\"0\",\"check_max_people\":\"0\",\"available_user\":\"14\",\"checkout\":\"0\",\"is_user_checkin\":\"0\",\"scan_badge\":\"0\",\"is_next_session\":\"0\",\"utc_date\":\"2026-08-12\",\"utc_time\":\"07:33:12\",\"timestamp\":1782819600,\"speakers\":[],\"chairs\":[],\"sponsors\":[],\"exhibitors\":[],\"time_slot\":\"morning\",\"search_text\":\"student lecture 1: how to network and promote yourself for an athletic training position presented by michael goldenberg, ms, atc, ceswhen an employer is trying to hire their next employee, the first step is usually separating candidates into two piles: \\u201cyes, i\\u2019m interested in this person\\u201d or \\u201cno, i\\u2019m not interested.\\u201d employers use many different approaches to separate candidates. one might be in form of a verbal recommendation from a colleague or friend. another would be the potential employee making a good first impression when they meet the employer at an in-person or on-line event. this presentation will focus on how to properly network in a variety of situations to increase one\\u2019s professional network and make that good first impression so an at will call the employer on their behalf. using both a lecture and hands-on approach, the attendee will develop and practice an elevator speech, and learn how to join a conversation at an in-person conference. the presenter will also focus on how to target and digitally network with individuals to help them further their career.\"}],\"2026-07-01\":[],\"2026-07-02\":[]};\n    <\/script>\n    \n    <!-- Loader -->\n    <div class=\"pagination-loader\" style=\"display: none;\">\n        <div class=\"loader-spinner\"><\/div>\n        <span class=\"loader-text\">Loading...<\/span>\n    <\/div>\n     <!-- Zoom Meeting Popup -->\n    <div id=\"zoom-meeting-popup\" class=\"zoom-popup-overlay\" style=\"display: none;\">\n        <div class=\"zoom-popup-container\">\n            <div class=\"zoom-popup-header\">\n                <h3>Join Zoom Meeting<\/h3>\n                <button class=\"zoom-popup-close\" id=\"zoom-popup-close\">\n                    <i class=\"fa fa-times\"><\/i>\n                <\/button>\n            <\/div>\n            <div class=\"zoom-popup-body\">\n                <div id=\"zoom-meeting-container\">\n                    <div id=\"zmmtg-root\"><\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n    <style>\n        .agenda-speaker-card{\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            text-align: center;\n            border: 1px solid #cccccc;\n            margin-right: 10px;\n            padding: 12px 6px 6px 6px;\n            border-radius: 10px;\n        }\n        .filtered-hide {\n            display: none !important;\n        }\n        .search-hide {\n            display: none !important;\n        }\n        \/* Date header styling *\/\n        .tab-date-header {\n            font-size: 20px;\n            font-weight: 600;\n            margin-bottom: 20px;\n            padding: 15px 0;\n            border-bottom: 2px solid #e0e0e0;\n            color: #222;\n            font-family: Poppins-Medium, sans-serif;\n        }\n        \/* When searching, show all tabs with results in a unified view *\/\n        .schedule-section.search-active .tabs-content .tab.active-tab {\n            display: block !important;\n        }\n        .schedule-section.search-active .tabs-content .tab.active-tab + .tab.active-tab {\n            margin-top: 40px;\n            padding-top: 20px;\n            border-top: 1px solid #e0e0e0;\n        }\n        button.open-filter-btn,\n        button.apply-filter-btn{\n            float: right;\n            margin-bottom: 25px;\n            background: #000;\n            color: #fff;\n            border-radius: 5px;\n            border-color: #000;\n        }\n        button.apply-filter-btn {\n            float: none;\n            margin-top: 20px;\n            width: 100%;\n        }\n        \n        \/* Filter Mode Toggle *\/\n        .filter-mode-toggle {\n            display: flex;\n            gap: 10px;\n            margin-bottom: 15px;\n            justify-content: center;\n        }\n        \n        .toggle-label {\n            display: flex;\n            align-items: center;\n            cursor: pointer;\n            padding: 8px 16px;\n            border: 2px solid #ddd;\n            border-radius: 5px;\n            background: #fff;\n            transition: all 0.3s;\n        }\n        \n        .toggle-label input[type=\"radio\"] {\n            margin-right: 6px;\n        }\n        \n        .toggle-label input[type=\"radio\"]:checked + span {\n            font-weight: 600;\n        }\n        \n        .toggle-label:has(input[type=\"radio\"]:checked) {\n            border-color: #000;\n            background: #f5f5f5;\n        }\n        \n        \/* Collapsible Filter Groups *\/\n        .filter-group {\n            margin-bottom: 10px;\n            border: none;\n            border-radius: 0;\n            overflow: hidden;\n        }\n        \n        .group-title {\n            background: #f5f5f5;\n            padding: 10px 15px;\n            margin: 0;\n            cursor: pointer;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            font-weight: 600;\n            color: #333;\n            transition: background-color 0.3s;\n            user-select: none;\n            border-bottom: 1px solid #e0e0e0;\n        }\n        \n        .group-title:hover {\n            background: #eeeeee;\n        }\n        \n        .toggle-icon {\n            font-size: 12px;\n            transition: transform 0.3s;\n            color: #666;\n        }\n        \n        .group-title.collapsed .toggle-icon {\n            transform: rotate(-90deg);\n        }\n        \n        .filter-checkbox-list {\n            margin: 0;\n            padding: 15px;\n            background: #fff;\n            max-height: 500px;\n            opacity: 1;\n            overflow-y: scroll;\n            transition: max-height 0.3s ease, opacity 0.3s ease, padding 0.3s ease;\n        }\n        \n        .filter-checkbox-list.collapsed {\n            max-height: 0;\n            padding: 0 15px;\n            opacity: 0;\n            overflow: hidden;\n        }\n\n        \/* Custom Scrollbar Styling *\/\n        .filter-checkbox-list::-webkit-scrollbar {\n            width: 6px;\n        }\n \n        .filter-checkbox-list::-webkit-scrollbar-track {\n            background: #f1f1f1;\n            border-radius: 3px;\n        }\n \n        .filter-checkbox-list::-webkit-scrollbar-thumb {\n            background: #c1c1c1;\n            border-radius: 3px;\n            transition: background 0.2s ease;\n        }\n \n        .filter-checkbox-list::-webkit-scrollbar-thumb:hover {\n            background: #a1a1a1;\n        }\n \n        \/* Firefox scrollbar *\/\n        .filter-checkbox-list {\n            scrollbar-width: thin;\n            scrollbar-color: #c1c1c1 #f1f1f1;\n        }\n        \n        \/* Colored Checkboxes *\/\n        .filter-checkbox-list label {\n            display: flex;\n            \/*align-items: center;*\/\n            cursor: pointer;\n        }\n        \n        .filter-checkbox-list input[type=\"checkbox\"] {\n            width: 18px;\n            height: 18px;\n            margin-right: 10px;\n            cursor: pointer;\n            -webkit-appearance: none;\n            -moz-appearance: none;\n            appearance: none;\n            border: 2px solid #ccc;\n            border-radius: 3px;\n            position: relative;\n            transition: all 0.3s;\n        }\n        \n        .filter-checkbox-list input[type=\"checkbox\"]:checked {\n            background-color: var(--checkbox-color, #0073aa);\n            border-color: var(--checkbox-color, #0073aa);\n        }\n        \n        .filter-checkbox-list input[type=\"checkbox\"]:checked::after {\n            content: '\u2713';\n            position: absolute;\n            top: 50%;\n            left: 50%;\n            transform: translate(-50%, -50%);\n            color: #fff;\n            font-size: 12px;\n            font-weight: bold;\n        }\n        \n        .filter-checkbox-list input[type=\"checkbox\"]:not(:checked) {\n            border-color: #ccc;\n        }\n        \n        .filter-checkbox-list input[type=\"checkbox\"]:hover {\n            border-color: var(--checkbox-color, #0073aa);\n        }\n        \n        \/* Filter Sidebar Styles *\/\n        .filter-sidebar {\n            position: fixed;\n            top: 0;\n            right: -400px;\n            width: 350px;\n            height: 100vh;\n            background: #fff;\n            box-shadow: -2px 0 10px rgba(0,0,0,0.1);\n            z-index: 1001;\n            transition: right 0.3s ease;\n            overflow-y: auto;\n        }\n        \n        .filter-sidebar.active {\n            right: 0;\n        }\n\n        .filter-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 20px;\n            padding-bottom: 15px;\n            border-bottom: 1px solid #e0e0e0;\n        }\n        \n        .filter-header h3 {\n            margin: 0;\n            font-size: 18px;\n            font-weight: 600;\n        }\n        \n        .filter-close-btn {\n            background: none;\n            border: none;\n            font-size: 24px;\n            cursor: pointer;\n            padding: 0;\n            width: 30px;\n            height: 30px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n        \n        .filter-backdrop {\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: rgba(0,0,0,0.5);\n            z-index: 1000;\n            opacity: 0;\n            visibility: hidden;\n            transition: opacity 0.3s ease, visibility 0.3s ease;\n        }\n        \n        .filter-backdrop.active {\n            opacity: 1;\n            visibility: visible;\n        }\n        \n        \/* Date Carousel Styles *\/\n        .tab-buttons-wrapper {\n            position: relative;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            margin-bottom: 30px;\n            padding: 0 50px;\n        }\n        .tab-buttons-wrapper.ssp-dates-hidden {\n            display: none !important;\n        }\n        \n        .tab-buttons-carousel-container {\n            position: relative;\n            width: 100%;\n            overflow: hidden;\n            flex: 1;\n        }\n        \n        .tab-buttons-carousel {\n            display: flex;\n            list-style: none;\n            margin: 0;\n            padding: 0;\n            transition: transform 0.4s ease;\n            will-change: transform;\n        }\n        \n        .tab-buttons-carousel .tab-btn-item {\n            flex-shrink: 0;\n            padding: 0 7.5px;\n        }\n        \n        .tab-buttons-carousel .tab-btn {\n            position: relative;\n            display: inline-block;\n            \/* height: 135px; *\/\n            width: 160px;\n            border-radius: 20px;\n            background-color: #ffffff;\n            font-size: 16px;\n            line-height: 20px;\n            color: #222222;\n            font-weight: 600;\n            text-align: center;\n            padding: 35px 15px;\n            cursor: pointer;\n            margin: 0;\n            border: 1px solid #dddddd;\n            -webkit-transition: all 300ms ease;\n            -moz-transition: all 300ms ease;\n            -ms-transition: all 300ms ease;\n            -o-transition: all 300ms ease;\n            transition: all 300ms ease;\n            font-family: Poppins-Medium;\n            box-sizing: border-box;\n        }\n        \n        .tab-buttons-carousel .tab-btn:hover {\n            border-color: #404040;\n            box-shadow: 0 2px 10px rgba(0,0,0,0.1);\n        }\n        \n        .tab-buttons-carousel .tab-btn.active-btn {\n            border-color: #404040;\n            box-shadow: 0 0px 30px #404040;\n        }\n        \n        .tab-buttons-carousel .tab-btn .date {\n            position: relative;\n            left: auto;\n            top: auto;\n            width: 100%;\n            display: block;\n            font-size: 38px;\n            line-height: 20px;\n            font-weight: 600;\n            color: #222222;\n            margin-bottom: 5px;\n            font-family: Poppins-Medium;\n        }\n        \n        .tab-buttons-carousel .tab-btn .month {\n            display: block;\n            font-size: 20px;\n            line-height: 1em;\n            font-weight: 600;\n            color: #222222;\n            text-transform: uppercase;\n            margin-bottom: 3px;\n            font-family: Poppins-Medium;\n        }\n        \n        \/* Carousel Navigation Buttons *\/\n        .carousel-nav-btn {\n            background: #222222;\n            color: #ffffff;\n            border: none;\n            width: 40px;\n            height: 40px;\n            border-radius: 50%;\n            cursor: pointer;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 18px;\n            transition: all 0.3s ease;\n            flex-shrink: 0;\n            z-index: 10;\n            position: absolute;\n            top: 50%;\n            transform: translateY(-50%);\n        }\n        \n        .carousel-nav-btn:hover {\n            background: #404040;\n            transform: translateY(-50%) scale(1.1);\n        }\n        \n        .carousel-nav-btn:disabled {\n            opacity: 0.3;\n            cursor: not-allowed;\n            transform: translateY(-50%);\n        }\n        \n        .carousel-prev {\n            left: 0;\n        }\n        \n        .carousel-next {\n            right: 0;\n        }\n        \n        \/* Hide filtered items in carousel *\/\n        .tab-buttons-carousel .tab-btn-item.filtered-hide {\n            display: none !important;\n        }\n        \n        @media (max-width: 768px) {\n            .tab-buttons-wrapper {\n                padding: 0 40px;\n            }\n        }\n        \n        \/* Pagination Styles *\/\n        .schedule-pagination-wrapper {\n            margin-top: 40px;\n            text-align: center;\n            padding: 20px 0;\n            position: relative;\n        }\n        \n        .schedule-pagination {\n            display: inline-flex;\n            align-items: center;\n            gap: 8px;\n            flex-wrap: wrap;\n            justify-content: center;\n        }\n        \n        .pagination-btn {\n            padding: 10px 20px;\n            background-color: #222;\n            color: #fff;\n            border: none;\n            border-radius: 5px;\n            cursor: pointer;\n            font-size: 15px;\n            font-weight: 600;\n            transition: all 0.2s ease;\n            display: inline-flex;\n            align-items: center;\n            gap: 6px;\n            white-space: nowrap;\n        }\n        \n        .pagination-btn:hover:not(:disabled) {\n            background-color: #404040;\n            transform: translateY(-1px);\n            box-shadow: 0 2px 6px rgba(0,0,0,0.15);\n        }\n        \n        .pagination-btn:disabled {\n            opacity: 0.5;\n            cursor: not-allowed;\n            background-color: #ccc;\n        }\n        \n        .pagination-numbers {\n            display: inline-flex;\n            align-items: center;\n            gap: 4px;\n            margin: 0 10px;\n        }\n        \n        .pagination-number {\n            min-width: 40px;\n            height: 40px;\n            padding: 0 8px;\n            background-color: #fff;\n            color: #222;\n            border: 1px solid #ddd;\n            border-radius: 5px;\n            cursor: pointer;\n            font-size: 15px;\n            font-weight: 500;\n            transition: all 0.2s ease;\n            display: inline-flex;\n            align-items: center;\n            justify-content: center;\n        }\n        \n        .pagination-number:hover:not(:disabled) {\n            background-color: #f5f5f5;\n            border-color: #222;\n            transform: translateY(-1px);\n        }\n        \n        .pagination-number.active {\n            background-color: #222;\n            color: #fff;\n            border-color: #222;\n            font-weight: 600;\n            cursor: default;\n        }\n        \n        .pagination-number:disabled {\n            cursor: default;\n        }\n        \n        .pagination-dots {\n            padding: 0 8px;\n            color: #999;\n            font-size: 16px;\n            user-select: none;\n        }\n        \n        .pagination-loading {\n            opacity: 0.6;\n            pointer-events: none;\n        }\n        \n        \/* Loader Styles *\/\n        .pagination-loader {\n            position: absolute;\n            top: 0;\n            left: 0;\n            right: 0;\n            bottom: 0;\n            background-color: rgba(255, 255, 255, 0.95);\n            display: none;\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            gap: 15px;\n            z-index: 1000;\n            border-radius: 8px;\n            backdrop-filter: blur(2px);\n        }\n        \n        .pagination-loader[style*=\"display: flex\"],\n        .pagination-loader.show {\n            display: flex !important;\n        }\n        \n        .loader-spinner {\n            width: 40px;\n            height: 40px;\n            border: 4px solid #f3f3f3;\n            border-top: 4px solid #222;\n            border-radius: 50%;\n            animation: spin 1s linear infinite;\n        }\n        \n        @keyframes spin {\n            0% { transform: rotate(0deg); }\n            100% { transform: rotate(360deg); }\n        }\n        \n        .loader-text {\n            font-size: 16px;\n            color: #222;\n            font-weight: 500;\n        }\n        \n        @media (max-width: 768px) {\n            .schedule-pagination {\n                flex-direction: column;\n                gap: 15px;\n            }\n            \n            .pagination-btn {\n                width: 100%;\n                max-width: 200px;\n                justify-content: center;\n            }\n            \n            .pagination-numbers {\n                margin: 10px 0;\n                flex-wrap: wrap;\n                justify-content: center;\n            }\n            \n            .pagination-number {\n                min-width: 36px;\n                height: 36px;\n                font-size: 14px;\n            }\n        }\n    <\/style>\n    <script>\n        \/\/ Global filter state \u2014 must be declared before any IIFE references them\n        var selectedTypesGlobal  = [];\n        var filterModeGlobal     = 'and';\n        var filterPayloadGlobal  = null; \/\/ \u2190 ADD THIS\n        var filterResultCache    = {};   \/\/ cache filter results by serialised filter key\n        var searchResultCache    = {};   \/\/ cache all-dates search\/filter lists for instant tab switches\n    \/\/ ===============================\n    \/\/ LIVE SEARCH SYSTEM - Search ONLY within the currently selected date\n    \/\/ ===============================\n    (function() {\n        function initScheduleSearch() {\n            if (typeof jQuery === 'undefined') {\n                setTimeout(initScheduleSearch, 100);\n                return;\n            }\n            \n            var $ = jQuery;\n            var searchTimeout;\n            var $scheduleSection = $('.schedule-section.style-two');\n            var $searchInput = $('#scheduleSearch');\n            var $clearSearchBtn = $('#clearSearchBtn');\n            var currentActiveDate = window.scheduleUserData ? window.scheduleUserData.currentLoadedDate : '';\n\n            \/\/ Show\/hide clear button based on search input\n            function updateClearSearchButton() {\n                if ($searchInput.val().trim().length > 0) {\n                    $clearSearchBtn.show();\n                } else {\n                    $clearSearchBtn.hide();\n                }\n            }\n\n            \/\/ Handle clear search button click\n            $clearSearchBtn.on('click', function() {\n                $searchInput.val('');\n                $clearSearchBtn.hide();\n                \n                \/\/ Check if any filters are checked\n                var hasCheckedFilters = $('.filter-checkbox:checked').length > 0;\n                \n                if (hasCheckedFilters) {\n                    \/\/ Rebuild and apply filter payload\n                    selectedTypesGlobal = [];\n                    filterModeGlobal = $('input[name=\"filter-mode\"]:checked').val() || 'and';\n                    \n                    var groupedFilters = {};\n                    $('.filter-checkbox:checked').each(function () {\n                        var typeId  = $(this).val();\n                        var groupId = $(this).data('group');\n                        if (!groupedFilters[groupId]) {\n                            groupedFilters[groupId] = [];\n                        }\n                        groupedFilters[groupId].push(typeId);\n                        selectedTypesGlobal.push(typeId);\n                    });\n                    \n                    var filtersArray = [];\n                    Object.keys(groupedFilters).forEach(function(groupKey) {\n                        filtersArray.push({\n                            group_key: groupKey,\n                            values:    groupedFilters[groupKey]\n                        });\n                    });\n                    \n                    filterPayloadGlobal = filtersArray.length > 0 ? {\n                        filter_type: filterModeGlobal.toUpperCase(),\n                        filters:     filtersArray\n                    } : null;\n                    \n                    \/\/ Reload agenda with filters\n                    let $activeTab  = $('.tab.active-tab');\n                    let currentDate = $activeTab.data('date');\n                    if (!currentDate) {\n                        currentDate = $('.tab-buttons-carousel .tab-btn.active-btn').data('date') || $('.tab-buttons-carousel .tab-btn').first().data('date') || '';\n                        if (currentDate) {\n                            $activeTab = $('.tabs-content .tab[data-date=\"' + currentDate + '\"]');\n                        }\n                    }\n                    \n                    $('.tab').data('loaded', false);\n                    \n                     if (currentDate && $activeTab.length) {\n                        window.loadAgendaByDate(currentDate, $activeTab, { sendDate: false });\n                    } else if (typeof window.loadDefaultAgendaData === 'function') {\n                        window.loadDefaultAgendaData();\n                    }\n                } else {\n                    \/\/ No filters checked, reload default agenda data\n                    if (typeof window.loadDefaultAgendaData === 'function') {\n                        window.loadDefaultAgendaData();\n                    } else if (typeof loadDefaultAgendaData === 'function') {\n                        loadDefaultAgendaData();\n                    }\n                }\n            });\n\n            \/\/ Update clear button visibility on input\n            $searchInput.on('input', function() {\n                updateClearSearchButton();\n            });\n            \n            \/\/ Update current active date when tab changes\n            $(document).on('click', '.tab-buttons-carousel .tab-btn', function() {\n                var date = $(this).data('date');\n                if (date) {\n                    currentActiveDate = date;\n                    if (window.scheduleUserData) {\n                        window.scheduleUserData.currentLoadedDate = date;\n                    }\n                }\n            });\n            \n            \/\/ Listen for agenda loaded events\n            $(document).on('agenda:loaded', function(e, date, agendaList) {\n                if (currentActiveDate === date) {\n                    \/\/ Search results are now fetched from API directly via input handler.\n                    \/\/ Keep this hook only for date state synchronization.\n                }\n            });\n            \n            \/\/ Only initialize if schedule section and search input exist\n            if (!$scheduleSection.length || !$searchInput.length) {\n                setTimeout(initScheduleSearch, 100);\n                return;\n            }\n\n            \/\/ Initial check for clear button visibility\n            updateClearSearchButton();\n            \n            \/\/ Remove any existing handlers to prevent duplicates\n            $searchInput.off('input.search keyup.search');\n            \n            function performSearch(searchVal) {\n                if (searchVal) {\n                    $scheduleSection.addClass('search-active');\n                } else {\n                    $scheduleSection.removeClass('search-active');\n                }\n\n                var $activeTab = $scheduleSection.find('.tab.active-tab');\n                if (!$activeTab.length || typeof window.loadAgendaByDate !== 'function') {\n                    return;\n                }\n\n                var activeDate = $activeTab.data('date') || currentActiveDate;\n                if (!activeDate) {\n                    var $firstBtn = $('.tab-buttons-carousel .tab-btn').first();\n                    activeDate = $firstBtn.data('date') || '';\n                }\n\n                if (!activeDate) {\n                    return;\n                }\n\n                \/\/ Instant client-side search on the active day (no all-dates API \u2014 that was ~20\u201360s).\n                $('.tab').data('loaded', false);\n                window.loadAgendaByDate(activeDate, $activeTab, { sendDate: false });\n            }\n            \n            $searchInput.on('input.search keyup.search', function() {\n                clearTimeout(searchTimeout);\n                var $input = $(this);\n                \n                searchTimeout = setTimeout(function() {\n                    var searchVal = $input.val().trim();\n                    if (!searchVal && !filterPayloadGlobal) {\n                        if (typeof window.loadDefaultAgendaData === 'function') {\n                            window.loadDefaultAgendaData();\n                            return;\n                        }\n                    }\n                    performSearch(searchVal);\n                }, 350); \/\/ Debounce API search calls\n            });\n        }\n        \n        \/\/ Initialize search when DOM is ready\n        if (document.readyState === 'loading') {\n            document.addEventListener('DOMContentLoaded', initScheduleSearch);\n        } else {\n            \/\/ DOM already loaded, try to initialize\n            if (window.requestIdleCallback) {\n                requestIdleCallback(initScheduleSearch);\n            } else {\n                setTimeout(initScheduleSearch, 100);\n            }\n        } \n    })();\n\n     jQuery(document).ready(function($) {\n        \/\/ When blocked agenda clicked\n        $(\".schedule-block.blocked-agenda\").on(\"click\", function(e) {\n            e.preventDefault();\n            e.stopPropagation();\n    \n            let message = $(this).data(\"message\");\n            $(\"#blockedMessage\").text(message);\n    \n            $(\"#blockedPopup\").fadeIn();\n        });\n    \n        \/\/ Close popup button\n        $(\".close-blocked-popup\").on(\"click\", function() {\n            $(\"#blockedPopup\").fadeOut();\n        });\n    \n        \/\/ Click outside closes popup\n        $(\"#blockedPopup\").on(\"click\", function(e) {\n            if (e.target.id === \"blockedPopup\") {\n                $(\"#blockedPopup\").fadeOut();\n            }\n        });\n    \n        \/\/ Prevent links inside blocked item from working\n        $(\".schedule-block.blocked-agenda a\").on(\"click\", function(e) {\n            e.preventDefault();\n        });\n    \n    });\n    \/\/ Disable right-click \n    \/\/document.addEventListener(\"contextmenu\", event => event.preventDefault());\n    \n    \/\/ Disable F12, Ctrl+Shift+I, Ctrl+U\n    document.onkeydown = function(e) {\n        if (e.keyCode == 123) return false; \n        if (e.ctrlKey && e.shiftKey && e.keyCode == 73) return false;\n        if (e.ctrlKey && e.keyCode == 85) return false;\n    };\n\n    jQuery(document).ready(function($) {\n        \/\/ First date is automatically selected by PHP - no persistence needed\n        \/\/ The first tab is always active on page load\n    });\n\n    \/\/ ==================================================\n    \/\/ AJAX LOADING OF AGENDA BY DATE\n    \/\/ ==================================================\n    (function() {\n        function initDateAjaxLoading() {\n            if (typeof jQuery === 'undefined') {\n                setTimeout(initDateAjaxLoading, 100);\n                return;\n            }\n            \n            var $ = jQuery;\n            var isLoading = false;\n            var loadRequestId = 0;\n            var dateCache = {};\n            var currentDateXHR = null;\n            var $tabsContent = $('.tabs-content');\n            var ajaxUrl = $tabsContent.data('ajax-url');\n            var nonce = $tabsContent.data('nonce');\n\n            function sspIsTabLoaded($tab) {\n                if (!$tab || !$tab.length) return false;\n                var v = $tab.data('loaded');\n                if (v === true || v === 1 || v === 'true') return true;\n                var attr = $tab.attr('data-loaded');\n                return attr === 'true' || attr === '1';\n            }\n\n            \/\/ Ensure favourited class + solid bookmark icon are applied from userAgendaIds\n            function sspApplyFavouriteClasses($root) {\n                var ids = (window.scheduleUserData && window.scheduleUserData.userAgendaIds)\n                    ? window.scheduleUserData.userAgendaIds\n                    : [];\n                var map = {};\n                if (Array.isArray(ids)) {\n                    ids.forEach(function(id) {\n                        if (id !== null && id !== undefined && String(id) !== '') {\n                            map[String(id)] = true;\n                        }\n                    });\n                }\n                var $scope = ($root && $root.length) ? $root : $('.schedule-section');\n                $scope.find('.favourite_icon').each(function() {\n                    var $icon = $(this);\n                    var aid = String($icon.attr('data-agenda_id') || $icon.data('agenda_id') || '');\n                    if (!aid) return;\n                    if (map[aid]) {\n                        $icon.addClass('favourited');\n                        $icon.closest('.schedule-block').addClass('favourited');\n                        $icon.find('i').removeClass('fa-regular').addClass('fa-solid active');\n                    }\n                });\n            }\n            window.sspApplyFavouriteClasses = sspApplyFavouriteClasses;\n\n            function agendaMatchesDate(item, date) {\n                if (!item || !date) return false;\n                var raw = item.Start_date || item.start_date || item.Date || item.date || '';\n                var itemDate = String(raw).substring(0, 10);\n                var want = String(date).substring(0, 10);\n                if (itemDate === want) return true;\n                \/\/ Also accept if either side parses to the same Y-m-d\n                try {\n                    var a = new Date(itemDate + 'T00:00:00');\n                    var b = new Date(want + 'T00:00:00');\n                    if (!isNaN(a.getTime()) && !isNaN(b.getTime())) {\n                        return a.getFullYear() === b.getFullYear()\n                            && a.getMonth() === b.getMonth()\n                            && a.getDate() === b.getDate();\n                    }\n                } catch (e) {}\n                return false;\n            }\n\n            function stripHtmlText(value) {\n                if (value == null) return '';\n                var str = String(value);\n                if (str.indexOf('<') === -1) return str;\n                try {\n                    var tmp = document.createElement('div');\n                    tmp.innerHTML = str;\n                    return (tmp.textContent || tmp.innerText || '').replace(\/\\s+\/g, ' ').trim();\n                } catch (e) {\n                    return str.replace(\/<[^>]*>\/g, ' ');\n                }\n            }\n\n            function formatDateHeader(dateStr) {\n                var d = new Date(dateStr + 'T00:00:00');\n                if (isNaN(d.getTime())) {\n                    return dateStr;\n                }\n                return d.toLocaleDateString('en-US', {\n                    weekday: 'long',\n                    month: 'short',\n                    day: '2-digit'\n                });\n            }\n\n            function rebuildDateTabsFromApiDates(dates, activeDate) {\n                if (!Array.isArray(dates) || !dates.length) {\n                    $('.tab-buttons-wrapper').addClass('ssp-dates-hidden').hide();\n                    return null;\n                }\n                $('.tab-buttons-wrapper').removeClass('ssp-dates-hidden').show();\n\n                var $carousel = $('.tab-buttons-carousel');\n                var $tabsWrap = $('.tabs-content');\n                if (!$carousel.length || !$tabsWrap.length) {\n                    return null;\n                }\n\n                var active = activeDate && dates.indexOf(activeDate) !== -1 ? activeDate : dates[0];\n                var buttonsHtml = '';\n                var tabsHtml = '';\n\n                dates.forEach(function(dateStr, index) {\n                    var d = new Date(dateStr + 'T00:00:00');\n                    var dayNum = !isNaN(d.getTime()) ? String(d.getDate()).padStart(2, '0') : '';\n                    var month = !isNaN(d.getTime()) ? d.toLocaleString('en-US', { month: 'short' }) : '';\n                    var dayName = !isNaN(d.getTime()) ? d.toLocaleString('en-US', { weekday: 'short' }).toUpperCase() : '';\n                    var tabId = 'tab-' + (index + 1);\n                    var isActive = (dateStr === active);\n\n                    buttonsHtml += '<li class=\"tab-btn-item\">' +\n                        '<div class=\"tab-btn' + (isActive ? ' active-btn' : '') + '\" data-tab=\"#' + tabId + '\" data-index=\"' + index + '\" data-date=\"' + dateStr + '\">' +\n                        '<span class=\"date\">' + dayNum + '<\/span>' +\n                        '<span class=\"month\">' + month + '<\/span>' +\n                        '<span class=\"day-name\">' + dayName + '<\/span>' +\n                        '<\/div><\/li>';\n\n                    tabsHtml += '<div class=\"tab' + (isActive ? ' active-tab' : '') + '\" id=\"' + tabId + '\" data-date=\"' + dateStr + '\" data-loaded=\"false\" style=\"' + (isActive ? '' : 'display:none;') + '\">' +\n                        '<div class=\"schedule-timeline\"><p style=\"text-align:center;padding:40px;color:#fff;\">Loading agenda...<\/p><\/div>' +\n                        '<\/div>';\n                });\n\n                $carousel.html(buttonsHtml);\n                $tabsWrap.html(tabsHtml);\n\n                $(window).trigger('resize');\n                return active;\n            }\n            \n            \/\/ Function to load agenda for a specific date\n            window.loadAgendaByDate = function(date, $tab, options) {\n\n                options = options || {};\n                \/\/ Never block tab switches on isLoading \u2014 abort in-flight work below instead.\n                if (!date || !$tab || !$tab.length) return;\n                \n                var searchKeyword = $.trim($('#scheduleSearch').val() || '');\n                var hasFilterPayload = !!(filterPayloadGlobal && filterPayloadGlobal.filters && filterPayloadGlobal.filters.length);\n                var hasSearchKeyword = searchKeyword.length > 0;\n\n                \/\/ Skip cache when search or filter is active \u2014 always re-fetch fresh results.\n                var isFiltered = hasSearchKeyword || hasFilterPayload || selectedTypesGlobal.length > 0;\n                \/\/ Already loaded this date (and not searching\/filtering) \u2014 keep existing DOM (preserves favourited)\n                if (sspIsTabLoaded($tab) && !isFiltered && $tab.find('.schedule-block').length && !options.force) {\n                    sspApplyFavouriteClasses($tab);\n                    return;\n                }\n\n                \/\/ Serve from seeded\/full date cache (CCIM pattern)\n                if (!window.scheduleAgendaByDate) {\n                    window.scheduleAgendaByDate = {};\n                }\n                \/\/ Do NOT rebuild HTML from seed when server already rendered this tab with favourited state\n                if (!isFiltered && sspIsTabLoaded($tab) && $tab.find('.schedule-block').length && !options.force) {\n                    sspApplyFavouriteClasses($tab);\n                    return;\n                }\n                if (!isFiltered && window.scheduleAgendaByDate[date] && window.scheduleAgendaByDate[date].length) {\n                    renderAgendaForDate($tab, window.scheduleAgendaByDate[date], date, { skipDateFilter: true });\n                    $tab.data('loaded', true).attr('data-loaded', 'true');\n                    dateCache[date] = window.scheduleAgendaByDate[date];\n                    $(document).trigger('agenda:loaded', [date, window.scheduleAgendaByDate[date]]);\n                    setTimeout(function() {\n                        if (typeof window.processSpeakerImages === 'function') {\n                            window.processSpeakerImages();\n                        }\n                        sspApplyFavouriteClasses($tab);\n                    }, 50);\n                    return;\n                }\n\n                \/\/ Serve from memory cache instantly when no filter\/search active\n                if (!isFiltered && dateCache[date]) {\n                    renderAgendaForDate($tab, dateCache[date], date, { fromDatedApi: true, skipDateFilter: true });\n                    $tab.data('loaded', true).attr('data-loaded', 'true');\n                    $(document).trigger('agenda:loaded', [date, dateCache[date]]);\n                    setTimeout(function() {\n                        if (typeof window.processSpeakerImages === 'function') {\n                            window.processSpeakerImages();\n                        }\n                        sspApplyFavouriteClasses($tab);\n                    }, 50);\n                    return;\n                }\n\n                \/\/ Serve from filter cache instantly \u2014 no AJAX needed for repeat tab clicks with same filter\n                if (hasFilterPayload && !hasSearchKeyword && filterPayloadGlobal) {\n                    var _fck = JSON.stringify(filterPayloadGlobal);\n                    if (Object.prototype.hasOwnProperty.call(filterResultCache, _fck) && Array.isArray(filterResultCache[_fck])) {\n                        renderAgendaForDate($tab, filterResultCache[_fck], date);\n                        $tab.data('loaded', true);\n                        $(document).trigger('agenda:loaded', [date, filterResultCache[_fck]]);\n                        setTimeout(function() {\n                            if (typeof window.processSpeakerImages === 'function') window.processSpeakerImages();\n                        }, 50);\n                        return;\n                    }\n                }\n\n                \/\/ Serve from search\/filter cache for repeat tab clicks\n                if (hasSearchKeyword || hasFilterPayload) {\n                    var _sckHit = (hasSearchKeyword ? searchKeyword.toLowerCase() : '') + '|' + (hasFilterPayload ? JSON.stringify(filterPayloadGlobal) : '');\n                    if (Object.prototype.hasOwnProperty.call(searchResultCache, _sckHit) && Array.isArray(searchResultCache[_sckHit])) {\n                        renderAgendaForDate($tab, searchResultCache[_sckHit], date);\n                        $tab.data('loaded', true);\n                        $(document).trigger('agenda:loaded', [date, searchResultCache[_sckHit]]);\n                        setTimeout(function() {\n                            if (typeof window.processSpeakerImages === 'function') window.processSpeakerImages();\n                        }, 50);\n                        return;\n                    }\n                }\n\n                \/\/ Abort any in-flight request so the user gets the new date immediately\n                if (currentDateXHR) {\n                    try { currentDateXHR.abort(); } catch (e) {}\n                    currentDateXHR = null;\n                }\n                var requestId = ++loadRequestId;\n                isLoading = true;\n                \n                \/\/ Show loading state\n                var $timeline = $tab.find('.schedule-timeline');\n                if (!$timeline.length) {\n                    $timeline = $('<div class=\"schedule-timeline\"><div class=\"date-loading\" style=\"text-align:center;padding:40px;\"><div class=\"loader-spinner\" style=\"width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #222;border-radius:50%;animation:spin 1s linear infinite;margin:0 auto 15px;\"><\/div><span style=\"color:#fff;\">Loading agenda...<\/span><\/div><\/div>');\n                    $tab.append($timeline);\n                } else {\n                    $timeline.html('<div class=\"date-loading\" style=\"text-align:center;padding:40px;\"><div class=\"loader-spinner\" style=\"width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #222;border-radius:50%;animation:spin 1s linear infinite;margin:0 auto 15px;\"><\/div><span style=\"color:#fff;\">Loading agenda...<\/span><\/div>');\n                }\n\n                if (!ajaxUrl || !nonce) {\n                    isLoading = false;\n                    $timeline.html('<p style=\"text-align:center;padding:40px;color:#dc3545;\">Error loading agenda. Please refresh the page.<\/p>');\n                    return;\n                }\n                \n                var sendDate = (typeof options.sendDate === 'boolean') ? options.sendDate : true;\n                var requestData = {\n                    action: 'ssp_get_agenda_by_date',\n                    page_no: 0,\n                    nonce: nonce\n                };\n\n                if (hasSearchKeyword) {\n                    requestData.serach_keyword = searchKeyword;\n                }\n\n                if (hasFilterPayload) {\n                    requestData.filter_payload = JSON.stringify(filterPayloadGlobal);\n                }\n\n                \/\/ Search\/filter must run across ALL dates (omit date).\n                \/\/ Dated requests only for normal day-tab loads.\n                if (!(hasSearchKeyword || hasFilterPayload) && date && sendDate) {\n                    requestData.date = date;\n                } else if (!(hasSearchKeyword || hasFilterPayload) && date) {\n                    requestData.date = date;\n                }\n\n                \/\/ Always pass category_id if set from shortcode\n                var scheduleCategoryId = (window.scheduleUserData && window.scheduleUserData.categoryId) ? window.scheduleUserData.categoryId : '';\n                if (scheduleCategoryId) {\n                    requestData.category_id = scheduleCategoryId;\n                }\n\n                currentDateXHR = $.ajax({\n                    url: ajaxUrl,\n                    type: 'POST',\n                    dataType: 'json',\n                    timeout: (hasSearchKeyword || hasFilterPayload) ? 120000 : 60000,\n                    data: requestData,\n                    success: function(response) {\n                        \/\/ Ignore stale responses from aborted\/superseded tab clicks\n                        if (requestId !== loadRequestId) return;\n                        try {\n                        if (response.success && response.data && Array.isArray(response.data.agenda_list)) {\n                            var targetDate = date;\n                            var apiDates = response.data.dates || [];\n                            var agendaList = response.data.agenda_list;\n\n                            \/\/ If no dates returned but agenda exists, extract dates from agenda items\n                            if ((!apiDates || apiDates.length === 0) && agendaList.length > 0) {\n                                var uniqueDates = [];\n                                agendaList.forEach(function(item) {\n                                    if (item.Start_date) {\n                                        var d0 = String(item.Start_date).substring(0, 10);\n                                        if (uniqueDates.indexOf(d0) === -1) uniqueDates.push(d0);\n                                    }\n                                });\n                                apiDates = uniqueDates.sort();\n                            }\n\n                            \/\/ Group returned agendas by their real Start_date (CCIM fix).\n                            \/\/ Always place items on the correct day tab.\n                            var byDate = {};\n                            agendaList.forEach(function(item) {\n                                if (!item || !item.Start_date) return;\n                                var d = String(item.Start_date).substring(0, 10);\n                                if (!byDate[d]) byDate[d] = [];\n                                byDate[d].push(item);\n                            });\n                            if (!window.scheduleAgendaByDate) window.scheduleAgendaByDate = {};\n                            Object.keys(byDate).forEach(function(d) {\n                                window.scheduleAgendaByDate[d] = byDate[d];\n                                dateCache[d] = byDate[d];\n                            });\n\n                            if (hasFilterPayload || searchKeyword.length > 0) {\n                                \/\/ Only rebuild date tabs for days that actually have matching agenda.\n                                \/\/ Do not show date UI when search\/filter returns zero sessions.\n                                var datesWithAgenda = Object.keys(byDate).sort();\n                                if (!datesWithAgenda.length && apiDates && apiDates.length && agendaList.length) {\n                                    datesWithAgenda = apiDates.slice().sort();\n                                }\n                                if (datesWithAgenda.length === 0) {\n                                    $('.tab-buttons-wrapper').addClass('ssp-dates-hidden').hide();\n                                    $('.tab-buttons-carousel').empty();\n                                    var noMatchMsg = '<p class=\"ssp-no-agenda-msg\" style=\"text-align:center;padding:40px;color:#fff;\">No sessions match your search\/filter.<\/p>';\n                                    var $tabsContent = $('.tabs-content');\n                                    if ($tabsContent.length) {\n                                        $tabsContent.html('<div class=\"tab active-tab\" style=\"display:block;\"><div class=\"schedule-timeline\">' + noMatchMsg + '<\/div><\/div>');\n                                    } else if ($tab && $tab.length) {\n                                        var $noMatchTimeline = $tab.find('.schedule-timeline');\n                                        if (!$noMatchTimeline.length) {\n                                            $noMatchTimeline = $('<div class=\"schedule-timeline\"><\/div>').appendTo($tab);\n                                        }\n                                        $noMatchTimeline.html(noMatchMsg);\n                                        $tab.addClass('active-tab').show();\n                                        $tab.data('loaded', true);\n                                    } else {\n                                        $timeline.html(noMatchMsg);\n                                    }\n                                    if (hasFilterPayload && !hasSearchKeyword && filterPayloadGlobal) {\n                                        filterResultCache[JSON.stringify(filterPayloadGlobal)] = [];\n                                    }\n                                    if (hasSearchKeyword || hasFilterPayload) {\n                                        var _emptySck = (hasSearchKeyword ? searchKeyword.toLowerCase() : '') + '|' + (hasFilterPayload ? JSON.stringify(filterPayloadGlobal) : '');\n                                        searchResultCache[_emptySck] = [];\n                                    }\n                                    $(document).trigger('agenda:loaded', [targetDate, []]);\n                                    return;\n                                }\n\n                                \/\/ Prefer API dates when available (already limited to match days)\n                                var rebuildDates = (apiDates && apiDates.length) ? apiDates.slice().sort() : datesWithAgenda;\n                                var rebuiltActiveDate = rebuildDateTabsFromApiDates(rebuildDates, date || response.data.selected_date);\n                                if (rebuiltActiveDate) {\n                                    targetDate = (date && rebuildDates.indexOf(date) !== -1) ? date : rebuiltActiveDate;\n                                    $tab = $('.tabs-content .tab[data-date=\"' + targetDate + '\"]');\n                                    if (!$tab.length) {\n                                        targetDate = rebuiltActiveDate;\n                                        $tab = $('.tabs-content .tab[data-date=\"' + targetDate + '\"]');\n                                    }\n                                }\n                            }\n\n                            \/\/ Paint every date tab we received data for\n                            Object.keys(byDate).forEach(function(d) {\n                                var $dateTab = $('.tabs-content .tab[data-date=\"' + d + '\"]');\n                                if ($dateTab.length) {\n                                    renderAgendaForDate($dateTab, byDate[d], d, { skipDateFilter: true, skipClientFilter: true });\n                                    $dateTab.data('loaded', true);\n                                }\n                            });\n\n                            \/\/ Requested date: use matching items, or empty state\n                            var matchingForTarget = byDate[targetDate] || window.scheduleAgendaByDate[targetDate] || [];\n                            window.scheduleAgendaByDate[targetDate] = matchingForTarget;\n                            dateCache[targetDate] = matchingForTarget;\n                            if ($tab && $tab.length) {\n                                renderAgendaForDate($tab, matchingForTarget, targetDate, { skipDateFilter: true, skipClientFilter: true });\n                                $tab.data('loaded', true);\n                            }\n\n                            if (hasFilterPayload && !hasSearchKeyword && filterPayloadGlobal) {\n                                filterResultCache[JSON.stringify(filterPayloadGlobal)] = agendaList;\n                            }\n                            if (hasSearchKeyword || hasFilterPayload) {\n                                var _sck = (hasSearchKeyword ? searchKeyword.toLowerCase() : '') + '|' + (hasFilterPayload ? JSON.stringify(filterPayloadGlobal) : '');\n                                searchResultCache[_sck] = agendaList || [];\n                            }\n\n                            $(document).trigger('agenda:loaded', [targetDate, matchingForTarget]);\n                        } else {\n                            \/\/ No agenda returned \u2014 hide date tabs for search\/filter empty results\n                            if (hasSearchKeyword || hasFilterPayload) {\n                                $('.tab-buttons-wrapper').addClass('ssp-dates-hidden').hide();\n                                $('.tab-buttons-carousel').empty();\n                            }\n                            var noResultsMsg = (hasSearchKeyword || hasFilterPayload)\n                                ? '<p class=\"ssp-no-agenda-msg\" style=\"text-align:center;padding:40px;color:#fff;\">No sessions match your search\/filter.<\/p>'\n                                : '<p style=\"text-align:center;padding:40px;color:#fff;\">No agenda available for this date.<\/p>';\n                            if (hasSearchKeyword || hasFilterPayload) {\n                                var $tabsContentEmpty = $('.tabs-content');\n                                if ($tabsContentEmpty.length) {\n                                    $tabsContentEmpty.html('<div class=\"tab active-tab\" style=\"display:block;\"><div class=\"schedule-timeline\">' + noResultsMsg + '<\/div><\/div>');\n                                } else {\n                                    $timeline.html(noResultsMsg);\n                                }\n                            } else if ($tab && $tab.length) {\n                                var $emptyTimeline = $tab.find('.schedule-timeline');\n                                if (!$emptyTimeline.length) {\n                                    $emptyTimeline = $('<div class=\"schedule-timeline\"><\/div>').appendTo($tab);\n                                }\n                                $emptyTimeline.html(noResultsMsg);\n                                $tab.data('loaded', true);\n                            } else {\n                                $timeline.html(noResultsMsg);\n                            }\n                        }\n                        } catch (ajaxSuccessErr) {\n                            console.error('Agenda AJAX success handler failed:', ajaxSuccessErr);\n                            if ($tab && $tab.length) {\n                                $tab.find('.schedule-timeline').html('<p style=\"text-align:center;padding:40px;color:#dc3545;\">Error loading agenda. Please try again.<\/p>');\n                            }\n                        }\n                    },\n                    error: function(xhr, status) {\n                        if (requestId !== loadRequestId || status === 'abort') return;\n                        if (hasSearchKeyword || hasFilterPayload) {\n                            $('.tab-buttons-wrapper').addClass('ssp-dates-hidden').hide();\n                            $('.tab-buttons-carousel').empty();\n                            var errMsg = '<p class=\"ssp-no-agenda-msg\" style=\"text-align:center;padding:40px;color:#dc3545;\">Error loading agenda. Please try again.<\/p>';\n                            var $tabsContentErr = $('.tabs-content');\n                            if ($tabsContentErr.length) {\n                                $tabsContentErr.html('<div class=\"tab active-tab\" style=\"display:block;\"><div class=\"schedule-timeline\">' + errMsg + '<\/div><\/div>');\n                            } else {\n                                $timeline.html(errMsg);\n                            }\n                            return;\n                        }\n                        $timeline.html('<p style=\"text-align:center;padding:40px;color:#dc3545;\">Error loading agenda. Please try again.<\/p>');\n                    },\n                    complete: function() {\n                        if (requestId === loadRequestId) {\n                            isLoading = false;\n                            currentDateXHR = null;\n                        }\n                    }\n                });\n            }\n\n            window.loadDefaultAgendaData = function() {\n                \/\/ Restore carousel visibility in case it was hidden by search\/filter\n                $('.tab-buttons-wrapper').removeClass('ssp-dates-hidden').show();\n                \/\/ Restore from in-memory cache \u2014 instant, no AJAX needed\n                var allDates   = (window.scheduleUserData && window.scheduleUserData.allDates) || [];\n                var curDate    = (window.scheduleUserData && window.scheduleUserData.currentLoadedDate) || '';\n                var restoreDate = (curDate && dateCache[curDate]) ? curDate : '';\n                if (!restoreDate) {\n                    for (var i = 0; i < allDates.length; i++) {\n                        if (dateCache[allDates[i]]) { restoreDate = allDates[i]; break; }\n                    }\n                }\n                if (restoreDate && allDates.length) {\n                    var rebuiltDate = rebuildDateTabsFromApiDates(allDates, restoreDate);\n                    if (rebuiltDate) {\n                        var $restoredTab = $('.tabs-content .tab[data-date=\"' + rebuiltDate + '\"]');\n                        if ($restoredTab.length && dateCache[rebuiltDate]) {\n                            renderAgendaForDate($restoredTab, dateCache[rebuiltDate], rebuiltDate, { skipDateFilter: true, skipClientFilter: true });\n                            $restoredTab.data('loaded', true);\n                            $(document).trigger('agenda:loaded', [rebuiltDate, dateCache[rebuiltDate]]);\n                            setTimeout(function() {\n                                if (typeof window.processSpeakerImages === 'function') window.processSpeakerImages();\n                            }, 50);\n                            return;\n                        }\n                    }\n                }\n\n                \/\/ Fall back to AJAX for the current date only (never empty-date \u2014 too slow).\n                var fallbackDate = restoreDate || curDate || (allDates[0] || '');\n                var $fallbackTab = fallbackDate ? $('.tabs-content .tab[data-date=\"' + fallbackDate + '\"]') : $();\n                if (fallbackDate && $fallbackTab.length) {\n                    \/\/ Force a fresh load even if a previous request is in flight\n                    $fallbackTab.data('loaded', false);\n                    window.loadAgendaByDate(fallbackDate, $fallbackTab, { sendDate: true });\n                    return;\n                }\n                isLoading = false;\n            };\n            \n            \/\/ Function to render agenda HTML\n            \/\/ options.skipDateFilter = true when API already returned a single-date payload\n            function renderAgendaForDate($tab, agendaList, date, options) {\n                options = options || {};\n\n                try {\n                \/\/ Re-resolve tab if needed and force it visible (API can succeed while UI stays empty)\n                if (!$tab || !$tab.length) {\n                    $tab = date ? $('.tabs-content .tab[data-date=\"' + date + '\"]') : $();\n                }\n                if (!$tab || !$tab.length) {\n                    console.warn('renderAgendaForDate: tab not found for', date);\n                    return;\n                }\n\n                $('.tabs-content .tab').not($tab).removeClass('active-tab').hide();\n                $tab.addClass('active-tab').css('display', 'block').show();\n\n                var $timeline = $tab.find('.schedule-timeline').first();\n                if (!$timeline.length) {\n                    $timeline = $('<div class=\"schedule-timeline\"><\/div>');\n                    $tab.append($timeline);\n                }\n\n                var activeSearchTerm = $.trim($('#scheduleSearch').val() || '').toLowerCase();\n                var filteredAgendaList = Array.isArray(agendaList) ? agendaList.slice() : [];\n\n                \/\/ Date filter: only when list spans multiple days (search\/filter cache).\n                \/\/ Dated API responses are already day-scoped \u2014 never wipe them on Start_date mismatch.\n                if (date && !options.skipDateFilter && !options.fromDatedApi) {\n                    var dateFiltered = filteredAgendaList.filter(function(agendaItem) {\n                        return agendaMatchesDate(agendaItem, date);\n                    });\n                    if (dateFiltered.length > 0) {\n                        filteredAgendaList = dateFiltered;\n                    } else if (filteredAgendaList.length > 0) {\n                        var uniqueDayKeys = {};\n                        filteredAgendaList.forEach(function(item) {\n                            var raw = (item && (item.Start_date || item.start_date)) ? String(item.Start_date || item.start_date).substring(0, 10) : '';\n                            if (raw) uniqueDayKeys[raw] = true;\n                        });\n                        var dayKeyCount = Object.keys(uniqueDayKeys).length;\n                        \/\/ Multi-day payload \u2192 this day truly has no matches.\n                        \/\/ Single-day \/ no Start_date \u2192 keep API list (show on frontend).\n                        if (dayKeyCount > 1) {\n                            filteredAgendaList = dateFiltered;\n                        }\n                    }\n                }\n\n                \/\/ Client-side type filter (skip when API already applied search\/filter)\n                if (!options.skipClientFilter && filterPayloadGlobal && filterPayloadGlobal.filters && filterPayloadGlobal.filters.length) {\n                    var fModeRender = (filterPayloadGlobal.filter_type || 'AND').toUpperCase();\n                    filteredAgendaList = filteredAgendaList.filter(function(agendaItem) {\n                        if (!agendaItem) return false;\n                        var sessionTypeIds = [];\n                        if (Array.isArray(agendaItem.type_ids)) {\n                            agendaItem.type_ids.forEach(function(t) {\n                                sessionTypeIds.push(String(t.type_id));\n                            });\n                        }\n                        if (fModeRender === 'OR') {\n                            return filterPayloadGlobal.filters.some(function(group) {\n                                return group.values.some(function(v) {\n                                    return sessionTypeIds.indexOf(String(v)) !== -1;\n                                });\n                            });\n                        }\n                        return filterPayloadGlobal.filters.every(function(group) {\n                            return group.values.some(function(v) {\n                                return sessionTypeIds.indexOf(String(v)) !== -1;\n                            });\n                        });\n                    });\n                }\n\n                if (!options.skipClientFilter && activeSearchTerm) {\n                    filteredAgendaList = filteredAgendaList.filter(function(agendaItem) {\n                        if (!agendaItem) return false;\n                        var searchHaystack = [\n                            String(agendaItem.Heading || ''),\n                            stripHtmlText(agendaItem.description || ''),\n                            String(agendaItem.search_text || '')\n                        ].join(' ').toLowerCase();\n\n                        if (Array.isArray(agendaItem.type_ids)) {\n                            agendaItem.type_ids.forEach(function(typeItem) {\n                                searchHaystack += ' ' + String((typeItem && typeItem.name) || '').toLowerCase();\n                            });\n                        }\n                        if (Array.isArray(agendaItem.speakers)) {\n                            agendaItem.speakers.forEach(function(speaker) {\n                                var name = speaker.custom_speaker_name || speaker.name || '';\n                                searchHaystack += ' ' + name.toLowerCase();\n                            });\n                        }\n                        return searchHaystack.indexOf(activeSearchTerm) !== -1;\n                    });\n                }\n\n                if (filteredAgendaList.length === 0) {\n                    var hasActiveFilter = filterPayloadGlobal && filterPayloadGlobal.filters && filterPayloadGlobal.filters.length > 0;\n                    var noResultsMsg = (activeSearchTerm || hasActiveFilter)\n                        ? 'No sessions match your search\/filter.'\n                        : 'No agenda available for this date.';\n                    \/\/ Hide dates only when the full result set is empty (not a single empty day tab).\n                    if ((activeSearchTerm || hasActiveFilter) && options.skipClientFilter && (!Array.isArray(agendaList) || agendaList.length === 0)) {\n                        $('.tab-buttons-wrapper').addClass('ssp-dates-hidden').hide();\n                        $('.tab-buttons-carousel').empty();\n                    }\n                    $timeline.html('<p class=\"ssp-no-agenda-msg\" style=\"text-align:center;padding:40px;color:#fff\">' + noResultsMsg + '<\/p>');\n                    return;\n                }\n                $('.tab-buttons-wrapper').removeClass('ssp-dates-hidden').show();\n\n                var userAgendaIds = window.scheduleUserData ? (window.scheduleUserData.userAgendaIds || []) : [];\n                var userAgendaIdMap = {};\n                if (Array.isArray(userAgendaIds)) {\n                    userAgendaIds.forEach(function(id) { userAgendaIdMap[String(id)] = true; });\n                }\n                var isLoggedIn = window.scheduleUserData ? !!window.scheduleUserData.isLoggedIn : false;\n                var eventId = window.scheduleUserData ? String(window.scheduleUserData.eventId || '') : '';\n                var userId = window.scheduleUserData ? String(window.scheduleUserData.userId || '') : '';\n\n                var html = '';\n                var _fmt = function(t) {\n                    if (!t) return '';\n                    var d = new Date('2000-01-01T' + t);\n                    if (isNaN(d.getTime())) d = new Date('2000-01-01 ' + t);\n                    return isNaN(d.getTime()) ? t : d.toLocaleTimeString('en-US', {hour: 'numeric', minute: '2-digit'});\n                };\n                var _baseUrl = (window.scheduleUserData && window.scheduleUserData.scheduleDetailUrl)\n                    ? window.scheduleUserData.scheduleDetailUrl.replace('\/schedule-details\/', '')\n                    : window.location.origin;\n                var _tmplUri = (window.scheduleUserData && window.scheduleUserData.templateDirUri)\n                    ? window.scheduleUserData.templateDirUri : '';\n                var _detailUrl = (window.scheduleUserData && window.scheduleUserData.scheduleDetailUrl)\n                    ? window.scheduleUserData.scheduleDetailUrl : '\/schedule-details\/';\n\n                filteredAgendaList.forEach(function(agenda, index) {\n                    var agendaColorClass = 'color-' + ((index % 4) + 1);\n                    var agendaId = (agenda.agenda_id != null && agenda.agenda_id !== '')\n                        ? agenda.agenda_id\n                        : (agenda.Id != null ? agenda.Id : '');\n                    var isFavourite = agendaId !== '' && !!userAgendaIdMap[String(agendaId)];\n                    var typeIds = [];\n                    var searchText = (agenda.Heading || '').toLowerCase() + ' ' +\n                                     stripHtmlText(agenda.description || '').toLowerCase();\n\n                    if (agenda.type_ids && agenda.type_ids.length) {\n                        agenda.type_ids.forEach(function(type) {\n                            typeIds.push(type.type_id);\n                            searchText += ' ' + (type.name || '').toLowerCase();\n                        });\n                    }\n                    if (agenda.speakers && agenda.speakers.length) {\n                        agenda.speakers.forEach(function(spk) {\n                            searchText += ' ' + (spk.custom_speaker_name || spk.name || '').toLowerCase();\n                        });\n                    }\n\n                    var startTime = _fmt(agenda.Start_time);\n                    var endTime   = _fmt(agenda.End_time);\n                    var timeDisplay = startTime + (endTime ? ' - ' + endTime : '');\n                    var isBlocked = agenda.isBlocked == 1;\n                    var blockMessage = agenda.blockMessage || 'You do not have access to this session.';\n\n                    html += '<div class=\"schedule-block ' + agendaColorClass + (isFavourite ? ' favourited' : '') + (isBlocked ? ' blocked-agenda' : '') + '\" ' +\n                            'data-message=\"' + String(blockMessage).replace(\/\"\/g, '&quot;') + '\" ' +\n                            'data-search=\"' + searchText.replace(\/\"\/g, '&quot;') + '\" ' +\n                            'data-types=\"' + typeIds.join(',') + '\">' +\n                            '<div class=\"inner-box\"><div class=\"inner\">' +\n                            '<div class=\"date\">' + timeDisplay + '<\/div>';\n\n                    if (isLoggedIn) {\n                        var heartClass = isFavourite ? 'fa-solid fa-bookmark active' : 'fa-regular fa-bookmark';\n                        html += '<div class=\"favourite_icon ' + (isFavourite ? 'favourited' : '') + '\" ' +\n                                'data-agenda_id=\"' + agendaId + '\" ' +\n                                'data-event_id=\"' + eventId + '\" ' +\n                                'data-user_id=\"' + userId + '\" style=\"position:relative;z-index:5;\">' +\n                                '<i class=\"' + heartClass + '\"><\/i><\/div>';\n                    }\n\n                    html += '<h4>';\n                    if (isBlocked) {\n                        html += '<a class=\"agenda-link\" href=\"javascript:void(0);\" style=\"pointer-events:none;opacity:0.6;\">' + (agenda.Heading || '') + '<\/a>';\n                    } else {\n                        html += '<a class=\"agenda-link\" href=\"' + _detailUrl + '?agenda_id=' + encodeURIComponent(agendaId) + '\">' + (agenda.Heading || '') + '<\/a>';\n                    }\n                    html += '<\/h4>';\n\n                    if (agenda.description) {\n                        html += '<div class=\"text\">' + agenda.description + '<\/div>';\n                    }\n\n                    if (agenda.zoom_link) {\n                        html += '<div class=\"zoom-join-button-wrapper\">' +\n                                '<a class=\"zoom-join-btns\" href=\"' + agenda.zoom_link + '\" target=\"_blank\" rel=\"noopener noreferrer\" ' +\n                                'data-zoom-link=\"' + agenda.zoom_link + '\">' +\n                                '<i class=\"fa fa-video\"><\/i> Join Zoom Meeting<\/a><\/div>';\n                    }\n\n                    if (agenda.type_ids && agenda.type_ids.length) {\n                        html += '<div class=\"type-buttons\" style=\"padding-bottom:20px;\">';\n                        agenda.type_ids.forEach(function(type) {\n                            html += '<span class=\"type-badge\" style=\"background:' + (type.color || '#000') + ';color:#fff;padding:4px 10px;border-radius:6px;font-size:16px;margin-right:6px;margin-bottom:15px;display:inline-block;\">' +\n                                    (type.name || '') + '<\/span>';\n                        });\n                        html += '<\/div>';\n                    }\n\n                    if (agenda.location) {\n                        html += '<div class=\"agenda-locations\"><span class=\"icon fa fa-map-marker-alt\"><\/span>' + agenda.location + '<\/div>';\n                    }\n\n                    if (agenda.speakers && agenda.speakers.length) {\n                        html += '<div class=\"agenda-speakers\" style=\"display: flex;overflow-x: hidden;width: 100%;\">';\n                        agenda.speakers.forEach(function(speaker) {\n                            var objectKey = speaker.s3_image_thumbnail || '';\n                            var imgUrl = _tmplUri + '\/assets\/images\/profile-placeholder.png';\n                            if (!objectKey && speaker.logo) {\n                                imgUrl = 'https:\/\/allintheloop.info\/media\/user_profile\/' + parseInt(eventId || '0', 10) + '\/' + speaker.logo;\n                            }\n                            if (speaker.resolved_img_url) {\n                                imgUrl = speaker.resolved_img_url;\n                                objectKey = '';\n                            }\n                            var speakerName = speaker.custom_speaker_name || speaker.name || '';\n                            var designation = speaker.speaker_designation || '';\n                            var firstLetter = speakerName ? speakerName.charAt(0).toUpperCase() : 'S';\n                            var speakerUserId = speaker.User_id || '';\n                            var baseUrl = _baseUrl;\n\n                            html += '<div class=\"agenda-speaker-card\">' +\n                                    '<div class=\"speaker-image\" style=\"flex-shrink:0; margin-bottom:8px;\">' +\n                                    '<a href=\"' + baseUrl + '\/speakers-detail\/?speaker=' + encodeURIComponent(speakerUserId) + '\">' +\n                                    '<img loading=\"lazy\" class=\"speaker-img\" src=\"' + imgUrl + '\" data-object-key=\"' + objectKey + '\" loading=\"lazy\" decoding=\"async\" width=\"80\" height=\"80\" alt=\"' + firstLetter + '\" style=\"width:80px; height:80px; object-fit:cover; border-radius:8px; display:block; margin:0 auto;\" \/>' +\n                                    '<\/a>' +\n                                    '<\/div>' +\n                                    '<h5 class=\"agenda-speaker-name\">' +\n                                    '<a href=\"' + baseUrl + '\/speakers-detail\/?speaker=' + encodeURIComponent(speakerUserId) + '\">' + speakerName + '<\/a>' +\n                                    '<\/h5>';\n                            if (designation) {\n                                html += '<div class=\"agenda-speaker-designation\" style=\"color:#9a9a9a; font-size:12px; line-height:1.3; margin-top:2px;\">' + designation + '<\/div>';\n                            }\n                            html += '<\/div>';\n                        });\n                        html += '<\/div>';\n                    }\n\n                    html += '<\/div><\/div><\/div>';\n                });\n\n                $timeline.html(html);\n                sspApplyFavouriteClasses($tab);\n\n                setTimeout(function() {\n                    if (typeof window.processSpeakerImages === 'function') {\n                        window.processSpeakerImages();\n                    } else if (typeof window.initSpeakerImageLoading === 'function') {\n                        window.initSpeakerImageLoading();\n                    }\n                    sspApplyFavouriteClasses($tab);\n                }, 50);\n                } catch (err) {\n                    console.error('renderAgendaForDate failed:', err);\n                    if ($tab && $tab.length) {\n                        var $tl = $tab.find('.schedule-timeline').first();\n                        if ($tl.length) {\n                            $tl.html('<p style=\"text-align:center;padding:40px;color:#dc3545;\">Error displaying agenda. Please refresh.<\/p>');\n                        }\n                    }\n                }\n            }\n            \n            \/\/ Handle tab clicks for AJAX loading\n            $(document).on('click', '.tab-buttons-carousel .tab-btn', function(e) {\n                 var date = $(this).data('date');\n                var tabId = $(this).attr('data-tab') || $(this).data('tab');\n                var $tab = tabId ? $(tabId) : $();\n                if (!date) {\n                    date = $(this).attr('data-date') || '';\n                }\n                if (!date || !$tab.length) {\n                    \/\/ Fallback: resolve tab by date attribute if data-tab target is missing\n                    if (date) {\n                        $tab = $('.tabs-content .tab[data-date=\"' + date + '\"]');\n                    }\n                }\n                if (!date || !$tab.length) return;\n\n                \/\/ Ensure this tab is marked active before loading (carousel handler may skip if already visible)\n                $('.tabs-content .tab').removeClass('active-tab').hide();\n                $tab.addClass('active-tab').show();\n                $('.tab-buttons-carousel .tab-btn').removeClass('active-btn');\n                $(this).addClass('active-btn');\n\n                if (window.scheduleUserData) {\n                    window.scheduleUserData.currentLoadedDate = date;\n                }\n\n                var currentSearch = $.trim($('#scheduleSearch').val() || '');\n                var hasFilter = filterPayloadGlobal && filterPayloadGlobal.filters && filterPayloadGlobal.filters.length > 0;\n\n                if (currentSearch.length > 0 || hasFilter) {\n                    \/\/ Prefer in-memory all-dates search\/filter cache \u2014 no second slow AJAX.\n                    var _sck = (currentSearch ? currentSearch.toLowerCase() : '') + '|' + (hasFilter ? JSON.stringify(filterPayloadGlobal) : '');\n                    if (Object.prototype.hasOwnProperty.call(searchResultCache, _sck) && Array.isArray(searchResultCache[_sck])) {\n                        renderAgendaForDate($tab, searchResultCache[_sck], date);\n                        $tab.data('loaded', true);\n                        $(document).trigger('agenda:loaded', [date, searchResultCache[_sck]]);\n                        setTimeout(function() {\n                            if (typeof window.processSpeakerImages === 'function') {\n                                window.processSpeakerImages();\n                            }\n                        }, 50);\n                        return;\n                    }\n                    if (hasFilter && !currentSearch && Object.prototype.hasOwnProperty.call(filterResultCache, JSON.stringify(filterPayloadGlobal)) && Array.isArray(filterResultCache[JSON.stringify(filterPayloadGlobal)])) {\n                        renderAgendaForDate($tab, filterResultCache[JSON.stringify(filterPayloadGlobal)], date);\n                        $tab.data('loaded', true);\n                        return;\n                    }\n                    \/\/ Fallback: all-dates search\/filter request (omit date)\n                    window.loadAgendaByDate(date, $tab, { sendDate: false });\n                } else {\n                    \/\/ No search or filter \u2014 normal load\n                    window.loadAgendaByDate(date, $tab, { sendDate: true });\n                }\n            });\n            \n            \/\/ AUTO-LOAD: Seed date cache from PHP-rendered data (CCIM pattern).\n            setTimeout(function() {\n                var ud = window.scheduleUserData || {};\n                if (!window.scheduleAgendaByDate) {\n                    window.scheduleAgendaByDate = {};\n                }\n                var byDate = window.scheduleAgendaByDate;\n\n                Object.keys(byDate).forEach(function(dateKey) {\n                    if (Array.isArray(byDate[dateKey]) && byDate[dateKey].length) {\n                        dateCache[dateKey] = byDate[dateKey];\n                    }\n                });\n\n                $('.tabs-content .tab').each(function() {\n                    var $tab = $(this);\n                    if ($tab.find('.schedule-block').length) {\n                        $tab.data('loaded', true).attr('data-loaded', 'true');\n                    }\n                });\n\n                var $firstTabBtn = $('.tab-buttons-carousel .tab-btn').first();\n                if ($firstTabBtn.length) {\n                    var firstDate = $firstTabBtn.attr('data-date') || $firstTabBtn.data('date') || '';\n                    var firstTabId = $firstTabBtn.attr('data-tab') || $firstTabBtn.data('tab');\n                    var $firstTab = firstTabId ? $(firstTabId) : $('.tabs-content .tab').first();\n\n                    if (firstDate && $firstTab.length) {\n                        if (sspIsTabLoaded($firstTab) && $firstTab.find('.schedule-block').length) {\n                            if (!dateCache[firstDate] && ud.initialAgendaData && ud.initialAgendaData.length) {\n                                dateCache[firstDate] = ud.initialAgendaData;\n                                window.scheduleAgendaByDate[firstDate] = ud.initialAgendaData;\n                            }\n                            \/\/ Keep PHP-rendered HTML; only sync favourite classes\n                            sspApplyFavouriteClasses($firstTab);\n                            $(document).trigger('agenda:loaded', [firstDate, dateCache[firstDate] || []]);\n                            if (typeof window.processSpeakerImages === 'function') {\n                                window.processSpeakerImages();\n                            }\n                        } else {\n                            window.loadAgendaByDate(firstDate, $firstTab, { sendDate: true });\n                        }\n                        ud.currentLoadedDate = firstDate;\n                    }\n                }\n\n                \/\/ Always sync favourited icons once after page init\n                sspApplyFavouriteClasses($('.schedule-section'));\n            }, 50);\n\n            \/\/ Background-warm full agenda cache so search\/filter responds in ~1s afterwards.\n            setTimeout(function() {\n                if (!ajaxUrl || !nonce || window.__sspAgendaWarmStarted) {\n                    return;\n                }\n                window.__sspAgendaWarmStarted = true;\n                var warmCategoryId = (window.scheduleUserData && window.scheduleUserData.categoryId)\n                    ? window.scheduleUserData.categoryId\n                    : '';\n                $.ajax({\n                    url: ajaxUrl,\n                    type: 'POST',\n                    dataType: 'json',\n                    timeout: 120000,\n                    data: {\n                        action: 'ssp_warm_agenda_cache',\n                        nonce: nonce,\n                        category_id: warmCategoryId\n                    }\n                }).done(function(resp) {\n                    if (resp && resp.success) {\n                        window.__sspAgendaCacheWarmed = true;\n                    }\n                });\n            }, 800);\n        }\n        \n        \/\/ Initialize when DOM is ready\n        if (document.readyState === 'loading') {\n            document.addEventListener('DOMContentLoaded', initDateAjaxLoading);\n        } else {\n            initDateAjaxLoading();\n        }\n    })();\n\n    \/\/ ==================================================\n    \/\/ DATE CAROUSEL FUNCTIONALITY - JQUERY CAROUSEL\n    \/\/ ==================================================\n    jQuery(document).ready(function($) {\n        var $carousel = $('.tab-buttons-carousel');\n        var $container = $('.tab-buttons-carousel-container');\n        var $prevBtn = $('.carousel-prev');\n        var $nextBtn = $('.carousel-next');\n        var currentPosition = 0;\n        var itemWidth = 0;\n        var visibleItems = 0;\n        var totalItems = 0;\n        var maxPosition = 0;\n        \n        function initCarousel() {\n            if (!$carousel.length) return;\n            \n            \/\/ Calculate dimensions\n            var containerWidth = $container.width();\n            var firstItem = $carousel.find('.tab-btn-item:not(.filtered-hide)').first();\n            \n            if (!firstItem.length) return;\n            \n            itemWidth = firstItem.outerWidth(true);\n            visibleItems = Math.floor(containerWidth \/ itemWidth);\n            totalItems = $carousel.find('.tab-btn-item:not(.filtered-hide)').length;\n            maxPosition = Math.max(0, (totalItems - visibleItems) * itemWidth);\n            \n            \/\/ Reset position if needed\n            if (currentPosition > maxPosition) {\n                currentPosition = maxPosition;\n            }\n            \n            updateCarousel();\n            updateButtons();\n        }\n        \n        function updateCarousel() {\n            $carousel.css('transform', 'translateX(-' + currentPosition + 'px)');\n        }\n        \n        function updateButtons() {\n            $prevBtn.prop('disabled', currentPosition <= 0);\n            $nextBtn.prop('disabled', currentPosition >= maxPosition || totalItems <= visibleItems);\n        }\n        \n        function centerItem($item) {\n            if (!$item.length) return;\n            \n            \/\/ Get all visible items (not filtered)\n            var $allItems = $carousel.find('.tab-btn-item:not(.filtered-hide)');\n            var itemIndex = $allItems.index($item);\n            \n            if (itemIndex === -1) return;\n            \n            var containerWidth = $container.width();\n            var itemWidth = $item.outerWidth(true);\n            \n            \/\/ Calculate position to center this item\n            var centerOffset = (containerWidth \/ 2) - (itemWidth \/ 2);\n            var targetPosition = (itemIndex * itemWidth) - centerOffset;\n            \n            \/\/ Clamp to valid range\n            targetPosition = Math.max(0, Math.min(maxPosition, targetPosition));\n            \n            currentPosition = targetPosition;\n            updateCarousel();\n            updateButtons();\n        }\n        \n        function scrollCarousel(direction) {\n            var scrollAmount = itemWidth * Math.max(1, Math.floor(visibleItems \/ 2));\n            \n            if (direction === 'prev') {\n                currentPosition = Math.max(0, currentPosition - scrollAmount);\n            } else {\n                currentPosition = Math.min(maxPosition, currentPosition + scrollAmount);\n            }\n            \n            updateCarousel();\n            updateButtons();\n        }\n        \n        \/\/ Navigation button handlers\n        $prevBtn.on('click', function() {\n            if (!$(this).prop('disabled')) {\n                scrollCarousel('prev');\n            }\n        });\n        \n        $nextBtn.on('click', function() {\n            if (!$(this).prop('disabled')) {\n                scrollCarousel('next');\n            }\n        });\n        \n        \/\/ Handle tab switching and center selected date when tab button is clicked\n        $(document).on('click', '.tab-buttons-carousel .tab-btn', function(e) {\n            e.preventDefault();\n            var $clickedBtn = $(this);\n            var $item = $clickedBtn.closest('.tab-btn-item');\n            var target = $($clickedBtn.attr('data-tab'));\n            var $scheduleSection = $clickedBtn.closest('.schedule-section');\n            \n            \/\/ Switch tabs\n            if (target.length) {\n                if (!target.is(':visible')) {\n                    \/\/ Remove active classes\n                    $scheduleSection.find('.tab-buttons-carousel .tab-btn').removeClass('active-btn');\n                    $clickedBtn.addClass('active-btn');\n                    \n                    \/\/ Hide all tabs and show selected\n                    $scheduleSection.find('.tabs-content .tab').fadeOut(0);\n                    $scheduleSection.find('.tabs-content .tab').removeClass('active-tab animated fadeIn');\n                    target.fadeIn(300);\n                    target.addClass('active-tab animated fadeIn');\n                }\n            }\n            \n            \/\/ Center the clicked item in carousel\n            setTimeout(function() {\n                centerItem($item);\n            }, 50);\n        });\n        \n        \/\/ Initialize on load\n        initCarousel();\n        \n        \/\/ Re-initialize on window resize\n        var resizeTimer;\n        $(window).on('resize', function() {\n            clearTimeout(resizeTimer);\n            resizeTimer = setTimeout(function() {\n                initCarousel();\n            }, 250);\n        });\n        \n        \/\/ Re-initialize after filter is applied\n        $(document).on('click', '.apply-filter-btn', function() {\n            setTimeout(function() {\n                currentPosition = 0;\n                initCarousel();\n            }, 300);\n        });\n        \n        \/\/ First tab is always centered on page load - no saved state\n        setTimeout(function() {\n            var $firstBtn = $carousel.find('.tab-btn').first();\n            if ($firstBtn.length) {\n                var $item = $firstBtn.closest('.tab-btn-item');\n                centerItem($item);\n            }\n        }, 500);\n    });\n\n    jQuery(document).ready(function ($) {\n        \/* ==============================\n           OPEN SIDEBAR\n        ============================== *\/\n        $('.open-filter-btn').on('click', function(){\n            $('.filter-sidebar').addClass('active');\n            $('.filter-backdrop').addClass('active');\n        });\n\n        \/* ==============================\n           CLOSE SIDEBAR\n        ============================== *\/\n        $('.filter-close-btn, .filter-backdrop').on('click', function(){\n            $('.filter-sidebar').removeClass('active');\n            $('.filter-backdrop').removeClass('active');\n        });\n\n        \/\/ Set checkbox colors on page load\n        $('.filter-checkbox').each(function() {\n            var color = $(this).data('type-color');\n            if (color) {\n                $(this).css('--checkbox-color', color);\n            }\n        });\n\n        \/\/ Show\/hide clear button based on checkbox selection\n        function updateClearButton() {\n            var hasChecked = $('.filter-checkbox:checked').length > 0;\n            $('.filter-clear-bar').toggle(hasChecked);\n            $('#clearFilterMainBtn').toggle(hasChecked);\n        }\n\n        \/\/ Check on page load\n        updateClearButton();\n\n        \/\/ Check when any checkbox changes\n        $(document).on('change', '.filter-checkbox', function() {\n            updateClearButton();\n        });\n\n        function reloadAfterFilterClear() {\n            var searchVal = $.trim($('#scheduleSearch').val() || '');\n            var $activeTab = $('.tab.active-tab');\n            var activeDate = $activeTab.data('date') || $('.tab-buttons-carousel .tab-btn.active-btn').data('date') || $('.tab-buttons-carousel .tab-btn').first().data('date') || '';\n\n            \/\/ Re-resolve active tab by date if active class state is stale.\n            if ((!$activeTab.length || !$activeTab.data('date')) && activeDate) {\n                $activeTab = $('.tabs-content .tab[data-date=\"' + activeDate + '\"]');\n            }\n\n            \/\/ Final fallback to first tab if still not found.\n            if ((!$activeTab.length || !activeDate) && $('.tabs-content .tab').length) {\n                $activeTab = $('.tabs-content .tab').first();\n                activeDate = $activeTab.data('date') || activeDate;\n            }\n            \/\/ If search still exists, keep search result (not default).\n            if (searchVal && activeDate && $activeTab.length && typeof window.loadAgendaByDate === 'function') {\n                $('.tab').data('loaded', false);\n                window.loadAgendaByDate(activeDate, $activeTab, { sendDate: false });\n                return;\n            }\n\n            \/\/ If no search and no filter, load default data.\n            if (typeof window.loadDefaultAgendaData === 'function') {\n                window.loadDefaultAgendaData();\n            }\n        }\n\n        \/\/ Clear all checkboxes when clear button is clicked (sidebar button)\n        $(document).on('click', '.clear-filter-btn', function() {\n            $('.filter-checkbox:checked').prop('checked', false);\n            selectedTypesGlobal = [];\n            filterPayloadGlobal = null;\n            filterResultCache = {};\n            searchResultCache = {};\n            updateClearButton();\n            reloadAfterFilterClear();\n        });\n\n        \/\/ Clear filter from main button (next to Filter button)\n        $('#clearFilterMainBtn').on('click', function() {\n            $('.filter-checkbox:checked').prop('checked', false);\n            selectedTypesGlobal = [];\n            filterPayloadGlobal = null;\n            filterResultCache = {};\n            searchResultCache = {};\n            updateClearButton();\n            reloadAfterFilterClear();\n        });\n\n        \/\/ Track current active date for filtering\n        var currentFilterDate = window.scheduleUserData ? window.scheduleUserData.currentLoadedDate : '';\n        \n        \/\/ Update current date when tab changes\n        $(document).on('click', '.tab-buttons-carousel .tab-btn', function() {\n            var date = $(this).data('date');\n            if (date) {\n                currentFilterDate = date;\n            }\n        });\n        \n        $('.apply-filter-btn').on('click', function () {\n\n            selectedTypesGlobal = [];\n            filterModeGlobal = $('input[name=\"filter-mode\"]:checked').val() || 'and';\n\n            \/\/ Build grouped filter structure: { group_id: [type_id, ...], ... }\n            var groupedFilters = {};\n\n            $('.filter-checkbox:checked').each(function () {\n                var typeId  = $(this).val();\n                var groupId = $(this).data('group'); \/\/ \u2190 reads data-group from checkbox\n\n                if (!groupedFilters[groupId]) {\n                    groupedFilters[groupId] = [];\n                }\n                groupedFilters[groupId].push(typeId);\n\n                selectedTypesGlobal.push(typeId); \/\/ keep for backward compat \/ loaded check\n            });\n\n            \/\/ Build filters array in required format\n            var filtersArray = [];\n            Object.keys(groupedFilters).forEach(function(groupKey) {\n                filtersArray.push({\n                    group_key: groupKey,\n                    values:    groupedFilters[groupKey]\n                });\n            });\n\n            \/\/ Store globally so AJAX can access it\n            filterPayloadGlobal = filtersArray.length > 0 ? {\n                filter_type: filterModeGlobal.toUpperCase(), \/\/ \"AND\" or \"OR\"\n                filters:     filtersArray\n            } : null;\n\n            let $activeTab  = $('.tab.active-tab');\n            let currentDate = $activeTab.data('date');\n            if (!currentDate) {\n                currentDate = $('.tab-buttons-carousel .tab-btn.active-btn').data('date') || $('.tab-buttons-carousel .tab-btn').first().data('date') || '';\n                if (currentDate) {\n                    $activeTab = $('.tabs-content .tab[data-date=\"' + currentDate + '\"]');\n                }\n            }\n\n            \/\/ Reset ALL tabs so API reloads\n            filterResultCache = {};\n            searchResultCache = {};\n            $('.tab').data('loaded', false);\n\n            \/\/ Reload with filters across ALL dates (omit date so matches on other days appear).\n            if (currentDate && $activeTab.length) {\n                window.loadAgendaByDate(currentDate, $activeTab, { sendDate: false });\n            } else if (typeof window.loadDefaultAgendaData === 'function') {\n                window.loadDefaultAgendaData();\n            }\n\n            closeFilter();\n            });\n    \n        \/\/ =====================\n        \/\/ HELPERS\n        \/\/ =====================\n        function closeFilter() {\n            $('.filter-sidebar').removeClass('active');\n            $('.filter-backdrop').removeClass('active');\n        }\n    });\n    \n    \n    \/\/ ***************************************************************\/\/\n    \/\/***** Load speakers image after page loading with API CURL *****\/\/\n    \/\/ ***************************************************************\/\/\n    var siteData = {\n        restUrl: \"https:\/\/allintheloop.com\/nata-2026-convention\/wp-json\/custom\/v1\/speaker-images\"\n    };\n    \n    \/\/ Optimized image loading - deferred to prevent blocking navigation\n    (function() {\n        'use strict';\n        \n        const CHUNK_SIZE = 20; \/\/ Reduced for better performance\n        const queue = [];\n        let loading = false;\n        const processed = new Set();\n        const urlCache = new Map(); \/\/ objectKey \u2192 resolved URL\n        let observer = null;\n        let mutationObserver = null;\n        let initialized = false;\n\n        \/\/ Ensure links navigate immediately without waiting for images\n        document.addEventListener('click', function(e) {\n            const link = e.target.closest('.agenda-link');\n            if (link && link.href && !link.href.includes('javascript:')) {\n                \/\/ Allow immediate navigation - don't block\n                return true;\n            }\n        }, true); \/\/ Use capture phase for immediate handling\n\n        \/\/ Initialize image loading after page is ready and idle\n        function initImageLoading() {\n            if (initialized) {\n                \/\/ Reset for AJAX re-runs - process new images\n                processNewImages();\n                return;\n            }\n            initialized = true;\n\n            \/\/ Use requestIdleCallback if available, otherwise setTimeout\n            const initCallback = window.requestIdleCallback || ((cb) => setTimeout(cb, 500));\n            \n            initCallback(() => {\n                \/\/ Only load images in viewport initially\n                const viewportImgs = [];\n                const allImgs = document.querySelectorAll('.speaker-img[data-object-key], .agenda-description img[data-object-key]');\n                \n                allImgs.forEach(img => {\n                    if (img.dataset.objectKey && !processed.has(img.dataset.objectKey)) {\n                        processed.add(img.dataset.objectKey);\n                        \n                        \/\/ Check if in viewport\n                        const rect = img.getBoundingClientRect();\n                        const isInViewport = rect.top < window.innerHeight + 100 && \n                                           rect.bottom > -100 &&\n                                           img.closest('.tab.active-tab') !== null;\n                        \n                        if (isInViewport) {\n                            viewportImgs.push(img);\n                        }\n                    }\n                });\n\n                \/\/ Load only viewport images in small batches\n                if (viewportImgs.length > 0) {\n                    loadImagesBatch(viewportImgs.slice(0, 10), true); \/\/ Load first 10 immediately\n                    \n                    \/\/ Load rest in background\n                    if (viewportImgs.length > 10) {\n                        setTimeout(() => {\n                            loadImagesBatch(viewportImgs.slice(10), false);\n                        }, 200);\n                    }\n                }\n\n                \/\/ Setup IntersectionObserver for lazy loading\n                observer = new IntersectionObserver(entries => {\n                    entries.forEach(entry => {\n                        if (entry.isIntersecting) {\n                            observer.unobserve(entry.target);\n                            if (entry.target.dataset.objectKey && !queue.includes(entry.target)) {\n                                queue.push(entry.target);\n                                processQueue();\n                            }\n                        }\n                    });\n                }, {\n                    rootMargin: '150px'\n                });\n\n                \/\/ Observe all non-viewport images\n                allImgs.forEach(img => {\n                    if (!viewportImgs.includes(img) && img.dataset.objectKey) {\n                        observer.observe(img);\n                    }\n                });\n\n                \/\/ Setup MutationObserver for dynamic content\n                mutationObserver = new MutationObserver(mutations => {\n                    mutations.forEach(mutation => {\n                        mutation.addedNodes.forEach(node => {\n                            if (node.nodeType === 1) {\n                                const imgs = node.querySelectorAll ? \n                                    node.querySelectorAll('.speaker-img[data-object-key], img[data-object-key]') : [];\n                                \n                                Array.from(imgs).forEach(img => {\n                                    if (!img.dataset.objectKey) return;\n                                    const key = img.dataset.objectKey;\n                                    const isPlaceholder = !img.src || img.src.includes('profile-placeholder');\n\n                                    \/\/ Apply cached URL immediately if available\n                                    if (isPlaceholder && urlCache.has(key)) {\n                                        const placeholderUrl = 'https:\/\/allintheloop.com\/nata-2026-convention\/wp-content\/themes\/hello-elementor\/assets\/images\/profile-placeholder.png';\n                                        img.src = urlCache.get(key);\n                                        img.onerror = function() { this.src = placeholderUrl; };\n                                        processed.add(key);\n                                        return;\n                                    }\n\n                                    const isNew = !processed.has(key);\n                                    if (isNew) processed.add(key);\n\n                                    if (isNew || isPlaceholder) {\n                                        const rect = img.getBoundingClientRect();\n                                        const isInViewport = rect.top < window.innerHeight + 100 && rect.bottom > -100;\n\n                                        if (isInViewport) {\n                                            loadImagesBatch([img], false);\n                                        } else {\n                                            observer.observe(img);\n                                        }\n                                    }\n                                });\n                            }\n                        });\n                    });\n                });\n\n                \/\/ Watch agenda descriptions\n                document.querySelectorAll('.agenda-description').forEach(container => {\n                    mutationObserver.observe(container, {\n                        childList: true,\n                        subtree: true\n                    });\n                });\n                \n                \/\/ Watch tab containers for AJAX-loaded content\n                document.querySelectorAll('.tab-content, .tab, .tabs-content').forEach(container => {\n                    mutationObserver.observe(container, {\n                        childList: true,\n                        subtree: true\n                    });\n                });\n            });\n        }\n\n        function loadImagesBatch(images, immediate = false) {\n            if (images.length === 0) return Promise.resolve();\n\n            const keys = images.map(img => img.dataset.objectKey).filter(Boolean);\n            if (keys.length === 0) return Promise.resolve();\n\n            const batchSize = immediate ? Math.min(keys.length, 10) : CHUNK_SIZE;\n            const placeholderUrl = 'https:\/\/allintheloop.com\/nata-2026-convention\/wp-content\/themes\/hello-elementor\/assets\/images\/profile-placeholder.png';\n            \n            \/\/ Collect all promises for batches\n            const batchPromises = [];\n            \n            for (let i = 0; i < keys.length; i += batchSize) {\n                const batch = keys.slice(i, i + batchSize);\n                const batchImages = images.slice(i, i + batchSize);\n\n                \/\/ Create a promise for each batch\n                const batchPromise = new Promise((resolve) => {\n                    const loadBatch = () => {\n                         fetch(siteData.restUrl, {\n                            method: 'POST',\n                            headers: { 'Content-Type': 'application\/json' },\n                            body: JSON.stringify({ keys: batch })\n                        })\n                        .then(res => res.json())\n                        .then(data => {\n                            batchImages.forEach(img => {\n                                const key = img.dataset.objectKey;\n                                if (data[key] && img.dataset.objectKey === key) {\n                                    urlCache.set(key, data[key]); \/\/ cache resolved URL\n                                    img.src = data[key];\n                                    img.onerror = function() {\n                                        this.src = placeholderUrl;\n                                    };\n                                }\n                            });\n                            resolve();\n                        })\n                        .catch(err => {\n                            console.error('Error loading speaker images:', err);\n                            batchImages.forEach(img => {\n                                if (!img.src || img.src.includes('profile-placeholder')) {\n                                    img.src = placeholderUrl;\n                                }\n                            });\n                            resolve(); \/\/ Resolve even on error to continue processing\n                        });\n                    };\n\n                    if (immediate && i === 0) {\n                        loadBatch(); \/\/ Load first batch immediately\n                    } else {\n                        const delayCallback = window.requestIdleCallback || ((cb) => setTimeout(cb, 100));\n                        delayCallback(loadBatch);\n                    }\n                });\n\n                batchPromises.push(batchPromise);\n            }\n\n            \/\/ Return a promise that resolves when all batches are done\n            return Promise.all(batchPromises).then(() => {});\n        }\n\n        function processQueue() {\n            if (loading || queue.length === 0) return;\n\n            loading = true;\n            const chunk = queue.splice(0, CHUNK_SIZE);\n\n            loadImagesBatch(chunk).finally(() => {\n                loading = false;\n                if (queue.length > 0) {\n                    const delayCallback = window.requestIdleCallback || ((cb) => setTimeout(cb, 50));\n                    delayCallback(() => processQueue());\n                }\n            });\n        }\n\n        \/\/ Load images when tab changes (deferred)\n        jQuery(document).on('click', '.tab-btn', function() {\n            setTimeout(() => {\n\n                const activeTab = jQuery('.tab.active-tab');\n                const tabImgs = activeTab.find('.speaker-img[data-object-key]').toArray().filter(img => {\n                    return img.dataset.objectKey && \n                           (img.src.includes('profile-placeholder') || !img.src || img.complete === false);\n                });\n                \n                if (tabImgs.length > 0) {\n                    \/\/ Load first 10 immediately, rest in background\n                    loadImagesBatch(tabImgs.slice(0, 10), true);\n                    if (tabImgs.length > 10) {\n                        setTimeout(() => loadImagesBatch(tabImgs.slice(10), false), 200);\n                    }\n                }\n            }, 50);\n        });\n\n        \/\/ Process new images (for AJAX re-runs)\n        function processNewImages() {\n            const placeholderUrl = 'https:\/\/allintheloop.com\/nata-2026-convention\/wp-content\/themes\/hello-elementor\/assets\/images\/profile-placeholder.png';\n            const allImgs = document.querySelectorAll('.speaker-img[data-object-key]');\n            const newImgs = [];\n\n            allImgs.forEach(img => {\n                const key = img.dataset.objectKey;\n                if (!key) return;\n                const isPlaceholder = !img.src || img.src.includes('profile-placeholder');\n\n                \/\/ If we already resolved this key, apply the cached URL immediately \u2014 no API call needed\n                if (isPlaceholder && urlCache.has(key)) {\n                    img.src = urlCache.get(key);\n                    img.onerror = function() { this.src = placeholderUrl; };\n                    processed.add(key);\n                    return;\n                }\n\n                const isNew = !processed.has(key);\n                if (isNew) processed.add(key);\n\n                \/\/ Process if new OR if still showing placeholder after AJAX re-render\n                if (isNew || isPlaceholder) {\n                    const rect = img.getBoundingClientRect();\n                    const isInViewport = rect.top < window.innerHeight + 100 && rect.bottom > -100;\n\n                    if (isInViewport) {\n                        newImgs.push(img);\n                    } else if (observer) {\n                        observer.observe(img);\n                    }\n                }\n            });\n\n            if (newImgs.length > 0) {\n                loadImagesBatch(newImgs.slice(0, 10), true);\n                if (newImgs.length > 10) {\n                    setTimeout(() => loadImagesBatch(newImgs.slice(10), false), 200);\n                }\n            }\n        }\n        \n        \/\/ Expose globally for AJAX calls\n        window.initSpeakerImageLoading = initImageLoading;\n        window.processSpeakerImages = processNewImages;\n\n        \/\/ Initialize after DOM is ready\n        if (document.readyState === 'loading') {\n            document.addEventListener('DOMContentLoaded', initImageLoading);\n        } else {\n            initImageLoading();\n        }\n    })();\n    \n    jQuery(document).on('click', '.zoom-join-btns', function (e) {\n        e.preventDefault();\n        e.stopPropagation();\n\n        \/\/ Use the original zoom link directly from data attribute or href\n        let zoomLink = jQuery(this).data('zoom-link') || jQuery(this).attr('href');\n\n        if (!zoomLink) {\n            alert('Zoom link not available.');\n            return;\n        }\n\n        \/\/ Validate it's a zoom link\n        if (!zoomLink.includes('zoom.us') && !zoomLink.includes('zoom.com')) {\n            alert('Invalid Zoom link.');\n            return;\n        }\n\n        \/\/ Convert to direct join link (skip landing page)\n        \/\/ Convert format: https:\/\/domain.zoom.us\/j\/MEETING_ID to https:\/\/domain.zoom.us\/wc\/join\/MEETING_ID\n        try {\n            const url = new URL(zoomLink);\n            \n            \/\/ Check if it's already a direct join link\n            if (url.pathname.includes('\/wc\/join\/')) {\n                \/\/ Already a direct join link, use as-is\n                window.open(zoomLink, '_blank', 'noopener,noreferrer');\n                return;\n            }\n            \n            \/\/ Extract meeting ID from \/j\/MEETING_ID format\n            const meetingMatch = url.pathname.match(\/\\\/j\\\/(\\d{9,11})\/);\n            if (meetingMatch) {\n                const meetingId = meetingMatch[1];\n                \/\/ Build direct join URL: replace \/j\/ with \/wc\/join\/\n                const directJoinUrl = `${url.protocol}\/\/${url.host}\/wc\/join\/${meetingId}`;\n                \n                \/\/ Preserve all query parameters (pwd, etc.)\n                if (url.search) {\n                    window.open(directJoinUrl + url.search, '_blank', 'noopener,noreferrer');\n                } else {\n                    window.open(directJoinUrl, '_blank', 'noopener,noreferrer');\n                }\n            } else {\n                \/\/ If we can't parse it, try to use original link\n                \/\/ Try alternative patterns\n                const altMatch = zoomLink.match(\/(https?:\\\/\\\/[^\\\/]+)\\\/(?:j\\\/|meeting\\\/join\\\/|s\\\/|s\\\/join\\\/)(\\d{9,11})\/);\n                if (altMatch) {\n                    const domain = altMatch[1];\n                    const meetingId = altMatch[2];\n                    const queryString = zoomLink.includes('?') ? zoomLink.substring(zoomLink.indexOf('?')) : '';\n                    const directJoinUrl = `${domain}\/wc\/join\/${meetingId}${queryString}`;\n                    window.open(directJoinUrl, '_blank', 'noopener,noreferrer');\n                } else {\n                    \/\/ Fallback: use original link\n                    window.open(zoomLink, '_blank', 'noopener,noreferrer');\n                }\n            }\n        } catch (error) {\n            \/\/ If URL parsing fails, try regex approach\n            const regexMatch = zoomLink.match(\/(https?:\\\/\\\/[^\\\/]+(?:\\.[^\\\/]+)*)\\\/j\\\/(\\d{9,11})(.*)\/);\n            if (regexMatch) {\n                const domain = regexMatch[1];\n                const meetingId = regexMatch[2];\n                const queryString = regexMatch[3] || '';\n                const directJoinUrl = `${domain}\/wc\/join\/${meetingId}${queryString}`;\n                window.open(directJoinUrl, '_blank', 'noopener,noreferrer');\n            } else {\n                \/\/ Final fallback: use original link\n                console.warn('Could not convert Zoom link to direct join format, using original:', error);\n                window.open(zoomLink, '_blank', 'noopener,noreferrer');\n            }\n        }\n    });\n    \n    \/\/ ==================================================\n    \/\/ PAGINATION AJAX HANDLER (OPTIMIZED)\n    \/\/ ==================================================\n    jQuery(document).ready(function($) {\n        var $pagination = $('.schedule-pagination');\n        var $paginationWrapper = $('.schedule-pagination-wrapper');\n        var $loader = $('.pagination-loader');\n        \n        if (!$pagination.length) return;\n        \n        var ajaxUrl = 'https:\/\/allintheloop.com\/nata-2026-convention\/wp-admin\/admin-ajax.php';\n        var currentPage = parseInt($pagination.data('current-page')) || 1;\n        var totalPages = parseInt($pagination.data('total-pages')) || 1;\n        var isLoading = false;\n        var ajaxRequest = null;\n        \n        \/\/ Optimized function to load page\n        function loadPage(targetPage) {\n            \/\/ Validation\n            if (!targetPage || targetPage < 1 || targetPage > totalPages || targetPage === currentPage) {\n                \/\/ If validation fails, hide loader\n                resetLoadingState();\n                return;\n            }\n            \n            \/\/ Cancel any pending request\n            if (ajaxRequest && ajaxRequest.readyState !== 4) {\n                ajaxRequest.abort();\n            }\n            \n            \/\/ Loading state and loader already shown by showLoaderImmediately\n            \n            \/\/ Scroll to top smoothly\n            var $scheduleSection = $('.schedule-section');\n            if ($scheduleSection.length) {\n                $('html, body').stop().animate({\n                    scrollTop: $scheduleSection.offset().top - 100\n                }, 300);\n            }\n            \n            \/\/ Make optimized AJAX request with timeout - Get HTML content\n            ajaxRequest = $.ajax({\n                url: ajaxUrl,\n                type: 'POST',\n                dataType: 'json',\n                timeout: 30000, \/\/ 30 second timeout\n                cache: false,\n                data: {\n                    action: 'get_agenda_pagination_html',\n                    page_no: targetPage,\n                    agenda_id: (window.scheduleUserData && window.scheduleUserData.categoryId) ? window.scheduleUserData.categoryId : ''\n                },\n                success: function(response) {\n                    if (response && response.success && response.data && response.data.html) {\n                        \/\/ Update URL without reload using History API\n                        var url = new URL(window.location.href);\n                        url.searchParams.set('schedule_page', targetPage);\n                        window.history.pushState({page: targetPage}, '', url.toString());\n                        \n                        \/\/ Get the schedule section container\n                        var $scheduleSection = $('.schedule-section.style-two');\n                        \n                        \/\/ Parse the new HTML - wrap in a temporary container\n                        var $tempContainer = $('<div>').html(response.data.html);\n                        var $newScheduleInner = $tempContainer.find('.schedule-section-inner').first();\n                        var $newPagination = $tempContainer.find('.schedule-pagination-wrapper').first();\n                        \n                        \/\/ If not found, the HTML might be the section itself, try finding within it\n                        if (!$newScheduleInner.length) {\n                            var $sectionInHtml = $tempContainer.find('.schedule-section.style-two');\n                            if ($sectionInHtml.length) {\n                                $newScheduleInner = $sectionInHtml.find('.schedule-section-inner').first();\n                                $newPagination = $sectionInHtml.find('.schedule-pagination-wrapper').first();\n                            }\n                        }\n                        \n                        \/\/ Fade out old content\n                        $scheduleSection.find('.schedule-section-inner, .schedule-pagination-wrapper').fadeOut(200, function() {\n                            \/\/ Replace schedule inner content\n                            if ($newScheduleInner.length) {\n                                $scheduleSection.find('.schedule-section-inner').replaceWith($newScheduleInner);\n                            }\n                            \n                            \/\/ Update pagination\n                            if ($newPagination.length) {\n                                var $existingPagination = $scheduleSection.find('.schedule-pagination-wrapper');\n                                if ($existingPagination.length) {\n                                    $existingPagination.replaceWith($newPagination);\n                                } else {\n                                    $scheduleSection.append($newPagination);\n                                }\n                            } else {\n                                $scheduleSection.find('.schedule-pagination-wrapper').remove();\n                            }\n                            \n                            \/\/ Update pagination variables\n                            var $newPaginationEl = $scheduleSection.find('.schedule-pagination');\n                            if ($newPaginationEl.length) {\n                                currentPage = parseInt($newPaginationEl.data('current-page')) || targetPage;\n                                totalPages = parseInt($newPaginationEl.data('total-pages')) || 1;\n                                $pagination = $newPaginationEl;\n                                $paginationWrapper = $scheduleSection.find('.schedule-pagination-wrapper');\n                            }\n                            \n                            \/\/ Update loader reference (loader is now outside section, as sibling)\n                            $loader = $('.pagination-loader');\n                            \n                            \/\/ Re-initialize necessary handlers\n                            reinitializeHandlers();\n                            \n                            \/\/ Fade in new content\n                            $scheduleSection.find('.schedule-section-inner, .schedule-pagination-wrapper').hide().fadeIn(300);\n                            \n                            \/\/ Reset loading state - hide loader after content is visible\n                            setTimeout(function() {\n                                resetLoadingState();\n                            }, 100);\n                        });\n                    } else {\n                        showError('Error loading page. Please try again.');\n                    }\n                },\n                error: function(xhr, status, error) {\n                    if (status !== 'abort') {\n                        console.error('Pagination AJAX Error:', error);\n                        showError('Error loading page. Please try again.');\n                    }\n                },\n                complete: function() {\n                    \/\/ Loading state will be reset in success handler\n                }\n            });\n        }\n        \n        \/\/ Show error and reset\n        function showError(message) {\n            alert(message);\n            resetLoadingState();\n        }\n        \n        \/\/ Reset loading state\n        function resetLoadingState() {\n            isLoading = false;\n            \n            \/\/ Update references in case content was replaced\n            $pagination = $('.schedule-pagination');\n            $loader = $('.pagination-loader');\n            \n            if ($pagination.length) {\n                $pagination.removeClass('pagination-loading');\n            }\n            $('.pagination-btn, .pagination-number').prop('disabled', false);\n            \n            \/\/ Hide loader - ensure it's hidden\n            if ($loader.length) {\n                $loader.stop(true, true).fadeOut(200, function() {\n                    $(this).css({\n                        'display': 'none',\n                        'opacity': '0'\n                    });\n                });\n            } else {\n                \/\/ If loader not found, try to hide by class\n                $('.pagination-loader').stop(true, true).fadeOut(200, function() {\n                    $(this).css({\n                        'display': 'none',\n                        'opacity': '0'\n                    });\n                });\n            }\n        }\n        \n        \/\/ Re-initialize handlers after content update\n        function reinitializeHandlers() {\n            \/\/ Re-initialize carousel if it exists\n            if (typeof initCarousel === 'function') {\n                setTimeout(function() {\n                    if ($('.tab-buttons-carousel').length) {\n                        \/\/ Trigger carousel re-initialization\n                        $(window).trigger('resize');\n                    }\n                }, 100);\n            }\n            \n            \/\/ Re-initialize image loading for new content\n            if (typeof initImageLoading === 'function') {\n                setTimeout(function() {\n                    initImageLoading();\n                }, 200);\n            }\n            \n            \/\/ Re-initialize search functionality\n            var $searchInput = $('#scheduleSearch');\n            if ($searchInput.length) {\n                \/\/ Search is already set up with delegated events, should work automatically\n            }\n        }\n        \n        \/\/ Handle browser back\/forward buttons\n        window.addEventListener('popstate', function(event) {\n            var urlParams = new URLSearchParams(window.location.search);\n            var pageParam = urlParams.get('schedule_page');\n            if (pageParam) {\n                var pageNum = parseInt(pageParam);\n                if (pageNum && pageNum !== currentPage && pageNum >= 1 && pageNum <= totalPages) {\n                    loadPage(pageNum);\n                }\n            }\n        });\n        \n        \/\/ Show loader immediately on click (before validation)\n        function showLoaderImmediately() {\n            \/\/ Update loader reference to ensure we have the current element\n            $loader = $('.pagination-loader');\n            \n            \/\/ Show loader instantly for immediate feedback\n            if ($loader.length) {\n                $loader.css({\n                    'display': 'flex',\n                    'opacity': '0'\n                }).stop(true, true).animate({\n                    'opacity': '1'\n                }, 150);\n            }\n            \n            \/\/ Update pagination reference\n            $pagination = $('.schedule-pagination');\n            if ($pagination.length) {\n                $pagination.addClass('pagination-loading');\n            }\n            $('.pagination-btn, .pagination-number').prop('disabled', true);\n            isLoading = true; \/\/ Set loading flag immediately\n        }\n        \n        \/\/ Handle Previous\/Next button clicks (delegated event for performance)\n        $(document).on('click', '.pagination-btn:not(:disabled)', function(e) {\n            e.preventDefault();\n            e.stopPropagation();\n            \n            \/\/ Show loader immediately before any processing\n            showLoaderImmediately();\n            \n            var targetPage = parseInt($(this).data('page'));\n            \n            \/\/ Use setTimeout to ensure loader is visible before AJAX starts\n            setTimeout(function() {\n                loadPage(targetPage);\n            }, 50);\n        });\n        \n        \/\/ Handle numbered pagination clicks (delegated event for performance)\n        $(document).on('click', '.pagination-number:not(:disabled):not(.active)', function(e) {\n            e.preventDefault();\n            e.stopPropagation();\n            \n            \/\/ Show loader immediately before any processing\n            showLoaderImmediately();\n            \n            var targetPage = parseInt($(this).data('page'));\n            \n            \/\/ Use setTimeout to ensure loader is visible before AJAX starts\n            setTimeout(function() {\n                loadPage(targetPage);\n            }, 50);\n        });\n        \n        \/\/ Prevent multiple rapid clicks\n        var clickCooldown = false;\n        $(document).on('click', '.pagination-btn, .pagination-number', function(e) {\n            if (clickCooldown || isLoading) {\n                e.preventDefault();\n                e.stopPropagation();\n                return false;\n            }\n            clickCooldown = true;\n            setTimeout(function() {\n                clickCooldown = false;\n            }, 500);\n        });\n        \n    });\n    \n    \/\/ Collapsible Filter Groups - Global handler\n    jQuery(function($) {\n        \/\/ Start all groups in collapsed state\n        $('.filter-checkbox-list').addClass('collapsed');\n        $('.group-title').addClass('collapsed');\n        \n        \/\/ Open the first group by default\n        $('.filter-group').first().find('.group-title').removeClass('collapsed');\n        $('.filter-group').first().find('.filter-checkbox-list').removeClass('collapsed');\n        \n        \/\/ Delegate click handler for group titles\n        $(document).off('click.groupTitle').on('click.groupTitle', '.group-title', function(e) {\n            e.preventDefault();\n            e.stopPropagation();\n            \n            var $groupTitle = $(this);\n            var $checkboxList = $groupTitle.next('.filter-checkbox-list');\n            var isCollapsed = $groupTitle.hasClass('collapsed');\n            \n            if (isCollapsed) {\n                \/\/ Expand\n                $groupTitle.removeClass('collapsed');\n                $checkboxList.removeClass('collapsed');\n            } else {\n                \/\/ Collapse\n                $groupTitle.addClass('collapsed');\n                $checkboxList.addClass('collapsed');\n            }\n        });\n    });\n    <\/script>\n    <\/div>\n\t\t\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>Student Schedule<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1032","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/allintheloop.com\/nata-2026-convention\/wp-json\/wp\/v2\/pages\/1032","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/allintheloop.com\/nata-2026-convention\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/allintheloop.com\/nata-2026-convention\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/allintheloop.com\/nata-2026-convention\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/allintheloop.com\/nata-2026-convention\/wp-json\/wp\/v2\/comments?post=1032"}],"version-history":[{"count":4,"href":"https:\/\/allintheloop.com\/nata-2026-convention\/wp-json\/wp\/v2\/pages\/1032\/revisions"}],"predecessor-version":[{"id":1040,"href":"https:\/\/allintheloop.com\/nata-2026-convention\/wp-json\/wp\/v2\/pages\/1032\/revisions\/1040"}],"wp:attachment":[{"href":"https:\/\/allintheloop.com\/nata-2026-convention\/wp-json\/wp\/v2\/media?parent=1032"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}