{"id":10663,"date":"2024-04-15T18:13:43","date_gmt":"2024-04-15T11:13:43","guid":{"rendered":"https:\/\/psychologistvietnam.com\/?page_id=10663"},"modified":"2026-10-26T09:39:37","modified_gmt":"2026-10-26T02:39:37","slug":"job-openings-2","status":"publish","type":"page","link":"https:\/\/psychologistvietnam.com\/en\/job-openings-2\/","title":{"rendered":"Job Openings"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"10663\" class=\"elementor elementor-10663\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-54498deb e-con-full e-flex e-con e-parent\" data-id=\"54498deb\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-164a8820 e-flex e-con-boxed e-con e-child\" data-id=\"164a8820\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3dc8f092 elementor-widget__width-auto elementor-widget elementor-widget-heading\" data-id=\"3dc8f092\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">OUR SERVICES<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5e3b8765 elementor-widget elementor-widget-heading\" data-id=\"5e3b8765\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Job Opening<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1c7eb0ec elementor-widget elementor-widget-text-editor\" data-id=\"1c7eb0ec\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Explore career opportunities with us and join a team <br \/>dedicated to mental health and well-being<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d8401b4 e-con-full e-flex e-con e-parent\" data-id=\"d8401b4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f276b1d elementor-widget elementor-widget-html\" data-id=\"f276b1d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\r\n<!-- =====================================================\r\n     PV JOB OPENINGS v2.1\r\n     Elementor HTML Widget\r\n\r\n     Sidebar + Career Cards + Details + Compact Form\r\n     All visible content is in English.\r\n===================================================== -->\r\n\r\n<section\r\n    class=\"pv-job\"\r\n    id=\"pv-job-openings\"\r\n    data-ajax-url=\"\/wp-admin\/admin-ajax.php\"\r\n>\r\n\r\n    <div class=\"pv-job__layout\">\r\n\r\n        <!-- ==========================================\r\n             01. SIDEBAR\r\n        =========================================== -->\r\n\r\n        <aside class=\"pv-job__sidebar\">\r\n\r\n            <nav\r\n                class=\"pv-job__side-card\"\r\n                aria-label=\"Job openings navigation\"\r\n            >\r\n\r\n                <h2>Job Openings<\/h2>\r\n\r\n                <ul class=\"pv-job__nav\">\r\n\r\n                    <li class=\"is-active\">\r\n                        <a\r\n                            href=\"#pv-job-detail\"\r\n                            data-job-target=\"team\"\r\n                            aria-current=\"true\"\r\n                        >\r\n                            <i\r\n                                class=\"fa-solid fa-people-group\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n\r\n                            <span>Join Our Team<\/span>\r\n\r\n                            <i\r\n                                class=\"fa-solid fa-chevron-right pv-job__chevron\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n                        <\/a>\r\n                    <\/li>\r\n\r\n                    <li>\r\n                        <a\r\n                            href=\"#pv-job-detail\"\r\n                            data-job-target=\"requirements\"\r\n                        >\r\n                            <i\r\n                                class=\"fa-solid fa-clipboard-check\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n\r\n                            <span>Requirements<\/span>\r\n\r\n                            <i\r\n                                class=\"fa-solid fa-chevron-right pv-job__chevron\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n                        <\/a>\r\n                    <\/li>\r\n\r\n                    <li>\r\n                        <a\r\n                            href=\"#pv-job-detail\"\r\n                            data-job-target=\"process\"\r\n                        >\r\n                            <i\r\n                                class=\"fa-solid fa-file-signature\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n\r\n                            <span>Application Process<\/span>\r\n\r\n                            <i\r\n                                class=\"fa-solid fa-chevron-right pv-job__chevron\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n                        <\/a>\r\n                    <\/li>\r\n\r\n                    <li>\r\n                        <a\r\n                            href=\"#application-form\"\r\n                            data-job-form-link\r\n                        >\r\n                            <i\r\n                                class=\"fa-solid fa-file-arrow-up\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n\r\n                            <span>Application Form<\/span>\r\n\r\n                            <i\r\n                                class=\"fa-solid fa-chevron-right pv-job__chevron\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n                        <\/a>\r\n                    <\/li>\r\n\r\n                <\/ul>\r\n\r\n                <a\r\n                    class=\"pv-job__side-cta\"\r\n                    href=\"#application-form\"\r\n                    data-job-form-link\r\n                >\r\n                    Apply Now\r\n\r\n                    <i\r\n                        class=\"fa-solid fa-arrow-right\"\r\n                        aria-hidden=\"true\"\r\n                    ><\/i>\r\n                <\/a>\r\n\r\n            <\/nav>\r\n\r\n\r\n            <!-- CONTACT INFORMATION -->\r\n\r\n            <div class=\"pv-job__contact\">\r\n\r\n                <h3>\r\n                    <i\r\n                        class=\"fa-solid fa-address-card\"\r\n                        aria-hidden=\"true\"\r\n                    ><\/i>\r\n\r\n                    Contact Information\r\n                <\/h3>\r\n\r\n                <div class=\"pv-job__contact-row\">\r\n\r\n                    <i\r\n                        class=\"fa-solid fa-phone\"\r\n                        aria-hidden=\"true\"\r\n                    ><\/i>\r\n\r\n                    <div>\r\n                        <small>Telephone<\/small>\r\n\r\n                        <a href=\"tel:+84812151220\">\r\n                            0812151220\r\n                        <\/a>\r\n                    <\/div>\r\n\r\n                <\/div>\r\n\r\n                <div class=\"pv-job__contact-row\">\r\n\r\n                    <i\r\n                        class=\"fa-solid fa-location-dot\"\r\n                        aria-hidden=\"true\"\r\n                    ><\/i>\r\n\r\n                    <div>\r\n                        <small>Address<\/small>\r\n\r\n                        <p>162 Nguy\u1ec5n Duy Trinh, \u0110\u00e0 N\u1eb5ng<\/p>\r\n                    <\/div>\r\n\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n        <\/aside>\r\n\r\n\r\n        <!-- ==========================================\r\n             02. MAIN CONTENT\r\n             CARDS + DETAILS + FORM\r\n        =========================================== -->\r\n\r\n        <div class=\"pv-job__main\">\r\n\r\n            <!-- CAREER CARDS -->\r\n\r\n            <div\r\n                class=\"pv-job__cards\"\r\n                aria-label=\"Career information\"\r\n            >\r\n\r\n                <!-- CARD 1 -->\r\n\r\n                <article class=\"pv-job__card\">\r\n\r\n                    <img decoding=\"async\"\r\n                        src=\"https:\/\/images.pexels.com\/photos\/7964249\/pexels-photo-7964249.jpeg?auto=compress&amp;cs=tinysrgb&amp;w=1000\"\r\n                        alt=\"Colleagues working together\"\r\n                        loading=\"lazy\"\r\n                    >\r\n\r\n                    <div class=\"pv-job__card-body\">\r\n\r\n                        <span class=\"pv-job__card-icon\">\r\n                            <i\r\n                                class=\"fa-solid fa-people-group\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n                        <\/span>\r\n\r\n                        <h3>Join Our Team<\/h3>\r\n\r\n                        <p>\r\n                            Work with a collaborative team\r\n                            and grow professionally.\r\n                        <\/p>\r\n\r\n                        <a\r\n                            href=\"#pv-job-detail\"\r\n                            data-job-target=\"team\"\r\n                        >\r\n                            Learn More\r\n\r\n                            <i\r\n                                class=\"fa-solid fa-arrow-right\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n                        <\/a>\r\n\r\n                    <\/div>\r\n                <\/article>\r\n\r\n\r\n                <!-- CARD 2 -->\r\n\r\n                <article class=\"pv-job__card\">\r\n\r\n                    <img decoding=\"async\"\r\n                        src=\"https:\/\/images.pexels.com\/photos\/8730981\/pexels-photo-8730981.jpeg?auto=compress&amp;cs=tinysrgb&amp;w=1000\"\r\n                        alt=\"Professional consultation\"\r\n                        loading=\"lazy\"\r\n                    >\r\n\r\n                    <div class=\"pv-job__card-body\">\r\n\r\n                        <span class=\"pv-job__card-icon\">\r\n                            <i\r\n                                class=\"fa-solid fa-user-check\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n                        <\/span>\r\n\r\n                        <h3>Requirements<\/h3>\r\n\r\n                        <p>\r\n                            Review the qualifications and\r\n                            experience needed to apply.\r\n                        <\/p>\r\n\r\n                        <a\r\n                            href=\"#pv-job-detail\"\r\n                            data-job-target=\"requirements\"\r\n                        >\r\n                            Learn More\r\n\r\n                            <i\r\n                                class=\"fa-solid fa-arrow-right\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n                        <\/a>\r\n\r\n                    <\/div>\r\n                <\/article>\r\n\r\n\r\n                <!-- CARD 3 -->\r\n\r\n                <article class=\"pv-job__card\">\r\n\r\n                    <img decoding=\"async\"\r\n                        src=\"https:\/\/images.pexels.com\/photos\/7643786\/pexels-photo-7643786.jpeg?auto=compress&amp;cs=tinysrgb&amp;w=1000\"\r\n                        alt=\"Discussing application documents\"\r\n                        loading=\"lazy\"\r\n                    >\r\n\r\n                    <div class=\"pv-job__card-body\">\r\n\r\n                        <span class=\"pv-job__card-icon\">\r\n                            <i\r\n                                class=\"fa-solid fa-file-circle-check\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n                        <\/span>\r\n\r\n                        <h3>Application Process<\/h3>\r\n\r\n                        <p>\r\n                            Learn how to prepare and\r\n                            submit your application.\r\n                        <\/p>\r\n\r\n                        <a\r\n                            href=\"#pv-job-detail\"\r\n                            data-job-target=\"process\"\r\n                        >\r\n                            Learn More\r\n\r\n                            <i\r\n                                class=\"fa-solid fa-arrow-right\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n                        <\/a>\r\n\r\n                    <\/div>\r\n                <\/article>\r\n\r\n            <\/div>\r\n\r\n\r\n            <!-- ======================================\r\n                 03. CAREER DETAIL PANELS\r\n            ======================================= -->\r\n\r\n            <div\r\n                class=\"pv-job__details\"\r\n                id=\"pv-job-detail\"\r\n            >\r\n\r\n                <!-- JOIN OUR TEAM -->\r\n\r\n                <section\r\n                    class=\"pv-job__panel\"\r\n                    data-job-panel=\"team\"\r\n                    aria-labelledby=\"pv-job-team-title\"\r\n                >\r\n\r\n                    <span class=\"pv-job__badge\">\r\n                        <i\r\n                            class=\"fa-solid fa-briefcase\"\r\n                            aria-hidden=\"true\"\r\n                        ><\/i>\r\n                        Career\r\n                    <\/span>\r\n\r\n                    <h2 id=\"pv-job-team-title\">\r\n                        Join Our Team\r\n                    <\/h2>\r\n\r\n                    <p class=\"pv-job__lead\">\r\n                        At Psychologist Vietnam, you will\r\n                        become part of a growing mental\r\n                        healthcare organization in Vietnam\r\n                        with broad opportunities for career\r\n                        advancement. We are a collaborative\r\n                        team where experienced professionals\r\n                        work together to apply therapeutic\r\n                        methods and continuously enhance\r\n                        their expertise.\r\n                    <\/p>\r\n\r\n                    <div class=\"pv-job__detail-grid\">\r\n\r\n                        <div class=\"pv-job__info\">\r\n\r\n                            <h3>\r\n                                <i\r\n                                    class=\"fa-solid fa-star\"\r\n                                    aria-hidden=\"true\"\r\n                                ><\/i>\r\n                                Why Join Us\r\n                            <\/h3>\r\n\r\n                            <ul>\r\n                                <li>Competitive compensation package<\/li>\r\n                                <li>Comfortable working conditions<\/li>\r\n                                <li>Independence with supportive supervision<\/li>\r\n                                <li>\r\n                                    Well-equipped facilities\r\n                                    and growth opportunities\r\n                                <\/li>\r\n                            <\/ul>\r\n\r\n                        <\/div>\r\n\r\n                        <img decoding=\"async\"\r\n                            src=\"https:\/\/psychologistvietnam.com\/wp-content\/uploads\/2025\/08\/Image-1.jpg\"\r\n                            alt=\"Psychologist Vietnam working environment\"\r\n                            loading=\"lazy\"\r\n                        >\r\n\r\n                    <\/div>\r\n\r\n                    <div class=\"pv-job__detail-footer\">\r\n\r\n                        <p>\r\n                            <i\r\n                                class=\"fa-solid fa-heart\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n\r\n                            We welcome passionate and dedicated\r\n                            therapists who want to support\r\n                            their colleagues.\r\n                        <\/p>\r\n\r\n                        <a\r\n                            class=\"pv-job__button\"\r\n                            href=\"#application-form\"\r\n                            data-job-form-link\r\n                        >\r\n                            Apply Now\r\n                            <i\r\n                                class=\"fa-solid fa-arrow-right\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n                        <\/a>\r\n\r\n                    <\/div>\r\n                <\/section>\r\n\r\n\r\n                <!-- REQUIREMENTS -->\r\n\r\n                <section\r\n                    class=\"pv-job__panel\"\r\n                    data-job-panel=\"requirements\"\r\n                    aria-labelledby=\"pv-job-requirements-title\"\r\n                    hidden\r\n                >\r\n\r\n                    <span class=\"pv-job__badge\">\r\n                        <i\r\n                            class=\"fa-solid fa-briefcase\"\r\n                            aria-hidden=\"true\"\r\n                        ><\/i>\r\n                        Career\r\n                    <\/span>\r\n\r\n                    <h2 id=\"pv-job-requirements-title\">\r\n                        Requirements\r\n                    <\/h2>\r\n\r\n                    <p class=\"pv-job__lead\">\r\n                        At least a master\u2019s degree in a field\r\n                        such as Psychology, Child Psychology,\r\n                        Speech Pathology, Counseling, or\r\n                        Coaching is expected. We look for\r\n                        responsible applicants with relevant\r\n                        experience who can handle emotionally\r\n                        demanding situations.\r\n                    <\/p>\r\n\r\n                    <div class=\"pv-job__detail-grid\">\r\n\r\n                        <div class=\"pv-job__info\">\r\n\r\n                            <h3>\r\n                                <i\r\n                                    class=\"fa-solid fa-graduation-cap\"\r\n                                    aria-hidden=\"true\"\r\n                                ><\/i>\r\n                                Required Qualifications\r\n                            <\/h3>\r\n\r\n                            <ul>\r\n                                <li>\r\n                                    At least 2 years of relevant\r\n                                    experience in psychology\r\n                                <\/li>\r\n                                <li>\r\n                                    Strong responsibility and\r\n                                    ability to work independently\r\n                                <\/li>\r\n                                <li>\r\n                                    Ability to manage emotionally\r\n                                    demanding situations\r\n                                <\/li>\r\n                                <li>\r\n                                    Clear criminal record and\r\n                                    relevant documentation\r\n                                <\/li>\r\n                            <\/ul>\r\n\r\n                        <\/div>\r\n\r\n                        <img decoding=\"async\"\r\n                            src=\"https:\/\/psychologistvietnam.com\/wp-content\/uploads\/2025\/08\/Image-1.jpg\"\r\n                            alt=\"Professional qualifications\"\r\n                            loading=\"lazy\"\r\n                        >\r\n\r\n                    <\/div>\r\n\r\n                    <div class=\"pv-job__detail-footer\">\r\n\r\n                        <p>\r\n                            <i\r\n                                class=\"fa-solid fa-circle-info\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n\r\n                            Applicants should provide proof of\r\n                            qualifications and other required\r\n                            documents.\r\n                        <\/p>\r\n\r\n                        <a\r\n                            class=\"pv-job__button\"\r\n                            href=\"#application-form\"\r\n                            data-job-form-link\r\n                        >\r\n                            Apply Now\r\n                            <i\r\n                                class=\"fa-solid fa-arrow-right\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n                        <\/a>\r\n\r\n                    <\/div>\r\n                <\/section>\r\n\r\n\r\n                <!-- APPLICATION PROCESS -->\r\n\r\n                <section\r\n                    class=\"pv-job__panel\"\r\n                    data-job-panel=\"process\"\r\n                    aria-labelledby=\"pv-job-process-title\"\r\n                    hidden\r\n                >\r\n\r\n                    <span class=\"pv-job__badge\">\r\n                        <i\r\n                            class=\"fa-solid fa-briefcase\"\r\n                            aria-hidden=\"true\"\r\n                        ><\/i>\r\n                        Career\r\n                    <\/span>\r\n\r\n                    <h2 id=\"pv-job-process-title\">\r\n                        Application Process\r\n                    <\/h2>\r\n\r\n                    <p class=\"pv-job__lead\">\r\n                        Employment inquiries and applications\r\n                        are welcomed throughout the year.\r\n                        Prepare your documents and submit them\r\n                        using the form below. Some documents\r\n                        may be provided after our first\r\n                        conversation.\r\n                    <\/p>\r\n\r\n                    <div class=\"pv-job__detail-grid\">\r\n\r\n                        <div class=\"pv-job__info\">\r\n\r\n                            <h3>\r\n                                <i\r\n                                    class=\"fa-solid fa-file-lines\"\r\n                                    aria-hidden=\"true\"\r\n                                ><\/i>\r\n                                Application Documents\r\n                            <\/h3>\r\n\r\n                            <ul>\r\n                                <li>Cover Letter<\/li>\r\n                                <li>Curriculum Vitae (CV)<\/li>\r\n                                <li>\r\n                                    Relevant qualifications\r\n                                    or certificates\r\n                                <\/li>\r\n                                <li>\r\n                                    Recent photograph,\r\n                                    if not included in the CV\r\n                                <\/li>\r\n                                <li>\r\n                                    Police clearance\r\n                                    (may be supplied later)\r\n                                <\/li>\r\n                            <\/ul>\r\n\r\n                        <\/div>\r\n\r\n                        <img decoding=\"async\"\r\n                            src=\"https:\/\/psychologistvietnam.com\/wp-content\/uploads\/2025\/08\/Image-1.jpg\"\r\n                            alt=\"Preparing an application\"\r\n                            loading=\"lazy\"\r\n                        >\r\n\r\n                    <\/div>\r\n\r\n                    <div class=\"pv-job__detail-footer\">\r\n\r\n                        <p>\r\n                            <i\r\n                                class=\"fa-solid fa-circle-info\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n\r\n                            Police clearance may be submitted\r\n                            after the first exchange, but is\r\n                            required for employment.\r\n                        <\/p>\r\n\r\n                        <a\r\n                            class=\"pv-job__button\"\r\n                            href=\"#application-form\"\r\n                            data-job-form-link\r\n                        >\r\n                            Apply Now\r\n                            <i\r\n                                class=\"fa-solid fa-arrow-right\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n                        <\/a>\r\n\r\n                    <\/div>\r\n                <\/section>\r\n\r\n            <\/div>\r\n\r\n\r\n            <!-- ======================================\r\n                 04. COMPACT APPLICATION FORM\r\n\r\n                 Important:\r\n                 INSIDE .pv-job__main\r\n            ======================================= -->\r\n\r\n            <section\r\n                class=\"pv-job__application\"\r\n                id=\"application-form\"\r\n                aria-labelledby=\"pv-job-form-title\"\r\n            >\r\n\r\n                <header class=\"pv-job__form-heading\">\r\n\r\n                    <span class=\"pv-job__badge\">\r\n                        <i\r\n                            class=\"fa-solid fa-paper-plane\"\r\n                            aria-hidden=\"true\"\r\n                        ><\/i>\r\n                        Recruitment\r\n                    <\/span>\r\n\r\n                    <h2 id=\"pv-job-form-title\">\r\n                        Application Form\r\n                    <\/h2>\r\n\r\n                    <p>\r\n                        Send us your details and documents.\r\n                        Fields marked * are required.\r\n                    <\/p>\r\n\r\n                <\/header>\r\n\r\n\r\n                <form\r\n                    id=\"pv-job-form\"\r\n                    method=\"post\"\r\n                    enctype=\"multipart\/form-data\"\r\n                >\r\n\r\n                    <!-- PERSONAL INFORMATION -->\r\n\r\n                    <div class=\"pv-job__fields\">\r\n\r\n                        <div class=\"pv-job__field\">\r\n\r\n                            <label for=\"pvjob-name\">\r\n                                Full Name <b>*<\/b>\r\n                            <\/label>\r\n\r\n                            <input\r\n                                id=\"pvjob-name\"\r\n                                name=\"full_name\"\r\n                                type=\"text\"\r\n                                autocomplete=\"name\"\r\n                                minlength=\"2\"\r\n                                maxlength=\"120\"\r\n                                placeholder=\"Your full name\"\r\n                                required\r\n                            >\r\n\r\n                        <\/div>\r\n\r\n                        <div class=\"pv-job__field\">\r\n\r\n                            <label for=\"pvjob-email\">\r\n                                Email Address <b>*<\/b>\r\n                            <\/label>\r\n\r\n                            <input\r\n                                id=\"pvjob-email\"\r\n                                name=\"email\"\r\n                                type=\"email\"\r\n                                autocomplete=\"email\"\r\n                                maxlength=\"180\"\r\n                                placeholder=\"name@example.com\"\r\n                                required\r\n                            >\r\n\r\n                        <\/div>\r\n\r\n                        <div class=\"pv-job__field\">\r\n\r\n                            <label for=\"pvjob-phone\">\r\n                                Phone Number <b>*<\/b>\r\n                            <\/label>\r\n\r\n                            <input\r\n                                id=\"pvjob-phone\"\r\n                                name=\"phone\"\r\n                                type=\"tel\"\r\n                                autocomplete=\"tel\"\r\n                                minlength=\"6\"\r\n                                maxlength=\"60\"\r\n                                placeholder=\"Your phone number\"\r\n                                required\r\n                            >\r\n\r\n                        <\/div>\r\n\r\n                        <div class=\"pv-job__field\">\r\n\r\n                            <label for=\"pvjob-city\">\r\n                                Current City\r\n                            <\/label>\r\n\r\n                            <input\r\n                                id=\"pvjob-city\"\r\n                                name=\"city\"\r\n                                type=\"text\"\r\n                                maxlength=\"120\"\r\n                                placeholder=\"City \/ Province (optional)\"\r\n                            >\r\n\r\n                        <\/div>\r\n\r\n                    <\/div>\r\n\r\n\r\n                    <!-- REQUIRED DOCUMENTS -->\r\n\r\n                    <h3 class=\"pv-job__section-title\">\r\n                        Required Documents\r\n                    <\/h3>\r\n\r\n                    <p class=\"pv-job__hint\">\r\n                        PDF, DOC, or DOCX. Maximum 4 MB\r\n                        per file and 12 MB in total.\r\n                    <\/p>\r\n\r\n                    <div class=\"pv-job__uploads\">\r\n\r\n                        <div class=\"pv-job__field\">\r\n\r\n                            <label for=\"pvjob-cover\">\r\n                                Cover Letter <b>*<\/b>\r\n                            <\/label>\r\n\r\n                            <input\r\n                                id=\"pvjob-cover\"\r\n                                name=\"cover_letter\"\r\n                                type=\"file\"\r\n                                accept=\".pdf,.doc,.docx\"\r\n                                required\r\n                            >\r\n\r\n                        <\/div>\r\n\r\n                        <div class=\"pv-job__field\">\r\n\r\n                            <label for=\"pvjob-cv\">\r\n                                Curriculum Vitae (CV) <b>*<\/b>\r\n                            <\/label>\r\n\r\n                            <input\r\n                                id=\"pvjob-cv\"\r\n                                name=\"cv\"\r\n                                type=\"file\"\r\n                                accept=\".pdf,.doc,.docx\"\r\n                                required\r\n                            >\r\n\r\n                        <\/div>\r\n\r\n                        <div class=\"pv-job__field\">\r\n\r\n                            <label for=\"pvjob-qual\">\r\n                                Qualifications \/ Certificates <b>*<\/b>\r\n                            <\/label>\r\n\r\n                            <input\r\n                                id=\"pvjob-qual\"\r\n                                name=\"qualifications\"\r\n                                type=\"file\"\r\n                                accept=\".pdf,.doc,.docx\"\r\n                                required\r\n                            >\r\n\r\n                        <\/div>\r\n\r\n                    <\/div>\r\n\r\n\r\n                    <!-- OPTIONAL FIELDS -->\r\n\r\n                    <details class=\"pv-job__optional\">\r\n\r\n                        <summary>\r\n                            <i\r\n                                class=\"fa-solid fa-plus\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n\r\n                            Additional information (optional)\r\n                        <\/summary>\r\n\r\n                        <div class=\"pv-job__optional-body\">\r\n\r\n                            <div class=\"pv-job__field pv-job__field--full\">\r\n\r\n                                <label for=\"pvjob-message\">\r\n                                    Message\r\n                                <\/label>\r\n\r\n                                <textarea\r\n                                    id=\"pvjob-message\"\r\n                                    name=\"message\"\r\n                                    rows=\"3\"\r\n                                    maxlength=\"2500\"\r\n                                    placeholder=\"Anything else you would like us to know?\"\r\n                                ><\/textarea>\r\n\r\n                            <\/div>\r\n\r\n                            <div class=\"pv-job__field\">\r\n\r\n                                <label for=\"pvjob-photo\">\r\n                                    Recent Photograph\r\n                                <\/label>\r\n\r\n                                <input\r\n                                    id=\"pvjob-photo\"\r\n                                    name=\"photo\"\r\n                                    type=\"file\"\r\n                                    accept=\".jpg,.jpeg,.png\"\r\n                                >\r\n\r\n                            <\/div>\r\n\r\n                            <div class=\"pv-job__field\">\r\n\r\n                                <label for=\"pvjob-police\">\r\n                                    Police Clearance\r\n                                <\/label>\r\n\r\n                                <input\r\n                                    id=\"pvjob-police\"\r\n                                    name=\"police_clearance\"\r\n                                    type=\"file\"\r\n                                    accept=\".pdf,.doc,.docx,.jpg,.jpeg,.png\"\r\n                                >\r\n\r\n                            <\/div>\r\n\r\n                        <\/div>\r\n\r\n                    <\/details>\r\n\r\n\r\n                    <!-- HONEYPOT -->\r\n\r\n                    <div\r\n                        class=\"pv-job__trap\"\r\n                        aria-hidden=\"true\"\r\n                    >\r\n\r\n                        <label>\r\n                            Website\r\n\r\n                            <input\r\n                                type=\"text\"\r\n                                name=\"company_website\"\r\n                                tabindex=\"-1\"\r\n                                autocomplete=\"off\"\r\n                            >\r\n                        <\/label>\r\n\r\n                    <\/div>\r\n\r\n\r\n                    <!-- PRIVACY CONSENT -->\r\n\r\n                    <label class=\"pv-job__consent\">\r\n\r\n                        <input\r\n                            type=\"checkbox\"\r\n                            name=\"consent\"\r\n                            value=\"yes\"\r\n                            required\r\n                        >\r\n\r\n                        <span>\r\n                            I agree that Psychologist Vietnam\r\n                            may use my information and documents\r\n                            for recruitment purposes and contact\r\n                            me about my application. <b>*<\/b>\r\n                        <\/span>\r\n\r\n                    <\/label>\r\n\r\n\r\n                    <!-- SUBMIT -->\r\n\r\n                    <div class=\"pv-job__submit-row\">\r\n\r\n                        <button\r\n                            type=\"submit\"\r\n                            class=\"pv-job__button pv-job__submit\"\r\n                            disabled\r\n                        >\r\n\r\n                            <span class=\"pv-job__submit-label\">\r\n                                Submit Application\r\n                            <\/span>\r\n\r\n                            <i\r\n                                class=\"fa-solid fa-arrow-right\"\r\n                                aria-hidden=\"true\"\r\n                            ><\/i>\r\n\r\n                        <\/button>\r\n\r\n                        <small>\r\n                            Your documents are sent privately\r\n                            to our recruitment mailbox.\r\n                        <\/small>\r\n\r\n                    <\/div>\r\n\r\n                    <p\r\n                        class=\"pv-job__status\"\r\n                        id=\"pv-job-status\"\r\n                        role=\"status\"\r\n                        aria-live=\"polite\"\r\n                    ><\/p>\r\n\r\n                <\/form>\r\n\r\n            <\/section>\r\n\r\n        <\/div>\r\n        <!-- END MAIN CONTENT -->\r\n\r\n    <\/div>\r\n    <!-- END LAYOUT -->\r\n\r\n\r\n    <!-- ==========================================\r\n         05. SUCCESS POPUP\r\n    =========================================== -->\r\n\r\n    <div\r\n        class=\"pv-job__modal\"\r\n        id=\"pv-job-success\"\r\n        hidden\r\n    >\r\n\r\n        <div\r\n            class=\"pv-job__modal-backdrop\"\r\n            data-job-close\r\n        ><\/div>\r\n\r\n        <div\r\n            class=\"pv-job__modal-dialog\"\r\n            role=\"dialog\"\r\n            aria-modal=\"true\"\r\n            aria-labelledby=\"pv-job-success-title\"\r\n            aria-describedby=\"pv-job-success-text\"\r\n            tabindex=\"-1\"\r\n        >\r\n\r\n            <button\r\n                class=\"pv-job__modal-x\"\r\n                type=\"button\"\r\n                data-job-close\r\n                aria-label=\"Close confirmation\"\r\n            >\r\n                <i\r\n                    class=\"fa-solid fa-xmark\"\r\n                    aria-hidden=\"true\"\r\n                ><\/i>\r\n            <\/button>\r\n\r\n            <span class=\"pv-job__success-icon\">\r\n                <i\r\n                    class=\"fa-solid fa-check\"\r\n                    aria-hidden=\"true\"\r\n                ><\/i>\r\n            <\/span>\r\n\r\n            <h2 id=\"pv-job-success-title\">\r\n                Application Submitted!\r\n            <\/h2>\r\n\r\n            <p id=\"pv-job-success-text\">\r\n                Thank you for applying to Psychologist\r\n                Vietnam. Your application has been received.\r\n                We will contact you if further information\r\n                is needed.\r\n            <\/p>\r\n\r\n            <button\r\n                class=\"pv-job__button pv-job__modal-done\"\r\n                type=\"button\"\r\n                data-job-close\r\n            >\r\n                Done\r\n            <\/button>\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n<\/section>\r\n\r\n\r\n<!-- ==============================================\r\n     06. JAVASCRIPT\r\n     Page-specific controller\r\n     Independent from Universal JS v1.1\r\n=============================================== -->\r\n\r\n\r\n<script>\r\n\/* ============================================================\r\n   PSYCHOLOGIST VIETNAM\r\n   JOB OPENINGS CONTROLLER v2.1.1\r\n\r\n   Features:\r\n   01. Initialize Job Openings\r\n   02. Career Panel Navigation\r\n   03. Sidebar Active State\r\n   04. Smooth Scrolling\r\n   05. Success Popup\r\n   06. Popup Close \/ Escape \/ Backdrop\r\n   07. Keyboard Accessibility\r\n   08. WordPress AJAX\r\n   09. Form Session Initialization\r\n   10. File Validation\r\n   11. Application Submission\r\n   12. Error Handling\r\n\r\n   Fixes:\r\n   - Popup hidden when page loads\r\n   - Done and X buttons work\r\n   - Click outside closes popup\r\n   - Escape closes popup\r\n   - Popup only opens after successful submission\r\n\r\n   Backend AJAX Actions:\r\n   - pv_job_v21_bootstrap\r\n   - pv_job_v21_submit\r\n\r\n   Does NOT affect Universal Service Controller v1.1.\r\n============================================================ *\/\r\n\r\n(function () {\r\n    'use strict';\r\n\r\n\r\n    \/* ========================================================\r\n       01. INITIALIZE\r\n    ======================================================== *\/\r\n\r\n    function initJobOpenings() {\r\n\r\n        const root = document.getElementById(\r\n            'pv-job-openings'\r\n        );\r\n\r\n        if (!root) {\r\n            return;\r\n        }\r\n\r\n        \/\/ Prevent duplicate initialization.\r\n        if (root.dataset.jobReady === '1') {\r\n            return;\r\n        }\r\n\r\n\r\n        \/* ----------------------------------------------------\r\n           Required Elements\r\n        ---------------------------------------------------- *\/\r\n\r\n        const form = root.querySelector(\r\n            '#pv-job-form'\r\n        );\r\n\r\n        const modal = root.querySelector(\r\n            '#pv-job-success'\r\n        );\r\n\r\n        const detail = root.querySelector(\r\n            '#pv-job-detail'\r\n        );\r\n\r\n        const application = root.querySelector(\r\n            '#application-form'\r\n        );\r\n\r\n        if (\r\n            !form ||\r\n            !modal ||\r\n            !detail ||\r\n            !application\r\n        ) {\r\n            console.error(\r\n                'PV Job Openings: Required elements are missing.'\r\n            );\r\n\r\n            return;\r\n        }\r\n\r\n\r\n        \/* ----------------------------------------------------\r\n           Get Form Elements\r\n        ---------------------------------------------------- *\/\r\n\r\n        const submitButton = form.querySelector(\r\n            'button[type=\"submit\"]'\r\n        );\r\n\r\n        const submitLabel = form.querySelector(\r\n            '.pv-job__submit-label'\r\n        );\r\n\r\n        const statusMessage = root.querySelector(\r\n            '#pv-job-status'\r\n        );\r\n\r\n        const modalDialog = modal.querySelector(\r\n            '[role=\"dialog\"]'\r\n        );\r\n\r\n        if (\r\n            !submitButton ||\r\n            !submitLabel ||\r\n            !statusMessage ||\r\n            !modalDialog\r\n        ) {\r\n            console.error(\r\n                'PV Job Openings: Form elements are missing.'\r\n            );\r\n\r\n            return;\r\n        }\r\n\r\n\r\n        \/* ----------------------------------------------------\r\n           Career Panels and Navigation\r\n        ---------------------------------------------------- *\/\r\n\r\n        const panels = Array.from(\r\n            root.querySelectorAll(\r\n                '[data-job-panel]'\r\n            )\r\n        );\r\n\r\n        const navigationLinks = Array.from(\r\n            root.querySelectorAll(\r\n                '.pv-job__nav a'\r\n            )\r\n        );\r\n\r\n\r\n        \/* ----------------------------------------------------\r\n           AJAX Endpoint\r\n        ---------------------------------------------------- *\/\r\n\r\n        const ajaxUrl = new URL(\r\n            root.dataset.ajaxUrl ||\r\n                '\/wp-admin\/admin-ajax.php',\r\n            window.location.origin\r\n        );\r\n\r\n\r\n        \/* ----------------------------------------------------\r\n           Accessibility\r\n        ---------------------------------------------------- *\/\r\n\r\n        const reducedMotion = window.matchMedia(\r\n            '(prefers-reduced-motion: reduce)'\r\n        );\r\n\r\n\r\n        \/* ----------------------------------------------------\r\n           Internal State\r\n        ---------------------------------------------------- *\/\r\n\r\n        let session = null;\r\n\r\n        let sessionTime = 0;\r\n\r\n        let isSending = false;\r\n\r\n        let previousFocus = null;\r\n\r\n\r\n        \/* ====================================================\r\n           02. FIX POPUP INITIAL STATE\r\n\r\n           IMPORTANT:\r\n           Always hide the popup on initial page load.\r\n        ==================================================== *\/\r\n\r\n        modal.hidden = true;\r\n\r\n        \/\/ Inline display prevents old CSS from\r\n        \/\/ accidentally showing the popup.\r\n        modal.style.display = 'none';\r\n\r\n        \/\/ Remove stale scroll lock.\r\n        document.body.classList.remove(\r\n            'pv-job-modal-open'\r\n        );\r\n\r\n        \/*\r\n         * Move popup directly to document.body.\r\n         *\r\n         * Prevents clipping by Elementor containers\r\n         * using overflow:hidden or transforms.\r\n         *\/\r\n\r\n        if (modal.parentElement !== document.body) {\r\n\r\n            document.body.appendChild(modal);\r\n\r\n        }\r\n\r\n        \/\/ Mark initialization complete.\r\n        root.dataset.jobReady = '1';\r\n\r\n\r\n\r\n        \/* ====================================================\r\n           03. SIDEBAR ACTIVE STATE\r\n        ==================================================== *\/\r\n\r\n        function setActiveNavigation(key) {\r\n\r\n            navigationLinks.forEach(function (link) {\r\n\r\n                let isActive = false;\r\n\r\n\r\n                \/* --------------------------------------------\r\n                   Application Form\r\n                -------------------------------------------- *\/\r\n\r\n                if (key === 'form') {\r\n\r\n                    isActive = link.hasAttribute(\r\n                        'data-job-form-link'\r\n                    );\r\n\r\n                } else {\r\n\r\n                    \/* ----------------------------------------\r\n                       Career Panels\r\n                    ---------------------------------------- *\/\r\n\r\n                    isActive =\r\n                        link.dataset.jobTarget === key;\r\n\r\n                }\r\n\r\n\r\n                \/* --------------------------------------------\r\n                   Update Active Class\r\n                -------------------------------------------- *\/\r\n\r\n                const listItem = link.closest('li');\r\n\r\n                if (listItem) {\r\n\r\n                    listItem.classList.toggle(\r\n                        'is-active',\r\n                        isActive\r\n                    );\r\n\r\n                }\r\n\r\n\r\n                \/* --------------------------------------------\r\n                   Accessibility\r\n                -------------------------------------------- *\/\r\n\r\n                if (isActive) {\r\n\r\n                    link.setAttribute(\r\n                        'aria-current',\r\n                        key === 'form'\r\n                            ? 'location'\r\n                            : 'true'\r\n                    );\r\n\r\n                } else {\r\n\r\n                    link.removeAttribute(\r\n                        'aria-current'\r\n                    );\r\n\r\n                }\r\n\r\n            });\r\n\r\n        }\r\n\r\n\r\n\r\n        \/* ====================================================\r\n           04. SMOOTH SCROLLING\r\n        ==================================================== *\/\r\n\r\n        function scrollToBlock(element) {\r\n\r\n            if (!element) {\r\n                return;\r\n            }\r\n\r\n            element.scrollIntoView({\r\n\r\n                behavior: reducedMotion.matches\r\n                    ? 'auto'\r\n                    : 'smooth',\r\n\r\n                block: 'start'\r\n\r\n            });\r\n\r\n        }\r\n\r\n\r\n\r\n        \/* ====================================================\r\n           05. SWITCH CAREER PANELS\r\n        ==================================================== *\/\r\n\r\n        function showCareerPanel(key, shouldScroll) {\r\n\r\n            const selectedPanel = panels.find(\r\n                function (panel) {\r\n\r\n                    return (\r\n                        panel.dataset.jobPanel === key\r\n                    );\r\n\r\n                }\r\n            );\r\n\r\n\r\n            if (!selectedPanel) {\r\n                return;\r\n            }\r\n\r\n\r\n            \/* --------------------------------------------\r\n               Show Selected Panel\r\n            -------------------------------------------- *\/\r\n\r\n            panels.forEach(function (panel) {\r\n\r\n                panel.hidden = (\r\n                    panel !== selectedPanel\r\n                );\r\n\r\n            });\r\n\r\n\r\n            \/* --------------------------------------------\r\n               Update Sidebar\r\n            -------------------------------------------- *\/\r\n\r\n            setActiveNavigation(key);\r\n\r\n\r\n            \/* --------------------------------------------\r\n               Store Current Panel\r\n            -------------------------------------------- *\/\r\n\r\n            root.dataset.activePanel = key;\r\n\r\n\r\n            \/* --------------------------------------------\r\n               Scroll to Detail\r\n            -------------------------------------------- *\/\r\n\r\n            if (shouldScroll) {\r\n\r\n                window.requestAnimationFrame(\r\n                    function () {\r\n\r\n                        scrollToBlock(detail);\r\n\r\n                    }\r\n                );\r\n\r\n            }\r\n\r\n        }\r\n\r\n\r\n\r\n        \/* ====================================================\r\n           06. HANDLE PAGE NAVIGATION\r\n        ==================================================== *\/\r\n\r\n        root.addEventListener(\r\n            'click',\r\n            function (event) {\r\n\r\n                const target = event.target;\r\n\r\n                if (!(target instanceof Element)) {\r\n                    return;\r\n                }\r\n\r\n\r\n                \/* --------------------------------------------\r\n                   Career Panel Navigation\r\n                -------------------------------------------- *\/\r\n\r\n                const panelLink = target.closest(\r\n                    'a[data-job-target]'\r\n                );\r\n\r\n                if (\r\n                    panelLink &&\r\n                    root.contains(panelLink)\r\n                ) {\r\n\r\n                    event.preventDefault();\r\n\r\n                    const key = panelLink.getAttribute(\r\n                        'data-job-target'\r\n                    );\r\n\r\n                    if (key) {\r\n\r\n                        showCareerPanel(\r\n                            key,\r\n                            true\r\n                        );\r\n\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n\r\n                \/* --------------------------------------------\r\n                   Application Form Navigation\r\n                -------------------------------------------- *\/\r\n\r\n                const formLink = target.closest(\r\n                    'a[data-job-form-link]'\r\n                );\r\n\r\n                if (\r\n                    formLink &&\r\n                    root.contains(formLink)\r\n                ) {\r\n\r\n                    event.preventDefault();\r\n\r\n                    setActiveNavigation('form');\r\n\r\n                    scrollToBlock(application);\r\n\r\n                    return;\r\n                }\r\n\r\n            }\r\n        );\r\n\r\n\r\n        \/* ----------------------------------------------------\r\n           Default Panel\r\n        ---------------------------------------------------- *\/\r\n\r\n        showCareerPanel(\r\n            'team',\r\n            false\r\n        );\r\n\r\n\r\n        \/* ----------------------------------------------------\r\n           Handle Direct Form URL\r\n        ---------------------------------------------------- *\/\r\n\r\n        if (\r\n            window.location.hash ===\r\n            '#application-form'\r\n        ) {\r\n\r\n            setActiveNavigation('form');\r\n\r\n        }\r\n\r\n\r\n\r\n        \/* ====================================================\r\n           07. OPEN SUCCESS POPUP\r\n\r\n           Called only after successful AJAX submission.\r\n        ==================================================== *\/\r\n\r\n        function openSuccessPopup() {\r\n\r\n            \/\/ Remember previously focused element.\r\n            previousFocus = document.activeElement;\r\n\r\n\r\n            \/* --------------------------------------------\r\n               Display Popup\r\n            -------------------------------------------- *\/\r\n\r\n            modal.hidden = false;\r\n\r\n            modal.style.display = 'grid';\r\n\r\n\r\n            \/* --------------------------------------------\r\n               Lock Background Scrolling\r\n            -------------------------------------------- *\/\r\n\r\n            document.body.classList.add(\r\n                'pv-job-modal-open'\r\n            );\r\n\r\n\r\n            \/* --------------------------------------------\r\n               Move Focus Into Popup\r\n            -------------------------------------------- *\/\r\n\r\n            modalDialog.focus();\r\n\r\n        }\r\n\r\n\r\n\r\n        \/* ====================================================\r\n           08. CLOSE SUCCESS POPUP\r\n        ==================================================== *\/\r\n\r\n        function closeSuccessPopup() {\r\n\r\n            \/* --------------------------------------------\r\n               Hide Popup\r\n            -------------------------------------------- *\/\r\n\r\n            modal.hidden = true;\r\n\r\n            modal.style.display = 'none';\r\n\r\n\r\n            \/* --------------------------------------------\r\n               Restore Background Scrolling\r\n            -------------------------------------------- *\/\r\n\r\n            document.body.classList.remove(\r\n                'pv-job-modal-open'\r\n            );\r\n\r\n\r\n            \/* --------------------------------------------\r\n               Restore Focus\r\n            -------------------------------------------- *\/\r\n\r\n            if (\r\n                previousFocus &&\r\n                previousFocus.isConnected &&\r\n                typeof previousFocus.focus === 'function'\r\n            ) {\r\n\r\n                previousFocus.focus();\r\n\r\n            }\r\n\r\n            previousFocus = null;\r\n\r\n        }\r\n\r\n\r\n\r\n        \/* ====================================================\r\n           09. CLOSE POPUP BY DONE \/ X \/ BACKDROP\r\n        ==================================================== *\/\r\n\r\n        modal.addEventListener(\r\n            'click',\r\n            function (event) {\r\n\r\n                const target = event.target;\r\n\r\n                if (!(target instanceof Element)) {\r\n                    return;\r\n                }\r\n\r\n                const closeButton = target.closest(\r\n                    '[data-job-close]'\r\n                );\r\n\r\n                if (!closeButton) {\r\n                    return;\r\n                }\r\n\r\n                event.preventDefault();\r\n\r\n                closeSuccessPopup();\r\n\r\n            }\r\n        );\r\n\r\n\r\n\r\n        \/* ====================================================\r\n           10. KEYBOARD ACCESSIBILITY\r\n        ==================================================== *\/\r\n\r\n        document.addEventListener(\r\n            'keydown',\r\n            function (event) {\r\n\r\n                \/\/ Ignore keyboard handling when popup is closed.\r\n                if (modal.hidden) {\r\n                    return;\r\n                }\r\n\r\n\r\n                \/* --------------------------------------------\r\n                   Escape Closes Popup\r\n                -------------------------------------------- *\/\r\n\r\n                if (event.key === 'Escape') {\r\n\r\n                    event.preventDefault();\r\n\r\n                    closeSuccessPopup();\r\n\r\n                    return;\r\n                }\r\n\r\n\r\n                \/* --------------------------------------------\r\n                   Tab Navigation\r\n                -------------------------------------------- *\/\r\n\r\n                if (event.key !== 'Tab') {\r\n                    return;\r\n                }\r\n\r\n\r\n                const focusableElements = Array.from(\r\n                    modal.querySelectorAll(\r\n                        'button:not([disabled]), ' +\r\n                        'a[href], ' +\r\n                        'input:not([disabled]), ' +\r\n                        'select:not([disabled]), ' +\r\n                        'textarea:not([disabled])'\r\n                    )\r\n                ).filter(function (element) {\r\n\r\n                    return element.offsetParent !== null;\r\n\r\n                });\r\n\r\n\r\n                if (!focusableElements.length) {\r\n\r\n                    event.preventDefault();\r\n\r\n                    modalDialog.focus();\r\n\r\n                    return;\r\n                }\r\n\r\n\r\n                const firstElement =\r\n                    focusableElements[0];\r\n\r\n                const lastElement =\r\n                    focusableElements[\r\n                        focusableElements.length - 1\r\n                    ];\r\n\r\n\r\n                \/* --------------------------------------------\r\n                   Shift + Tab\r\n                -------------------------------------------- *\/\r\n\r\n                if (\r\n                    event.shiftKey &&\r\n                    (\r\n                        document.activeElement === firstElement ||\r\n                        document.activeElement === modalDialog\r\n                    )\r\n                ) {\r\n\r\n                    event.preventDefault();\r\n\r\n                    lastElement.focus();\r\n\r\n                    return;\r\n                }\r\n\r\n\r\n                \/* --------------------------------------------\r\n                   Tab\r\n                -------------------------------------------- *\/\r\n\r\n                if (\r\n                    !event.shiftKey &&\r\n                    document.activeElement === lastElement\r\n                ) {\r\n\r\n                    event.preventDefault();\r\n\r\n                    firstElement.focus();\r\n\r\n                    return;\r\n                }\r\n\r\n\r\n                \/* --------------------------------------------\r\n                   Prevent Focus Escaping Popup\r\n                -------------------------------------------- *\/\r\n\r\n                if (\r\n                    !modal.contains(\r\n                        document.activeElement\r\n                    )\r\n                ) {\r\n\r\n                    event.preventDefault();\r\n\r\n                    firstElement.focus();\r\n\r\n                }\r\n\r\n            }\r\n        );\r\n\r\n\r\n\r\n        \/* ====================================================\r\n           11. FORM STATUS MESSAGES\r\n        ==================================================== *\/\r\n\r\n        function setFormStatus(\r\n            text,\r\n            type = ''\r\n        ) {\r\n\r\n            statusMessage.textContent = text;\r\n\r\n            statusMessage.className =\r\n                'pv-job__status' +\r\n                (\r\n                    type\r\n                        ? ' is-' + type\r\n                        : ''\r\n                );\r\n\r\n        }\r\n\r\n\r\n\r\n        \/* ====================================================\r\n           12. WORDPRESS AJAX REQUEST\r\n        ==================================================== *\/\r\n\r\n        async function sendAjaxRequest(\r\n            action,\r\n            formData\r\n        ) {\r\n\r\n            formData.set(\r\n                'action',\r\n                action\r\n            );\r\n\r\n\r\n            const response = await fetch(\r\n                ajaxUrl.href,\r\n                {\r\n                    method: 'POST',\r\n\r\n                    body: formData,\r\n\r\n                    credentials: 'same-origin',\r\n\r\n                    cache: 'no-store'\r\n                }\r\n            );\r\n\r\n\r\n            \/* --------------------------------------------\r\n               Parse JSON Response\r\n            -------------------------------------------- *\/\r\n\r\n            let result;\r\n\r\n            try {\r\n\r\n                result = await response.json();\r\n\r\n            } catch (error) {\r\n\r\n                throw new Error(\r\n                    'The server could not process your request. ' +\r\n                    'Please check the file sizes and try again.'\r\n                );\r\n\r\n            }\r\n\r\n\r\n            \/* --------------------------------------------\r\n               Handle AJAX Errors\r\n            -------------------------------------------- *\/\r\n\r\n            if (\r\n                !response.ok ||\r\n                !result ||\r\n                !result.success\r\n            ) {\r\n\r\n                throw new Error(\r\n                    result?.data?.message ||\r\n                    'Unable to process your application. ' +\r\n                    'Please try again.'\r\n                );\r\n\r\n            }\r\n\r\n\r\n            return result.data;\r\n\r\n        }\r\n\r\n\r\n\r\n        \/* ====================================================\r\n           13. INITIALIZE FORM SESSION\r\n        ==================================================== *\/\r\n\r\n        async function initializeFormSession() {\r\n\r\n            submitButton.disabled = true;\r\n\r\n\r\n            \/* --------------------------------------------\r\n               Request Fresh Token\r\n            -------------------------------------------- *\/\r\n\r\n            const response = await sendAjaxRequest(\r\n                'pv_job_v21_bootstrap',\r\n                new FormData()\r\n            );\r\n\r\n\r\n            \/* --------------------------------------------\r\n               Validate Session\r\n            -------------------------------------------- *\/\r\n\r\n            if (\r\n                !response ||\r\n                !response.nonce ||\r\n                !response.token\r\n            ) {\r\n\r\n                throw new Error(\r\n                    'Unable to initialize the application form.'\r\n                );\r\n\r\n            }\r\n\r\n\r\n            \/* --------------------------------------------\r\n               Store Session\r\n            -------------------------------------------- *\/\r\n\r\n            session = response;\r\n\r\n            sessionTime = Date.now();\r\n\r\n\r\n            \/* --------------------------------------------\r\n               Enable Submit Button\r\n            -------------------------------------------- *\/\r\n\r\n            if (!isSending) {\r\n\r\n                submitButton.disabled = false;\r\n\r\n            }\r\n\r\n        }\r\n\r\n\r\n\r\n        \/* ====================================================\r\n           14. VALIDATE UPLOADED FILES\r\n        ==================================================== *\/\r\n\r\n        function validateFiles() {\r\n\r\n            const allowedDocuments = [\r\n                'pdf',\r\n                'doc',\r\n                'docx'\r\n            ];\r\n\r\n            const allowedImages = [\r\n                'jpg',\r\n                'jpeg',\r\n                'png'\r\n            ];\r\n\r\n\r\n            const maximumFileSize =\r\n                4 * 1024 * 1024;\r\n\r\n            const maximumTotalSize =\r\n                12 * 1024 * 1024;\r\n\r\n\r\n            let totalSize = 0;\r\n\r\n\r\n            \/* --------------------------------------------\r\n               Check Each File\r\n            -------------------------------------------- *\/\r\n\r\n            const fileInputs = form.querySelectorAll(\r\n                'input[type=\"file\"]'\r\n            );\r\n\r\n\r\n            for (const input of fileInputs) {\r\n\r\n                const file = input.files[0];\r\n\r\n                if (!file) {\r\n                    continue;\r\n                }\r\n\r\n\r\n                \/* ----------------------------------------\r\n                   Individual File Size\r\n                ---------------------------------------- *\/\r\n\r\n                if (\r\n                    file.size > maximumFileSize\r\n                ) {\r\n\r\n                    return (\r\n                        'Each file must be 4 MB or smaller.'\r\n                    );\r\n\r\n                }\r\n\r\n\r\n                totalSize += file.size;\r\n\r\n\r\n                \/* ----------------------------------------\r\n                   File Extension\r\n                ---------------------------------------- *\/\r\n\r\n                const extension = (\r\n                    file.name.split('.').pop() || ''\r\n                ).toLowerCase();\r\n\r\n\r\n                let allowedExtensions;\r\n\r\n\r\n                if (input.name === 'photo') {\r\n\r\n                    allowedExtensions =\r\n                        allowedImages;\r\n\r\n                } else if (\r\n                    input.name === 'police_clearance'\r\n                ) {\r\n\r\n                    allowedExtensions = [\r\n                        ...allowedDocuments,\r\n                        ...allowedImages\r\n                    ];\r\n\r\n                } else {\r\n\r\n                    allowedExtensions =\r\n                        allowedDocuments;\r\n\r\n                }\r\n\r\n\r\n                if (\r\n                    !allowedExtensions.includes(\r\n                        extension\r\n                    )\r\n                ) {\r\n\r\n                    return (\r\n                        'Unsupported file format: ' +\r\n                        file.name\r\n                    );\r\n\r\n                }\r\n\r\n            }\r\n\r\n\r\n            \/* --------------------------------------------\r\n               Total Upload Size\r\n            -------------------------------------------- *\/\r\n\r\n            if (\r\n                totalSize > maximumTotalSize\r\n            ) {\r\n\r\n                return (\r\n                    'Total attachments must be 12 MB or less.'\r\n                );\r\n\r\n            }\r\n\r\n\r\n            return '';\r\n\r\n        }\r\n\r\n\r\n\r\n        \/* ====================================================\r\n           15. HANDLE FORM SUBMISSION\r\n        ==================================================== *\/\r\n\r\n        form.addEventListener(\r\n            'submit',\r\n            async function (event) {\r\n\r\n                event.preventDefault();\r\n\r\n\r\n                \/* --------------------------------------------\r\n                   Prevent Multiple Submissions\r\n                -------------------------------------------- *\/\r\n\r\n                if (isSending) {\r\n                    return;\r\n                }\r\n\r\n\r\n                \/* --------------------------------------------\r\n                   Browser Field Validation\r\n                -------------------------------------------- *\/\r\n\r\n                if (!form.reportValidity()) {\r\n                    return;\r\n                }\r\n\r\n\r\n                \/* --------------------------------------------\r\n                   Validate File Uploads\r\n                -------------------------------------------- *\/\r\n\r\n                const fileError = validateFiles();\r\n\r\n\r\n                if (fileError) {\r\n\r\n                    setFormStatus(\r\n                        fileError,\r\n                        'error'\r\n                    );\r\n\r\n                    return;\r\n                }\r\n\r\n\r\n                \/* --------------------------------------------\r\n                   Set Sending State\r\n                -------------------------------------------- *\/\r\n\r\n                isSending = true;\r\n\r\n                submitButton.disabled = true;\r\n\r\n                submitLabel.textContent =\r\n                    'Sending...';\r\n\r\n\r\n                setFormStatus(\r\n                    'Uploading documents and sending ' +\r\n                    'your application...',\r\n                    'info'\r\n                );\r\n\r\n\r\n                \/* ============================================\r\n                   16. SUBMIT TO WORDPRESS\r\n                ============================================ *\/\r\n\r\n                try {\r\n\r\n\r\n                    \/* ----------------------------------------\r\n                       Refresh Expired Session\r\n                    ---------------------------------------- *\/\r\n\r\n                    if (\r\n                        !session ||\r\n                        (\r\n                            Date.now() - sessionTime >\r\n                            20 * 60 * 1000\r\n                        )\r\n                    ) {\r\n\r\n                        await initializeFormSession();\r\n\r\n                    }\r\n\r\n\r\n                    \/* ----------------------------------------\r\n                       Prepare Form Data\r\n                    ---------------------------------------- *\/\r\n\r\n                    const payload = new FormData(form);\r\n\r\n\r\n                    payload.set(\r\n                        'nonce',\r\n                        session.nonce\r\n                    );\r\n\r\n\r\n                    payload.set(\r\n                        'form_token',\r\n                        session.token\r\n                    );\r\n\r\n\r\n                    \/* ----------------------------------------\r\n                       Send Application\r\n                    ---------------------------------------- *\/\r\n\r\n                    await sendAjaxRequest(\r\n                        'pv_job_v21_submit',\r\n                        payload\r\n                    );\r\n\r\n\r\n                    \/* ========================================\r\n                       17. SUCCESSFUL SUBMISSION\r\n                    ======================================== *\/\r\n\r\n                    \/*\r\n                     * Only this branch opens the popup.\r\n                     *\r\n                     * The backend must return success\r\n                     * after WordPress accepts the\r\n                     * administrator email for sending.\r\n                     *\/\r\n\r\n\r\n                    \/* Clear Form *\/\r\n\r\n                    form.reset();\r\n\r\n\r\n                    \/* Clear Old Session *\/\r\n\r\n                    session = null;\r\n\r\n\r\n                    \/* Clear Status *\/\r\n\r\n                    setFormStatus('');\r\n\r\n\r\n                    \/* Open Success Popup *\/\r\n\r\n                    openSuccessPopup();\r\n\r\n\r\n\r\n                \/* ============================================\r\n                   18. SUBMISSION ERROR\r\n                ============================================ *\/\r\n\r\n                } catch (error) {\r\n\r\n\r\n                    \/* Invalidate Old Session *\/\r\n\r\n                    session = null;\r\n\r\n\r\n                    \/* Show Error Message *\/\r\n\r\n                    setFormStatus(\r\n                        error.message ||\r\n                        'Unable to send your application. ' +\r\n                        'Please try again.',\r\n                        'error'\r\n                    );\r\n\r\n\r\n                    \/*\r\n                     * Do not reset the form on error.\r\n                     * Keep user-entered information.\r\n                     *\/\r\n\r\n\r\n                \/* ============================================\r\n                   19. RESTORE FORM STATE\r\n                ============================================ *\/\r\n\r\n                } finally {\r\n\r\n\r\n                    isSending = false;\r\n\r\n\r\n                    submitLabel.textContent =\r\n                        'Submit Application';\r\n\r\n\r\n                    \/* ----------------------------------------\r\n                       Request Fresh Token\r\n                    ---------------------------------------- *\/\r\n\r\n                    try {\r\n\r\n                        await initializeFormSession();\r\n\r\n                    } catch (error) {\r\n\r\n\r\n                        submitButton.disabled = true;\r\n\r\n\r\n                        if (modal.hidden) {\r\n\r\n                            setFormStatus(\r\n                                'Unable to reconnect to the ' +\r\n                                'application service. ' +\r\n                                'Please reload this page.',\r\n                                'error'\r\n                            );\r\n\r\n                        }\r\n\r\n                    }\r\n\r\n                }\r\n\r\n            }\r\n        );\r\n\r\n\r\n\r\n        \/* ====================================================\r\n           20. INITIALIZE APPLICATION FORM\r\n        ==================================================== *\/\r\n\r\n        initializeFormSession().catch(\r\n            function (error) {\r\n\r\n\r\n                submitButton.disabled = true;\r\n\r\n\r\n                setFormStatus(\r\n                    'Unable to load the application form. ' +\r\n                    'Please reload this page.',\r\n                    'error'\r\n                );\r\n\r\n            }\r\n        );\r\n\r\n    }\r\n\r\n\r\n\r\n    \/* ========================================================\r\n       21. DOCUMENT READY\r\n    ======================================================== *\/\r\n\r\n    if (\r\n        document.readyState === 'loading'\r\n    ) {\r\n\r\n        document.addEventListener(\r\n            'DOMContentLoaded',\r\n            initJobOpenings,\r\n            { once: true }\r\n        );\r\n\r\n    } else {\r\n\r\n        initJobOpenings();\r\n\r\n    }\r\n\r\n})();\r\n<\/script>\r\n\r\n\t\t\t\t<\/div>\n\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>OUR SERVICES Job Opening Explore career opportunities with us and join a team dedicated to mental health and well-being Job Openings Join Our Team Requirements Application Process Application Form Apply Now Contact Information Telephone 0812151220 Address 162 Nguy\u1ec5n Duy Trinh, \u0110\u00e0 N\u1eb5ng Join Our Team Work with a collaborative team and grow professionally. Learn More [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_siteseo_robots_primary_cat":"","footnotes":""},"class_list":["post-10663","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/psychologistvietnam.com\/en\/wp-json\/wp\/v2\/pages\/10663","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/psychologistvietnam.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/psychologistvietnam.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/psychologistvietnam.com\/en\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/psychologistvietnam.com\/en\/wp-json\/wp\/v2\/comments?post=10663"}],"version-history":[{"count":309,"href":"https:\/\/psychologistvietnam.com\/en\/wp-json\/wp\/v2\/pages\/10663\/revisions"}],"predecessor-version":[{"id":26672,"href":"https:\/\/psychologistvietnam.com\/en\/wp-json\/wp\/v2\/pages\/10663\/revisions\/26672"}],"wp:attachment":[{"href":"https:\/\/psychologistvietnam.com\/en\/wp-json\/wp\/v2\/media?parent=10663"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}