{"id":2608,"date":"2026-05-26T02:29:15","date_gmt":"2026-05-26T02:29:15","guid":{"rendered":"https:\/\/hq.moh.gov.my\/medicaldev\/ckpp\/?page_id=2608"},"modified":"2026-07-03T00:59:42","modified_gmt":"2026-07-03T00:59:42","slug":"labuan","status":"publish","type":"page","link":"https:\/\/hq.moh.gov.my\/medicaldev\/ckpp\/mypsq\/labuan\/","title":{"rendered":"labuan"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2608\" class=\"elementor elementor-2608\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-671cd399 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"671cd399\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6a2e7737\" data-id=\"6a2e7737\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-63d960f5 elementor-widget elementor-widget-html\" data-id=\"63d960f5\" 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<!DOCTYPE html>\n<html lang=\"ms\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Soal Selidik Kepuasan Pesakit<\/title>\n    <link href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/select2\/4.0.13\/css\/select2.min.css\" rel=\"stylesheet\" \/>\n    <link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/select2-bootstrap-5-theme\/1.3.0\/select2-bootstrap-5-theme.min.css\" \/>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/Chart.js\/4.4.1\/chart.umd.min.js\"><\/script>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jquery\/3.2.1\/jquery.min.js\" integrity=\"sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=\" crossorigin=\"anonymous\"><\/script>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/select2\/4.0.13\/js\/select2.min.js\"><\/script>\n\n    <style>\n        \/* CSS Variables *\/\n        :root {\n            --bg-color: #f8f9fa;\n            --text-color: #212529;\n            --card-bg-color: #ffffff;\n            --card-secondary-bg-color: #f8f9fa;\n            --border-color: #dee2e6;\n            --primary-color: #007bff;\n            --header-text-color: #ffffff;\n            --shadow-color: rgba(0, 0, 0, 0.08);\n            --button-secondary-bg: #6c757d;\n            --score-green: #28a745;\n            --score-yellow: #ffc107;\n            --score-red: #dc3545;\n            --input-bg: #ffffff;\n            --input-text: #212529;\n            --disabled-bg: #e9ecef;\n        }\n\n        \/* Apply font globally to fix Select2 dropdowns appended to body *\/\n        body, .select2-container {\n            font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif !important;\n        }\n\n        \/* Dark Mode *\/\n        [data-theme=\"dark\"] {\n            --bg-color: #121212 !important;\n            --text-color: #f0f0f0 !important;\n            --card-bg-color: #1e1e1e !important;\n            --card-secondary-bg-color: #2c2c2c !important;\n            --border-color: #555555 !important;\n            --primary-color: #58a6ff !important;\n            --header-text-color: #ffffff !important;\n            --shadow-color: rgba(0, 0, 0, 0.6) !important;\n            --button-secondary-bg: #484f58 !important;\n            --input-bg: #2c2c2c !important;\n            --input-text: #ffffff !important;\n            --disabled-bg: #3a3a3a !important;\n        }\n\n        \/* Scoped Container Styling *\/\n        #survey-wrapper {\n            background-color: var(--bg-color);\n            color: var(--text-color);\n            line-height: 1.6;\n            margin: 1rem auto;\n            padding: 0;\n            max-width: 95%;\n            border-radius: 12px;\n            box-shadow: 0 6px 20px var(--shadow-color);\n            overflow: hidden;\n            transition: background-color 0.3s, color 0.3s;\n            font-size: 16px !important; \n        }\n\n        #survey-wrapper *, #survey-wrapper *::before, #survey-wrapper *::after {\n            box-sizing: border-box;\n        }\n\n        #survey-wrapper header { \n            text-align: center; \n            background-color: var(--primary-color) !important; \n            color: var(--header-text-color) !important; \n            padding: 2rem 1.5rem; \n        }\n        #survey-wrapper header h1 { \n            margin: 0; \n            font-size: 2rem !important; \n            color: var(--header-text-color) !important;\n            line-height: 1.2 !important;\n        }\n        #survey-wrapper main { padding: 2rem; }\n        \n        .form-section {\n            background-color: var(--card-secondary-bg-color) !important;\n            padding: 1.5rem;\n            margin-bottom: 1.5rem;\n            border-radius: 8px;\n            border-left: 5px solid var(--primary-color);\n            transition: background-color 0.3s;\n        }\n\n        .survey-section-header { \n            margin-top: 0; \n            font-size: 1.35rem !important; \n            font-weight: 700 !important;\n            color: var(--primary-color) !important; \n            border-bottom: 1px solid var(--border-color); \n            padding-bottom: 0.75rem; \n            margin-bottom: 1.5rem; \n            line-height: 1.4 !important;\n        }\n        \n        .introduction-text {\n            background-color: var(--card-secondary-bg-color);\n            padding: 1rem 1.5rem;\n            border-radius: 8px;\n            margin-bottom: 1.5rem;\n            font-size: 1rem !important;\n        }\n        .introduction-text ul {\n            margin: 0;\n            padding-left: 1.5rem;\n            list-style-type: disc;\n        }\n        .introduction-text li {\n            margin-bottom: 0.5rem;\n        }\n\n        .form-group { margin-bottom: 1.5rem; }\n        .form-group label, .form-group legend {\n            display: block;\n            font-weight: 600;\n            margin-bottom: 0.5rem;\n            color: var(--text-color) !important;\n            font-size: 1.05rem !important;\n        }\n\n        .form-group input[type=\"text\"], \n        textarea, \n        select,\n        #language-select {\n            width: 100%;\n            padding: 0.75rem;\n            border: 2px solid var(--border-color) !important;\n            border-radius: 8px;\n            background-color: var(--input-bg) !important;\n            color: var(--input-text) !important;\n            font-size: 1rem !important;\n            transition: border-color 0.3s;\n        }\n        \n        \/* New Locked\/Disabled Logic *\/\n        .locked-input {\n            background-color: var(--disabled-bg) !important;\n            pointer-events: none; \/* Prevents clicking\/changing *\/\n            opacity: 0.8;\n        }\n        \n        .select2-container.locked-input .select2-selection {\n            background-color: var(--disabled-bg) !important;\n            pointer-events: none;\n        }\n\n        .form-group input[type=\"text\"]:focus, \n        textarea:focus, \n        select:focus {\n            border-color: var(--primary-color) !important;\n            outline: none;\n        }\n\n        .radio-grid {\n            display: grid;\n            grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n            gap: 0.75rem;\n        }\n        .radio-grid label {\n            font-weight: normal;\n            display: flex;\n            align-items: center;\n            gap: 0.5rem;\n            background: var(--card-bg-color);\n            padding: 0.5rem;\n            border-radius: 6px;\n            border: 1px solid var(--border-color);\n            cursor: pointer;\n        }\n        [data-theme=\"dark\"] .radio-grid label {\n            background-color: #2c2c2c !important;\n            border-color: #444 !important;\n        }\n        \n        .controls { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 1rem; margin-bottom: 2rem; padding-bottom: 1.5rem; border-bottom: 1px solid var(--border-color); }\n        .controls-left { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; }\n        .controls button { padding: 0.75rem 1rem; font-size: 1rem; border-radius: 8px; border: 1px solid var(--border-color); background-color: var(--card-bg-color); color: var(--text-color); cursor: pointer; transition: background-color 0.2s, border-color 0.2s; }\n        \n        #dark-mode-toggle { font-size: 1.5rem; padding: 0.5rem 0.75rem; background: transparent !important; border: none !important; color: var(--text-color) !important; }\n        #print-button { background-color: var(--button-secondary-bg) !important; color: white !important; }\n        #print-button:hover { opacity: 0.9; }\n\t\t#reset-button {\n            padding: 0.75rem 1rem;\n            font-size: 1rem;\n            background-color: #dc3545 !important;\n            color: white !important;\n            border: none;\n            border-radius: 8px;\n            cursor: pointer;\n        }\n        #reset-button:hover { background-color: #c82333 !important; }\n\n        #language-select {\n            appearance: none;\n            -webkit-appearance: none;\n            background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='%236c757d'%3E%3Cpath d='M7 10l5 5 5-5H7z'\/%3E%3C\/svg%3E\") !important;\n            background-repeat: no-repeat !important;\n            background-position: right 0.75rem center !important;\n            background-size: 1.2rem !important;\n            width: auto;\n            min-width: 200px;\n        }\n\n        \/* Select2 Dark Mode Fixes *\/\n        [data-theme=\"dark\"] .select2-container--bootstrap-5 .select2-selection {\n            background-color: var(--input-bg) !important;\n            color: var(--input-text) !important;\n            border-color: var(--border-color) !important;\n        }\n        [data-theme=\"dark\"] .select2-container--bootstrap-5 .select2-selection__rendered {\n            color: var(--input-text) !important;\n        }\n        [data-theme=\"dark\"] .select2-dropdown {\n            background-color: var(--card-bg-color) !important;\n            color: var(--input-text) !important;\n            border-color: var(--border-color) !important;\n        }\n        [data-theme=\"dark\"] .select2-results__option {\n            color: var(--input-text) !important;\n        }\n        [data-theme=\"dark\"] .select2-results__option--highlighted {\n            background-color: var(--primary-color) !important;\n            color: white !important;\n        }\n\n        .header-logo {\n            max-width: 150px;\n            height: auto;\n            display: block;\n            margin: 0 auto 1rem auto;\n        }\n\n        \/* Likert Scale *\/\n        .likert-scale { display: grid; grid-template-columns: repeat(5, 1fr); gap: 0.5rem; margin-top: 1rem; }\n        .likert-scale label { \n            display: flex; flex-direction: column; align-items: center; text-align: center; \n            font-size: 1rem !important; \n            cursor: pointer; padding: 1rem 0.5rem; border-radius: 8px; \n            transition: background-color 0.2s ease; \n            border: 1px solid transparent;\n        }\n        .likert-scale label:hover { background-color: rgba(128,128,128,0.1); border-color: var(--border-color); }\n        .likert-option { display: flex; align-items: center; gap: 0.5rem; margin-top: 0.5rem; font-weight: 500; }\n        .likert-option input[type=\"radio\"] { transform: scale(1.3); }\n        .emoji { font-size: 2.2rem; margin-bottom: 0.5rem; }\n\n        \/* Tags *\/\n        .dimension-tags-container { display: flex; flex-wrap: wrap; gap: 0.75rem; margin-top: 1rem; }\n        .dimension-tag { \n            padding: 0.6rem 1.2rem; \n            border: 1px solid var(--border-color); \n            border-radius: 25px; \n            background-color: var(--card-bg-color); \n            color: var(--text-color); \n            cursor: pointer; \n            transition: all 0.2s ease; \n            font-size: 0.95rem; \n        }\n        .dimension-tag.selected { background-color: var(--primary-color); color: var(--header-text-color); border-color: var(--primary-color); }\n        \n        #submit-button {\n            width: 100%;\n            padding: 1.2rem;\n            font-size: 1.25rem;\n            font-weight: bold;\n            background-color: #9F2B68 !important;\n            color: white !important;\n            border: none;\n            border-radius: 8px;\n            cursor: pointer;\n            margin-top: 2rem;\n            transition: background-color 0.2s ease;\n        }\n        #submit-button:hover { background-color: #36013F !important; }\n\n        footer { text-align: center; margin-top: 2rem; padding: 1.5rem; background-color: var(--card-secondary-bg-color) !important; font-size: 0.95rem; color: #6c757d !important; }\n        \n        .modal-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.7); display: none; justify-content: center; align-items: center; z-index: 1000; }\n        .modal-content { background-color: var(--card-bg-color); padding: 2rem; border-radius: 12px; width: 90%; max-width: 600px; max-height: 80vh; overflow-y: auto; position: relative; color: var(--text-color); }\n        \n        .chart-section, .score-section { display: none !important; }\n\n        @media (max-width: 768px) {\n            #survey-wrapper main { padding: 1.5rem 1rem; }\n            .likert-scale { grid-template-columns: 1fr; gap: 1rem; }\n            .likert-scale label { flex-direction: row; text-align: left; padding: 0.75rem; border: 1px solid var(--border-color); }\n            .emoji { margin-right: 1rem; margin-bottom: 0; }\n            .likert-option { margin-top: 0; }\n        }\n\n        .select2-container .select2-selection--single { height: 48px !important; }\n        .select2-container--default .select2-selection--single .select2-selection__rendered { line-height: 46px !important; padding-left: 1rem !important; }\n        .select2-container--default .select2-selection--single .select2-selection__arrow { height: 46px !important; }\n\n        \/* Helper class for print text - hidden on screen *\/\n        .print-only-text { display: none; }\n\n        \/* ---------------------------------------------------- *\/\n        \/* PRINT STYLES                                         *\/\n        \/* ---------------------------------------------------- *\/\n        @media print {\n            body { background-color: white !important; color: black !important; font-size: 11pt; }\n            \n            #survey-wrapper, .form-section, footer { box-shadow: none; border: 1px solid #ccc; }\n            #survey-wrapper { margin: 0; max-width: 100%; width: 100%; background: white !important; }\n            \n            .form-section { margin-bottom: 0.3cm !important; padding: 0.3cm 0.3cm 0 0.3cm !important; }\n            \n            .controls, footer, #submit-button, #submission-count, #reset-button, #dark-mode-toggle, #print-button { display: none !important; }\n            \n            \/* Fix Bug 1: Removed hidden display for comments\/appraisal *\/\n            .comments-section, .appraisal-section { display: block !important;  }\n            \n            .comments-section { page-break-before: always; break-before: page;  }\n            \n            header { text-align: left; padding: 0 0 0.5cm 0; border-bottom: 2px solid black; background-color: #fff !important; color: #000 !important;}\n            header h1 { font-size: 16pt; margin: 0; }\n            header p { display: block; font-size: 11pt; opacity: 1; }\n            main { padding: 0.1cm 0; }\n            \n            .question { padding: 0.2cm; margin: 0 0 0 0; border: 1px solid #ccc; border-radius: 0; border-left: 3px solid #888; page-break-inside: avoid; }\n            .question p { font-size: 11pt; margin: 0 0 0 0; }\n            \n            .mypsq-section { page-break-before: always; break-before: page; }\n            \n            \/* --- UPDATED PRINT STYLING FOR MyPSQ (BAHAGIAN C) --- *\/\n            .mypsq-section .question {\n                margin-bottom: 5px !important; \/* Reduced vertical spacing *\/\n                padding-bottom: 5px !important; \/* Reduced padding *\/\n                border-bottom: 1px solid #eee;\n            }\n            .mypsq-section p {\n                font-size: 11pt !important;\n                margin-bottom: 2px !important; \/* Move text closer to scale *\/\n            }\n\n            .likert-scale { display: grid; grid-template-columns: repeat(5, 1fr); gap: 0.2cm; \/* Reduced gap *\/ }\n            \n            \/* Reduced Likert Padding and Font in Print *\/\n            .likert-scale label { \n                flex-direction: column; \n                font-size: 8pt !important; \/* Smaller font as requested *\/\n                padding: 0 !important; \/* Removed padding for compactness *\/\n                border: 1px solid transparent; \n            }\n            .emoji { display: none; }\n            .likert-option { \n                margin: 0; \n                gap: 0; \n                display: flex; \n                flex-direction: column; \n                align-items: center;\n                font-size: 8pt !important; \/* Match option text size *\/\n            }\n            .likert-option input[type=\"radio\"] { \n                margin-bottom: 1px; \n                transform: scale(0.8); \/* Slightly smaller radio button *\/\n            }\n            .likert-scale label.selected-for-print { background-color: #e0e0e0 !important; border: 1px solid #333; border-radius: 4px; }\n            \n            \/* --- UPDATED PRINT STYLING FOR INFRASTRUCTURE TAGS --- *\/\n            .dimension-tags-container {\n                gap: 3px !important;\n                margin: 5px 0 !important;\n                display: flex;\n                flex-wrap: wrap;\n            }\n            .dimension-tag {\n                padding: 2px 6px !important;\n                font-size: 8pt !important;\n                border: 1px solid #555 !important;\n                background: none !important;\n                color: #000 !important;\n                border-radius: 4px !important;\n                line-height: 1.2;\n            }\n            .dimension-tag.selected {\n                background: #ccc !important;\n                font-weight: bold;\n                border-color: #000 !important;\n            }\n\n            .chart-section, .score-section { display: none !important; }\n            .header-logo { max-width: 100px; }\n            \n            .select2-container, select { display: none !important; }\n            .print-only-text { \n                display: block !important; \n                font-family: inherit; \n                font-size: 11pt; \n                color: black; \n                border: 1px solid #ccc; \n                padding: 4px; \n                min-height: 25px; \n                margin-top: 5px;\n                border-radius: 4px;\n            }\n\n            .radio-grid label {\n                background: none !important;\n                border: 1px solid #ccc !important;\n                padding: 2px 5px !important; \n                margin: 0;\n                font-size: 10pt !important;\n                color: #000 !important;\n                width: auto;\n                border-radius: 4px;\n            }\n            .radio-grid { gap: 5px !important; }\n\n            input[type=\"text\"].locked-input {\n                background-color: transparent !important;\n                border: 1px solid #ccc !important;\n                color: black !important;\n            }\n        }\n    <\/style>\n<\/head>\n\n<body>\n    <!-- BROWSER WARNING BANNER -->\n    <noscript>\n        <div style=\"background-color: #dc3545; color: white; padding: 15px; text-align: center; font-weight: bold; z-index: 9999;\">\n            Telefon anda menghalang skrip borang ini. Sila buka pautan ini menggunakan aplikasi GOOGLE CHROME atau SAFARI.\n        <\/div>\n    <\/noscript>\n\n    <div id=\"webview-warning\" style=\"display: none; background-color: #ffc107; color: #856404; padding: 15px; text-align: center; font-weight: bold; border-bottom: 2px solid #ffeeba;\">\n        \u26a0\ufe0f Perhatian: Anda sedang membuka borang ini di dalam aplikasi pihak ketiga. <br>\n        Sila tekan ikon menu (tiga titik di penjuru atas) dan pilih <b>\"Open in Browser \/ Buka di Pelayar (Chrome\/Safari)\"<\/b> untuk memastikan data anda berjaya dihantar.\n    <\/div>\n\n    <script>\n        var userAgent = navigator.userAgent || navigator.vendor || window.opera;\n        var isInAppBrowser = (userAgent.indexOf(\"FBAN\") > -1) || \n                             (userAgent.indexOf(\"FBAV\") > -1) || \n                             (userAgent.indexOf(\"Instagram\") > -1) || \n                             (userAgent.indexOf(\"Line\") > -1) || \n                             (userAgent.indexOf(\"WeChat\") > -1) ||\n                             (userAgent.indexOf(\"MicroMessenger\") > -1);\n        \n        if (isInAppBrowser) {\n            document.getElementById('webview-warning').style.display = 'block';\n        }\n    <\/script>\n    <!-- END BROWSER WARNING -->\n\n    <div id=\"survey-wrapper\" class=\"container\">\n        <header>\n\t\t    <img decoding=\"async\" src=\"https:\/\/drive.google.com\/thumbnail?id=1rPkt4cTHfbPBMaCQaEgwqnUSj8RDfSSO&sz=w1000\" style=\"width:150px;height:auto;\" class=\"header-logo\">\n            <h1 id=\"survey-title\" style=\"font-weight:bold;\"><\/h1>\n        <\/header>\n\n        <main>\n            <section class=\"controls\">\n                <div class=\"controls-left\">\n                    <label for=\"language-select\" id=\"lang-label\" style=\"font-weight:bold;\"><\/label>\n                    <select id=\"language-select\">\n                        <option value=\"ms\">Bahasa Malaysia<\/option>\n                        <option value=\"en\">English<\/option>\n                        <option value=\"zh\">\u4e2d\u6587 (Mandarin)<\/option>\n                        <option value=\"ta\">\u0ba4\u0bae\u0bbf\u0bb4\u0bcd (Tamil)<\/option>\n                        <option value=\"iban\">Bahasa Iban<\/option>\n                        <option value=\"kd\" hidden>Bahasa Kadazandusun<\/option>\n                    <\/select>\n                <\/div>\n                <div class=\"controls-right\">\n                     <button id=\"dark-mode-toggle\" title=\"Toggle Dark Mode\">\ud83c\udf19<\/button>\n                     <button id=\"print-button\"><\/button>\n\t\t\t\t\t <button id=\"reset-button\"><\/button>\n                <\/div>\n            <\/section>\n\n            <div class=\"introduction-text\" id=\"intro-text-container\"><\/div>\n\n            <form id=\"surveyForm\">\n                <span id=\"submission-count\" style=\"font-weight: normal; font-size: 0.9rem; color: #6c757d;\"><\/span>\n                \n                <section class=\"form-section demographics-section\">\n                    <h2 id=\"demographics-title\" class=\"survey-section-header\"><\/h2>\n                    \n                    <div class=\"form-group\">\n                        <label for=\"state-select\" id=\"state-label\"><\/label>\n                        <select id=\"state-select\" style=\"width: 100%;\" required><option><\/option><\/select>\n                        <div id=\"print-state-select\" class=\"print-only-text\"><\/div>\n                    <\/div>\n\n                    <div class=\"form-group\">\n                        <label for=\"hospital-select\" id=\"hospital-label\"><\/label>\n                        <select id=\"hospital-select\" style=\"width: 100%;\" required><option><\/option><\/select>\n                        <div id=\"print-hospital-select\" class=\"print-only-text\"><\/div>\n                    <\/div>\n                    \n                    <div class=\"form-group\">\n                        <fieldset>\n                            <legend id=\"gender-label\"><\/legend>\n                            <div class=\"radio-grid\" id=\"gender-options\"><\/div>\n                        <\/fieldset>\n                    <\/div>\n\n                    <div class=\"form-group\">\n                        <fieldset>\n                            <legend id=\"age-label\"><\/legend>\n                            <div class=\"radio-grid\" id=\"age-options\"><\/div>\n                        <\/fieldset>\n                    <\/div>\n\n                    <div class=\"form-group\">\n                        <fieldset>\n                            <legend id=\"ethnicity-label\"><\/legend>\n                            <div class=\"radio-grid\" id=\"ethnicity-options\"><\/div>\n                        <\/fieldset>\n                    <\/div>\n                    \n                    <div class=\"form-group\">\n                        <fieldset>\n                            <legend id=\"marital-status-label\"><\/legend>\n                            <div class=\"radio-grid\" id=\"marital-status-options\"><\/div>\n                        <\/fieldset>\n                    <\/div>\n                    \n                    <div class=\"form-group\">\n                        <fieldset>\n                            <legend id=\"education-label\"><\/legend>\n                            <div class=\"radio-grid\" id=\"education-options\"><\/div>\n                        <\/fieldset>\n                    <\/div>\n\n                    <div class=\"form-group\">\n                        <fieldset>\n                            <legend id=\"occupation-label\"><\/legend>\n                            <div class=\"radio-grid\" id=\"occupation-options\"><\/div>\n                        <\/fieldset>\n                    <\/div>\n                <\/section>\n\n                <section class=\"form-section context-section\">\n                    <h2 id=\"context-title\" class=\"survey-section-header\"><\/h2>\n                    \n                    <div class=\"form-group\">\n                        <fieldset>\n                            <legend id=\"treatment-location-label\"><\/legend>\n                            <div id=\"treatment-location-options\"><\/div>\n                        <\/fieldset>\n                    <\/div>\n\n                    <div class=\"form-group\">\n                        <label for=\"service-location-select\" id=\"service-location-label\"><\/label>\n                        <select id=\"service-location-select\" style=\"width: 100%;\" required>\n                            <option><\/option> \n                        <\/select>\n                        <div id=\"print-service-select\" class=\"print-only-text\"><\/div>\n                    <\/div>\n                <\/section>\n                \n                <section class=\"mypsq-section form-section\">\n                    <h2 id=\"mypsq-title\" class=\"survey-section-header\"><\/h2>\n                    <fieldset class=\"form-section question\" style=\"padding: 0; background: transparent !important; box-shadow: none; border: none; border-left: none;\">\n                        <p id=\"q1-text\" style=\"font-weight:600; font-size:1.1rem;\"><\/p>\n                        <div class=\"likert-scale\" id=\"q1-scale\"><\/div>\n                    <\/fieldset>\n                    <fieldset class=\"form-section question\" style=\"padding: 0; background: transparent !important; box-shadow: none; border: none; border-left: none;\">\n                        <p id=\"q2-text\" style=\"font-weight:600; font-size:1.1rem;\"><\/p>\n                        <div class=\"likert-scale\" id=\"q2-scale\"><\/div>\n                    <\/fieldset>\n                    <fieldset class=\"form-section question\" style=\"padding: 0; background: transparent !important; box-shadow: none; border: none; border-left: none;\">\n                        <p id=\"q3-text\" style=\"font-weight:600; font-size:1.1rem;\"><\/p>\n                        <div class=\"likert-scale\" id=\"q3-scale\"><\/div>\n                    <\/fieldset>\n                    <fieldset class=\"form-section question\" style=\"padding: 0; background: transparent !important; box-shadow: none; border: none; border-left: none;\">\n                        <p id=\"q4-text\" style=\"font-weight:600; font-size:1.1rem;\"><\/p>\n                        <div class=\"likert-scale\" id=\"q4-scale\"><\/div>\n                    <\/fieldset>\n                    <fieldset class=\"form-section question\" style=\"padding: 0; background: transparent !important; box-shadow: none; border: none; border-left: none;\">\n                        <p id=\"q5-text\" style=\"font-weight:600; font-size:1.1rem;\"><\/p>\n                        <div class=\"likert-scale\" id=\"q5-scale\"><\/div>\n                    <\/fieldset>\n                    <fieldset class=\"form-section question\" style=\"padding: 0; background: transparent !important; box-shadow: none; border: none; border-left: none;\">\n                        <p id=\"q6-text\" style=\"font-weight:600; font-size:1.1rem;\"><\/p>\n                        <div class=\"likert-scale\" id=\"q6-scale\"><\/div>\n                    <\/fieldset>\n                    <fieldset class=\"form-section question\" style=\"padding: 0; background: transparent !important; box-shadow: none; border: none; border-left: none;\">\n                        <p id=\"q7-text\" style=\"font-weight:600; font-size:1.1rem;\"><\/p>\n                        <div class=\"likert-scale\" id=\"q7-scale\"><\/div>\n                    <\/fieldset>\n                <\/section>\n\n                <section class=\"form-section comments-section\">\n                    <h2 id=\"comments-title\" class=\"survey-section-header\"><\/h2>\n                    <textarea id=\"comments-textarea\" rows=\"5\"><\/textarea>\n                <\/section>\n\n                <section class=\"form-section appraisal-section\">\n                    <h2 id=\"appraisal-title\" class=\"survey-section-header\"><\/h2>\n                    <textarea id=\"appraisal-textarea\" rows=\"3\"><\/textarea>\n                <\/section>\n\n                <section class=\"form-section facilities-section\">\n                    <h2 id=\"facilities-title\" class=\"survey-section-header\"><\/h2>\n                    <fieldset class=\"question\" style=\"border:none; padding:0;\">\n                        <p id=\"q-facilities-text\" style=\"font-weight:600; font-size:1.1rem;\"><\/p>\n                        <div class=\"likert-scale\" id=\"q-facilities-scale\"><\/div>\n                    <\/fieldset>\n\t\t\t\t\t<br>\n\t\t\t\t\t<p class=\"question\" id=\"facilities-comment-label-id\" style=\"border:none; padding:0; font-weight:600; margin-top:1rem;\"><\/p>\n                    <div id=\"facilities-tags-container\" class=\"dimension-tags-container\"><\/div>\n                    <textarea id=\"facilities-textarea\" rows=\"3\"><\/textarea>\n                <\/section>\n\n            <\/form>\n\n            <section class=\"form-section chart-section\">\n                <h2 id=\"chart-title\" class=\"survey-section-header\"><\/h2>\n                <div class=\"chart-container\">\n                    <canvas id=\"satisfactionRadarChart\"><\/canvas>\n                    <img id=\"chart-for-print\" alt=\"Satisfaction Score Chart\" style=\"display: none;\">\n                <\/div>\n            <\/section>\n\n            <section class=\"form-section score-section\" >\n                 <div id=\"score-container\" class=\"score-container\">\n                    <h2 id=\"overall-score-title\" class=\"survey-section-header\"><\/h2>\n                    <span id=\"score-percentage\">0%<\/span>\n                 <\/div>\n                 <p class=\"instruction-text\" id=\"score-explanation\"><\/p>\n            <\/section>\n\n            <button type=\"submit\" id=\"submit-button\" form=\"surveyForm\"><\/button>\n\n        <\/main>\n        \n        <footer><p id=\"footer-text\"><\/p><\/footer>\n    <\/div>\n\n    <div id=\"summary-modal\" class=\"modal-overlay\">\n        <div class=\"modal-content\">\n            <button class=\"modal-close\" id=\"modal-close-button\">\u00d7<\/button>\n            <h2 id=\"modal-title\"><\/h2>\n            <pre id=\"modal-summary\"><\/pre>\n        <\/div>\n    <\/div>\n\n\n<script>\n    \/\/ Define the GVIZ callback globally so it can be called by the script tag\n    let gvizData = [];\n    function handleGvizResponse(response) {\n        if (response.status === 'error') {\n            console.error('Error in query: ' + response.errors[0].detailed_message);\n            return;\n        }\n        \n        const rows = response.table.rows;\n        gvizData = [];\n        \n        for (let i = 0; i < rows.length; i++) {\n            const row = rows[i];\n            const hospital = row.c[0] ? row.c[0].v : null;\n            const outpatient = row.c[1] ? row.c[1].v : 0; \n            const inpatient = row.c[2] ? row.c[2].v : 0;\n            \n            if (hospital) {\n                gvizData.push({\n                    hospital: hospital,\n                    inpatient: inpatient,\n                    outpatient: outpatient\n                });\n            }\n        }\n        console.log(\"GVIZ Data loaded:\", gvizData);\n        if (typeof window.updateSubmissionCount === 'function') {\n            window.updateSubmissionCount();\n        }\n    }\n\n    document.addEventListener('DOMContentLoaded', () => {\n        \n        \/\/ ==========================================\n        \/\/ NEW APPS SCRIPT WEB APP URL GOES HERE!\n        \/\/ Replace this URL once you deploy your Apps Script\n        const APPS_SCRIPT_URL = \"https:\/\/script.google.com\/macros\/s\/AKfycbzZT6eV9KWGKB5vyync3APXfGhVujJhbPt0cARNkdNcQc8a4IOFqfa9atnlyNQTh9WGMw\/exec\";\n        \/\/ ==========================================\n\n        const populateServiceSelect = () => {\n            const serviceSelect = $('#service-location-select');\n            serviceSelect.empty().append('<option><\/option>'); \n            servicesList.forEach(service => {\n                serviceSelect.append(new Option(service, service));\n            });\n        };\n        \n        const translations = {\n            ms: {\n                title: \"Borang Soal Selidik Kepuasan Pesakit Malaysia (MyPSQ)\", langLabel: \"Pilih Bahasa:\", printBtn: \"Cetak Borang\", resetBtn: \"Set Semula\",submitBtn: \"Hantar Maklum Balas\",\n                introHtml: \"<ul><li>Semua soalan dalam borang ini adalah merujuk kepada pengalaman perkhidmatan kesihatan anda yang terkini.<\/li><li>Jika borang ini diisi oleh waris\/wakil\/penjaga pesakit, maklumat hendaklah merujuk kepada maklumat\/pengalaman pesakit.<\/li><\/ul>\",\n                demographicsTitle: \"Bahagian A: Maklumat Demografi\", stateLabel: \"Negeri:\", hospitalLabel: \"Hospital\/Fasiliti:\", genderLabel: \"Jantina:\", ageLabel: \"Kumpulan Umur:\", ethnicityLabel: \"Bangsa:\", maritalStatusLabel: \"Status Perkahwinan:\", educationLabel: \"Tahap Pendidikan Tertinggi:\", occupationLabel: \"Status Pekerjaan:\",\n                genderOptions: { male: \"Lelaki\", female: \"Perempuan\" },\n                ageOptions: { a: \"\u2264 17 tahun\", b: \"18 - 30 tahun\", c: \"31 - 40 tahun\", d: \"41 - 50 tahun\", e: \"51 - 60 tahun\", f: \"\u2265 61 tahun\" },\n                ethnicityOptions: { malay: \"Melayu\", chinese: \"Cina\", indian: \"India\", sabah: \"Bumiputera Sabah\", sarawak: \"Bumiputera Sarawak\", others: \"Lain-lain\" },\n                maritalStatusOptions: { married: \"Berkahwin\", single: \"Bujang\", divorced_widowed: \"Bercerai \/ Duda \/ Janda\" },\n                educationOptions: { none: \"Tiada Pendidikan Formal\", primary: \"Sekolah Rendah\", secondary: \"Sekolah Menengah\", tertiary: \"Peringkat Sijil, Diploma, Ijazah dan ke atas\" },\n                occupationOptions: { gov: \"Penjawat Awam\", private: \"Swasta\", self: \"Bekerja Sendiri\", unemployed: \"Tidak Bekerja\", student: \"Pelajar\", retired: \"Pesara\", housewife: \"Suri Rumah\", others: \"Lain-lain\" },\n                contextTitle: \"Bahagian B: Konteks Rawatan\", treatmentLocationLabel: \"Lokasi mendapatkan rawatan (sila nyatakan):\", treatmentLocationOptions: { inpatient: \"Pesakit Dalam\", outpatient: \"Pesakit Luar\" },\n                serviceLocationLabel: \"Nyatakan jabatan utama perkhidmatan yang dinilai:\", \n                facilitiesTitle: \"Bahagian D: Penilaian Infrastruktur\",\n                facilitiesQuestion: \"Apakah tahap kepuasan anda terhadap infrastruktur yang disediakan (cth: tempat letak kereta, kawasan menunggu, tandas, lobi)?\",\n                facilitiesTags: [\"Tempat Letak Kereta\", \"Kawasan Menunggu\", \"Tandas\", \"Lobi\", \"Kafe\/Kafeteria\", \"Papan Tanda\", \"Surau\", \"Wad\",\"Klinik\", \"Lif\", \"Lain-Lain\"], facilitiesCommentLabel: \"Sila pilih satu atau lebih infrastruktur yang berkaitan dengan maklum balas anda, kemudian tulis komen anda di bawah.\",\n                mypsqTitle: \"Bahagian C: Penilaian Anda Terhadap Perkhidmatan Kami (MyPSQ)\",\n                scale: [\"Sangat Tidak Setuju\", \"Tidak Setuju\", \"Neutral\", \"Setuju\", \"Sangat Setuju\"],\n                facilitiesScale: [\"Sangat Tidak Berpuas Hati\", \"Tidak Berpuas Hati\", \"Neutral\", \"Berpuas Hati\", \"Sangat Berpuas Hati\"],\n                questions: [\n                    \"1. Saya berpuas hati dengan kualiti perkhidmatan perubatan yang diterima.\", \n                    \"2. Saya berpuas hati dengan kecekapan petugas kesihatan dan ketelitian pemeriksaan yang diberikan.\", \n                    \"3. Saya berpuas hati dengan layanan petugas kesihatan (sikap hormat, prihatin dan tanpa diskriminasi).\", \n                    \"4. Saya berpuas hati dengan penjelasan petugas kesihatan dan kesediaan mereka mendengar kata-kata saya.\", \n                    \"5. Saya berpuas hati dengan kos rawatan dan merasakan ia adalah berpatutan.\", \n                    \"6. Saya berpuas hati dengan masa yang diluangkan oleh petugas kesihatan untuk merawat saya.\", \n                    \"7. Saya berpuas hati dengan temu janji, tempoh menunggu, dan akses kepada perkhidmatan kesihatan.\"\n                ],\n                commentsTitle: \"Komen & Cadangan Mengenai Pengalaman Rawatan dan Perkhidmatan Kami\", \n                appraisalTitle: \"Sila kongsikan pengalaman positif atau penghargaan anda.\",\n                modalTitle: \"Ringkasan Maklum Balas\",\n                footer: \"Tinjauan ini adalah versi PSQ-18 yang dipermudah.\",\n                submissionBlocked: \"Penghantaran disekat kerana kuota untuk lokasi ini telah dicapai (501 atau lebih penghantaran).\"\n            },\n            en: {\n                title: \"Malaysia Patient Satisfaction Questionnaire (MyPSQ)\", langLabel: \"Select Language:\", printBtn: \"Print Form\", resetBtn: \"Reset\", submitBtn: \"Submit Response\",\n                introHtml: \"<ul><li>All questions in this form refer to your most recent healthcare service experience.<\/li><li>If this form is filled in by the patient's next of kin\/representative\/guardian, the information should refer to the patient's information\/experience.<\/li><\/ul>\",\n                demographicsTitle: \"Section A: Demographic Information\", stateLabel: \"State:\", hospitalLabel: \"Hospital\/Facility:\", genderLabel: \"Gender:\", ageLabel: \"Age Group:\", ethnicityLabel: \"Ethnicity:\", maritalStatusLabel: \"Marital Status:\", educationLabel: \"Highest Educational Level:\", occupationLabel: \"Occupational Status:\",\n                genderOptions: { male: \"Male\", female: \"Female\" },\n                ageOptions: { a: \"\u2264 17 years\", b: \"18 - 30 years\", c: \"31 - 40 years\", d: \"41 - 50 years\", e: \"51 - 60 years\", f: \"\u2265 61 years\" },\n                ethnicityOptions: { malay: \"Malay\", chinese: \"Chinese\", indian: \"Indian\", sabah: \"Sabah Bumiputera\", sarawak: \"Sarawak Bumiputera\", others: \"Others\" },\n                maritalStatusOptions: { married: \"Married\", single: \"Single\", divorced_widowed: \"Divorced \/ Widowed\" },\n                educationOptions: { none: \"No Formal Education\", primary: \"Primary School\", secondary: \"Secondary School\", tertiary: \"Certificate, Diploma, Degree and above\" },\n                occupationOptions: { gov: \"Government\", private: \"Private\", self: \"Self-employed\", unemployed: \"Unemployed\", student: \"Student\", retired: \"Retired\", housewife: \"Housewife\", others: \"Others\" },\n                contextTitle: \"Section B: Treatment Context\", treatmentLocationLabel: \"Location for treatment (please state):\", treatmentLocationOptions: { inpatient: \"Inpatient\", outpatient: \"Outpatient\" },\n                serviceLocationLabel: \"Please specify the primary department for the service being evaluated:\", \n                facilitiesTitle: \"Section D: Infrastructure Evaluation\",\n                facilitiesQuestion: \"How satisfied are you with the infrastructure\/ amenities provided (e.g., car park, waiting area, toilet, lobby)?\",\n                facilitiesTags: [\"Car Park\", \"Waiting Area\", \"Toilet\", \"Lobby\", \"Cafe\/Cafeteria\", \"Signage\", \"Prayer Room\", \"Ward\", \"Clinic\", \"Lift\/Elevator\", \"Others\"], facilitiesCommentLabel: \"Please select one or more infrastructure items relevant to your feedback, then write your comments below.\",\n                mypsqTitle: \"Section C: Your Evaluation of Our Service (MyPSQ)\",\n                scale: [\"Strongly Disagree\", \"Disagree\", \"Neutral\", \"Agree\", \"Strongly Agree\"],\n                facilitiesScale: [\"Strongly Dissatisfied\", \"Dissatisfied\", \"Neutral\", \"Satisfied\", \"Strongly Satisfied\"],\n                questions: [\n                    \"1. I am satisfied with the quality of medical service received.\", \n                    \"2. I am satisfied with the competence of health personnel and the thoroughness of the examination provided.\", \n                    \"3. I am satisfied with the care provided by health personnel (respectful attitude, concern, and without discrimination).\", \n                    \"4. I am satisfied with the health personnel's explanation and their willingness to listen to me.\", \n                    \"5. I am satisfied with the cost of treatment and feel it is reasonable.\", \n                    \"6. I am satisfied with the time spent by health personnel to treat me.\", \n                    \"7. I am satisfied with the appointment, waiting time, and access to health services.\"\n                ],\n                commentsTitle: \"Comments & Suggestions on Our Treatment and Service Experience\", \n                appraisalTitle: \"Please share your positive experience or appreciation.\",\n                modalTitle: \"Response Summary\",\n                footer: \"This survey is a simplified version of PSQ-18.\",\n                submissionBlocked: \"Submission is blocked because the quota for this location has been reached (501 or more submissions).\"\n            },\n            iban: {\n                title: \"Malaysia Patient Satisfaction Questionnaire (MyPSQ)\", langLabel: \"Pilih Jaku:\", printBtn: \"Chetak Pom\", resetBtn: \"Bungkar baru\", submitBtn: \"Anjung Saut\",\n                introHtml: \"<ul><li>Semua tanya dalam pom tu bekaul enggau peneleba nuan ba pengawa ngintu pengerai ti pemadu baru.<\/li><li>Enti pom tu diisi kaban belayan\/pengari\/penyaga pesakit, penerang nya patut nuju ngagai penerang\/peneleba pesakit.<\/li><\/ul>\",\n                demographicsTitle: \"Genteran A: Penerang Demografi\", stateLabel: \"Nengeri:\", hospitalLabel: \"Sepital\/Fasiliti:\", genderLabel: \"Jantina:\", ageLabel: \"Raban Umur:\", ethnicityLabel: \"Bansa:\", maritalStatusLabel: \"Status Tikah:\", educationLabel: \"Tikal Pelajar Pemadu Tinggi:\", occupationLabel: \"Status Pengawa:\",\n                genderOptions: { male: \"Laki\", female: \"Indu\" },\n                ageOptions: { a: \"\u2264 17 taun\", b: \"18 - 30 taun\", c: \"31 - 40 taun\", d: \"41 - 50 taun\", e: \"51 - 60 taun\", f: \"\u2265 61 taun\" },\n                ethnicityOptions: { malay: \"Melayu\", chinese: \"Cina\", indian: \"India\", sabah: \"Bumiputera Sabah\", sarawak: \"Bumiputera Sarawak\", others: \"Bansa Bukai\" },\n                maritalStatusOptions: { married: \"Udah Nikah\", single: \"Bedau Nikah\", divorced_widowed: \"Sarak \/ Balu\" },\n                educationOptions: { none: \"Nadai Pelajar Formal\", primary: \"Sekula Primari\", secondary: \"Sekula Sekondari\", tertiary: \"Tikah Sijil, Diploma, Ijazah & ke atas\" },\n                occupationOptions: { gov: \"Gawa Perintah\", private: \"Gawa Swasta\", self: \"Gawa kediri\", unemployed: \"Nadai Gawa\", student: \"Pelajar\", retired: \"Pensin\", housewife: \"Indu rumah\", others: \"Bukai\" },\n                contextTitle: \"Genteran B: Konteks Perubat\", treatmentLocationLabel: \"Endur berubat (padahka):\", treatmentLocationOptions: { inpatient: \"Pesakit Dalam\", outpatient: \"Pesakit Luar\" },\n                serviceLocationLabel: \"Padahka endur servis ti dipechara:\", \n                facilitiesTitle: \"Genteran D: Nilai Infrastruktur\",\n                facilitiesQuestion: \"Nama tikas pemuas ati nuan senentang infrastruktur ti disediaka (cth: palan parking, endur nganti, agu, lobi)?\",\n                facilitiesTags: [\"Palan Parking\", \"Endur Nganti\", \"Agu\", \"Lobi\", \"Kopitiam\/Palan Makai\", \"Papan Tanda\", \"Surau\", \"Wad\", \"Klinik\", \"Lif\", \"Bukai\"], facilitiesCommentLabel: \"Pilih siti tauka lebih infrastruktur ti bekaul enggau timbal nuan, udah nya tulis komen nuan ba baruh tu.\",\n                mypsqTitle: \"Genteran C: Penemu Nuan Bekaul Enggau Servis Kami (MyPSQ)\",\n                scale: [\"Amat Enda Setuju\", \"Enda Setuju\", \"Neutral\", \"Setuju\", \"Amat Setuju\"],\n                facilitiesScale: [\"Amat Enda Puas Ati\", \"Enda Puas Ati\", \"Neutral\", \"Puas Ati\", \"Amat Puas Ati\"],\n                questions: [\n                    \"1. Aku gaga ati enggau kualiti servis perubat ti diterima.\", \n                    \"2. Aku gaga ati enggau penyikar pengereja pengawa pengerai sereta penyilik peresa ti diberi.\", \n                    \"3. Aku gaga ati enggau chara berubat ti disediaka pengereja pengawa pengerai (ulah ti bebasa, siru sereta nadai bechiping).\", \n                    \"4. Aku gaga ati enggau penerang pengereja pengawa pengerai sereta pengeran sida ninga ke jaku aku.\", \n                    \"5. Aku gaga ati enggau ungkus berubat sereta ngasaika iya patut.\", \n                    \"6. Aku gaga ati enggau timpuh ti dikena pengereja pengawa pengerai ngubat aku.\", \n                    \"7. Aku gaga ati enggau temu janji, jam nganti, sereta akses ngagai servis pengerai.\"\n                ],\n                commentsTitle: \"Komen & Lalau Bekaul Enggau Peneleba Perubat enggau Servis Kami\", \n                appraisalTitle: \"Minta kita bekunsika peneleba tauka tanda terima kasih nuan.\",\n                modalTitle: \"Ringkas Saut\",\n                footer: \"Pansik tu versi PSQ-18 ti mudah agi.\",\n                submissionBlocked: \"Penghantaran disekat laban kuota untuk lokasi tu udah datai ba tikas maksimum (501 atau lebih penghantaran).\"\n            },\n            kd: {\n                title: \"Malaysia Patient Satisfaction Questionnaire (MyPSQ)\", langLabel: \"Piliho Boros:\", printBtn: \"Cetak Borang\", resetBtn: \"Posisio Wagu\", submitBtn: \"Pataako Ponilaian\",\n                introHtml: \"<ul><li>Toinsanan uhot id borang diti nopo nga montok kinopurimanan servis kosihatan nu di kawawagu.<\/li><li>Nung borang diti siisian di waris\/wakil\/penjaga do pesakit, oponsol do toinsanan maklumat nopo nga i'tomon montok maklumat\/kinopurimanan di pesakit.<\/li><\/ul>\",\n                demographicsTitle: \"Baagian A: Maklumat Demografi\", stateLabel: \"Pogun:\", hospitalLabel: \"Hospital\/Walai Kosihatan:\", genderLabel: \"Kojantinaan:\", ageLabel: \"Tumpuk Umur:\", ethnicityLabel: \"Tinaru:\", maritalStatusLabel: \"Status Kahwin:\", educationLabel: \"Tahap Pandidikan Atas:\", occupationLabel: \"Status Karaja:\",\n                genderOptions: { male: \"Kusai\", female: \"Tondu\" },\n                ageOptions: { a: \"\u2264 17 toun\", b: \"18 - 30 toun\", c: \"31 - 40 toun\", d: \"41 - 50 toun\", e: \"51 - 60 toun\", f: \"\u2265 61 toun\" },\n                ethnicityOptions: { malay: \"Melayu\", chinese: \"Cina\", indian: \"India\", sabah: \"Bumiputera Sabah\", sarawak: \"Bumiputera Sarawak\", others: \"Suai-suai\" },\n                maritalStatusOptions: { married: \"Nokosawo\", single: \"Bujang\", divorced_widowed: \"Nopitongkiad \/ Balu\" },\n                educationOptions: { none: \"Aiso Pandidikan Formal\", primary: \"Sikul Tosiriba\", secondary: \"Sikul Takawas\", tertiary: \"Sijil, Diploma, Ijazah & kumaa id sawat\" },\n                occupationOptions: { gov: \"Kakitangan Karajaan\", private: \"Swasta\", self: \"Karaja Sondiri\", unemployed: \"Aiso Karaja\", student: \"Susumikul\", retired: \"Pensin\", housewife: \"Suri Rumah\", others: \"Suai-suai\" },\n                contextTitle: \"Baagian B: Konteks Rawatan\", treatmentLocationLabel: \"Kinoyonon maganu rawatan (pokiuhoto):\", treatmentLocationOptions: { inpatient: \"Pesakit id Suang\", outpatient: \"Pesakit id Labus\" },\n                serviceLocationLabel: \"Pokiuhoto koyuon servis di pinonilaian:\", \n                facilitiesTitle: \"Baagian D: Ponilaian Infrastruktur\",\n                facilitiesQuestion: \"Nunu tahad kinasanangan ginawo nu montok infrastruktur di pinotounda (cth: kinoyonon paking, kinoyonon magandad, tandas, lobi)?\",\n                facilitiesTags: [\"Kinoyonon Paking\", \"Kinoyonon Magandad\", \"Tandas\", \"Lobi\", \"Kafe\/Restoran\", \"Papan Tanda\", \"Surau\", \"Wad\", \"Klinik\", \"Lif\", \"Suai-suai\"], facilitiesCommentLabel: \"Pilio iso toi lobi infrastruktur di otopot montok ponilaian nu, om surat no komen nu id siriba.\",\n                mypsqTitle: \"Baagian C: Ponilaian Nu Kumaa Servis Dahai (MyPSQ)\",\n                scale: [\"Au Sokodung Kopio\", \"Au Sokodung\", \"Neutral\", \"Sokodung\", \"Sokodung Kopio\"],\n                facilitiesScale: [\"Au Asanang Ginawo Kopio\", \"Au Asanang Ginawo\", \"Neutral\", \"Asanang Ginawo\", \"Asanang Ginawo Kopio\"],\n                questions: [\n                    \"1. Asanang ginawo ku miampai kualiti servis perubatan di naanu.\", \n                    \"2. Asanang ginawo ku miampai kabaalan mamasok kosihatan om kosilikan pemeriksaan di pinatahak.\", \n                    \"3. Asanang ginawo ku miampai layanan mamasok kosihatan (sikap hormat, prihatin om aiso diskriminasi).\", \n                    \"4. Asanang ginawo ku miampai kointalangan mamasok kosihatan om kosediaan diolo mokinongou boros ku.\", \n                    \"5. Asanang ginawo ku miampai kos rawatan om marasa do patut i.\", \n                    \"6. Asanang ginawo ku miampai timpu di pinoluang di mamasok kosihatan montok merawat doho.\", \n                    \"7. Asanang ginawo ku miampai temu janji, timpu magandad, om akses kumaa servis kosihatan.\"\n                ],\n                commentsTitle: \"Komen & Poniangan Montok Kinopurimanan Rawatan om Servis Dahai\", \n                appraisalTitle: \"Pokionuon do posuango i kinopurimanan nu di asanang toi kopounsikouan.\",\n                modalTitle: \"Ringkasan Ponilaian\",\n                footer: \"Uhupan diti nopo nga iso versi di pinasanganu di PSQ-18.\",\n                submissionBlocked: \"Pongotuan disekat sabab kuota montok lokasi diti nokoopi no (501 toi lobi pongotuan).\"\n            },\n            zh: {\n                title: \"Malaysia Patient Satisfaction Questionnaire (MyPSQ)\", langLabel: \"\u9009\u62e9\u8bed\u8a00:\", printBtn: \"\u6253\u5370\u8868\u683c\", resetBtn: \"\u91cd\u7f6e\", submitBtn: \"\u63d0\u4ea4\u53cd\u9988\",\n                introHtml: \"<ul><li>\u672c\u8868\u683c\u4e2d\u7684\u6240\u6709\u95ee\u9898\u5747\u56f4\u7ed5\u60a8\u8fd1\u671f\u63a5\u53d7\u533b\u7597\u670d\u52a1\u7684\u4f53\u9a8c\u800c\u8bbe\u3002<\/li><li>\u82e5\u672c\u8868\u683c\u7531\u60a3\u8005\u7684\u5bb6\u5c5e\u3001\u4ee3\u8868\u6216\u76d1\u62a4\u4eba\u4ee3\u4e3a\u586b\u5199\uff0c\u8bf7\u6839\u636e\u60a3\u8005\u672c\u4eba\u7684\u5b9e\u9645\u60c5\u51b5\u4e0e\u5c31\u533b\u4f53\u9a8c\u4f5c\u7b54\u3002<\/li><\/ul>\",\n                demographicsTitle: \"A\u90e8\u5206\uff1a\u4e2a\u4eba\u8d44\u6599\", stateLabel: \"\u5dde\u5c5e:\", hospitalLabel: \"\u533b\u9662\/\u533b\u7597\u673a\u6784:\", genderLabel: \"\u6027\u522b:\", ageLabel: \"\u5e74\u9f84\u7ec4:\", ethnicityLabel: \"\u79cd\u65cf:\", maritalStatusLabel: \"\u5a5a\u59fb\u72b6\u51b5:\", educationLabel: \"\u6700\u9ad8\u6559\u80b2\u6c34\u5e73:\", occupationLabel: \"\u804c\u4e1a\u72b6\u51b5:\",\n                genderOptions: { male: \"\u7537\u6027\", female: \"\u5973\u6027\" },\n                ageOptions: { a: \"\u2264 17\u5c81\", b: \"18 - 30\u5c81\", c: \"31 - 40\u5c81\", d: \"41 - 50\u5c81\", e: \"51 - 60\u5c81\", f: \"\u2265 61\u5c81\" },\n                ethnicityOptions: { malay: \"\u9a6c\u6765\u4eba\", chinese: \"\u534e\u4eba\", indian: \"\u5370\u5ea6\u4eba\", sabah: \"\u6c99\u5df4\u571f\u8457\", sarawak: \"\u7802\u62c9\u8d8a\u571f\u8457\", others: \"\u5176\u4ed6\" },\n                maritalStatusOptions: { married: \"\u5df2\u5a5a\", single: \"\u5355\u8eab\", divorced_widowed: \"\u79bb\u5a5a \/ \u4e27\u5076\" },\n                educationOptions: { none: \"\u65e0\u6b63\u89c4\u6559\u80b2\", primary: \"\u5c0f\u5b66\", secondary: \"\u4e2d\u5b66\", tertiary: \"\u8bc1\u4e66\u3001\u6587\u51ed\u3001\u5b66\u4f4d\u53ca\u4ee5\u4e0a\" },\n                occupationOptions: { gov: \"\u653f\u5e9c\u96c7\u5458\", private: \"\u79c1\u4eba\u754c\u96c7\u5458\", self: \"\u81ea\u96c7\u4eba\u58eb\", unemployed: \"\u65e0\u4e1a\", student: \"\u5b66\u751f\", retired: \"\u9000\u4f11\u4eba\u58eb\", housewife: \"\u5bb6\u5ead\u4e3b\u5987\", others: \"\u5176\u4ed6\" },\n                contextTitle: \"B\u90e8\u5206\uff1a\u6cbb\u7597\u80cc\u666f\", treatmentLocationLabel: \"\u63a5\u53d7\u6cbb\u7597\u7684\u5730\u70b9\uff08\u8bf7\u6ce8\u660e\uff09\uff1a\", treatmentLocationOptions: { inpatient: \"\u4f4f\u9662\u75c5\u4eba\", outpatient: \"\u95e8\u8bca\u75c5\u4eba\" },\n                serviceLocationLabel: \"\u8bf7\u6ce8\u660e\u6240\u8bc4\u4f30\u670d\u52a1\u7684\u4e3b\u8981\u5730\u70b9\uff1a\", \n                facilitiesTitle: \"D\u90e8\u5206\uff1a\u57fa\u7840\u8bbe\u65bd\u8bc4\u4f30\",\n                facilitiesQuestion: \"\u60a8\u5bf9\u6240\u63d0\u4f9b\u7684\u57fa\u7840\u8bbe\u65bd\u6ee1\u610f\u5ea6\u5982\u4f55\uff1f\uff08\u4f8b\u5982\uff1a\u505c\u8f66\u573a\u3001\u7b49\u5019\u533a\u3001\u5395\u6240\u3001\u5927\u5385\uff09\",\n                facilitiesTags:[\"\u505c\u8f66\u573a\", \"\u7b49\u5019\u533a\", \"\u5395\u6240\", \"\u5927\u5802\", \"\u5496\u5561\u5385\/\u98df\u5802\", \"\u6307\u793a\u724c\", \"\u7948\u7977\u5ba4\", \"\u75c5\u623f\", \"\u8bca\u6240\", \"\u7535\u68af\", \"\u5176\u4ed6\"], facilitiesCommentLabel: \"\u8bf7\u9009\u62e9\u4e00\u4e2a\u6216\u591a\u4e2a\u4e0e\u60a8\u7684\u53cd\u9988\u76f8\u5173\u7684\u57fa\u7840\u8bbe\u65bd\uff0c\u7136\u540e\u5728\u4e0b\u65b9\u5199\u4e0b\u60a8\u7684\u8bc4\u8bba\u3002\",\n                mypsqTitle: \"C\u90e8\u5206\uff1a\u60a8\u5bf9\u6211\u4eec\u670d\u52a1\u7684\u8bc4\u4ef7 (MyPSQ)\",\n                scale: [\"\u975e\u5e38\u4e0d\u540c\u610f\", \"\u4e0d\u540c\u610f\", \"\u4e2d\u7acb\", \"\u540c\u610f\", \"\u975e\u5e38\u540c\u610f\"],\n                facilitiesScale: [\"\u975e\u5e38\u4e0d\u6ee1\u610f\", \"\u4e0d\u6ee1\u610f\", \"\u4e2d\u7acb\", \"\u6ee1\u610f\", \"\u975e\u5e38\u6ee1\u610f\"],\n                questions: [\n                    \"1. \u6211\u5bf9\u6240\u63a5\u53d7\u7684\u533b\u7597\u670d\u52a1\u8d28\u91cf\u611f\u5230\u6ee1\u610f\u3002\", \n                    \"2. \u6211\u5bf9\u533b\u62a4\u4eba\u5458\u7684\u80fd\u529b\u4e0e\u6240\u63d0\u4f9b\u7684\u4ed4\u7ec6\u68c0\u67e5\u611f\u5230\u6ee1\u610f\u3002\", \n                    \"3. \u6211\u5bf9\u533b\u62a4\u4eba\u5458\u7684\u670d\u52a1\u6001\u5ea6\uff08\u5c0a\u91cd\u3001\u5173\u5fc3\u548c\u65e0\u6b67\u89c6\uff09\u611f\u5230\u6ee1\u610f\u3002\", \n                    \"4. \u6211\u5bf9\u533b\u62a4\u4eba\u5458\u7684\u89e3\u91ca\u4ee5\u53ca\u4ed6\u4eec\u613f\u610f\u8046\u542c\u6211\u7684\u610f\u89c1\u611f\u5230\u6ee1\u610f\u3002\", \n                    \"5. \u6211\u5bf9\u6cbb\u7597\u8d39\u7528\u611f\u5230\u6ee1\u610f\uff0c\u5e76\u8ba4\u4e3a\u5b83\u662f\u5408\u7406\u7684\u3002\", \n                    \"6. \u6211\u5bf9\u533b\u62a4\u4eba\u5458\u4e3a\u6211\u6cbb\u7597\u6240\u82b1\u8d39\u7684\u65f6\u95f4\u611f\u5230\u6ee1\u610f\u3002\", \n                    \"7. \u6211\u5bf9\u9884\u7ea6\u3001\u7b49\u5f85\u65f6\u95f4\u4ee5\u53ca\u83b7\u5f97\u533b\u7597\u670d\u52a1\u7684\u4fbf\u5229\u6027\u611f\u5230\u6ee1\u610f\u3002\"\n                ],\n                commentsTitle: \"\u5173\u4e8e\u6211\u4eec\u7684\u6cbb\u7597\u4f53\u9a8c\u548c\u670d\u52a1\uff0c\u8bf7\u63d0\u51fa\u8bc4\u8bba\u4e0e\u5efa\u8bae\u3002\", \n                appraisalTitle: \"\u8bf7\u5206\u4eab\u60a8\u7684\u6b63\u9762\u4f53\u9a8c\u6216\u8d5e\u8d4f\u4e4b\u8bcd\u3002\",\n                modalTitle: \"\u53cd\u9988\u6458\u8981\",\n                footer: \"\u6b64\u8c03\u67e5\u662fPSQ-18\u7684\u7b80\u5316\u7248\u672c\u3002\",\n                submissionBlocked: \"\u63d0\u4ea4\u5df2\u88ab\u963b\u6b62\uff0c\u56e0\u4e3a\u6b64\u5730\u70b9\u7684\u914d\u989d\u5df2\u6ee1 (501\u6b21\u6216\u66f4\u591a\u63d0\u4ea4)\u3002\"\n            },\n            ta: {\n                title: \"Malaysia Patient Satisfaction Questionnaire (MyPSQ)\", langLabel: \"\u0bae\u0bca\u0bb4\u0bbf \u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bc1:\", printBtn: \"\u0baa\u0b9f\u0bbf\u0bb5\u0ba4\u0bcd\u0ba4\u0bc8 \u0b85\u0b9a\u0bcd\u0b9a\u0bbf\u0b9f\u0bc1\u0b95\", resetBtn: \"\u0bae\u0bc0\u0ba4\u0bcd\u0ba4\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95\", submitBtn: \"\u0b9a\u0bae\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bbf\u0b95\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd\",\n                introHtml: \"<ul><li>\u0b87\u0ba8\u0bcd\u0ba4 \u0baa\u0b9f\u0bbf\u0bb5\u0ba4\u0bcd\u0ba4\u0bbf\u0bb2\u0bcd \u0b89\u0bb3\u0bcd\u0bb3 \u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc1 \u0b95\u0bc7\u0bb3\u0bcd\u0bb5\u0bbf\u0b95\u0bb3\u0bc1\u0bae\u0bcd \u0b89\u0b99\u0bcd\u0b95\u0bb3\u0bbf\u0ba9\u0bcd \u0b9a\u0bc1\u0b95\u0bbe\u0ba4\u0bbe\u0bb0 \u0b9a\u0bc7\u0bb5\u0bc8\u0baf\u0bbf\u0ba9\u0bcd \u0b85\u0ba9\u0bc1\u0baa\u0bb5\u0ba4\u0bcd\u0ba4\u0bc8\u0b95\u0bcd \u0b95\u0bc1\u0bb1\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0ba9\u0bcd\u0bb1\u0ba9.<\/li><li>\u0ba4\u0b95\u0bb5\u0bb2\u0bcd\u0b95\u0bb3\u0bcd \u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc1\u0bae\u0bcd \u0ba8\u0bcb\u0baf\u0bbe\u0bb3\u0bbf\u0baf\u0bc8\u0baa\u0bcd \u0baa\u0bb1\u0bcd\u0bb1\u0bbf\u0baf\u0ba4\u0bbe\u0b95\u0bc1\u0bae\u0bcd \u0b85\u0bb5\u0bb0\u0bcd\u0b95\u0bb3\u0bbf\u0ba9\u0bcd \u0b85\u0ba9\u0bc1\u0baa\u0bb5\u0ba4\u0bcd\u0ba4\u0bc8\u0b95\u0bcd \u0b95\u0bc1\u0bb1\u0bbf\u0baa\u0bcd\u0baa\u0ba4\u0bbe\u0b95\u0bb5\u0bc1\u0bae\u0bcd \u0b87\u0bb0\u0bc1\u0b95\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd.<\/li><\/ul>\",\n                demographicsTitle: \"\u0baa\u0bbf\u0bb0\u0bbf\u0bb5\u0bc1 A: \u0bae\u0b95\u0bcd\u0b95\u0bb3\u0bcd\u0ba4\u0bca\u0b95\u0bc8 \u0ba4\u0b95\u0bb5\u0bb2\u0bcd\", stateLabel: \"\u0bae\u0bbe\u0ba8\u0bbf\u0bb2\u0bae\u0bcd:\", hospitalLabel: \"\u0bae\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb5\u0bae\u0ba9\u0bc8\/\u0ba8\u0bbf\u0bb2\u0bc8\u0baf\u0bae\u0bcd:\", genderLabel: \"\u0baa\u0bbe\u0bb2\u0bbf\u0ba9\u0bae\u0bcd:\", ageLabel: \"\u0bb5\u0baf\u0ba4\u0bc1 \u0baa\u0bbf\u0bb0\u0bbf\u0bb5\u0bc1:\", ethnicityLabel: \"\u0b87\u0ba9\u0bae\u0bcd:\", maritalStatusLabel: \"\u0ba4\u0bbf\u0bb0\u0bc1\u0bae\u0ba3 \u0ba8\u0bbf\u0bb2\u0bc8:\", educationLabel: \"\u0b89\u0baf\u0bb0\u0bcd\u0ba8\u0bbf\u0bb2\u0bc8 \u0b95\u0bb2\u0bcd\u0bb5\u0bbf \u0ba8\u0bbf\u0bb2\u0bc8:\", occupationLabel: \"\u0ba4\u0bca\u0bb4\u0bbf\u0bb2\u0bcd \u0ba8\u0bbf\u0bb2\u0bc8:\",\n                genderOptions: { male: \"\u0b86\u0ba3\u0bcd\", female: \"\u0baa\u0bc6\u0ba3\u0bcd\" },\n                ageOptions: { a: \"\u2264 17 \u0bb5\u0baf\u0ba4\u0bc1\", b: \"18 - 30 \u0bb5\u0baf\u0ba4\u0bc1\", c: \"31 - 40 \u0bb5\u0baf\u0ba4\u0bc1\", d: \"41 - 50 \u0bb5\u0baf\u0ba4\u0bc1\", e: \"51 - 60 \u0bb5\u0baf\u0ba4\u0bc1\", f: \"\u2265 61 \u0bb5\u0baf\u0ba4\u0bc1\" },\n                ethnicityOptions: { malay: \"\u0bae\u0bb2\u0bbe\u0baf\u0bcd\", chinese: \"\u0b9a\u0bc0\u0ba9\u0bb0\u0bcd\", indian: \"\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bb0\u0bcd\", sabah: \"\u0b9a\u0baa\u0bbe \u0baa\u0bc2\u0bae\u0bbf\u0baa\u0bc1\u0ba4\u0bcd\u0bb0\u0bbe\", sarawak: \"\u0b9a\u0bb0\u0bb5\u0bbe\u0b95\u0bcd \u0baa\u0bc2\u0bae\u0bbf\u0baa\u0bc1\u0ba4\u0bcd\u0bb0\u0bbe\", others: \"\u0bae\u0bb1\u0bcd\u0bb1\u0bb5\u0bc8\" },\n                maritalStatusOptions: { married: \"\u0ba4\u0bbf\u0bb0\u0bc1\u0bae\u0ba3\u0bae\u0bbe\u0ba9\u0bb5\u0bb0\u0bcd\", single: \"\u0ba4\u0bbf\u0bb0\u0bc1\u0bae\u0ba3\u0bae\u0bbe\u0b95\u0bbe\u0ba4\u0bb5\u0bb0\u0bcd\", divorced_widowed: \"\u0bb5\u0bbf\u0bb5\u0bbe\u0b95\u0bb0\u0ba4\u0bcd\u0ba4\u0bbe\u0ba9\u0bb5\u0bb0\u0bcd \/ \u0bb5\u0bbf\u0ba4\u0bb5\u0bc8\" },\n                educationOptions: { none: \"\u0bae\u0bc1\u0bb1\u0bc8\u0b9a\u0bbe\u0bb0\u0bbe \u0b95\u0bb2\u0bcd\u0bb5\u0bbf \u0b87\u0bb2\u0bcd\u0bb2\u0bc8\", primary: \"\u0ba4\u0bca\u0b9f\u0b95\u0bcd\u0b95\u0baa\u0bcd \u0baa\u0bb3\u0bcd\u0bb3\u0bbf\", secondary: \"\u0b87\u0b9f\u0bc8\u0ba8\u0bbf\u0bb2\u0bc8\u0baa\u0bcd \u0baa\u0bb3\u0bcd\u0bb3\u0bbf\", tertiary: \"\u0b9a\u0bbe\u0ba9\u0bcd\u0bb1\u0bbf\u0ba4\u0bb4\u0bcd, \u0b9f\u0bbf\u0baa\u0bcd\u0bb2\u0bcb\u0bae\u0bbe, \u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bbe\u0bb0\u0bbf \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b85\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc7\u0bb2\u0bcd\" },\n                occupationOptions: { gov: \"\u0b85\u0bb0\u0b9a\u0bc1 \u0b8a\u0bb4\u0bbf\u0baf\u0bb0\u0bcd\", private: \"\u0ba4\u0ba9\u0bbf\u0baf\u0bbe\u0bb0\u0bcd \u0b8a\u0bb4\u0bbf\u0baf\u0bb0\u0bcd\", self: \"\u0b9a\u0bc1\u0baf \u0ba4\u0bca\u0bb4\u0bbf\u0bb2\u0bcd\", unemployed: \"\u0bb5\u0bc7\u0bb2\u0bc8\u0baf\u0bbf\u0bb2\u0bcd\u0bb2\u0bbe\u0ba4\u0bb5\u0bb0\u0bcd\", student: \"\u0bae\u0bbe\u0ba3\u0bb5\u0bb0\u0bcd\", retired: \"\u0b93\u0baf\u0bcd\u0bb5\u0bc1 \u0baa\u0bc6\u0bb1\u0bcd\u0bb1\u0bb5\u0bb0\u0bcd\", housewife: \"\u0b87\u0bb2\u0bcd\u0bb2\u0ba4\u0bcd\u0ba4\u0bb0\u0b9a\u0bbf\", others: \"\u0bae\u0bb1\u0bcd\u0bb1\u0bb5\u0bc8\" },\n                contextTitle: \"\u0baa\u0bbf\u0bb0\u0bbf\u0bb5\u0bc1 B: \u0b9a\u0bbf\u0b95\u0bbf\u0b9a\u0bcd\u0b9a\u0bc8 \u0b9a\u0bc2\u0bb4\u0bb2\u0bcd\", treatmentLocationLabel: \"\u0b9a\u0bbf\u0b95\u0bbf\u0b9a\u0bcd\u0b9a\u0bc8 \u0baa\u0bc6\u0bb1\u0bc1\u0bae\u0bcd \u0b87\u0b9f\u0bae\u0bcd (\u0ba4\u0baf\u0bb5\u0bc1\u0b9a\u0bc6\u0baf\u0bcd\u0ba4\u0bc1 \u0b95\u0bc1\u0bb1\u0bbf\u0baa\u0bcd\u0baa\u0bbf\u0b9f\u0bb5\u0bc1\u0bae\u0bcd):\", treatmentLocationOptions: { inpatient: \"\u0b89\u0bb3\u0bcd\u0ba8\u0bcb\u0baf\u0bbe\u0bb3\u0bbf\", outpatient: \"\u0bb5\u0bc6\u0bb3\u0bbf\u0ba8\u0bcb\u0baf\u0bbe\u0bb3\u0bbf\" },\n                serviceLocationLabel: \"\u0bae\u0ba4\u0bbf\u0baa\u0bcd\u0baa\u0bc0\u0b9f\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0baf\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0bae\u0bcd \u0b9a\u0bc7\u0bb5\u0bc8\u0baf\u0bbf\u0ba9\u0bcd \u0bae\u0bc1\u0ba4\u0ba9\u0bcd\u0bae\u0bc8\u0ba4\u0bcd \u0ba4\u0bc1\u0bb1\u0bc8\u0baf\u0bc8\u0b95\u0bcd \u0b95\u0bc1\u0bb1\u0bbf\u0baa\u0bcd\u0baa\u0bbf\u0b9f\u0bb5\u0bc1\u0bae\u0bcd:\", \n                facilitiesTitle: \"\u0baa\u0bbf\u0bb0\u0bbf\u0bb5\u0bc1 D: \u0b89\u0bb3\u0bcd\u0b95\u0b9f\u0bcd\u0b9f\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0bae\u0ba4\u0bbf\u0baa\u0bcd\u0baa\u0bc0\u0b9f\u0bc1\",\n                facilitiesQuestion: \"\u0bb5\u0bb4\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0b95\u0b9f\u0bcd\u0b9f\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bbf\u0bb2\u0bcd \u0b89\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0ba4\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0ba4\u0bbf \u0ba8\u0bbf\u0bb2\u0bc8 \u0b8e\u0ba9\u0bcd\u0ba9 (\u0b8e.\u0b95\u0bbe: \u0bb5\u0bbe\u0b95\u0ba9\u0bae\u0bcd \u0ba8\u0bbf\u0bb1\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bae\u0bbf\u0b9f\u0bae\u0bcd, \u0b95\u0bbe\u0ba4\u0bcd\u0ba4\u0bbf\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bae\u0bcd \u0b87\u0b9f\u0bae\u0bcd, \u0b95\u0bb4\u0bbf\u0baa\u0bcd\u0baa\u0bb1\u0bc8, \u0bb2\u0bbe\u0baa\u0bbf)?\",\n                facilitiesTags: [\"\u0bb5\u0bbe\u0b95\u0ba9\u0bae\u0bcd \u0ba8\u0bbf\u0bb1\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bae\u0bbf\u0b9f\u0bae\u0bcd\", \"\u0b95\u0bbe\u0ba4\u0bcd\u0ba4\u0bbf\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bae\u0bcd \u0b87\u0b9f\u0bae\u0bcd\", \"\u0b95\u0bb4\u0bbf\u0baa\u0bcd\u0baa\u0bb1\u0bc8\", \"\u0bb2\u0bbe\u0baa\u0bbf\", \"\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bc1\u0ba3\u0bcd\u0b9f\u0bbf\u0b9a\u0bcd\u0b9a\u0bbe\u0bb2\u0bc8\", \"\u0b85\u0bb1\u0bbf\u0bb5\u0bbf\u0baa\u0bcd\u0baa\u0bc1 \u0baa\u0bb2\u0b95\u0bc8\", \"\u0baa\u0bbf\u0bb0\u0bbe\u0bb0\u0bcd\u0ba4\u0bcd\u0ba4\u0ba9\u0bc8 \u0b85\u0bb1\u0bc8\", \"\u0bb5\u0bbe\u0bb0\u0bcd\u0b9f\u0bc1\", \"\u0bae\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb5\u0bae\u0ba9\u0bc8\", \"\u0bae\u0bbf\u0ba9\u0bcd\u0ba4\u0bc2\u0b95\u0bcd\u0b95\u0bbf\", \"\u0bae\u0bb1\u0bcd\u0bb1\u0bb5\u0bc8\"], facilitiesCommentLabel: \"\u0b89\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b95\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b9f\u0ba9\u0bcd \u0ba4\u0bca\u0b9f\u0bb0\u0bcd\u0baa\u0bc1\u0b9f\u0bc8\u0baf \u0b92\u0ba9\u0bcd\u0bb1\u0bc1 \u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1 \u0b85\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc7\u0bb1\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0b89\u0bb3\u0bcd\u0b95\u0b9f\u0bcd\u0b9f\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bc8\u0ba4\u0bcd \u0ba4\u0bc7\u0bb0\u0bcd\u0ba8\u0bcd\u0ba4\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd, \u0baa\u0bbf\u0ba9\u0bcd\u0ba9\u0bb0\u0bcd \u0b95\u0bc0\u0bb4\u0bc7 \u0b89\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b95\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc8 \u0b8e\u0bb4\u0bc1\u0ba4\u0bb5\u0bc1\u0bae\u0bcd.\",\n                mypsqTitle: \"\u0baa\u0bbf\u0bb0\u0bbf\u0bb5\u0bc1 C: \u0b8e\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bc7\u0bb5\u0bc8\u0baf\u0bbf\u0ba9\u0bcd \u0bae\u0bc0\u0ba4\u0bbe\u0ba9 \u0b89\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0bae\u0ba4\u0bbf\u0baa\u0bcd\u0baa\u0bc0\u0b9f\u0bc1 (MyPSQ)\",\n                scale: [\"\u0bae\u0bc1\u0bb1\u0bcd\u0bb1\u0bbf\u0bb2\u0bc1\u0bae\u0bcd \u0b8f\u0bb1\u0bcd\u0b95\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8\", \"\u0b8f\u0bb1\u0bcd\u0b95\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8\", \"\u0ba8\u0b9f\u0bc1\u0ba8\u0bbf\u0bb2\u0bc8\", \"\u0b8f\u0bb1\u0bcd\u0b95\u0bbf\u0bb1\u0bc7\u0ba9\u0bcd\", \"\u0bae\u0bc1\u0bb1\u0bcd\u0bb1\u0bbf\u0bb2\u0bc1\u0bae\u0bcd \u0b8f\u0bb1\u0bcd\u0b95\u0bbf\u0bb1\u0bc7\u0ba9\u0bcd\"],\n                facilitiesScale: [\"\u0bae\u0bc1\u0bb1\u0bcd\u0bb1\u0bbf\u0bb2\u0bc1\u0bae\u0bcd \u0b85\u0ba4\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0ba4\u0bbf\", \"\u0b85\u0ba4\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0ba4\u0bbf\", \"\u0ba8\u0b9f\u0bc1\u0ba8\u0bbf\u0bb2\u0bc8\", \"\u0ba4\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0ba4\u0bbf\", \"\u0bae\u0bc1\u0bb1\u0bcd\u0bb1\u0bbf\u0bb2\u0bc1\u0bae\u0bcd \u0ba4\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0ba4\u0bbf\"],\n                questions: [\n                    \"1. \u0baa\u0bc6\u0bb1\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0bae\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb5 \u0b9a\u0bc7\u0bb5\u0bc8\u0baf\u0bbf\u0ba9\u0bcd \u0ba4\u0bb0\u0ba4\u0bcd\u0ba4\u0bbf\u0bb2\u0bcd \u0ba8\u0bbe\u0ba9\u0bcd \u0ba4\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0ba4\u0bbf \u0b85\u0b9f\u0bc8\u0b95\u0bbf\u0bb1\u0bc7\u0ba9\u0bcd.\", \n                    \"2. \u0b9a\u0bc1\u0b95\u0bbe\u0ba4\u0bbe\u0bb0\u0baa\u0bcd \u0baa\u0ba3\u0bbf\u0baf\u0bbe\u0bb3\u0bb0\u0bcd\u0b95\u0bb3\u0bbf\u0ba9\u0bcd \u0ba4\u0bbf\u0bb1\u0bae\u0bc8 \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0baa\u0bb0\u0bbf\u0b9a\u0bcb\u0ba4\u0ba9\u0bc8\u0baf\u0bbf\u0ba9\u0bcd \u0ba4\u0bc1\u0bb2\u0bcd\u0bb2\u0bbf\u0baf\u0ba4\u0bcd\u0ba4\u0bbf\u0bb2\u0bcd \u0ba8\u0bbe\u0ba9\u0bcd \u0ba4\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0ba4\u0bbf \u0b85\u0b9f\u0bc8\u0b95\u0bbf\u0bb1\u0bc7\u0ba9\u0bcd.\", \n                    \"3. \u0b9a\u0bc1\u0b95\u0bbe\u0ba4\u0bbe\u0bb0\u0baa\u0bcd \u0baa\u0ba3\u0bbf\u0baf\u0bbe\u0bb3\u0bb0\u0bcd\u0b95\u0bb3\u0bbf\u0ba9\u0bcd \u0b95\u0bb5\u0ba9\u0bbf\u0baa\u0bcd\u0baa\u0bbf\u0bb2\u0bcd (\u0bae\u0bb0\u0bbf\u0baf\u0bbe\u0ba4\u0bc8, \u0b85\u0b95\u0bcd\u0b95\u0bb1\u0bc8 \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0baa\u0bbe\u0b95\u0bc1\u0baa\u0bbe\u0b9f\u0bbf\u0ba9\u0bcd\u0bae\u0bc8) \u0ba8\u0bbe\u0ba9\u0bcd \u0ba4\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0ba4\u0bbf \u0b85\u0b9f\u0bc8\u0b95\u0bbf\u0bb1\u0bc7\u0ba9\u0bcd.\", \n                    \"4. \u0b9a\u0bc1\u0b95\u0bbe\u0ba4\u0bbe\u0bb0\u0baa\u0bcd \u0baa\u0ba3\u0bbf\u0baf\u0bbe\u0bb3\u0bb0\u0bcd\u0b95\u0bb3\u0bbf\u0ba9\u0bcd \u0bb5\u0bbf\u0bb3\u0b95\u0bcd\u0b95\u0bae\u0bcd \u0b85\u0bb3\u0bbf\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b8e\u0ba9\u0bcd \u0bb5\u0bbe\u0bb0\u0bcd\u0ba4\u0bcd\u0ba4\u0bc8\u0b95\u0bb3\u0bc8\u0b95\u0bcd \u0b95\u0bc7\u0b9f\u0bcd\u0b95 \u0ba4\u0baf\u0bbe\u0bb0\u0bbe\u0b95 \u0b87\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0ba4\u0bbf\u0bb2\u0bc1\u0bae\u0bcd \u0ba8\u0bbe\u0ba9\u0bcd \u0ba4\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0ba4\u0bbf \u0b85\u0b9f\u0bc8\u0b95\u0bbf\u0bb1\u0bc7\u0ba9\u0bcd.\", \n                    \"5. \u0b9a\u0bbf\u0b95\u0bbf\u0b9a\u0bcd\u0b9a\u0bc8\u0baf\u0bbf\u0ba9\u0bcd \u0b9a\u0bc6\u0bb2\u0bb5\u0bbf\u0ba9\u0bcd \u0ba4\u0bca\u0b95\u0bc8\u0baf\u0bc8 \u0ba8\u0bbe\u0ba9\u0bcd \u0ba4\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0ba4\u0bbf \u0b85\u0b9f\u0bc8\u0b95\u0bcd\u0b95\u0bbf\u0bb1\u0bc7\u0ba9\u0bcd. \u0bae\u0bc7\u0bb2\u0bc1\u0bae\u0bcd, \u0b85\u0bb5\u0bcd\u0bb5\u0bbf\u0bb2\u0bc8 \u0ba8\u0bbf\u0baf\u0bbe\u0baf\u0bae\u0bbe\u0ba9\u0ba4\u0bc6\u0ba9\u0bcd\u0bb1\u0bc1 \u0b8f\u0bb1\u0bcd\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bca\u0bb3\u0bcd\u0b95\u0bbf\u0bb1\u0bc7\u0ba9\u0bcd.\", \n                    \"6. \u0b8e\u0ba9\u0b95\u0bcd\u0b95\u0bc1 \u0b9a\u0bbf\u0b95\u0bbf\u0b9a\u0bcd\u0b9a\u0bc8 \u0b85\u0bb3\u0bbf\u0b95\u0bcd\u0b95 \u0b9a\u0bc1\u0b95\u0bbe\u0ba4\u0bbe\u0bb0\u0baa\u0bcd \u0baa\u0ba3\u0bbf\u0baf\u0bbe\u0bb3\u0bb0\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bc6\u0bb2\u0bb5\u0bbf\u0b9f\u0bc1\u0bae\u0bcd \u0ba8\u0bc7\u0bb0\u0ba4\u0bcd\u0ba4\u0bbf\u0bb2\u0bcd \u0ba8\u0bbe\u0ba9\u0bcd \u0ba4\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0ba4\u0bbf \u0b85\u0b9f\u0bc8\u0b95\u0bbf\u0bb1\u0bc7\u0ba9\u0bcd.\", \n                    \"7. \u0b9a\u0ba8\u0bcd\u0ba4\u0bbf\u0baa\u0bcd\u0baa\u0bc1, \u0b95\u0bbe\u0ba4\u0bcd\u0ba4\u0bbf\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bae\u0bcd \u0ba8\u0bc7\u0bb0\u0bae\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b9a\u0bc1\u0b95\u0bbe\u0ba4\u0bbe\u0bb0 \u0b9a\u0bc7\u0bb5\u0bc8\u0b95\u0bb3\u0bc1\u0b95\u0bcd\u0b95\u0bbe\u0ba9 \u0b85\u0ba3\u0bc1\u0b95\u0bb2\u0bcd \u0b86\u0b95\u0bbf\u0baf\u0bb5\u0bb1\u0bcd\u0bb1\u0bbf\u0bb2\u0bcd \u0ba8\u0bbe\u0ba9\u0bcd \u0ba4\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0ba4\u0bbf \u0b85\u0b9f\u0bc8\u0b95\u0bbf\u0bb1\u0bc7\u0ba9\u0bcd.\"\n                ],\n                commentsTitle: \"\u0b8e\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bbf\u0b95\u0bbf\u0b9a\u0bcd\u0b9a\u0bc8 \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b9a\u0bc7\u0bb5\u0bc8 \u0b85\u0ba9\u0bc1\u0baa\u0bb5\u0bae\u0bcd \u0b95\u0bc1\u0bb1\u0bbf\u0ba4\u0bcd\u0ba4 \u0b95\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bb3\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0baa\u0bb0\u0bbf\u0ba8\u0bcd\u0ba4\u0bc1\u0bb0\u0bc8\u0b95\u0bb3\u0bcd\", \n                appraisalTitle: \"\u0ba4\u0baf\u0bb5\u0bc1\u0b9a\u0bc6\u0baf\u0bcd\u0ba4\u0bc1 \u0b89\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0ba8\u0bc7\u0bb0\u0bcd\u0bae\u0bb1\u0bc8\u0baf\u0bbe\u0ba9 \u0b85\u0ba9\u0bc1\u0baa\u0bb5\u0bae\u0bcd \u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1 \u0baa\u0bbe\u0bb0\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1\u0b95\u0bb3\u0bc8\u0baa\u0bcd \u0baa\u0b95\u0bbf\u0bb0\u0bb5\u0bc1\u0bae\u0bcd.\",\n                modalTitle: \"\u0baa\u0ba4\u0bbf\u0bb2\u0bcd \u0b9a\u0bc1\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bae\u0bcd\",\n                footer: \"\u0b87\u0ba8\u0bcd\u0ba4 \u0b95\u0ba3\u0b95\u0bcd\u0b95\u0bc6\u0b9f\u0bc1\u0baa\u0bcd\u0baa\u0bc1 PSQ-18 \u0b87\u0ba9\u0bcd \u0b8e\u0bb3\u0bbf\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0baa\u0ba4\u0bbf\u0baa\u0bcd\u0baa\u0bbe\u0b95\u0bc1\u0bae\u0bcd.\",\n                submissionBlocked: \"\u0b87\u0ba8\u0bcd\u0ba4 \u0b87\u0b9f\u0ba4\u0bcd\u0ba4\u0bbf\u0bb1\u0bcd\u0b95\u0bbe\u0ba9 \u0b92\u0ba4\u0bc1\u0b95\u0bcd\u0b95\u0bc0\u0b9f\u0bc1 (501 \u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1 \u0b85\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc7\u0bb1\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0b9a\u0bae\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bbf\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd) \u0b85\u0b9f\u0bc8\u0ba8\u0bcd\u0ba4\u0ba4\u0bbe\u0bb2\u0bcd \u0b9a\u0bae\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bbf\u0baa\u0bcd\u0baa\u0bc1 \u0ba4\u0b9f\u0bc1\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1.\"\n            }\n        };\n\n        \/\/ --- DYNAMIC STATE & HOSPITAL LISTS ---\n        const statesList = [\n            \"Johor\", \"Kedah\", \"Kelantan\", \"Melaka\", \"Negeri Sembilan\", \"Pahang\",\n            \"Perak\", \"Perlis\", \"Pulau Pinang\", \"Sabah\", \"Sarawak\", \"Selangor\",\n            \"Terengganu\", \"W.P. Kuala Lumpur (HKL-HTA-IPR)\", \"W.P. Labuan\", \"W.P. Putrajaya (IKN)\", \"JKWPKL&P\"\n        ];\n\n        \/\/ Hospitals grouped by state\nconst hospitalsByState = {\n  Johor: [\n    \"Hospital Sultan Ismail, Johor Bahru\",\n    \"Hospital Pakar Sultanah Fatimah, Muar\",\n    \"Hospital Enche' Besar Hajjah Khalsom\",\n    \"Hospital Pasir Gudang\",\n    \"Hospital Temenggong Seri Maharaja Tun Ibrahim, Kulai\",\n    \"Hospital Segamat\",\n    \"Hospital Pontian\",\n    \"Hospital Sultanah Nora Ismail\",\n    \"Hospital Tangkak\",\n    \"Hospital Sultanah Aminah, Johor Bahru\",\n    \"Hospital Mersing\",\n    \"Hospital Kota Tinggi\",\n    \"Hospital Permai\"\n  ],\n\n  Kedah: [\n    \"Hospital Yan\",\n    \"Hospital Sultanah Bahiyah\",\n    \"Hospital Sultanah Maliha\",\n    \"Hospital Kulim\",\n    \"Hospital Sultan Abdul Halim\",\n    \"Hospital Jitra\",\n    \"Hospital Kuala Nerang\",\n    \"Hospital Sik\",\n    \"Hospital Pendang\",\n    \"Hospital Baling\"\n  ],\n\n  Kelantan: [\n    \"Hospital Tengku Anis, Pasir Puteh\",\n    \"Hospital Raja Perempuan Zainab II, Kota Bharu\",\n    \"Hospital Tumpat\",\n    \"Hospital Sultan Ismail Petra, Kuala Krai\",\n    \"Hospital Tanah Merah\",\n    \"Hospital Jeli\",\n    \"Hospital Machang\",\n    \"Hospital Pasir Mas\",\n    \"Hospital Gua Musang\",\n    \"Hospital Bachok\"\n  ],\n\n  \"JKWPKL&P\": [\n    \"Hospital Rehabilitasi Cheras\",\n    \"Hospital Putrajaya\"\t\n  ],\n\n  Melaka: [\n    \"Hospital Melaka\",\n    \"Hospital Jasin\",\n    \"Hospital Alor Gajah\"\n  ],\n\n  \"Negeri Sembilan\": [\n    \"Hospital Port Dickson\",\n    \"Hospital Tuanku Ja'afar, Seremban\",\n    \"Hospital Rembau\",\n    \"Hospital Tampin\",\n    \"Hospital Tuanku Ampuan Najihah, Kuala Pilah\",\n    \"Hospital Jelebu\",\n    \"Hospital Jempol\"\n  ],\n\n  Pahang: [\n    \"Hospital Tengku Ampuan Afzan, Kuantan\",\n    \"Hospital Sultan Hj Ahmad Shah, Temerloh\",\n    \"Hospital Kuala Lipis\",\n    \"Hospital Raub\",\n    \"Hospital Rompin\",\n    \"Hospital Muadzam Shah\",\n    \"Hospital Pekan\",\n    \"Hospital Jengka\",\n    \"Hospital Bentong\",\n    \"Hospital Sultanah Hajjah Kalsom, Cameron Highlands\",\n    \"Hospital Bera\",\n    \"Hospital Jerantut\"\n  ],\n\n  Perak: [\n    \"Hospital Tapah\",\n    \"Hospital Kampar\",\n    \"Hospital Raja Permaisuri Bainun\",\n    \"Hospital Slim River\",\n    \"Hospital Teluk Intan\",\n    \"Hospital Seri Manjung\",\n    \"Hospital Taiping\",\n    \"Hospital Gerik\",\n    \"Hospital Seri Iskandar\",\n    \"Hospital Batu Gajah\",\n    \"Hospital Selama\",\n    \"Hospital Parit Buntar\",\n    \"Hospital Sungai Siput\",\n    \"Hospital Kuala Kangsar\",\n    \"Hospital Bahagia Ulu Kinta\"\n  ],\n\n  Perlis: [\n    \"Hospital Tuanku Fauziah\"\n  ],\n\n  \"Pulau Pinang\": [\n    \"Hospital Kepala Batas\",\n    \"Hospital Pulau Pinang\",\n    \"Hospital Seberang Jaya\",\n    \"Hospital Sungai Bakap\",\n    \"Hospital Bukit Mertajam\",\n    \"Hospital Balik Pulau\"\n  ],\n\n  Sabah: [\n    \"Hospital Kota Marudu\",\n    \"Hospital Beaufort\",\n    \"Hospital Queen Elizabeth II\",\n    \"Hospital Queen Elizabeth\",\n    \"Hospital Tawau\",\n    \"Hospital Lahad Datu\",\n    \"Hospital Duchess Of Kent\",\n    \"Hospital Keningau\",\n    \"Hospital Beluran\",\n    \"Hospital Ranau\",\n    \"Hospital Kinabatangan\",\n    \"Hospital Kudat\",\n    \"Hospital Tambunan\",\n    \"Hospital Tuaran\",\n    \"Hospital Kunak\",\n    \"Hospital Kota Belud\",\n    \"Hospital Kuala Penyu\",\n    \"Hospital Pitas\",\n    \"Hospital Semporna\",\n    \"Hospital Papar\",\n    \"Hospital Tenom\",\n    \"Hospital Sipitang\",\n    \"Hospital Mesra Bukit Padang\",\n    \"Hospital Wanita & Kanak-Kanak, Likas\"\n  ],\n\n  Sarawak: [\n    \"Hospital Daro\",\n    \"Hospital Rajah Charles Brooke Memorial\",\n    \"Hospital Umum Sarawak\",\n    \"Hospital Miri\",\n    \"Hospital Bintulu\",\n    \"Hospital Sibu\",\n    \"Hospital Sri Aman\",\n    \"Hospital Marudi\",\n    \"Hospital Bau\",\n    \"Hospital Serian\",\n    \"Hospital Mukah\",\n    \"Hospital Limbang\",\n    \"Hospital Kapit\",\n    \"Hospital Saratok\",\n    \"Hospital Sarikei\",\n    \"Hospital Betong\",\n    \"Hospital Lundu\",\n    \"Hospital Simunjan\",\n    \"Hospital Lawas\",\n    \"Hospital Kanowit\",\n    \"Hospital Dalat\",\n    \"Hospital Sentosa\",\n    \"Pusat Jantung Sarawak\"\n  ],\n\n  Selangor: [\n    \"Hospital Sungai Buloh\",\n    \"Hospital Shah Alam\",\n    \"Hospital Banting\",\n    \"Hospital Ampang\",\n    \"Hospital Sultan Idris Shah\",\n    \"Hospital Kuala Kubu Baru\",\n    \"Hospital Selayang\",\n    \"Hospital Orang Asli, Gombak\",\n    \"Hospital Tanjong Karang\",\n    \"Hospital Tengku Ampuan Jemaah, Sabak Bernam\",\n    \"Hospital Tengku Ampuan Rahimah\",\n    \"Hospital Tengku Permaisuri Norashikin\",\n    \"Hospital Cyberjaya\"\n  ],\n\n  Terengganu: [\n    \"Hospital Sultanah Nur Zahirah\",\n    \"Hospital Hulu Terengganu\",\n    \"Hospital Setiu\",\n    \"Hospital Dungun\",\n    \"Hospital Besut\",\n    \"Hospital Kemaman\"\n  ],\n\n  \"W.P. Kuala Lumpur (HKL-HTA-IPR)\": [\n    \"Hospital Kuala Lumpur\",\n    \"Institut Perubatan Respiratori\",\n    \"Hospital Tunku Azizah\"\n  ],\n\n  \"W.P. Labuan\": [\n    \"Hospital Labuan\"\n  ],\n\n  \"W.P. Putrajaya (IKN)\": [\n    \"Institut Kanser Negara\"\n  ]\n};\n\n\nObject.keys(hospitalsByState).forEach(state => {\n  hospitalsByState[state].sort();\n});\n\nconst servicesList = [\n  \"Dermatologi (Dermatology)\",\n  \"Endokrinologi (Endocrinology)\",\n  \"Endodontik (Endodontics)\",\n  \"Epidemiologi Penyakit Tidak Berjangkit (Non-Communicable Disease Epidemiology)\",\n  \"Gastroenterologi & Hepatologi (Gastroenterology & Hepatology)\",\n  \"Genetik Klinikal (Clinical Genetics)\",\n  \"Geriatrik (Geriatric)\",\n  \"Hematologi (Haematology)\",\n  \"Jabatan Kecemasan & Trauma (Emergency Medicine)\",\n  \"Kardiologi (Cardiology)\",\n  \"Kardiologi Pediatrik (Paediatric Cardiology)\",\n  \"Kecemasan Pediatrik (Paediatric Emergency Medicine)\",\n  \"Kesihatan Awam Pergigian (Dental Public Health)\",\n  \"Nefrologi (Nephrology)\",\n  \"Neonatologi (Neonatology)\",\n  \"Neurologi (Neurology)\",\n  \"Neuroketidakupayaan & Pemulihan Pediatrik (Paediatric Neuro-disability & Rehabilitation)\",\n  \"Odontologi Forensik (Forensic Odontology)\",\n  \"Onkologi (Oncology)\",\n  \"Ortodontik (Orthodontics)\",\n  \"Pediatrik (Paediatric)\",\n  \"Penyakit Berjangkit (Infectious Disease)\",\n  \"Pergigian Keperluan Khas (Special Care Dentistry)\",\n  \"Pergigian Pediatrik (Paediatric Dentistry)\",\n  \"Pergigian Restoratif (Restorative Dentistry)\",\n  \"Periodontologi (Periodontology)\",\n  \"Perubatan Am (General Medicine)\",\n  \"Perubatan Dalaman Akut (Acute Internal Medicine)\",\n  \"Perubatan Forensik (Forensic Medicine)\",\n  \"Perubatan Ibu & Janin (Maternal Fetal Medicine)\",\n  \"Perubatan Keluarga (Family Medicine)\",\n  \"Perubatan Nuklear (Nuclear Medicine)\",\n  \"Perubatan Paliatif (Palliative Medicine)\",\n  \"Perubatan Pemulihan (Rehabilitation Medicine)\",\n  \"Perubatan Remaja (Adolescent Medicine)\",\n  \"Perubatan Reproduktif (Reproductive Medicine)\",\n  \"Perubatan Respiratori (Respiratory Medicine)\",\n  \"Perubatan Sukan (Sports Medicine)\",\n  \"Prostodontik (Prosthodontics)\",\n  \"Psikiatri (Psychiatry)\",\n  \"Radioterapi (Radiotherapy)\",\n  \"Reumatologi (Rheumatology)\",\n  \"Teranostik (Theranostics)\",\n  \"Neurosurgeri (Neurosurgery)\",\n  \"Obstetrik & Ginekologi (Obstetrics & Gynaecology)\",\n  \"Oftalmologi (Ophthalmology)\",\n  \"Onkologi Ginekologi (Gynae-Oncology)\",\n  \"Ortopedik (Orthopaedics)\",\n  \"Otorinolaringologi (Otorhinolaryngology)\",\n  \"Pembedahan Am (General Surgery)\",\n  \"Pembedahan Gastrointestinal Atas (Upper GI Surgery)\",\n  \"Pembedahan Hepatobiliari (Hepatobiliary Surgery)\",\n  \"Pembedahan Kardiotorasik (Cardiothoracic Surgery)\",\n  \"Pembedahan Kolorektal (Colorectal Surgery)\",\n  \"Pembedahan Luka Terbakar & Trauma (Burn & Trauma Surgery)\",\n  \"Pembedahan Onkologi Pediatrik (Paediatric Surgical Oncology)\",\n  \"Pembedahan Oral & Maksilofasial (Oral and Maxillofacial Surgery)\",\n  \"Pembedahan Payudara & Endokrin (Breast & Endocrine Surgery)\",\n  \"Pembedahan Pediatrik (Paediatric Surgery)\",\n  \"Pembedahan Plastik & Rekonstruktif (Plastic & Reconstructive Surgery)\",\n  \"Pembedahan Trauma (Trauma Surgery)\",\n  \"Pembedahan Trauma Kraniomaksilofasial & Tulang (Craniomaxillofacial Trauma and Bone Surgery)\",\n  \"Pembedahan Tulang Belakang (Spine Surgery)\",\n  \"Pembedahan Vaskular (Vascular Surgery)\",\n  \"Trauma Muskuloskeletal Lanjutan (Advanced Musculoskeletal Trauma)\",\n  \"Uroginekologi (Uro-gynaecology)\",\n  \"Urologi (Urology)\",\n  \"Urologi Rekonstruktif Pediatrik (Paediatric Reconstructive Urology)\",\n  \"Anestesia Jantung (Cardiac Anaesthesia)\",\n  \"Anestesia Vaskular (Vascular Anaesthesia)\",\n  \"Anestesiologi (Anaesthesiology)\",\n  \"Jabatan Dietetik & Sajian (Dietetics & Food Services Department)\",\n  \"Jabatan Farmasi (Pharmacy Department)\",\n  \"Jabatan Kerja Sosial Perubatan (Medical Social Work Department)\",\n  \"Jabatan Pesakit Luar (Outpatient Department)\",\n  \"Jabatan Radiologi (Radiology)\",\n  \"Jabatan Rekod Perubatan (Medical Records Department)\",\n  \"Kesihatan Pekerjaan (Occupational Health)\",\n  \"Kesihatan Persekitaran (Environmental Health)\",\n  \"Mikrobiologi Perubatan (Medical Microbiology)\",\n  \"Patologi (Pathology)\",\n  \"Patologi Anatomi (Anatomical Pathology)\",\n  \"Patologi Forensik (Forensic Pathology)\",\n  \"Patologi Genetik (Genetic Pathology)\",\n  \"Patologi Kimia (Chemical Pathology)\",\n  \"Perkhidmatan Kesihatan Bersekutu (Allied Health Services)\",\n  \"Perkhidmatan Pesakit Bayar Penuh (Full Paying Patient)\",\n  \"Perubatan Transfusi (Transfusion Medicine)\",\n  \"Pusat Anggota Palsu (Artificial Limb Centre)\",\n  \"Radiologi Intervensi (Interventional Radiology)\",\n  \"Radiologi Jantung (Cardiac Radiology)\",\n  \"Radiologi Oral & Maksilofasial (Oral and Maxillofacial Radiology)\",\n  \"Radiologi Payudara (Breast Radiology)\",\n  \"Radiologi Pediatrik (Paediatric Radiology)\",\n  \"Tabung Darah (Blood Bank)\",\n  \"Unit Bekalan Steril Berpusat (Central Sterile Supply Department)\",\n  \"Unit Casemix (Casemix Unit)\",\n  \"Unit Fisioterapi (Physiotherapy Unit)\",\n  \"Unit Hemodialisis (Hemodialysis Unit)\",\n  \"Unit Kawalan Infeksi (Infection Control Unit)\",\n  \"Unit Kejuruteraan (Engineering Unit)\",\n  \"Unit Kejururawatan (Nursing Unit)\",\n  \"Unit Keselamatan & Kesihatan Pekerjaan (Occupational Safety & Health Unit)\",\n  \"Unit Kesihatan Awam (Public Health Unit)\",\n  \"Unit Kewangan & Hasil (Finance & Revenue Unit)\",\n  \"Unit Medikolegal (Medicolegal Unit)\",\n  \"Unit Pendidikan Kesihatan (Health Education Unit)\",\n  \"Unit Pendidikan Perubatan Berterusan (Continuous Medical Education Unit)\",\n  \"Unit Pengurusan Kualiti (Quality Management Unit)\",\n  \"Unit Penjagaan Luka (Wound Care Unit)\",\n  \"Unit Penolong Pegawai Perubatan (Assistant Medical Officer Unit)\",\n  \"Unit Pentadbiran & Pembangunan (Administration & Development Unit)\",\n  \"Unit Perhubungan Awam (Public Relations Unit)\",\n  \"Unit Perolehan & Aset (Procurement & Asset Unit)\",\n  \"Unit Psikologi & Kaunseling (Psychology & Counselling Unit)\",\n  \"Unit Rawatan Harian (Daycare Unit)\",\n  \"Unit Sumber Manusia (Human Resources Unit)\",\n  \"Unit Teknologi Maklumat (Information Technology Unit)\",\n  \"Unit Terapi Carakerja (Occupational Therapy Unit)\",\n  \"Lain-lain (Others)\"\n];\n\n        const populateStateSelect = () => {\n            const stateSelect = $('#state-select');\n            stateSelect.empty().append('<option><\/option>');\n            statesList.forEach(state => {\n                const option = new Option(state, state, false, false);\n                stateSelect.append(option);\n            });\n            stateSelect.trigger('change');\n        };\n\n        const updateHospitalSelect = (stateValue) => {\n            const hospitalSelect = $('#hospital-select');\n            hospitalSelect.empty().append('<option><\/option>');\n\n            let hospitals = [];\n            if (hospitalsByState[stateValue]) {\n                hospitals = hospitalsByState[stateValue];\n            }\n\n            hospitals.forEach(hospital => {\n                const option = new Option(hospital, hospital, false, false);\n                hospitalSelect.append(option);\n            });\n            hospitalSelect.trigger('change');\n        };\n\n        const validateStateAndHospital = () => {\n            const stateValue = $('#state-select').val();\n            const hospitalValue = $('#hospital-select').val();\n\n            if (!stateValue) {\n                alert(\"Please select a state.\");\n                return false;\n            }\n            if (!hospitalValue) {\n                alert(\"Please select a hospital.\");\n                return false;\n            }\n            return true;\n        };\n\n        \/\/ --- GLOBAL VARIABLES & CHART INITIALIZATION ---\n        const langSelect = document.getElementById('language-select');\n        const printButton = document.getElementById('print-button');\n        const darkModeToggle = document.getElementById('dark-mode-toggle');\n        const surveyForm = document.getElementById('surveyForm');\n        const emojis = ['\ud83d\ude20', '\ud83d\ude41', '\ud83d\ude10', '\ud83d\ude42', '\ud83d\ude04'];\n        let myRadarChart; \n\n        \/\/ --- SUBMISSION COUNT LOGIC ---\n        function fetchAndParseData() {\n            const sheetId = '1Ma2b8cE9YoDGboGrsUcEOXfAVYZvOnqS0D7Tyh47xJU';\n            const gid = '0'; \n            const query = 'SELECT A, B, C'; \n            const cacheBuster = new Date().getTime();\n            const url = `https:\/\/docs.google.com\/spreadsheets\/d\/${sheetId}\/gviz\/tq?tqx=responseHandler:handleGvizResponse;out:json&tq=${encodeURIComponent(query)}&gid=${gid}&_nocache=${cacheBuster}`;\n            \n            const script = document.createElement('script');\n            script.src = url;\n            script.onerror = function() {\n                console.error('Failed to load GVIZ script');\n                const submissionCountSpan = document.getElementById('submission-count');\n                if (submissionCountSpan) submissionCountSpan.textContent = '';\n            };\n            document.body.appendChild(script);\n        }\n\n        window.updateSubmissionCount = function() {\n            const submissionCountSpan = document.getElementById('submission-count');\n            if (!submissionCountSpan) return;\n\n            const hospitalInputVal = $('#hospital-select').val();\n            const treatmentRadio = document.querySelector('input[name=\"treatmentLocation\"]:checked');\n            const submissionText = \"No. of Submission:\";\n\n            if (!hospitalInputVal || !treatmentRadio) {\n                submissionCountSpan.textContent = `${submissionText} N\/A`;\n                return;\n            }\n\n            const treatmentType = treatmentRadio.value;\n            const record = gvizData.find(item => item.hospital && item.hospital.toLowerCase() === hospitalInputVal.toLowerCase());\n\n            if (record) {\n                const count = (treatmentType === 'inpatient') ? record.inpatient : record.outpatient;\n                submissionCountSpan.textContent = `${submissionText} ${count}`;\n            } else {\n                submissionCountSpan.textContent = `${submissionText} N\/A`;\n            }\n        };\n\n        \/\/ --- CORE FUNCTIONS ---\n        const updateMetrics = () => {\n            document.querySelectorAll('.likert-scale label').forEach(l => l.classList.remove('selected-for-print'));\n            \n            const scores = [];\n            for (let i = 0; i < 7; i++) {\n                const selected = surveyForm.querySelector(`input[name=\"q${i + 1}\"]:checked`);\n                if (selected) {\n                    selected.closest('label').classList.add('selected-for-print');\n                    scores.push(parseInt(selected.value, 10));\n                } else {\n                    scores.push(0);\n                }\n            }\n        };\n\n        const lockTreatmentOptions = (urlParams) => {\n            const treatmentParam = urlParams.get('treatment');\n            const treatmentTextParam = urlParams.get('treatmentText');\n            \n            if (treatmentParam) {\n                const radio = document.querySelector(`input[name=\"treatmentLocation\"][value=\"${treatmentParam}\"]`);\n                if (radio) {\n                    radio.checked = true;\n                    radio.dispatchEvent(new Event('change')); \n                    \n                    document.querySelectorAll('input[name=\"treatmentLocation\"]').forEach(r => {\n                       r.style.pointerEvents = 'none';\n                       r.parentElement.classList.add('locked-input');\n                    });\n\n                    const textInput = document.getElementById(`${treatmentParam}-text`);\n                    if (textInput && treatmentTextParam) {\n                        textInput.value = treatmentTextParam;\n                        textInput.classList.add('locked-input');\n                    }\n                }\n            }\n        };\n        \n        const updateUI = (lang) => {\n            const data = translations[lang] || translations['ms'];\n            document.documentElement.lang = lang;\n            \n            const setText = (id, key) => {\n                const element = document.getElementById(id);\n                if (element && data[key]) {\n                    element.textContent = data[key];\n                }\n            };\n\n            const setHtml = (id, key) => {\n                const element = document.getElementById(id);\n                if (element && data[key]) {\n                    element.innerHTML = data[key];\n                }\n            };\n\n            setText('survey-title', 'title');\n            setText('lang-label', 'langLabel');\n            setText('print-button', 'printBtn');\n\t\t\tsetText('reset-button', 'resetBtn');\n            setText('submit-button', 'submitBtn');\n            \n            setHtml('intro-text-container', 'introHtml'); \n\n            setText('demographics-title', 'demographicsTitle');\n            setText('state-label', 'stateLabel');\n            setText('hospital-label', 'hospitalLabel');\n            setText('gender-label', 'genderLabel');\n            setText('age-label', 'ageLabel');\n            setText('ethnicity-label', 'ethnicityLabel');\n            setText('marital-status-label', 'maritalStatusLabel');\n            setText('education-label', 'educationLabel');\n            setText('occupation-label', 'occupationLabel');\n            setText('context-title', 'contextTitle');\n            setText('treatment-location-label', 'treatmentLocationLabel');\n            setText('service-location-label', 'serviceLocationLabel');\n            \n            setText('facilities-title', 'facilitiesTitle');\n\t\t\tsetText('facilities-comment-label-id','facilitiesCommentLabel');\n            setText('mypsq-title', 'mypsqTitle');\n            setText('comments-title', 'commentsTitle');\n            setText('appraisal-title', 'appraisalTitle');\n            \n            setText('chart-title', 'chartTitle'); \n            setText('overall-score-title', 'overallScoreTitle'); \n            setText('score-explanation', 'scoreExplanation'); \n            \n            setText('modal-title', 'modalTitle');\n            setText('footer-text', 'footer');\n\n            const createRadioOptions = (containerId, name, options) => {\n                const container = document.getElementById(containerId);\n                container.innerHTML = '';\n                Object.keys(options).forEach((key, index) => {\n                    const label = document.createElement('label');\n                    const input = document.createElement('input');\n                    input.type = 'radio'; input.name = name; input.value = key;\n                    if (index === 0) input.required = true;\n                    label.appendChild(input);\n                    label.appendChild(document.createTextNode(` ${options[key]}`));\n                    container.appendChild(label);\n                });\n            };\n            \n            createRadioOptions('gender-options', 'gender', data.genderOptions);\n            createRadioOptions('age-options', 'age', data.ageOptions);\n            createRadioOptions('ethnicity-options', 'ethnicity', data.ethnicityOptions);\n            createRadioOptions('marital-status-options', 'maritalStatus', data.maritalStatusOptions);\n            createRadioOptions('education-options', 'education', data.educationOptions);\n            createRadioOptions('occupation-options', 'occupation', data.occupationOptions);\n            \n            const treatmentContainer = document.getElementById('treatment-location-options');\n            treatmentContainer.innerHTML = '';\n            Object.keys(data.treatmentLocationOptions).forEach((key, index) => {\n                const div = document.createElement('div');\n                div.className = 'radio-grid';\n                const label = document.createElement('label');\n                const radio = document.createElement('input');\n                radio.type = 'radio'; radio.name = 'treatmentLocation'; radio.value = key;\n                if (index === 0) radio.required = true;\n                const textInput = document.createElement('input');\n                textInput.type = 'text'; textInput.id = `${key}-text`; textInput.disabled = true;\n                \n                label.appendChild(radio);\n                label.appendChild(document.createTextNode(` ${data.treatmentLocationOptions[key]}`));\n                div.appendChild(label);\n                div.appendChild(textInput);\n                treatmentContainer.appendChild(div);\n\n                radio.addEventListener('change', (e) => {\n                    document.querySelectorAll('#treatment-location-options input[type=text]').forEach(inp => { inp.disabled = true; inp.value = ''; });\n                    textInput.disabled = false;\n                    if (e && e.isTrusted) {\n                        textInput.focus();\n                    }\n                });\n            });\n\n            const createLikertScale = (qIdText, qScaleId, qText, qName, customScale = null) => {\n                const textElement = document.getElementById(qIdText);\n                if (textElement) textElement.textContent = qText;\n\n                const scaleContainer = document.getElementById(qScaleId);\n                if (!scaleContainer) return;\n                \n                const checkedRadioNode = surveyForm.querySelector(`input[name=\"${qName}\"]:checked`);\n                const currentlyChecked = checkedRadioNode ? checkedRadioNode.value : null;\n\n                scaleContainer.innerHTML = ''; \n                const currentLangData = translations[langSelect.value] || translations['ms'];\n                const scaleLabels = customScale || currentLangData.scale;\n\n                scaleLabels.forEach((label, index) => {\n                    const value = index + 1;\n                    const labelElement = document.createElement('label');\n                    const input = document.createElement('input');\n                    input.type = 'radio';\n                    input.name = qName;\n                    input.value = value;\n                    if (index === 0) input.required = true;\n                    if (currentlyChecked && parseInt(currentlyChecked) === value) input.checked = true;\n\n                    const emojiSpan = document.createElement('span');\n                    emojiSpan.className = 'emoji';\n                    emojiSpan.textContent = emojis[index];\n\n                    const optionSpan = document.createElement('span');\n                    optionSpan.className = 'likert-option';\n                    optionSpan.textContent = label;\n\n                    labelElement.appendChild(emojiSpan);\n                    labelElement.appendChild(input);\n                    labelElement.appendChild(optionSpan);\n\n                    scaleContainer.appendChild(labelElement);\n                });\n            };\n            \n            createLikertScale('q-facilities-text', 'q-facilities-scale', data.facilitiesQuestion, 'q_facilities', data.facilitiesScale);\n            \n            for (let i = 1; i <= 7; i++) {\n                createLikertScale(`q${i}-text`, `q${i}-scale`, data.questions[i-1], `q${i}`);\n            }\n\n            const createTagButtons = (containerId, tags) => {\n                const container = document.getElementById(containerId);\n                container.innerHTML = '';\n                if (!tags) return;\n                tags.forEach(tagText => {\n                    const button = document.createElement('button');\n                    button.type = 'button'; button.className = 'dimension-tag'; button.textContent = tagText;\n                    button.addEventListener('click', function() { this.classList.toggle('selected'); });\n                    container.appendChild(button);\n                });\n            };\n\n            createTagButtons('facilities-tags-container', data.facilitiesTags);\n            lockTreatmentOptions(new URLSearchParams(window.location.search));\n            \n            if (myRadarChart) {\n                myRadarChart.update();\n            }\n        };\n\n        const collectFormData = () => {\n            const lang = langSelect.value;\n            const t = translations[lang] || translations['ms'];\n            let summary = \"\";\n\n            const getRadioLabel = (name, options) => {\n                const selected = surveyForm.querySelector(`input[name=\"${name}\"]:checked`);\n                return selected ? options[selected.value] : 'Not Answered';\n            };\n            \n            summary += `--- ${t.demographicsTitle} ---\\n`;\n            summary += `${t.stateLabel} ${$('#state-select').val() || 'Not provided'}\\n`;\n            summary += `${t.hospitalLabel} ${$('#hospital-select').val() || 'Not provided'}\\n`;\n            summary += `${t.genderLabel} ${getRadioLabel('gender', t.genderOptions)}\\n`;\n            summary += `${t.ageLabel} ${getRadioLabel('age', t.ageOptions)}\\n`;\n            summary += `${t.ethnicityLabel} ${getRadioLabel('ethnicity', t.ethnicityOptions)}\\n`;\n            summary += `${t.maritalStatusLabel} ${getRadioLabel('maritalStatus', t.maritalStatusOptions)}\\n`;\n            summary += `${t.educationLabel} ${getRadioLabel('education', t.educationOptions)}\\n`;\n            summary += `${t.occupationLabel} ${getRadioLabel('occupation', t.occupationOptions)}\\n\\n`;\n            \n            summary += `--- ${t.contextTitle} ---\\n`;\n            const treatmentLoc = surveyForm.querySelector('input[name=\"treatmentLocation\"]:checked');\n            summary += `${t.treatmentLocationLabel} ${treatmentLoc ? t.treatmentLocationOptions[treatmentLoc.value] + ' ' + document.getElementById(`${treatmentLoc.value}-text`).value : 'Not answered'}\\n`;\n            summary += `${t.serviceLocationLabel} ${$('#service-location-select').val() || 'Not provided'}\\n\\n`;\n\n            summary += `--- ${t.mypsqTitle} ---\\n`;\n            for(let i = 1; i <= 7; i++) {\n                const score = surveyForm.querySelector(`input[name=\"q${i}\"]:checked`);\n                summary += `${t.questions[i-1]}: ${score ? t.scale[score.value-1] : 'Not answered'}\\n`;\n            }\n\n            summary += `\\n--- ${t.commentsTitle} ---\\n`;\n            summary += `Comment: ${document.getElementById('comments-textarea').value || 'None'}\\n\\n`;\n            \n            summary += `--- ${t.appraisalTitle} ---\\n`;\n            summary += `${document.getElementById('appraisal-textarea').value || 'None'}\\n\\n`;\n\n            summary += `--- ${t.facilitiesTitle} ---\\n`;\n            const facilitiesScore = surveyForm.querySelector('input[name=\"q_facilities\"]:checked');\n            summary += `Score: ${facilitiesScore ? t.facilitiesScale[facilitiesScore.value-1] : 'Not answered'}\\n`;\n            const selectedNodes = document.querySelectorAll('#facilities-tags-container .selected');\n            const selectedFacilitiesTagsArray = [];\n            for (let i = 0; i < selectedNodes.length; i++) {\n                selectedFacilitiesTagsArray.push(selectedNodes[i].textContent);\n            }\n            summary += `Tagged Infrastructure: ${selectedFacilitiesTagsArray.join(', ') || 'None'}\\n`;\n            summary += `Comment: ${document.getElementById('facilities-textarea').value || 'None'}\\n\\n`;\n\n            return summary.trim();\n        };\n\n        const applyTheme = (theme) => {\n            document.documentElement.setAttribute('data-theme', theme);\n            darkModeToggle.textContent = theme === 'dark' ? '\u2600\ufe0f' : '\ud83c\udf19';\n            localStorage.setItem('theme', theme);\n        };\n\n        const prefillFormFromUrl = () => {\n            const urlParams = new URLSearchParams(window.location.search);\n            const langFromUrl = urlParams.get('language');\n            if (langFromUrl && translations[langFromUrl]) {\n                langSelect.value = langFromUrl;\n            }\n            updateUI(langSelect.value);\n\n            lockPrefilledFields(urlParams);\n\n            let prefillOccurred = false;\n            const allQs = ['q1', 'q2', 'q3', 'q4', 'q5', 'q6', 'q7', 'q_facilities'];\n            allQs.forEach(qName => {\n                const score = urlParams.get(qName);\n                if (score) {\n                    const radio = document.querySelector(`input[name=\"${qName}\"][value=\"${score}\"]`);\n                    if(radio) { radio.checked = true; prefillOccurred = true; }\n                }\n            });\n            \n            if (prefillOccurred) {\n                updateMetrics();\n            }\n        };\n\t\t\n        const lockPrefilledFields = (urlParams) => {\n            const stateParam = urlParams.get('state');\n            const hospitalParam = urlParams.get('hospital');\n            const serviceParam = urlParams.get('service');\n            \n            if (stateParam) {\n                $('#state-select').val(stateParam).trigger('change');\n                $('#state-select').addClass('locked-input'); \n                $('#state-select').addClass('locked-input'); \n                $('#state-select').next('.select2-container').addClass('locked-input');\n            }\n\n            if (hospitalParam) {\n                setTimeout(() => {\n                    $('#hospital-select').val(hospitalParam).trigger('change');\n                    $('#hospital-select').addClass('locked-input'); \n                    $('#hospital-select').addClass('locked-input'); \n                    $('#hospital-select').next('.select2-container').addClass('locked-input');\n                }, 100);\n            }\n\n            if (serviceParam) {\n                $('#service-location-select').val(serviceParam).trigger('change');\n                $('#service-location-select').addClass('locked-input'); \n                $('#service-location-select').addClass('locked-input'); \n                $('#service-location-select').next('.select2-container').addClass('locked-input');\n            }\n\n            lockTreatmentOptions(urlParams);\n        };\n\t\t\n        const initialLangData = translations[langSelect.value] || translations['ms'];\n        try {\n            if (typeof Chart !== 'undefined') {\n                const ctx = document.getElementById('satisfactionRadarChart').getContext('2d');\n                myRadarChart = new Chart(ctx, {\n                    type: 'radar',\n                    data: {\n                        labels: ['Q1','Q2','Q3','Q4','Q5','Q6','Q7'], \n                        datasets: [{\n                            label: 'Score', data: [0, 0, 0, 0, 0, 0, 0], \n                            fill: true, \n                            backgroundColor: 'rgba(0, 123, 255, 0.2)', \n                            borderColor: 'rgba(0, 123, 255, 1)',\n                            pointBackgroundColor: 'rgba(0, 123, 255, 1)',\n                            pointBorderColor: '#fff',\n                            pointHoverBackgroundColor: '#fff',\n                            pointHoverBorderColor: 'rgba(0, 123, 255, 1)'\n                        }]\n                    },\n                    options: {\n                        scales: { r: { beginAtZero: true, min: 0, max: 5, stepSize: 1, ticks: { display: false } } },\n                        plugins: { legend: { display: false } }\n                    }\n                });\n            } else {\n                console.warn(\"Chart.js disekat. Mengabaikan carta.\");\n            }\n        } catch (error) {\n            console.error(\"Ralat melukis carta:\", error);\n        }\n\n        try {\n            if (typeof $.fn.select2 !== 'undefined') {\n                $('#state-select').select2({ placeholder: \"Pilih Negeri\", allowClear: true, theme: \"bootstrap-5\" });\n                $('#hospital-select').select2({ placeholder: \"Pilih Hospital\/Fasiliti\", allowClear: true, theme: \"bootstrap-5\" });\n                $('#service-location-select').select2({ placeholder: \"Pilih Jabatan\/Perkhidmatan\", allowClear: true, theme: \"bootstrap-5\" });\n            } else {\n                console.warn(\"Select2 disekat. Menggunakan paparan dropdown asal (Native).\");\n            }\n        } catch (error) {\n            console.error(\"Ralat memulakan Select2:\", error);\n        }\n\n        $('#state-select').on('change', function() {\n            const selectedState = $(this).val();\n            updateHospitalSelect(selectedState); \n            window.updateSubmissionCount(); \n            $('#print-state-select').text(selectedState || '');\n        });\n\n        $('#hospital-select').on('change', function() {\n            window.updateSubmissionCount();\n            $('#print-hospital-select').text($(this).val() || '');\n        });\n\n        $('#service-location-select').on('change', function() {\n            $('#print-service-select').text($(this).val() || '');\n        });\n\n        document.getElementById('treatment-location-options').addEventListener('change', window.updateSubmissionCount);\n        langSelect.addEventListener('change', (e) => updateUI(e.target.value));\n        printButton.addEventListener('click', () => { window.print(); });\n\n        darkModeToggle.addEventListener('click', () => {\n            const newTheme = (document.documentElement.getAttribute('data-theme') || 'light') === 'light' ? 'dark' : 'light';\n            applyTheme(newTheme);\n        });\n\n        surveyForm.addEventListener('change', updateMetrics);\n\n        function resetFormAfterSubmission() {\n             surveyForm.reset(); \n            \n            const urlParams = new URLSearchParams(window.location.search);\n            lockPrefilledFields(urlParams);\n            \n            if (!urlParams.get('state')) $('#state-select').val(null).trigger('change');\n            if (!urlParams.get('hospital')) $('#hospital-select').val(null).trigger('change');\n            if (!urlParams.get('service')) $('#service-location-select').val(null).trigger('change');\n            \n            document.querySelectorAll('#facilities-tags-container .selected').forEach(tag => tag.classList.remove('selected'));\n            document.getElementById('score-percentage').textContent = '0%';\n            \n            fetchAndParseData();\n            updateMetrics();\n            window.scrollTo(0, 0);\n        }\n\n        \/\/ =========================================================\n        \/\/ REWRITTEN SUBMISSION LOGIC: CLEAN JSON & FETCH API POST\n        \/\/ =========================================================\n        document.getElementById('submit-button').addEventListener('click', (e) => {\n            e.preventDefault();\n            \n            \/\/ 1. Validate Form First\n            if (!surveyForm.checkValidity()) {\n                surveyForm.reportValidity();\n                return;\n            }\n\n            if (!validateStateAndHospital()) {\n                return; \n            }\n\n            \/\/ 2. Check GVIZ Quota Block\n            const submissionCountSpan = document.getElementById('submission-count');\n            if (submissionCountSpan) {\n                const submissionText = submissionCountSpan.textContent;\n                const parts = submissionText.split(':');\n                const countStr = parts.length > 1 ? parts[1].trim() : '';\n                const count = parseInt(countStr, 10);\n\n                if (!isNaN(count) && count >= 501) {\n                    const t = translations[langSelect.value] || translations['ms'];\n                    alert(t.submissionBlocked); \n                    return; \n                }\n            }\n\n            \/\/ Update Summary Display\n            document.getElementById('modal-summary').textContent = collectFormData();\n            document.getElementById('summary-modal').style.display = 'flex';\n\n            const t = translations['ms'];\n\n            const getRadioValue = (name) => {\n                const selected = surveyForm.querySelector(`input[name=\"${name}\"]:checked`);\n                return selected ? selected.value : '';\n            };\n            \n            const treatmentLoc = surveyForm.querySelector('input[name=\"treatmentLocation\"]:checked');\n            const facilitiesScore = surveyForm.querySelector('input[name=\"q_facilities\"]:checked');\n            \n            const selectedNodes = document.querySelectorAll('#facilities-tags-container .selected');\n            const selectedFacilitiesTagsArray = [];\n            for (let i = 0; i < selectedNodes.length; i++) {\n                const tag = selectedNodes[i];\n                const userLang = translations[langSelect.value] || translations['ms'];\n                const tagIndex = userLang.facilitiesTags.indexOf(tag.textContent);\n                selectedFacilitiesTagsArray.push(tagIndex !== -1 ? t.facilitiesTags[tagIndex] : tag.textContent);\n            }\n            \n            const langMap = { ms: 'MS', en: 'EN', zh: 'ZH', ta: 'TA', iban: 'IBAN', kd: 'KD' };\n            const selectedLangCode = langMap[langSelect.value] || 'MS';\n            const appraisalValue = document.getElementById('appraisal-textarea').value || '';\n\n            \/\/ 3. BUILD THE CLEAN JSON PAYLOAD (MATCHING THE APPS SCRIPT EXPECTATIONS)\n            const payload = {\n                negeri: $('#state-select').val() || '',\n                hospital: $('#hospital-select').val() || '',\n                jantina: getRadioValue('gender') ? t.genderOptions[getRadioValue('gender')] : '',\n                umur: getRadioValue('age') ? t.ageOptions[getRadioValue('age')] : '',\n                bangsa: getRadioValue('ethnicity') ? t.ethnicityOptions[getRadioValue('ethnicity')] : '',\n                perkahwinan: getRadioValue('maritalStatus') ? t.maritalStatusOptions[getRadioValue('maritalStatus')] : '',\n                pendidikan: getRadioValue('education') ? t.educationOptions[getRadioValue('education')] : '',\n                pekerjaan: getRadioValue('occupation') ? t.occupationOptions[getRadioValue('occupation')] : '',\n                jenisPesakit: treatmentLoc ? t.treatmentLocationOptions[treatmentLoc.value] : '',\n                detailDalam: document.getElementById('inpatient-text') ? document.getElementById('inpatient-text').value : '',\n                detailLuar: document.getElementById('outpatient-text') ? document.getElementById('outpatient-text').value : '',\n                jabatan: $('#service-location-select').val() || '',\n                skorFasiliti: facilitiesScore ? facilitiesScore.value : '',\n                tagFasiliti: selectedFacilitiesTagsArray.join(', '),\n                komenFasiliti: document.getElementById('facilities-textarea').value || '',\n                q1: surveyForm.querySelector(`input[name=\"q1\"]:checked`)?.value || '',\n                q2: surveyForm.querySelector(`input[name=\"q2\"]:checked`)?.value || '',\n                q3: surveyForm.querySelector(`input[name=\"q3\"]:checked`)?.value || '',\n                q4: surveyForm.querySelector(`input[name=\"q4\"]:checked`)?.value || '',\n                q5: surveyForm.querySelector(`input[name=\"q5\"]:checked`)?.value || '',\n                q6: surveyForm.querySelector(`input[name=\"q6\"]:checked`)?.value || '',\n                q7: surveyForm.querySelector(`input[name=\"q7\"]:checked`)?.value || '',\n                komen: document.getElementById('comments-textarea').value || '',\n                testimoni: appraisalValue ? `(${selectedLangCode}) - ${appraisalValue}` : ''\n            };\n\n            const submitBtn = document.getElementById('submit-button');\n            submitBtn.disabled = true;\n            submitBtn.innerText = \"Menghantar... (Sending...)\";\n\n            \/\/ 4. SEND THE DATA USING FETCH API TO GOOGLE APPS SCRIPT\n            fetch(APPS_SCRIPT_URL, {\n                method: \"POST\",\n                mode: \"no-cors\", \/\/ Required for Google Apps Script Web Apps when accessed from outside domains\n                headers: {\n                    \"Content-Type\": \"text\/plain;charset=utf-8\" \/\/ Trick to prevent preflight CORS error \n                },\n                body: JSON.stringify(payload)\n            })\n            .then(() => {\n                \/\/ Because we use \"no-cors\", we can't read the exact JSON response, but it implies it was successfully sent.\n                const summaryModal = document.getElementById('summary-modal');\n                if (summaryModal) summaryModal.style.display = 'none';\n                \n                alert(\"Maklum balas anda telah dihantar! Borang akan diset semula.\");\n                resetFormAfterSubmission();\n\n                \/\/ Start cooldown\n                let waitTimeMs = Math.floor(Math.random() * (15000 - 8000 + 1)) + 8000; \n                let countdown = Math.ceil(waitTimeMs \/ 1000);\n\n                submitBtn.style.backgroundColor = \"#6c757d\"; \n                submitBtn.innerText = `Sila tunggu ${countdown} saat...`;\n\n                const timer = setInterval(() => {\n                    countdown--;\n                    submitBtn.innerText = `Sila tunggu ${countdown} saat...`;\n                    \n                    if (countdown <= 0) {\n                        clearInterval(timer);\n                        submitBtn.disabled = false;\n                        submitBtn.style.backgroundColor = \"\"; \n                        \n                        const langSelect = document.getElementById('language-select');\n                        const t = translations[langSelect.value] || translations['ms'];\n                        submitBtn.innerText = t.submitBtn; \n                    }\n                }, 1000);\n            })\n            .catch((error) => {\n                console.error(\"Error submitting form:\", error);\n                alert(\"Maaf, terdapat ralat semasa menghantar borang. Sila cuba lagi.\");\n                submitBtn.disabled = false;\n                const langSelect = document.getElementById('language-select');\n                const t = translations[langSelect.value] || translations['ms'];\n                submitBtn.innerText = t.submitBtn; \n            });\n        });\n\n        document.getElementById('modal-close-button').addEventListener('click', () => {\n            document.getElementById('summary-modal').style.display = 'none';\n        });\n\n        document.getElementById('reset-button').addEventListener('click', (e) => {\n            e.preventDefault();\n            surveyForm.reset(); \n            \n            $('.locked-input').removeClass('locked-input');\n            document.querySelectorAll('.locked-input').forEach(el => el.classList.remove('locked-input'));\n            document.querySelectorAll('input[name=\"treatmentLocation\"]').forEach(r => {\n                r.style.pointerEvents = 'auto';\n            });\n            \n            $('#state-select').val(null).trigger('change');\n            $('#hospital-select').val(null).trigger('change');\n            $('#service-location-select').val(null).trigger('change');\n            \n            $('.print-only-text').text('');\n\n            document.getElementById('facilities-textarea').value = '';\n            document.getElementById('comments-textarea').value = '';\n            document.getElementById('appraisal-textarea').value = '';\n            document.querySelectorAll('#facilities-tags-container .selected').forEach(tag => tag.classList.remove('selected'));\n            \n            document.getElementById('score-percentage').textContent = '0%';\n            document.querySelectorAll('input[type=\"radio\"]:checked').forEach(radio => radio.checked = false);\n            \n            updateUI(langSelect.value);\n            updateMetrics(); \n            \n            window.scrollTo(0, 0);\n        });\n        \n        populateStateSelect();\n        populateServiceSelect();\n        prefillFormFromUrl(); \n\n        const savedTheme = localStorage.getItem('theme') || 'light';\n        applyTheme(savedTheme);\n\n        updateMetrics(); \n        fetchAndParseData(); \n    });\n<\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Soal Selidik Kepuasan Pesakit Telefon anda menghalang skrip borang ini. Sila buka pautan ini menggunakan aplikasi GOOGLE CHROME atau SAFARI. \u26a0\ufe0f Perhatian: Anda sedang membuka borang ini di dalam aplikasi pihak ketiga. Sila tekan ikon menu (tiga titik di penjuru atas) dan pilih &#8220;Open in Browser \/ Buka di Pelayar &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":2560,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-2608","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/hq.moh.gov.my\/medicaldev\/ckpp\/wp-json\/wp\/v2\/pages\/2608","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hq.moh.gov.my\/medicaldev\/ckpp\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/hq.moh.gov.my\/medicaldev\/ckpp\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/hq.moh.gov.my\/medicaldev\/ckpp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hq.moh.gov.my\/medicaldev\/ckpp\/wp-json\/wp\/v2\/comments?post=2608"}],"version-history":[{"count":16,"href":"https:\/\/hq.moh.gov.my\/medicaldev\/ckpp\/wp-json\/wp\/v2\/pages\/2608\/revisions"}],"predecessor-version":[{"id":2962,"href":"https:\/\/hq.moh.gov.my\/medicaldev\/ckpp\/wp-json\/wp\/v2\/pages\/2608\/revisions\/2962"}],"up":[{"embeddable":true,"href":"https:\/\/hq.moh.gov.my\/medicaldev\/ckpp\/wp-json\/wp\/v2\/pages\/2560"}],"wp:attachment":[{"href":"https:\/\/hq.moh.gov.my\/medicaldev\/ckpp\/wp-json\/wp\/v2\/media?parent=2608"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}