{"id":91621,"date":"2026-07-29T10:57:38","date_gmt":"2026-07-29T03:57:38","guid":{"rendered":"https:\/\/careerhub.huflit.edu.vn\/hiw26_candidates\/"},"modified":"2026-09-04T09:19:17","modified_gmt":"2026-09-04T02:19:17","slug":"hiw26_candidates","status":"publish","type":"page","link":"https:\/\/careerhub.huflit.edu.vn\/en\/hiw26_candidates\/","title":{"rendered":"HIW26_Candidates"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"91621\" class=\"elementor elementor-91621 elementor-84632\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-11c8023 e-flex e-con-boxed e-con e-parent\" data-id=\"11c8023\" 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-ce38024 elementor-widget elementor-widget-html\" data-id=\"ce38024\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- ======================================================== -->\n<!-- HTML CODE FOR WORDPRESS (CANDIDATE PORTAL V4.1 LIGHT) -->\n<!-- ======================================================== -->\n\n<div id=\"hiw26-portal-root\"><\/div>\n\n<style>\n    @import url('https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&display=swap');\n\n    #hiw26-portal-root {\n        font-family: 'Inter', sans-serif;\n        color: #333333;\n        min-height: 80vh;\n        display: flex;\n        justify-content: center;\n        align-items: flex-start;\n        background-color: #f8fafc;\n        padding: 40px 20px;\n        border-radius: 12px;\n    }\n\n    .hiw26-card {\n        background: #ffffff;\n        border: 1px solid #e2e8f0;\n        border-radius: 24px;\n        padding: 32px;\n        width: 100%;\n        max-width: 600px;\n        box-shadow: 0 10px 25px rgba(0, 0, 0, 0.05);\n    }\n\n    .text-center {\n        text-align: center;\n    }\n\n    .hiw26-title {\n        font-size: 28px;\n        font-weight: 700;\n        margin-bottom: 8px;\n        color: #0f172a;\n    }\n\n    .hiw26-subtitle {\n        color: #64748b;\n        font-size: 14px;\n        margin-bottom: 24px;\n    }\n\n    .hiw26-input {\n        width: 100%;\n        padding: 16px;\n        background: #f1f5f9;\n        border: 1px solid #cbd5e1;\n        border-radius: 12px;\n        color: #0f172a;\n        font-size: 16px;\n        margin-bottom: 16px;\n        box-sizing: border-box;\n    }\n\n    .hiw26-input:focus {\n        border-color: #0f52fb;\n        background: #ffffff;\n        outline: none;\n    }\n\n    .hiw26-btn {\n        width: 100%;\n        padding: 16px;\n        background: #0f52fb;\n        border: none;\n        border-radius: 12px;\n        color: white;\n        font-size: 16px;\n        font-weight: 600;\n        cursor: pointer;\n        transition: background 0.2s;\n    }\n\n    .hiw26-btn:hover {\n        background: #ec6523;\n    }\n\n    .hiw26-btn.outline {\n        background: transparent;\n        border: 1px solid #0f52fb;\n        color: #0f52fb;\n        margin-top: 12px;\n    }\n\n    .hiw26-btn.outline:hover {\n        background: #eff6ff;\n    }\n\n    \/* Company List Styles *\/\n    .company-item {\n        background: #f8fafc;\n        border: 1px solid #e2e8f0;\n        border-radius: 16px;\n        padding: 20px;\n        margin-bottom: 16px;\n        cursor: pointer;\n        transition: all 0.2s;\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n    }\n\n    .company-item:hover {\n        border-color: #0f52fb;\n        background: #eff6ff;\n    }\n\n    .c-name {\n        font-size: 18px;\n        font-weight: 600;\n        color: #0f172a;\n        margin-bottom: 4px;\n    }\n\n    .c-time {\n        font-size: 14px;\n        color: #64748b;\n    }\n\n    .c-badge {\n        padding: 6px 12px;\n        border-radius: 20px;\n        font-size: 12px;\n        font-weight: 600;\n    }\n\n    .badge-green {\n        background: #dcfce3;\n        color: #166534;\n        border: 1px solid #bbf7d0;\n    }\n\n    .badge-yellow {\n        background: #fef3c7;\n        color: #92400e;\n        border: 1px solid #fde68a;\n    }\n\n    .badge-gray {\n        background: #f1f5f9;\n        color: #475569;\n        border: 1px solid #cbd5e1;\n    }\n\n    .badge-red {\n        background: #fee2e2;\n        color: #991b1b;\n        border: 1px solid #fecaca;\n    }\n\n    \/* Live Queue Box *\/\n    .hiw26-status-box {\n        background: #f1f5f9;\n        border-radius: 16px;\n        padding: 20px;\n        margin-bottom: 24px;\n        border: 1px solid #e2e8f0;\n    }\n\n    .hiw26-status-box strong {\n        color: #0f52fb;\n    }\n\n    .hiw26-zoom-btn {\n        width: 100%;\n        padding: 16px;\n        background: #0f52fb;\n        border: none;\n        border-radius: 12px;\n        color: white;\n        font-size: 16px;\n        font-weight: 600;\n        cursor: pointer;\n        text-decoration: none;\n        display: inline-block;\n        box-shadow: 0 4px 6px -1px rgba(59, 130, 246, 0.4);\n        box-sizing: border-box;\n        text-align: center;\n    }\n\n    .hiw26-zoom-btn.disabled {\n        background: #e2e8f0;\n        color: #94a3b8;\n        box-shadow: none;\n        pointer-events: none;\n    }\n<\/style>\n\n<script>\n    \/\/ GOOGLE APPS SCRIPT URL\n    const GOOGLE_SCRIPT_URL = \"https:\/\/script.google.com\/macros\/s\/AKfycbxwn1bNWQifwbmJgEnz2c0vlk52PjzYWXFcWPV-f_DQcV-wSDie9OIqdV3CKD71oc7-\/exec\";\n\n    let globalCandidatesData = [];\n    let globalQueues = {};\n    let myCandidateId = \"\";\n\n    let pollingInterval = null;\n    let currentEmployerIdView = null;\n    let hasAlertedTurn = false;\n\n    function playTingTing() {\n        try {\n            const ctx = new (window.AudioContext || window.webkitAudioContext)();\n            const osc = ctx.createOscillator();\n            const gainNode = ctx.createGain();\n            osc.connect(gainNode);\n            gainNode.connect(ctx.destination);\n            osc.type = \"sine\";\n            osc.frequency.setValueAtTime(880, ctx.currentTime); \/\/ A5\n            gainNode.gain.setValueAtTime(0.5, ctx.currentTime);\n            gainNode.gain.exponentialRampToValueAtTime(0.01, ctx.currentTime + 1);\n            osc.start(ctx.currentTime);\n            osc.stop(ctx.currentTime + 1);\n\n            setTimeout(() => {\n                const osc2 = ctx.createOscillator();\n                const gain2 = ctx.createGain();\n                osc2.connect(gain2);\n                gain2.connect(ctx.destination);\n                osc2.frequency.setValueAtTime(1108.73, ctx.currentTime); \/\/ C#6\n                gain2.gain.setValueAtTime(0.5, ctx.currentTime);\n                gain2.gain.exponentialRampToValueAtTime(0.01, ctx.currentTime + 1);\n                osc2.start(ctx.currentTime);\n                osc2.stop(ctx.currentTime + 1);\n            }, 200);\n        } catch (e) { }\n    }\n\n     function renderLogin(errorMsg = \"\") {\n        if (pollingInterval) clearInterval(pollingInterval);\n        const root = document.getElementById(\"hiw26-portal-root\");\n        root.innerHTML = `\n        <div class=\"hiw26-card text-center\">\n          <h1 class=\"hiw26-title\">Interview Schedule <br\/>HUFLIT Internship Week 2026<br\/> For Students<\/h1>\n          <p class=\"hiw26-subtitle\" style=\"margin-bottom: 8px;\">Interview Schedule Feedback and Online Interview Check-in Page<\/p>\n          ${errorMsg ? `<p style=\"color: #ef4444; font-size: 14px; margin-bottom: 8px;\">${errorMsg}<\/p>` : ''}\n          <p style=\"font-weight: bold; color: #ea580c; text-align: center; line-height: 1.5; font-size: 13px; margin-bottom: 16px;\">\n            PLEASE ENTER THE CANDIDATE ID SENT IN THE INTERVIEW CONFIRMATION EMAIL <br\/>OR ZALO OA NOTIFICATION\n          <\/p>\n          <input type=\"text\" id=\"candidateInput\" class=\"hiw26-input\" placeholder=\"Enter your Candidate ID...\" \/>\n          <button class=\"hiw26-btn\" onclick=\"handleLogin()\">Look Up Interview Schedule<\/button>\n        <\/div>\n      `;\n    }\n\n    async function handleLogin() {\n        const btn = document.querySelector('.hiw26-btn');\n        btn.innerText = \"Loading data...\";\n        btn.style.opacity = \"0.7\";\n\n        const candidateId = document.getElementById(\"candidateInput\").value.trim();\n        if (!candidateId) return renderLogin(\"Please enter your Candidate ID!\");\n\n        try {\n            const response = await fetch(`${GOOGLE_SCRIPT_URL}?action=get_candidate_data&candidateId=${candidateId}`);\n            const result = await response.json();\n\n            if (result.success) {\n                globalCandidatesData = result.data;\n                globalQueues = result.queues || {};\n\n                if (globalCandidatesData.length > 0) {\n                    myCandidateId = candidateId;\n                    renderDashboardList();\n                    startGlobalPolling();\n                } else {\n                    renderLogin(\"Data not found or your schedule has not been approved yet.\");\n                }\n            } else {\n                renderLogin(\"System error while loading data.\");\n            }\n        } catch (error) {\n            renderLogin(\"Unable to connect to the network.\");\n        }\n    }\n\n    function renderDashboardList(isSilent = false) {\n        if (!isSilent) {\n            currentEmployerIdView = null;\n            hasAlertedTurn = false;\n        }\n\n        const root = document.getElementById(\"hiw26-portal-root\");\n\n        let listHtml = '';\n        let unconfirmedCount = 0;\n\n        globalCandidatesData.forEach(app => {\n            const hasSchedule = app.time && app.date && String(app.time).trim() !== \"\";\n            const isConfirmed = app.confirm === \"Confirmed\";\n\n            let statusText = \"No schedule yet\";\n            let badgeClass = \"badge-yellow\";\n\n            if (hasSchedule) {\n                if (isConfirmed) {\n                    statusText = \"Confirmed\";\n                    badgeClass = \"badge-green\";\n                } else if (app.confirm === \"Declined\") {\n                    statusText = \"Declined\";\n                    badgeClass = \"badge-red\";\n                } else if (app.confirm === \"Request to Reschedule\") {\n                    statusText = \"Request to Reschedule\";\n                    badgeClass = \"badge-yellow\";\n                } else {\n                    statusText = \"Scheduled (Unconfirmed)\";\n                    badgeClass = \"badge-yellow\";\n                    unconfirmedCount++;\n                }\n            } else if (app.confirm === \"Declined\") {\n                statusText = \"Declined\";\n                badgeClass = \"badge-red\";\n            } else if (app.confirm === \"Request to Reschedule\") {\n                statusText = \"Request to Reschedule\";\n                badgeClass = \"badge-yellow\";\n            }\n\n            let reasonHtml = '';\n            if ((app.confirm === \"Request to Reschedule\" || app.confirm === \"Declined\") && app.reason) {\n                reasonHtml = `<div style=\"margin-top: 8px; font-size: 13px; color: #ef4444;\"><strong>Reason:<\/strong> ${app.reason}<\/div>`;\n            }\n\n            let actionHtml = '';\n            if (hasSchedule && statusText === \"Scheduled (Unconfirmed)\") {\n                actionHtml = `\n                    <div style=\"margin-top: 16px; display: flex; gap: 8px; justify-content: flex-start; flex-wrap: wrap;\">\n                        <button class=\"hiw26-btn\" style=\"background:#10b981; width:auto; padding:8px 16px; font-size:14px;\" onclick=\"replyInvite('${app.applicationId}', '${app.employerId}', 'accept'); event.stopPropagation();\" id=\"btn-accept-${app.employerId}\">\u2705 Accept<\/button>\n                        <button class=\"hiw26-btn\" style=\"background:#f59e0b; width:auto; padding:8px 16px; font-size:14px;\" onclick=\"replyInvite('${app.applicationId}', '${app.employerId}', 'reschedule'); event.stopPropagation();\" id=\"btn-reschedule-${app.employerId}\">\ud83d\udd04 Reschedule<\/button>\n                        <button class=\"hiw26-btn\" style=\"background:#ef4444; width:auto; padding:8px 16px; font-size:14px;\" onclick=\"replyInvite('${app.applicationId}', '${app.employerId}', 'decline'); event.stopPropagation();\" id=\"btn-decline-${app.employerId}\">\u274c Decline<\/button>\n                    <\/div>\n                `;\n            } else if (isConfirmed) {\n                const hasCheckedIn = app.checkin && app.checkin.includes(\"Checked\");\n                \n                \/\/ Auto Complete if Company forgets to set (Checked-in and > 4 hours passed from scheduled time)\n                let isAutoFinished = false;\n                const schedTime = getAbsoluteScheduledTime(app.date, app.time);\n                if (schedTime && hasCheckedIn) {\n                    const diffHours = (new Date().getTime() - schedTime.getTime()) \/ (1000 * 60 * 60);\n                    if (diffHours > 4) isAutoFinished = true;\n                }\n                \n                const isFinished = app.status === \"Interviewed\" || app.status === \"Completed\" || app.status === \"Ended\" || isAutoFinished;\n\n                if (isFinished) {\n                    actionHtml = `\n                        <div style=\"margin-top: 16px;\">\n                            <button class=\"hiw26-btn\" style=\"width:100%; padding:12px 16px; font-size:14px; background:#10b981; cursor:default; box-shadow: none;\" disabled>\ud83c\udf89 Interview Completed<\/button>\n                        <\/div>\n                    `;\n                } else if (hasCheckedIn) {\n                    actionHtml = `\n                        <div style=\"margin-top: 16px;\">\n                            <button class=\"hiw26-btn\" style=\"width:100%; padding:12px 16px; font-size:14px;\" onclick=\"openLiveQueue('${app.applicationId}', '${app.employerId}'); event.stopPropagation();\">\ud83d\udc49 In Waiting Room (Checked-in)<\/button>\n                        <\/div>\n                    `;\n                } else {\n                    const checkinStatus = isCheckinAllowed(app.date, app.time);\n                    if (checkinStatus === \"TOO_EARLY\") {\n                        actionHtml = `\n                            <div style=\"margin-top: 16px;\">\n                                <button class=\"hiw26-btn\" style=\"width:100%; padding:12px 16px; font-size:14px; background:#94a3b8; cursor:not-allowed; box-shadow: none;\" disabled>Check-in time not reached yet (Opens 15 mins prior)<\/button>\n                            <\/div>\n                        `;\n                    } else if (checkinStatus === \"TOO_LATE\") {\n                        actionHtml = `\n                            <div style=\"margin-top: 16px;\">\n                                <button class=\"hiw26-btn\" style=\"width:100%; padding:12px 16px; font-size:14px; background:#ef4444; cursor:not-allowed; box-shadow: none;\" disabled>Check-in deadline has passed<\/button>\n                            <\/div>\n                        `;\n                    } else {\n                        actionHtml = `\n                            <div style=\"margin-top: 16px;\">\n                                <button class=\"hiw26-btn\" style=\"width:100%; padding:12px 16px; font-size:14px;\" onclick=\"openLiveQueue('${app.applicationId}', '${app.employerId}'); event.stopPropagation();\">\ud83d\udc49 Click to Check-in Now<\/button>\n                            <\/div>\n                        `;\n                    }\n                }\n            }\n\n            listHtml += `\n              <div class=\"company-item\" style=\"cursor: default; ${hasSchedule && statusText === 'Scheduled (Unconfirmed)' ? 'border-color: #fde68a; background: #fffbeb;' : ''}\">\n                <div style=\"width: 100%;\">\n                  <div style=\"display: flex; justify-content: space-between; align-items: flex-start;\">\n                      <div>\n                        <div class=\"c-name\">${app.company}<\/div>\n                        <div style=\"font-size: 14px; font-weight: 500; color: #475569; margin-top: 4px;\">\ud83d\udcbc Position: ${app.jobTitle || 'Not updated'}<\/div>\n                        <div class=\"c-time\" style=\"margin-top: 4px;\">\ud83d\udd52 ${hasSchedule ? formatTimeDisplay(app.time) + \" | Date \" + formatDateDisplay(app.date) : \"Not scheduled yet\"}<\/div>\n                        ${reasonHtml}\n                      <\/div>\n                      <div>\n                        <span class=\"c-badge ${badgeClass}\">${statusText}<\/span>\n                      <\/div>\n                  <\/div>\n                  ${actionHtml}\n                <\/div>\n              <\/div>\n            `;\n        });\n\n        let alertHtml = '';\n        if (unconfirmedCount > 0) {\n            alertHtml = `\n                <div style=\"background: #fffbeb; border: 1px solid #fde68a; padding: 16px; border-radius: 12px; margin-bottom: 20px; text-align: center;\">\n                  <h3 style=\"color: #d97706; margin-bottom: 8px; font-size: 16px;\">You have ${unconfirmedCount} unconfirmed interview schedule(s)!<\/h3>\n                  <p style=\"color: #92400e; font-size: 14px;\">\n                    Please confirm the schedule below to participate in the interview.\n                  <\/p>\n                <\/div>\n            `;\n        }\n\n        root.innerHTML = `\n        <div class=\"hiw26-card\">\n          <h2 style=\"font-size: 22px; margin-bottom: 8px; text-align: center; color: #0f172a;\">Hello, ${globalCandidatesData[0].name}<\/h2>\n          <p style=\"color: #64748b; font-size: 14px; margin-bottom: 24px; text-align: center;\">Here are the positions you have applied for.<\/p>\n          \n          ${alertHtml}\n          ${listHtml}\n          \n          <button class=\"hiw26-btn outline\" onclick=\"renderLogin()\">Log Out<\/button>\n        <\/div>\n      `;\n    }\n\n    async function openLiveQueue(applicationId, employerId, isSilent = false) {\n        if (!isSilent) {\n            currentEmployerIdView = employerId;\n            hasAlertedTurn = false;\n        }\n\n        const app = globalCandidatesData.find(c => String(c.employerId) === String(employerId));\n        if (!app) return;\n\n        \/\/ Skip if not scheduled yet\n        if (!app.time || !app.date || String(app.time).trim() === \"\") {\n            await hiwAlert(\"The employer has not scheduled an interview for you in this position. Please check back later!\");\n            return;\n        }\n\n        if (app.confirm !== \"Confirmed\") {\n            await hiwAlert(\"You need to confirm the interview schedule before entering the waiting room.\");\n            return;\n        }\n\n        const queue = globalQueues[employerId] || [];\n        queue.sort((a, b) => String(a.time).localeCompare(String(b.time)));\n\n        const myIndex = queue.findIndex(c => String(c.candidateId) === String(myCandidateId));\n        const currentlyInterviewing = queue.find(c => c.status === \"Interviewing\") || queue[0];\n\n        let peopleAhead = myIndex;\n        const isMyTurn = app.status === \"Interviewing\" || peopleAhead === 0;\n        const hasCheckedIn = app.checkin && app.checkin.includes(\"Checked\");\n        \n        let isAutoFinished = false;\n        const schedTime = getAbsoluteScheduledTime(app.date, app.time);\n        if (schedTime && hasCheckedIn) {\n            const diffHours = (new Date().getTime() - schedTime.getTime()) \/ (1000 * 60 * 60);\n            if (diffHours > 4) isAutoFinished = true;\n        }\n        \n        const isFinished = app.status === \"Interviewed\" || app.status === \"Completed\" || app.status === \"Ended\" || isAutoFinished;\n\n        const root = document.getElementById(\"hiw26-portal-root\");\n        root.innerHTML = `\n        <div class=\"hiw26-card\">\n          <button style=\"background:none; border:none; color:#64748b; cursor:pointer; margin-bottom:16px; font-size: 14px; padding: 0;\" onclick=\"renderDashboardList()\">\n            \u2190 Back to List\n          <\/button>\n          \n          <h2 style=\"font-size: 22px; margin-bottom: 8px; color: #0f172a;\" class=\"text-center\">Company: ${app.company}<\/h2>\n          \n          ${isFinished ? `\n            <div style=\"background: #ecfdf5; border: 1px solid #6ee7b7; padding: 20px; border-radius: 12px; margin-bottom: 20px; text-align: center;\">\n              <h3 style=\"color: #059669; font-size: 18px; margin-bottom: 8px;\">\ud83c\udf89 Interview Completed!<\/h3>\n              <p style=\"color: #047857; font-size: 14px;\">Thank you for participating in the interview. We wish you the best outcome.<\/p>\n            <\/div>\n          ` : (!hasCheckedIn ? `\n            <div style=\"background: #fffbeb; border: 1px solid #fde68a; padding: 16px; border-radius: 12px; margin-bottom: 20px; text-align: center;\">\n              <p style=\"color: #d97706; font-size: 14px; margin-bottom: 12px; font-weight: 500;\">\n                Your interview time is <strong>${formatTimeDisplay(app.time)}<\/strong>.<br\/>\n                Check-in time is <strong>from ${getCheckinStartTime(app.time)} to exactly ${formatTimeDisplay(app.time)}<\/strong>. The portal will automatically close after the deadline.\n              <\/p>\n              ${(() => {\n                  const checkinStatus = isCheckinAllowed(app.date, app.time);\n                  if (checkinStatus === \"ALLOWED\") {\n                      return `<button class=\"hiw26-btn\" onclick=\"doCheckin('${applicationId}', '${employerId}')\" id=\"btn-checkin\">\u2705 Click to Check-in Now<\/button>`;\n                  } else if (checkinStatus === \"TOO_EARLY\") {\n                      return `<button class=\"hiw26-btn\" style=\"background:#94a3b8; cursor:not-allowed;\" disabled>Check-in time not reached yet<\/button>`;\n                  } else if (checkinStatus === \"TOO_LATE\") {\n                      return `<button class=\"hiw26-btn\" style=\"background:#ef4444; cursor:not-allowed;\" disabled>Check-in deadline has passed<\/button>`;\n                  } else {\n                      return `<button class=\"hiw26-btn\" onclick=\"doCheckin('${applicationId}', '${employerId}')\" id=\"btn-checkin\">\u2705 Click to Check-in Now<\/button>`;\n                  }\n              })()}\n            <\/div>\n          ` : `\n            <div class=\"hiw26-status-box\">\n              <h3 style=\"font-size: 16px; margin-bottom: 12px; color: #64748b;\">Live Queue Status<\/h3>\n              <p style=\"font-size: 16px; margin-bottom: 8px; color: #0f172a;\">\n                Currently Interviewing: <strong>${currentlyInterviewing ? currentlyInterviewing.name : \"Empty\"}<\/strong>\n              <\/p>\n              <p style=\"font-size: 15px; color: #64748b;\">\n                <span style=\"color: #ea580c; font-weight: bold; font-size: 18px;\">${peopleAhead > 0 ? peopleAhead : 0}<\/span> person(s) ahead of you until your turn!\n              <\/p>\n            <\/div>\n            \n            <div class=\"text-center\" style=\"border-top: 1px solid #e2e8f0; padding-top: 20px;\">\n              <h3 style=\"font-size: 20px; margin-bottom: 8px; color: #0f172a;\">${isMyTurn ? \"It's your turn!\" : \"Your turn is coming up!\"}<\/h3>\n              <p style=\"color: #64748b; font-size: 14px; margin-bottom: 16px;\">Please have your camera and microphone ready.<\/p>\n              \n              <a href=\"${app.zoomLink ? app.zoomLink : '#'}\" target=\"_blank\" onclick=\"${app.zoomLink ? `markJoinedZoom('${applicationId}', '${employerId}')` : `hiwAlert('The Organizing Committee has not updated the Zoom Link for this room!'); return false;`}\" class=\"hiw26-zoom-btn ${app.zoomLink ? '' : 'disabled'}\">\n                \ud83c\udfa5 Join Zoom\n              <\/a>\n              <p style=\"font-size: 12px; color: #94a3b8; font-style: italic; margin-top: 12px;\">*Please enter the Zoom waiting room and wait for the Employer to admit you<\/p>\n            <\/div>\n          `)}\n        <\/div>\n      `;\n    }\n\n    function startGlobalPolling() {\n        if (pollingInterval) clearInterval(pollingInterval);\n        pollingInterval = setInterval(async () => {\n            try {\n                const response = await fetch(`${GOOGLE_SCRIPT_URL}?action=get_candidate_data&candidateId=${myCandidateId}`);\n                const result = await response.json();\n                if (result.success) {\n                    globalCandidatesData = result.data;\n                    globalQueues = result.queues || {};\n\n                    if (currentEmployerIdView) {\n                        openLiveQueue(currentEmployerIdView, true);\n\n                        const app = globalCandidatesData.find(c => String(c.employerId) === String(currentEmployerIdView));\n                        if (app && app.status === \"Interviewing\" && !hasAlertedTurn) {\n                            hasAlertedTurn = true;\n                            playTingTing();\n                            hiwAlert(\"\ud83d\udd14 IT'S YOUR TURN!\\n\\nThe employer is calling you in for an interview. Please click 'Join Zoom' now!\");\n                        }\n                    } else {\n                        renderDashboardList(true);\n                    }\n                }\n            } catch (e) {\n                console.error(\"Polling error\", e);\n            }\n        }, 10000);\n    }\n\n    function getAbsoluteScheduledTime(dateStr, timeStr) {\n        if (!dateStr || !timeStr) return null;\n\n        let d;\n        let ds = String(dateStr).trim();\n        if (ds.includes('\/')) {\n            const parts = ds.split('\/');\n            let year = parts[2] ? parts[2].trim() : String(new Date().getFullYear());\n            if (year.length === 2) year = \"20\" + year;\n            d = new Date(`${year}-${parts[1].trim().padStart(2, '0')}-${parts[0].trim().padStart(2, '0')}T00:00:00`);\n        } else {\n            d = new Date(ds);\n        }\n\n        if (isNaN(d)) return null;\n\n        let timeToParse = String(timeStr);\n        if (timeToParse.includes('1899') || timeToParse.includes('T')) {\n            const tempD = new Date(timeToParse);\n            timeToParse = `${tempD.getHours()}:${tempD.getMinutes()}`;\n        }\n\n        const timeParts = timeToParse.split(':');\n        if (timeParts.length >= 2) {\n            d.setHours(parseInt(timeParts[0]), parseInt(timeParts[1]), 0);\n        }\n        return d;\n    }\n\n    function isCheckinAllowed(dateStr, timeStr) {\n        const d = getAbsoluteScheduledTime(dateStr, timeStr);\n        if (!d) return \"ALLOWED\"; \/\/ Fallback allow if date is weird\n\n        const now = new Date();\n        const diffMs = d.getTime() - now.getTime();\n        const diffMins = diffMs \/ 60000;\n\n        if (diffMins > 15) return \"TOO_EARLY\";\n        if (diffMins < 0) return \"TOO_LATE\";\n        return \"ALLOWED\";\n    }\n\n    function formatTimeDisplay(timeStr) {\n        if (!timeStr) return \"--:--\";\n        const s = String(timeStr).trim();\n        if (s.includes('1899') || s.includes('T')) {\n            const d = new Date(s);\n            if (!isNaN(d)) return String(d.getHours()).padStart(2, '0') + ':' + String(d.getMinutes()).padStart(2, '0');\n        }\n        const parts = s.split(':');\n        if (parts.length >= 2) {\n            return String(parts[0]).padStart(2, '0') + ':' + String(parts[1]).padStart(2, '0');\n        }\n        return s;\n    }\n\n    function formatDateDisplay(dateStr) {\n        if (!dateStr) return \"\";\n        const s = String(dateStr).trim();\n        let d = new Date(s);\n        if (!isNaN(d) && s.includes('-')) {\n            return String(d.getDate()).padStart(2, '0') + '\/' + String(d.getMonth() + 1).padStart(2, '0') + '\/' + String(d.getFullYear()).slice(-2);\n        }\n        const parts = s.split('\/');\n        if (parts.length >= 2) {\n            let y = parts[2] || new Date().getFullYear().toString();\n            return String(parts[0]).padStart(2, '0') + '\/' + String(parts[1]).padStart(2, '0') + '\/' + String(y).slice(-2);\n        }\n        return s;\n    }\n\n    function getCheckinStartTime(timeStr) {\n        const s = formatTimeDisplay(timeStr);\n        const parts = s.split(':');\n        if (parts.length < 2) return s;\n        let d = new Date();\n        d.setHours(parseInt(parts[0]), parseInt(parts[1]) - 15, 0);\n        return String(d.getHours()).padStart(2, '0') + ':' + String(d.getMinutes()).padStart(2, '0');\n    }\n\n    async function replyInvite(applicationId, employerId, replyType) {\n        let reason = \"\";\n        if (replyType === 'reschedule') {\n            const resData = await hiwReschedulePrompt(\"Please enter the reason and desired rescheduling time:\", \"Enter the reason for rescheduling...\");\n            if (!resData || !resData.reason) {\n                await hiwAlert(\"You must enter a reason to continue.\");\n                return;\n            }\n            if (!resData.date || !resData.time) {\n                await hiwAlert(\"Please select both the desired Date and Time for rescheduling.\");\n                return;\n            }\n            const d = new Date(resData.date);\n            const formattedDate = `${String(d.getDate()).padStart(2, '0')}\/${String(d.getMonth() + 1).padStart(2, '0')}\/${String(d.getFullYear()).slice(-2)}`;\n            reason = `Reason: ${resData.reason} | Desired schedule: ${resData.time} on ${formattedDate}`;\n        } else if (replyType === 'decline') {\n            reason = await hiwPrompt(\"Please enter the reason (Mandatory):\");\n            if (!reason) {\n                await hiwAlert(\"You must enter a reason to continue.\");\n                return;\n            }\n        }\n\n        const btnAcc = document.getElementById('btn-accept-' + employerId);\n        const btnRes = document.getElementById('btn-reschedule-' + employerId);\n        const btnDec = document.getElementById('btn-decline-' + employerId);\n\n        let targetBtn = btnAcc;\n        if (replyType === 'reschedule') targetBtn = btnRes;\n        else if (replyType === 'decline') targetBtn = btnDec;\n\n        if (btnAcc) btnAcc.disabled = true;\n        if (btnRes) btnRes.disabled = true;\n        if (btnDec) btnDec.disabled = true;\n        if (targetBtn) targetBtn.innerText = \"Processing...\";\n\n        try {\n            const res = await fetch(`${GOOGLE_SCRIPT_URL}?action=reply_invite&format=json&candidateId=${applicationId}&employerId=${employerId}&reply=${replyType}&reason=${encodeURIComponent(reason)}`);\n            const result = await res.json();\n            if (result.success) {\n                const app = globalCandidatesData.find(c => String(c.employerId) === String(employerId));\n                if (app) {\n                    app.confirm = result.finalStatus;\n                    app.reason = reason;\n                }\n\n                renderDashboardList();\n            } else {\n                await hiwAlert(\"Error: \" + result.message);\n                renderDashboardList();\n            }\n        } catch (e) {\n            await hiwAlert(\"Network connection error while submitting feedback.\");\n            renderDashboardList();\n        }\n    }\n\n    async function doCheckin(applicationId, employerId) {\n        document.getElementById('btn-checkin').innerText = \"Processing...\";\n        try {\n            const res = await fetch(`${GOOGLE_SCRIPT_URL}?action=checkin&candidateId=${applicationId}&employerId=${employerId}`);\n            const result = await res.json();\n            if (result.success) {\n                const app = globalCandidatesData.find(c => String(c.employerId) === String(employerId));\n                if (app) app.checkin = \"Checked In\";\n                openLiveQueue(employerId);\n            }\n        } catch (e) {\n            await hiwAlert(\"Network error while checking in.\");\n            document.getElementById('btn-checkin').innerText = \"\u2705 Click to Check-in Now\";\n        }\n    }\n\n    \/\/ Record when candidate clicks the Zoom link\n    function markJoinedZoom(applicationId, employerId) {\n        fetch(`${GOOGLE_SCRIPT_URL}?action=join_zoom&candidateId=${applicationId}&employerId=${employerId}`)\n            .catch(e => console.error(\"Unable to record zoom join\", e));\n        return true; \/\/ Allow <a> tag to continue opening the link\n    }\n\n    document.addEventListener(\"DOMContentLoaded\", () => renderLogin());\n<\/script>\n<!-- ============================================== -->\n<!-- CUSTOM MODAL SYSTEM                            -->\n<!-- ============================================== -->\n<style>\n    .hiw-modal-overlay {\n        position: fixed;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n        background: rgba(15, 23, 42, 0.6);\n        backdrop-filter: blur(4px);\n        display: none;\n        align-items: center;\n        justify-content: center;\n        z-index: 99999;\n        opacity: 0;\n        transition: opacity 0.2s ease;\n    }\n\n    .hiw-modal-overlay.active {\n        display: flex;\n        opacity: 1;\n    }\n\n    .hiw-modal {\n        background: #fff;\n        width: 90%;\n        max-width: 400px;\n        border-radius: 16px;\n        padding: 24px;\n        box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);\n        text-align: center;\n        font-family: 'Inter', sans-serif;\n        transform: scale(0.95);\n        transition: transform 0.2s ease;\n    }\n\n    .hiw-modal-overlay.active .hiw-modal {\n        transform: scale(1);\n    }\n\n    .hiw-modal-icon {\n        font-size: 40px;\n        margin-bottom: 16px;\n    }\n\n    .hiw-modal-title {\n        font-size: 20px;\n        font-weight: 700;\n        color: #0f172a;\n        margin-bottom: 8px;\n    }\n\n    .hiw-modal-text {\n        font-size: 15px;\n        color: #475569;\n        margin-bottom: 24px;\n        line-height: 1.5;\n        white-space: pre-wrap;\n    }\n\n    .hiw-modal-input {\n        width: 100%;\n        padding: 12px;\n        border: 1px solid #cbd5e1;\n        border-radius: 8px;\n        margin-bottom: 24px;\n        font-size: 15px;\n        outline: none;\n        box-sizing: border-box;\n    }\n\n    .hiw-modal-input:focus {\n        border-color: #0f52fb;\n        box-shadow: 0 0 0 3px rgba(15, 82, 251, 0.1);\n    }\n\n    .hiw-modal-actions {\n        display: flex;\n        gap: 12px;\n        justify-content: center;\n    }\n\n    .hiw-modal-btn {\n        padding: 12px 24px;\n        border: none;\n        border-radius: 8px;\n        font-size: 15px;\n        font-weight: 600;\n        cursor: pointer;\n        flex: 1;\n        transition: background 0.2s;\n    }\n\n    .hiw-modal-btn-cancel {\n        background: #f1f5f9;\n        color: #475569;\n    }\n\n    .hiw-modal-btn-cancel:hover {\n        background: #e2e8f0;\n    }\n\n    .hiw-modal-btn-primary {\n        background: #0f52fb;\n        color: #fff;\n    }\n\n    .hiw-modal-btn-primary:hover {\n        background: #003edb;\n    }\n<\/style>\n\n<div id=\"hiw-modal-overlay\" class=\"hiw-modal-overlay\">\n    <div class=\"hiw-modal\">\n        <div id=\"hiw-modal-icon\" class=\"hiw-modal-icon\">\ud83d\udd14<\/div>\n        <div id=\"hiw-modal-title\" class=\"hiw-modal-title\">Notification<\/div>\n        <div id=\"hiw-modal-text\" class=\"hiw-modal-text\"><\/div>\n        <input type=\"text\" id=\"hiw-modal-input\" class=\"hiw-modal-input\" style=\"display: none;\">\n        <input type=\"date\" id=\"hiw-modal-date\" class=\"hiw-modal-input\" style=\"display: none; margin-top: -12px;\">\n        <input type=\"time\" id=\"hiw-modal-time\" class=\"hiw-modal-input\" lang=\"en-GB\" style=\"display: none; margin-top: -12px;\">\n        <div class=\"hiw-modal-actions\">\n            <button id=\"hiw-btn-cancel\" class=\"hiw-modal-btn hiw-modal-btn-cancel\" style=\"display: none;\">Cancel<\/button>\n            <button id=\"hiw-btn-ok\" class=\"hiw-modal-btn hiw-modal-btn-primary\">OK<\/button>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>\n    function showCustomModal({ type = 'alert', title = 'Notification', message = '', icon = '\ud83d\udd14', inputPlaceholder = '' }) {\n        return new Promise((resolve) => {\n            const overlay = document.getElementById('hiw-modal-overlay');\n            document.getElementById('hiw-modal-icon').innerText = icon;\n            document.getElementById('hiw-modal-title').innerText = title;\n            document.getElementById('hiw-modal-text').innerText = message;\n\n            const inputObj = document.getElementById('hiw-modal-input');\n            const dateObj = document.getElementById('hiw-modal-date');\n            const timeObj = document.getElementById('hiw-modal-time');\n            const btnCancel = document.getElementById('hiw-btn-cancel');\n            const btnOk = document.getElementById('hiw-btn-ok');\n\n            inputObj.value = '';\n            dateObj.value = '';\n            timeObj.value = '';\n            inputObj.style.display = (type === 'prompt' || type === 'prompt-time') ? 'block' : 'none';\n            dateObj.style.display = type === 'prompt-time' ? 'block' : 'none';\n            timeObj.style.display = type === 'prompt-time' ? 'block' : 'none';\n\n            if (type === 'prompt' || type === 'prompt-time') inputObj.placeholder = inputPlaceholder;\n\n            btnCancel.style.display = (type === 'confirm' || type === 'prompt' || type === 'prompt-time') ? 'block' : 'none';\n\n            const cleanup = () => {\n                overlay.classList.remove('active');\n            };\n\n            btnOk.onclick = () => {\n                cleanup();\n                if (type === 'prompt') resolve(inputObj.value);\n                else if (type === 'prompt-time') resolve({ reason: inputObj.value, date: dateObj.value, time: timeObj.value });\n                else resolve(true);\n            };\n            btnCancel.onclick = () => {\n                cleanup();\n                resolve((type === 'prompt' || type === 'prompt-time') ? null : false);\n            };\n\n            overlay.classList.add('active');\n            if (type === 'prompt' || type === 'prompt-time') setTimeout(() => inputObj.focus(), 100);\n        });\n    }\n    window.hiwAlert = (msg) => showCustomModal({ type: 'alert', message: msg, icon: '\ud83d\udd14' });\n    window.hiwConfirm = (msg) => showCustomModal({ type: 'confirm', message: msg, icon: '\u2753', title: 'Confirmation' });\n    window.hiwPrompt = (msg, placeholder) => showCustomModal({ type: 'prompt', message: msg, icon: '\u270d\ufe0f', title: 'Enter Information', inputPlaceholder: placeholder });\n    window.hiwReschedulePrompt = (msg, placeholder) => showCustomModal({ type: 'prompt-time', message: msg, icon: '\ud83d\udd52', title: 'Request to Reschedule', inputPlaceholder: placeholder });\n<\/script>\n<\/body>\n\n<\/html>\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>\ud83d\udd14 Notification Cancel OK<\/p>\n","protected":false},"author":7359,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"_acf_changed":false,"slim_seo":{"title":"HIW26_Candidates - Careerhub.huflit.edu.vn","description":"\ud83d\udd14 Notification Cancel OK"},"footnotes":""},"class_list":["post-91621","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>HIW26_Candidates - Careerhub.huflit.edu.vn<\/title>\n<meta name=\"description\" content=\"HIW26_Candidates\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/careerhub.huflit.edu.vn\/en\/hiw26_candidates\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"HIW26_Candidates - Careerhub.huflit.edu.vn\" \/>\n<meta property=\"og:description\" content=\"HIW26_Candidates\" \/>\n<meta property=\"og:url\" content=\"https:\/\/careerhub.huflit.edu.vn\/en\/hiw26_candidates\/\" \/>\n<meta property=\"og:site_name\" content=\"Careerhub.huflit.edu.vn\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/huflitjobhub\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-04T02:19:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/careerhub.huflit.edu.vn\/wp-content\/publicmedia\/2022\/05\/JF-avtar@4x-100-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"2560\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/careerhub.huflit.edu.vn\\\/en\\\/hiw26_candidates\\\/\",\"url\":\"https:\\\/\\\/careerhub.huflit.edu.vn\\\/en\\\/hiw26_candidates\\\/\",\"name\":\"HIW26_Candidates - Careerhub.huflit.edu.vn\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/careerhub.huflit.edu.vn\\\/en\\\/#website\"},\"datePublished\":\"2026-07-29T03:57:38+00:00\",\"dateModified\":\"2026-09-04T02:19:17+00:00\",\"description\":\"HIW26_Candidates\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/careerhub.huflit.edu.vn\\\/en\\\/hiw26_candidates\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/careerhub.huflit.edu.vn\\\/en\\\/hiw26_candidates\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/careerhub.huflit.edu.vn\\\/en\\\/hiw26_candidates\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/careerhub.huflit.edu.vn\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"HIW26_Candidates\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/careerhub.huflit.edu.vn\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/careerhub.huflit.edu.vn\\\/en\\\/\",\"name\":\"Careerhub.huflit.edu.vn\",\"description\":\"Website tuy\u1ec3n d\u1ee5ng d\u00e0nh cho sinh vi\u00ean HUFLIT\",\"publisher\":{\"@id\":\"https:\\\/\\\/careerhub.huflit.edu.vn\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/careerhub.huflit.edu.vn\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/careerhub.huflit.edu.vn\\\/en\\\/#organization\",\"name\":\"HUFLIT Job Hub\",\"url\":\"https:\\\/\\\/careerhub.huflit.edu.vn\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/careerhub.huflit.edu.vn\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/careerhub.huflit.edu.vn\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/JF-avtar@4x-100-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/careerhub.huflit.edu.vn\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/JF-avtar@4x-100-scaled.jpg\",\"width\":2560,\"height\":2560,\"caption\":\"HUFLIT Job Hub\"},\"image\":{\"@id\":\"https:\\\/\\\/careerhub.huflit.edu.vn\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/huflitjobhub\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"HIW26_Candidates - Careerhub.huflit.edu.vn","description":"HIW26_Candidates","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/careerhub.huflit.edu.vn\/en\/hiw26_candidates\/","og_locale":"en_US","og_type":"article","og_title":"HIW26_Candidates - Careerhub.huflit.edu.vn","og_description":"HIW26_Candidates","og_url":"https:\/\/careerhub.huflit.edu.vn\/en\/hiw26_candidates\/","og_site_name":"Careerhub.huflit.edu.vn","article_publisher":"https:\/\/www.facebook.com\/huflitjobhub","article_modified_time":"2026-09-04T02:19:17+00:00","og_image":[{"width":2560,"height":2560,"url":"https:\/\/careerhub.huflit.edu.vn\/wp-content\/publicmedia\/2022\/05\/JF-avtar@4x-100-scaled.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/careerhub.huflit.edu.vn\/en\/hiw26_candidates\/","url":"https:\/\/careerhub.huflit.edu.vn\/en\/hiw26_candidates\/","name":"HIW26_Candidates - Careerhub.huflit.edu.vn","isPartOf":{"@id":"https:\/\/careerhub.huflit.edu.vn\/en\/#website"},"datePublished":"2026-07-29T03:57:38+00:00","dateModified":"2026-09-04T02:19:17+00:00","description":"HIW26_Candidates","breadcrumb":{"@id":"https:\/\/careerhub.huflit.edu.vn\/en\/hiw26_candidates\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/careerhub.huflit.edu.vn\/en\/hiw26_candidates\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/careerhub.huflit.edu.vn\/en\/hiw26_candidates\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/careerhub.huflit.edu.vn\/en\/"},{"@type":"ListItem","position":2,"name":"HIW26_Candidates"}]},{"@type":"WebSite","@id":"https:\/\/careerhub.huflit.edu.vn\/en\/#website","url":"https:\/\/careerhub.huflit.edu.vn\/en\/","name":"Careerhub.huflit.edu.vn","description":"Website tuy\u1ec3n d\u1ee5ng d\u00e0nh cho sinh vi\u00ean HUFLIT","publisher":{"@id":"https:\/\/careerhub.huflit.edu.vn\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/careerhub.huflit.edu.vn\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/careerhub.huflit.edu.vn\/en\/#organization","name":"HUFLIT Job Hub","url":"https:\/\/careerhub.huflit.edu.vn\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/careerhub.huflit.edu.vn\/en\/#\/schema\/logo\/image\/","url":"https:\/\/careerhub.huflit.edu.vn\/wp-content\/uploads\/2022\/05\/JF-avtar@4x-100-scaled.jpg","contentUrl":"https:\/\/careerhub.huflit.edu.vn\/wp-content\/uploads\/2022\/05\/JF-avtar@4x-100-scaled.jpg","width":2560,"height":2560,"caption":"HUFLIT Job Hub"},"image":{"@id":"https:\/\/careerhub.huflit.edu.vn\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/huflitjobhub"]}]}},"_links":{"self":[{"href":"https:\/\/careerhub.huflit.edu.vn\/en\/wp-json\/wp\/v2\/pages\/91621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/careerhub.huflit.edu.vn\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/careerhub.huflit.edu.vn\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/careerhub.huflit.edu.vn\/en\/wp-json\/wp\/v2\/users\/7359"}],"replies":[{"embeddable":true,"href":"https:\/\/careerhub.huflit.edu.vn\/en\/wp-json\/wp\/v2\/comments?post=91621"}],"version-history":[{"count":1,"href":"https:\/\/careerhub.huflit.edu.vn\/en\/wp-json\/wp\/v2\/pages\/91621\/revisions"}],"predecessor-version":[{"id":91622,"href":"https:\/\/careerhub.huflit.edu.vn\/en\/wp-json\/wp\/v2\/pages\/91621\/revisions\/91622"}],"wp:attachment":[{"href":"https:\/\/careerhub.huflit.edu.vn\/en\/wp-json\/wp\/v2\/media?parent=91621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}