Widget:520Jeopardy: Difference between revisions

From Doc-Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 4: Line 4:
==Usage==
==Usage==
  <nowiki>{{#widget:520Jeapordy}}</nowiki>
  <nowiki>{{#widget:520Jeapordy}}</nowiki>
</noinclude><includeonly><div id="jeopardy-widget-container">
</noinclude><includeonly><div id="jep-container">
<style>
<style>
.jep * { margin: 0; padding: 0; box-sizing: border-box; }
.jep-game * { margin: 0; padding: 0; box-sizing: border-box; }
.jep { font-family: Arial, sans-serif; background: linear-gradient(135deg, rgb(30,58,95) 0%, rgb(12,25,41) 100%); min-height: 100vh; padding: 20px; position: relative; }
.jep-game { font-family: Arial, sans-serif; background: linear-gradient(135deg, rgb(30,58,95) 0%, rgb(12,25,41) 100%); padding: 20px; border-radius: 8px; }
.jep .ctr { max-width: 1200px; margin: 0 auto; }
.jep-game .container { max-width: 1200px; margin: 0 auto; }
.jep .ctr.blur { filter: blur(5px); pointer-events: none; }
.jep-game .title { text-align: center; color: rgb(251,191,36); font-size: 2rem; font-weight: bold; margin-bottom: 8px; }
.jep .ttl { text-align: center; color: rgb(251,191,36); font-size: 2.2rem; font-weight: bold; margin-bottom: 8px; text-shadow: 2px 2px 4px rgba(0,0,0,0.5); }
.jep-game .subtitle { text-align: center; color: rgb(147,197,253); margin-bottom: 15px; font-size: 0.9rem; }
.jep .sub { text-align: center; color: rgb(147,197,253); margin-bottom: 5px; font-size: 0.95rem; }
.jep-game .scoreboard { display: flex; justify-content: center; gap: 30px; margin-bottom: 15px; }
.jep .snd { text-align: center; color: rgb(147,197,253); font-size: 0.85rem; margin-bottom: 15px; }
.jep-game .team { background: rgb(30,64,175); padding: 10px 20px; border-radius: 8px; text-align: center; }
.jep .scb { display: flex; justify-content: center; gap: 30px; margin-bottom: 15px; }
.jep-game .team.active { box-shadow: 0 0 15px rgb(251,191,36); }
.jep .tms { background: rgb(30,64,175); padding: 12px 25px; border-radius: 10px; text-align: center; transition: all 0.3s; }
.jep-game .team h3 { color: white; margin-bottom: 5px; font-size: 0.95rem; }
.jep .tms.act { box-shadow: 0 0 20px rgb(251,191,36); transform: scale(1.05); }
.jep-game .team .score { font-size: 1.4rem; font-weight: bold; }
.jep .tms h3 { color: white; margin-bottom: 5px; font-size: 1rem; }
.jep-game .score-pos { color: rgb(74,222,128); }
.jep .scr { font-size: 1.6rem; font-weight: bold; }
.jep-game .score-neg { color: rgb(248,113,113); }
.jep .pos { color: rgb(74,222,128); }
.jep-game .turn-indicator { text-align: center; color: rgb(251,191,36); font-size: 1rem; margin-bottom: 12px; }
.jep .neg { color: rgb(248,113,113); }
.jep-game .board { display: grid; grid-template-columns: repeat(6, 1fr); gap: 5px; margin-bottom: 15px; }
.jep .trn { text-align: center; color: rgb(251,191,36); font-size: 1.1rem; margin-bottom: 12px; }
.jep-game .cat-header { background: rgb(30,64,175); color: white; padding: 10px 5px; text-align: center; font-weight: bold; font-size: 0.8rem; border-radius: 5px 5px 0 0; min-height: 50px; display: flex; align-items: center; justify-content: center; }
.jep .brd { display: grid; grid-template-columns: repeat(6, 1fr); gap: 6px; margin-bottom: 15px; }
.jep-game .cell { background: rgb(37,99,235); color: rgb(251,191,36); padding: 15px 5px; text-align: center; font-size: 1.2rem; font-weight: bold; border-radius: 5px; cursor: pointer; border: none; width: 100%; }
.jep .cat { background: rgb(30,64,175); color: white; padding: 12px 8px; text-align: center; font-weight: bold; font-size: 0.85rem; border-radius: 6px 6px 0 0; min-height: 55px; display: flex; align-items: center; justify-content: center; }
.jep-game .cell:hover:not(.used) { background: rgb(59,130,246); }
.jep .qcl { background: rgb(37,99,235); color: rgb(251,191,36); padding: 18px 10px; text-align: center; font-size: 1.4rem; font-weight: bold; border-radius: 6px; cursor: pointer; transition: all 0.2s; border: none; width: 100%; }
.jep-game .cell.used { background: rgb(30,58,95); color: rgb(30,58,95); cursor: default; }
.jep .qcl:hover:not(.ans) { background: rgb(59,130,246); transform: scale(1.03); box-shadow: 0 4px 12px rgba(0,0,0,0.3); }
.jep-game .btn-reset { background: rgb(220,38,38); color: white; padding: 8px 16px; border-radius: 5px; font-weight: bold; cursor: pointer; border: none; display: block; margin: 0 auto; }
.jep .qcl.ans { background: rgb(30,58,95); color: rgb(30,58,95); cursor: not-allowed; }
.jep-game .btn-reset:hover { background: rgb(185,28,28); }
.jep .rst { background: rgb(220,38,38); color: white; padding: 10px 20px; border-radius: 6px; font-weight: bold; font-size: 0.95rem; cursor: pointer; border: none; transition: all 0.2s; }
.jep-game .btn-mute { background: rgb(30,64,175); color: white; padding: 8px 12px; border-radius: 5px; border: none; cursor: pointer; font-size: 1.1rem; margin-left: 10px; }
.jep .rst:hover { background: rgb(185,28,28); }
.jep-game .tips { text-align: center; color: rgb(147,197,253); font-size: 0.75rem; margin-top: 10px; }
.jep .mute { position: absolute; top: 15px; right: 15px; background: rgb(30,64,175); color: white; width: 45px; height: 45px; border-radius: 50%; border: none; cursor: pointer; font-size: 1.3rem; z-index: 10; transition: all 0.2s; }
.jep-game .question-view { background: rgb(30,64,175); border-radius: 8px; padding: 20px; color: white; }
.jep .mute:hover { background: rgb(37,99,235); }
.jep-game .q-header { text-align: center; margin-bottom: 15px; }
.jep .tip { text-align: center; color: rgb(147,197,253); font-size: 0.8rem; margin-top: 12px; }
.jep-game .q-category { display: inline-block; background: rgb(251,191,36); color: rgb(30,58,95); padding: 5px 15px; border-radius: 15px; font-weight: bold; font-size: 0.9rem; }
.jep .tip p { margin: 3px 0; }
.jep-game .q-team { color: rgb(251,191,36); margin-top: 8px; }
.jep .mov { display: none; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.6); z-index: 100; justify-content: center; align-items: center; padding: 20px; border-radius: 8px; }
.jep-game .q-timer { text-align: center; margin-bottom: 12px; }
.jep .mov.act { display: flex; }
.jep-game .timer-badge { display: inline-block; padding: 6px 16px; border-radius: 15px; font-size: 1.2rem; font-weight: bold; background: rgb(251,191,36); color: rgb(30,58,95); }
.jep .moc { background: rgb(30,64,175); border-radius: 12px; padding: 25px; max-width: 650px; width: 100%; max-height: 85vh; overflow-y: auto; color: white; }
.jep-game .timer-badge.warning { background: rgb(220,38,38); color: white; }
.jep .moh { text-align: center; margin-bottom: 15px; }
.jep-game .scenario-box { background: rgb(29,78,216); border-radius: 6px; padding: 12px; margin-bottom: 10px; }
.jep .mct { display: inline-block; background: rgb(251,191,36); color: rgb(30,58,95); padding: 6px 18px; border-radius: 20px; font-weight: bold; font-size: 0.95rem; }
.jep-game .scenario-box h4 { color: rgb(251,191,36); margin-bottom: 6px; font-size: 0.9rem; }
.jep .mtm { color: rgb(251,191,36); margin-top: 8px; font-size: 0.95rem; }
.jep-game .scenario-box p { font-size: 0.95rem; line-height: 1.4; }
.jep .tmd { text-align: center; margin-bottom: 12px; }
.jep-game .question-box { background: rgb(37,99,235); border-radius: 6px; padding: 12px; margin-bottom: 10px; }
.jep .tmb { display: inline-block; padding: 8px 20px; border-radius: 20px; font-size: 1.3rem; font-weight: bold; }
.jep-game .question-box h4 { color: rgb(251,191,36); margin-bottom: 6px; font-size: 0.9rem; }
.jep .tmn { background: rgb(251,191,36); color: rgb(30,58,95); }
.jep-game .question-box p { font-size: 1rem; font-weight: 600; }
.jep .tmw { background: rgb(220,38,38); color: white; animation: jeppulse 1s infinite; }
.jep-game .answer-box { background: rgb(22,101,52); border-radius: 6px; padding: 12px; margin-bottom: 10px; }
@keyframes jeppulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.7; } }
.jep-game .answer-box h4 { color: rgb(251,191,36); margin-bottom: 6px; font-size: 0.9rem; }
.jep .mus { text-align: center; color: rgb(147,197,253); font-size: 0.85rem; margin-bottom: 10px; animation: jeppulse 1s infinite; }
.jep-game .answer-box p { font-size: 0.95rem; line-height: 1.4; }
.jep .scn { background: rgb(29,78,216); border-radius: 8px; padding: 15px; margin-bottom: 12px; }
.jep-game .btn-group { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; margin-top: 15px; }
.jep .scn h4 { color: rgb(251,191,36); margin-bottom: 8px; font-size: 0.95rem; }
.jep-game .btn { padding: 10px 20px; border-radius: 5px; font-weight: bold; cursor: pointer; border: none; font-size: 0.9rem; }
.jep .scn p { font-size: 1rem; line-height: 1.5; }
.jep-game .btn-reveal { background: rgb(251,191,36); color: rgb(30,58,95); }
.jep .qst { background: rgb(37,99,235); border-radius: 8px; padding: 15px; margin-bottom: 12px; }
.jep-game .btn-reveal:hover { background: rgb(252,211,77); }
.jep .qst h4 { color: rgb(251,191,36); margin-bottom: 8px; font-size: 0.95rem; }
.jep-game .btn-correct { background: rgb(34,197,94); color: white; }
.jep .qst p { font-size: 1.1rem; font-weight: 600; line-height: 1.4; }
.jep-game .btn-correct:hover { background: rgb(22,163,74); }
.jep .asw { background: rgb(22,101,52); border-radius: 8px; padding: 15px; margin-bottom: 12px; animation: jepfade 0.3s; }
.jep-game .btn-wrong { background: rgb(239,68,68); color: white; }
@keyframes jepfade { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } }
.jep-game .btn-wrong:hover { background: rgb(220,38,38); }
.jep .asw h4 { color: rgb(251,191,36); margin-bottom: 8px; font-size: 0.95rem; }
.jep-game .game-over { text-align: center; padding: 30px; }
.jep .asw p { font-size: 1rem; line-height: 1.5; }
.jep-game .game-over h1 { font-size: 2rem; color: rgb(251,191,36); margin-bottom: 15px; }
.jep .btg { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; }
.jep-game .game-over .final { font-size: 1.2rem; color: white; margin-bottom: 10px; }
.jep .btn { padding: 10px 22px; border-radius: 6px; font-weight: bold; font-size: 0.95rem; cursor: pointer; border: none; transition: all 0.2s; }
.jep-game .game-over .winner { font-size: 1.5rem; color: rgb(251,191,36); font-weight: bold; margin-bottom: 20px; }
.jep .brv { background: rgb(251,191,36); color: rgb(30,58,95); }
.jep-hidden { display: none !important; }
.jep .brv:hover { background: rgb(252,211,77); }
.jep .bcr { background: rgb(34,197,94); color: white; }
.jep .bcr:hover { background: rgb(22,163,74); }
.jep .bic { background: rgb(239,68,68); color: white; }
.jep .bic:hover { background: rgb(220,38,38); }
.jep .gov { text-align: center; padding: 30px; }
.jep .gov h1 { font-size: 2.5rem; color: rgb(251,191,36); margin-bottom: 20px; }
.jep .gov .fsc { font-size: 1.4rem; color: white; margin-bottom: 15px; }
.jep .gov .fsc p { margin: 5px 0; }
.jep .gov .win { font-size: 1.8rem; color: rgb(251,191,36); font-weight: bold; margin-bottom: 25px; }
</style>
</style>


<div class="jep">
<div class="jep-game">
    <button class="mute" id="jepMute" onclick="Jep.mute()">🔊</button>
<div id="jepBoardView" class="container">
     <div class="ctr" id="jepCtr">
     <h1 class="title">🏥 Nursing Pharmacology Jeopardy</h1>
        <h1 class="ttl">🏥 Nursing Pharmacology Jeopardy</h1>
    <p class="subtitle">NSG 520 - Pathophysiology and Pharmacology</p>
        <p class="sub">NSG 520 - Pathophysiology and Pharmacology</p>
    <div class="scoreboard">
         <p class="snd" id="jepSnd">🔊 Click any tile to start with sound!</p>
         <div class="team active" id="jepTeam1"><h3>Team 1</h3><div class="score score-pos" id="jepScore1">$0</div></div>
        <div class="scb">
        <div class="team" id="jepTeam2"><h3>Team 2</h3><div class="score score-pos" id="jepScore2">$0</div></div>
            <div class="tms act" id="jepT1"><h3>Team 1</h3><div class="scr pos" id="jepV1">$0</div></div>
    </div>
            <div class="tms" id="jepT2"><h3>Team 2</h3><div class="scr pos" id="jepV2">$0</div></div>
    <p class="turn-indicator" id="jepTurn">🎯 Team 1's Turn to Pick</p>
    <div class="board" id="jepBoard"></div>
    <div style="text-align:center;">
        <button class="btn-reset" onclick="JepGame.resetGame()">Reset Game</button>
        <button class="btn-mute" id="jepMuteBtn" onclick="JepGame.toggleMute()">🔊</button>
    </div>
    <p class="tips">💡 Questions increase in difficulty with point value | 🎵 Sound effects included</p>
</div>
 
<div id="jepQuestionView" class="container jep-hidden">
    <div class="question-view">
        <div class="q-header">
            <span class="q-category" id="jepQCat">Category - $000</span>
            <p class="q-team" id="jepQTeam">Team 1's Turn</p>
         </div>
         </div>
        <p class="trn" id="jepTrn">🎯 Team 1's Turn to Pick</p>
         <div class="q-timer"><span class="timer-badge" id="jepTimer">⏱️ 30s</span></div>
         <div class="brd" id="jepBrd"></div>
        <div class="scenario-box"><h4>📋 Scenario:</h4><p id="jepScenario"></p></div>
        <div style="text-align:center;"><button class="rst" onclick="Jep.reset()">Reset Game</button></div>
        <div class="question-box"><h4>❓ Question:</h4><p id="jepQuestion"></p></div>
        <div class="tip"><p>💡 Questions increase in difficulty with point value</p><p>🎵 Thinking music, sound effects, and 30-second timer!</p></div>
        <div id="jepAnswerBox" class="answer-box jep-hidden"><h4>✅ Answer:</h4><p id="jepAnswer"></p></div>
    </div>
        <div class="btn-group" id="jepButtons">
    <div class="mov" id="jepQM">
            <button class="btn btn-reveal" onclick="JepGame.showAnswer()">Reveal Answer</button>
        <div class="moc">
            <div class="moh"><span class="mct" id="jepMCat">Category - $000</span><p class="mtm" id="jepMTm">Team 1's Turn</p></div>
            <div class="tmd"><span class="tmb tmn" id="jepTmr">⏱️ 30s</span></div>
            <div class="mus" id="jepMus" style="display:none;">♪ ♫ Thinking Music ♫ ♪</div>
            <div class="scn"><h4>📋 Scenario:</h4><p id="jepScn"></p></div>
            <div class="qst"><h4>❓ Question:</h4><p id="jepQst"></p></div>
            <div class="asw" id="jepAsw" style="display:none;"><h4>✅ Answer:</h4><p id="jepAns"></p></div>
            <div class="btg" id="jepBtg"><button class="btn brv" onclick="Jep.reveal()">Reveal Answer</button></div>
         </div>
         </div>
     </div>
     </div>
    <div class="mov" id="jepGO">
</div>
        <div class="moc gov"><h1>🏆 Game Over!</h1><div class="fsc" id="jepFsc"></div><div class="win" id="jepWin"></div><button class="btn brv" onclick="Jep.reset()">Play Again</button></div>
 
<div id="jepGameOverView" class="container jep-hidden">
    <div class="question-view game-over">
        <h1>🏆 Game Over!</h1>
        <div class="final" id="jepFinalScores"></div>
        <div class="winner" id="jepWinner"></div>
        <button class="btn btn-reveal" onclick="JepGame.resetGame()">Play Again</button>
     </div>
     </div>
</div>
</div>
</div>


<script>
<script>
var Jep=(function(){
var JepGame = (function() {
var cats=[
    var categories = [
{name:"Cardiovascular",q:[
        {name:"Cardiovascular",questions:[
{p:200,s:"A 58-year-old patient with heart failure is prescribed digoxin. Before administering the medication, the nurse checks the apical pulse and finds it to be 52 bpm.",q:"What should the nurse do?",a:"Hold the medication and notify the healthcare provider. Digoxin should be held if the apical pulse is below 60 bpm in adults due to risk of toxicity and bradycardia."},
            {pts:200,scenario:"A 58-year-old patient with heart failure is prescribed digoxin. Before administering the medication, the nurse checks the apical pulse and finds it to be 52 bpm.",question:"What should the nurse do?",answer:"Hold the medication and notify the healthcare provider. Digoxin should be held if the apical pulse is below 60 bpm in adults due to risk of toxicity and bradycardia."},
{p:400,s:"A patient taking warfarin for atrial fibrillation has an INR of 4.8. The patient reports dark, tarry stools and dizziness.",q:"What is the priority nursing intervention?",a:"Hold warfarin, notify the provider immediately, and prepare for possible administration of Vitamin K. The patient shows signs of GI bleeding with supratherapeutic INR levels."},
            {pts:400,scenario:"A patient taking warfarin for atrial fibrillation has an INR of 4.8. The patient reports dark, tarry stools and dizziness.",question:"What is the priority nursing intervention?",answer:"Hold warfarin, notify the provider immediately, and prepare for possible administration of Vitamin K. The patient shows signs of GI bleeding with supratherapeutic INR levels."},
{p:600,s:"A post-MI patient on a cardiac monitor suddenly shows a wide QRS complex rhythm at 180 bpm with no detectable pulse.",q:"What is this rhythm and what is the immediate action?",a:"Ventricular tachycardia (pulseless VT). Begin CPR immediately and prepare for defibrillation. This is a shockable rhythm requiring immediate intervention per ACLS protocol."},
            {pts:600,scenario:"A post-MI patient on a cardiac monitor suddenly shows a wide QRS complex rhythm at 180 bpm with no detectable pulse.",question:"What is this rhythm and what is the immediate action?",answer:"Ventricular tachycardia (pulseless VT). Begin CPR immediately and prepare for defibrillation. This is a shockable rhythm requiring immediate intervention per ACLS protocol."},
{p:800,s:"A patient with chronic heart failure is started on carvedilol. Two weeks later, the patient reports increased shortness of breath and weight gain of 5 lbs.",q:"Why might this occur and what should the nurse assess?",a:"Beta-blockers can initially worsen heart failure symptoms before providing long-term benefit. Assess for fluid retention, monitor daily weights, lung sounds, and edema."},
            {pts:800,scenario:"A patient with chronic heart failure is started on carvedilol. Two weeks later, the patient reports increased shortness of breath and weight gain of 5 lbs.",question:"Why might this occur and what should the nurse assess?",answer:"Beta-blockers can initially worsen heart failure symptoms before providing long-term benefit. Assess for fluid retention, monitor daily weights, lung sounds, and edema."},
{p:1000,s:"A hypertensive patient on lisinopril develops a persistent dry cough. The provider switches to losartan. The patient asks why.",q:"What is the nurse's best explanation?",a:"ACE inhibitors like lisinopril can cause dry cough due to bradykinin accumulation. ARBs like losartan work similarly but don't cause bradykinin buildup, so cough is not a side effect."}
            {pts:1000,scenario:"A hypertensive patient on lisinopril develops a persistent dry cough. The provider switches to losartan.",question:"What is the nurse's best explanation for this change?",answer:"ACE inhibitors like lisinopril can cause dry cough due to bradykinin accumulation. ARBs like losartan work similarly but don't cause bradykinin buildup, so cough is not a side effect."}
]},
        ]},
{name:"Pain Mgmt",q:[
        {name:"Pain Mgmt",questions:[
{p:200,s:"A post-surgical patient rates their pain as 7/10 and requests PRN morphine. The last dose was given 3 hours ago, ordered every 4 hours.",q:"What is the appropriate nursing action?",a:"Offer non-pharmacological interventions (repositioning, ice/heat, relaxation) and reassess in 1 hour. Cannot give morphine until 4-hour interval has passed."},
            {pts:200,scenario:"A post-surgical patient rates their pain as 7/10 and requests PRN morphine. The last dose was given 3 hours ago, ordered every 4 hours.",question:"What is the appropriate nursing action?",answer:"Offer non-pharmacological interventions (repositioning, ice/heat, relaxation) and reassess in 1 hour. Cannot give morphine until 4-hour interval has passed."},
{p:400,s:"An elderly patient with dementia is grimacing, guarding their abdomen, and has increased restlessness but cannot verbally report pain.",q:"What pain assessment tool should the nurse use?",a:"Use a behavioral pain scale such as PAINAD (Pain Assessment in Advanced Dementia) or FLACC scale. Assess for nonverbal cues."},
            {pts:400,scenario:"An elderly patient with dementia is grimacing, guarding their abdomen, and has increased restlessness but cannot verbally report pain.",question:"What pain assessment tool should the nurse use?",answer:"Use a behavioral pain scale such as PAINAD (Pain Assessment in Advanced Dementia) or FLACC scale. Assess for nonverbal cues."},
{p:600,s:"A patient with chronic back pain has been on oxycodone for 6 months and now requires higher doses to achieve the same pain relief.",q:"What phenomenon is this, and how is it different from addiction?",a:"This is tolerance - a physiological adaptation requiring higher doses. It differs from addiction, which involves compulsive use despite harm and loss of control."},
            {pts:600,scenario:"A patient with chronic back pain has been on oxycodone for 6 months and now requires higher doses to achieve the same pain relief.",question:"What phenomenon is this, and how is it different from addiction?",answer:"This is tolerance - a physiological adaptation requiring higher doses. It differs from addiction, which involves compulsive use despite harm and loss of control."},
{p:800,s:"A patient receiving IV morphine via PCA pump has a respiratory rate of 8, is difficult to arouse, and has pinpoint pupils.",q:"What is occurring and what are the priority interventions?",a:"Opioid overdose/toxicity. Stop PCA, stimulate patient, call for help, prepare naloxone (Narcan), support airway and breathing."},
            {pts:800,scenario:"A patient receiving IV morphine via PCA pump has a respiratory rate of 8, is difficult to arouse, and has pinpoint pupils.",question:"What is occurring and what are the priority interventions?",answer:"Opioid overdose/toxicity. Stop PCA, stimulate patient, call for help, prepare naloxone (Narcan), support airway and breathing."},
{p:1000,s:"A patient with cancer pain is on around-the-clock MS Contin but still has breakthrough pain episodes.",q:"What medication regimen modification should the nurse anticipate?",a:"Add immediate-release morphine for breakthrough pain, typically 10-15 percent of the total 24-hour dose."}
            {pts:1000,scenario:"A patient with cancer pain is on around-the-clock MS Contin but still has breakthrough pain episodes.",question:"What medication regimen modification should the nurse anticipate?",answer:"Add immediate-release morphine for breakthrough pain, typically 10-15 percent of the total 24-hour dose."}
]},
        ]},
{name:"Teaching",q:[
        {name:"Teaching",questions:[
{p:200,s:"A newly diagnosed diabetic patient needs insulin teaching. The patient appears anxious and keeps checking their phone.",q:"What should the nurse do before beginning education?",a:"Assess readiness to learn. Address anxiety first, minimize distractions, and determine the patient's learning style and priorities."},
            {pts:200,scenario:"A newly diagnosed diabetic patient needs insulin teaching. The patient appears anxious and keeps checking their phone.",question:"What should the nurse do before beginning education?",answer:"Assess readiness to learn. Address anxiety first, minimize distractions, and determine the patient's learning style and priorities."},
{p:400,s:"An elderly patient with newly prescribed warfarin has mild hearing loss and reads at a 6th-grade level.",q:"What teaching strategies should the nurse employ?",a:"Face the patient when speaking, use simple language, provide written materials at appropriate reading level with large print, use teach-back method."},
            {pts:400,scenario:"An elderly patient with newly prescribed warfarin has mild hearing loss and reads at a 6th-grade level.",question:"What teaching strategies should the nurse employ?",answer:"Face the patient when speaking, use simple language, provide written materials at appropriate reading level with large print, use teach-back method."},
{p:600,s:"A patient is being discharged on metformin for type 2 diabetes. They ask if they can drink alcohol on weekends.",q:"What patient education should the nurse provide?",a:"Alcohol increases risk of lactic acidosis with metformin and can cause hypoglycemia. Recommend limiting alcohol and never drinking on empty stomach."},
            {pts:600,scenario:"A patient is being discharged on metformin for type 2 diabetes. They ask if they can drink alcohol on weekends.",question:"What patient education should the nurse provide?",answer:"Alcohol increases risk of lactic acidosis with metformin and can cause hypoglycemia. Recommend limiting alcohol and never drinking on empty stomach."},
{p:800,s:"A patient with CHF is being discharged. The nurse has 15 minutes to provide discharge teaching about medications, diet, activity, and warning signs.",q:"How should the nurse prioritize this teaching?",a:"Focus on survival skills: daily weights (report 2+ lb gain), sodium restriction basics, medication names/times, and warning signs requiring immediate attention."},
            {pts:800,scenario:"A patient with CHF is being discharged. The nurse has 15 minutes to provide discharge teaching about medications, diet, activity, and warning signs.",question:"How should the nurse prioritize this teaching?",answer:"Focus on survival skills: daily weights (report 2+ lb gain), sodium restriction basics, medication names/times, and warning signs requiring immediate attention."},
{p:1000,s:"A 16-year-old with newly diagnosed epilepsy needs teaching about phenytoin. The mother wants to handle all medication administration.",q:"What developmental considerations should guide the nurse's approach?",a:"Adolescents need autonomy. Include the teen in teaching, address concerns about appearance (gingival hyperplasia) and driving restrictions."}
            {pts:1000,scenario:"A 16-year-old with newly diagnosed epilepsy needs teaching about phenytoin. The mother wants to handle all medication administration.",question:"What developmental considerations should guide the nurse's approach?",answer:"Adolescents need autonomy. Include the teen in teaching, address concerns about appearance (gingival hyperplasia) and driving restrictions."}
]},
        ]},
{name:"GI/Hepatic",q:[
        {name:"GI/Hepatic",questions:[
{p:200,s:"A patient with cirrhosis has a serum ammonia level of 95 mcg/dL (normal: 15-45). The patient is confused and has asterixis.",q:"What medication should the nurse anticipate and why?",a:"Lactulose - it acidifies the colon, converting ammonia to ammonium which cannot be absorbed, and promotes bowel movements to eliminate ammonia."},
            {pts:200,scenario:"A patient with cirrhosis has a serum ammonia level of 95 mcg/dL (normal: 15-45). The patient is confused and has asterixis.",question:"What medication should the nurse anticipate and why?",answer:"Lactulose - it acidifies the colon, converting ammonia to ammonium which cannot be absorbed, and promotes bowel movements to eliminate ammonia."},
{p:400,s:"A patient post-cholecystectomy complains of severe right shoulder pain despite the surgery being abdominal.",q:"What causes this and what should the nurse do?",a:"Referred pain from CO2 used during laparoscopic surgery irritating the diaphragm. Encourage ambulation to absorb the gas."},
            {pts:400,scenario:"A patient post-cholecystectomy complains of severe right shoulder pain despite the surgery being abdominal.",question:"What causes this and what should the nurse do?",answer:"Referred pain from CO2 used during laparoscopic surgery irritating the diaphragm. Encourage ambulation to absorb the gas."},
{p:600,s:"A patient with peptic ulcer disease is prescribed omeprazole, clarithromycin, and amoxicillin for 14 days.",q:"What is this regimen treating and what teaching is essential?",a:"H. pylori eradication (triple therapy). Complete entire course even if feeling better, take PPI before meals, return for follow-up testing."},
            {pts:600,scenario:"A patient with peptic ulcer disease is prescribed omeprazole, clarithromycin, and amoxicillin for 14 days.",question:"What is this regimen treating and what teaching is essential?",answer:"H. pylori eradication (triple therapy). Complete entire course even if feeling better, take PPI before meals, return for follow-up testing."},
{p:800,s:"A patient with acute pancreatitis has NG tube to suction, IV fluids, and NPO status. The patient asks why they can't eat.",q:"What is the nurse's best explanation?",a:"The pancreas needs rest to heal. Eating stimulates pancreatic enzyme secretion, which can worsen inflammation and pain."},
            {pts:800,scenario:"A patient with acute pancreatitis has NG tube to suction, IV fluids, and NPO status. The patient asks why they can't eat.",question:"What is the nurse's best explanation?",answer:"The pancreas needs rest to heal. Eating stimulates pancreatic enzyme secretion, which can worsen inflammation and pain."},
{p:1000,s:"A patient with Crohn's disease on long-term prednisone develops round face, central obesity, and blood glucose of 180 mg/dL.",q:"What is occurring and what patient education is needed?",a:"Cushing syndrome from chronic corticosteroid use. Never stop medication abruptly, report signs of infection, monitor blood glucose."}
            {pts:1000,scenario:"A patient with Crohn's disease on long-term prednisone develops round face, central obesity, and blood glucose of 180 mg/dL.",question:"What is occurring and what patient education is needed?",answer:"Cushing syndrome from chronic corticosteroid use. Never stop medication abruptly, report signs of infection, monitor blood glucose."}
]},
        ]},
{name:"Med Admin",q:[
        {name:"Med Admin",questions:[
{p:200,s:"A nurse is preparing to administer IV vancomycin. The pharmacy sends it to infuse over 30 minutes.",q:"What concern should the nurse have?",a:"Vancomycin infused too rapidly causes Red Man Syndrome - flushing, hypotension, rash. Should infuse over at least 60 minutes."},
            {pts:200,scenario:"A nurse is preparing to administer IV vancomycin. The pharmacy sends it to infuse over 30 minutes.",question:"What concern should the nurse have?",answer:"Vancomycin infused too rapidly causes Red Man Syndrome - flushing, hypotension, rash. Should infuse over at least 60 minutes."},
{p:400,s:"A patient's MAR shows potassium chloride 40 mEq IV ordered. The nurse receives the medication as a 40 mEq vial.",q:"What must the nurse verify before administration?",a:"IV potassium must NEVER be given as bolus push - causes fatal arrhythmias. Verify diluted appropriately, infused via pump, max 10-20 mEq/hour."},
            {pts:400,scenario:"A patient's MAR shows potassium chloride 40 mEq IV ordered. The nurse receives the medication as a 40 mEq vial.",question:"What must the nurse verify before administration?",answer:"IV potassium must NEVER be given as bolus push - causes fatal arrhythmias. Verify diluted appropriately, infused via pump, max 10-20 mEq/hour."},
{p:600,s:"A nurse is to administer insulin lispro (Humalog) and insulin glargine (Lantus) to a diabetic patient before breakfast.",q:"How should these insulins be administered?",a:"Give in SEPARATE syringes - Lantus should never be mixed with other insulins as it can alter the action of both."},
            {pts:600,scenario:"A nurse is to administer insulin lispro (Humalog) and insulin glargine (Lantus) to a diabetic patient before breakfast.",question:"How should these insulins be administered?",answer:"Give in SEPARATE syringes - Lantus should never be mixed with other insulins as it can alter the action of both."},
{p:800,s:"A patient on IV heparin drip has an aPTT of 120 seconds (therapeutic range 60-80). The patient now needs an invasive procedure.",q:"What should the nurse do?",a:"Hold heparin infusion, notify provider. If urgent reversal needed, protamine sulfate is the antidote. Monitor for bleeding."},
            {pts:800,scenario:"A patient on IV heparin drip has an aPTT of 120 seconds (therapeutic range 60-80). The patient now needs an invasive procedure.",question:"What should the nurse do?",answer:"Hold heparin infusion, notify provider. If urgent reversal needed, protamine sulfate is the antidote. Monitor for bleeding."},
{p:1000,s:"A patient receiving first dose of IV penicillin develops hives, wheezing, and BP drop to 80/50 after 5 minutes.",q:"What is occurring and list interventions in priority order?",a:"Anaphylaxis. 1) Stop infusion, 2) Call for help, 3) Epinephrine IM, 4) Maintain airway, 5) IV fluids, 6) Diphenhydramine/corticosteroids."}
            {pts:1000,scenario:"A patient receiving first dose of IV penicillin develops hives, wheezing, and BP drop to 80/50 after 5 minutes.",question:"What is occurring and list interventions in priority order?",answer:"Anaphylaxis. 1) Stop infusion, 2) Call for help, 3) Epinephrine IM, 4) Maintain airway, 5) IV fluids, 6) Diphenhydramine/corticosteroids."}
]},
        ]},
{name:"Pathophys",q:[
        {name:"Pathophys",questions:[
{p:200,s:"A patient with uncontrolled diabetes has blood glucose of 450 mg/dL, breathing rapidly and deeply, and fruity-smelling breath.",q:"What condition is this and what causes these symptoms?",a:"Diabetic Ketoacidosis (DKA). Lack of insulin causes fat breakdown producing ketones. Metabolic acidosis triggers Kussmaul respirations."},
            {pts:200,scenario:"A patient with uncontrolled diabetes has blood glucose of 450 mg/dL, breathing rapidly and deeply, and fruity-smelling breath.",question:"What condition is this and what causes these symptoms?",answer:"Diabetic Ketoacidosis (DKA). Lack of insulin causes fat breakdown producing ketones. Metabolic acidosis triggers Kussmaul respirations."},
{p:400,s:"A patient with COPD on 2L nasal cannula has oxygen increased to 6L by family. The patient becomes increasingly drowsy.",q:"What is happening physiologically?",a:"CO2 narcosis. COPD patients rely on hypoxic drive. High-flow oxygen removes this drive, causing hypoventilation and CO2 retention."},
            {pts:400,scenario:"A patient with COPD on 2L nasal cannula has oxygen increased to 6L by family. The patient becomes increasingly drowsy.",question:"What is happening physiologically?",answer:"CO2 narcosis. COPD patients rely on hypoxic drive. High-flow oxygen removes this drive, causing hypoventilation and CO2 retention."},
{p:600,s:"A patient after thyroidectomy develops tingling around the mouth, muscle cramps, and positive Chvostek's sign.",q:"What complication is this and why does it occur?",a:"Hypocalcemia due to damage to parathyroid glands during surgery. Treat with IV calcium gluconate."},
            {pts:600,scenario:"A patient after thyroidectomy develops tingling around the mouth, muscle cramps, and positive Chvostek's sign.",question:"What complication is this and why does it occur?",answer:"Hypocalcemia due to damage to parathyroid glands during surgery. Treat with IV calcium gluconate."},
{p:800,s:"A trauma patient receives 6 units of PRBCs. Labs show: pH 7.28, K+ 6.2 mEq/L, calcium 7.8 mg/dL, hypothermia.",q:"What complications of massive transfusion are occurring?",a:"Metabolic acidosis, hyperkalemia (K+ leaks from stored RBCs), hypocalcemia (citrate binds calcium), and hypothermia."},
            {pts:800,scenario:"A trauma patient receives 6 units of PRBCs. Labs show: pH 7.28, K+ 6.2 mEq/L, calcium 7.8 mg/dL, hypothermia.",question:"What complications of massive transfusion are occurring?",answer:"Metabolic acidosis, hyperkalemia (K+ leaks from stored RBCs), hypocalcemia (citrate binds calcium), and hypothermia."},
{p:1000,s:"A patient with severe sepsis has: BP 78/40, HR 128, lactate 6 mmol/L, urine output 10 mL/hr for 2 hours.",q:"What is occurring and what are the priority interventions?",a:"Septic shock. Fluid resuscitation (30 mL/kg), obtain cultures, broad-spectrum antibiotics within 1 hour, vasopressors if needed."}
            {pts:1000,scenario:"A patient with severe sepsis has: BP 78/40, HR 128, lactate 6 mmol/L, urine output 10 mL/hr for 2 hours.",question:"What is occurring and what are the priority interventions?",answer:"Septic shock. Fluid resuscitation (30 mL/kg), obtain cultures, broad-spectrum antibiotics within 1 hour, vasopressors if needed."}
]}
        ]}
];
    ];
var st={sc:{t1:0,t2:0},tm:1,done:{},sel:null,tmr:30,ti:null,mt:false,ctx:null,mi:null,mp:false};
 
function iA(){if(!st.ctx)st.ctx=new(window.AudioContext||window.webkitAudioContext)();if(st.ctx.state==='suspended')st.ctx.resume();var e=document.getElementById('jepSnd');if(e)e.style.display='none';}
    var state = {
function pT(f,d,t,v){if(st.mt||!st.ctx)return;t=t||'sine';v=v||0.3;var o=st.ctx.createOscillator();var g=st.ctx.createGain();o.connect(g);g.connect(st.ctx.destination);o.frequency.value=f;o.type=t;g.gain.value=v;g.gain.exponentialRampToValueAtTime(0.01,st.ctx.currentTime+d);o.start();o.stop(st.ctx.currentTime+d);}
        scores: {team1: 0, team2: 0},
function pSel(){iA();pT(523.25,0.1,'sine',0.2);setTimeout(function(){pT(659.25,0.1,'sine',0.2);},50);setTimeout(function(){pT(783.99,0.15,'sine',0.2);},100);}
        currentTeam: 1,
function pCor(){iA();var n=[523.25,659.25,783.99,1046.50];for(var i=0;i<n.length;i++)(function(x){setTimeout(function(){pT(n[x],0.2,'sine',0.25);},x*100);})(i);}
        answered: {},
function pInc(){iA();pT(200,0.3,'sawtooth',0.15);setTimeout(function(){pT(150,0.4,'sawtooth',0.15);},150);}
        current: null,
function pRev(){iA();pT(440,0.1,'triangle',0.2);setTimeout(function(){pT(554.37,0.1,'triangle',0.2);},100);setTimeout(function(){pT(659.25,0.2,'triangle',0.2);},200);}
        timer: 30,
function pVic(){iA();var m=[523.25,523.25,523.25,523.25,415.30,466.16,523.25,466.16,523.25];var d=[0.15,0.15,0.15,0.3,0.3,0.3,0.15,0.15,0.5];var t=0;for(var i=0;i<m.length;i++)(function(x,tt){setTimeout(function(){pT(m[x],d[x],'sine',0.3);},tt);})(i,t),t+=d[i]*600;}
        timerInterval: null,
function sMus(){iA();if(st.mi||st.mt)return;st.mp=true;var e=document.getElementById('jepMus');if(e)e.style.display='block';var bn=[130.81,146.83,164.81,174.61,196.00,174.61,164.81,146.83];var ni=0;function pb(){if(st.mt||!st.ctx)return;var c=st.ctx,n=c.currentTime;var bo=c.createOscillator(),bg=c.createGain();bo.connect(bg);bg.connect(c.destination);bo.frequency.value=bn[ni%bn.length];bo.type='triangle';bg.gain.value=0.15;bg.gain.exponentialRampToValueAtTime(0.01,n+0.4);bo.start();bo.stop(n+0.4);var ho=c.createOscillator(),hg=c.createGain();ho.connect(hg);hg.connect(c.destination);ho.frequency.value=bn[ni%bn.length]*2;ho.type='sine';hg.gain.value=0.08;hg.gain.exponentialRampToValueAtTime(0.01,n+0.3);ho.start();ho.stop(n+0.3);var to=c.createOscillator(),tg=c.createGain();to.connect(tg);tg.connect(c.destination);to.frequency.value=1200;to.type='square';tg.gain.value=0.03;tg.gain.exponentialRampToValueAtTime(0.001,n+0.05);to.start();to.stop(n+0.05);ni++;}
        muted: false,
pb();st.mi=setInterval(pb,450);}
        audioCtx: null
function xMus(){if(st.mi){clearInterval(st.mi);st.mi=null;}st.mp=false;var e=document.getElementById('jepMus');if(e)e.style.display='none';}
    };
function mute(){st.mt=!st.mt;var b=document.getElementById('jepMute');if(b)b.textContent=st.mt?'🔇':'🔊';if(st.mt)xMus();}
 
function bld(){var b=document.getElementById('jepBrd');if(!b)return;b.innerHTML='';for(var c=0;c<cats.length;c++){var h=document.createElement('div');h.className='cat';h.textContent=cats[c].name;b.appendChild(h);}for(var q=0;q<5;q++)for(var c=0;c<cats.length;c++){var cl=document.createElement('button');var k=c+'-'+q;cl.className='qcl'+(st.done[k]?' ans':'');cl.textContent=st.done[k]?'':'$'+cats[c].q[q].p;cl.setAttribute('data-c',c);cl.setAttribute('data-q',q);cl.onclick=function(){sel(parseInt(this.getAttribute('data-c')),parseInt(this.getAttribute('data-q')));};b.appendChild(cl);}}
    function initAudio() {
function upd(){var v1=document.getElementById('jepV1'),v2=document.getElementById('jepV2'),t1=document.getElementById('jepT1'),t2=document.getElementById('jepT2'),tr=document.getElementById('jepTrn');if(v1){v1.textContent='$'+st.sc.t1;v1.className='scr '+(st.sc.t1>=0?'pos':'neg');}if(v2){v2.textContent='$'+st.sc.t2;v2.className='scr '+(st.sc.t2>=0?'pos':'neg');}if(t1)t1.className='tms'+(st.tm===1?' act':'');if(t2)t2.className='tms'+(st.tm===2?' act':'');if(tr)tr.textContent='🎯 Team '+st.tm+"'s Turn to Pick";}
        if (!state.audioCtx) {
function sTmr(){st.tmr=30;uTmr();st.ti=setInterval(function(){st.tmr--;uTmr();if(st.tmr<=0){clearInterval(st.ti);xMus();}},1000);}
            state.audioCtx = new (window.AudioContext || window.webkitAudioContext)();
function xTmr(){if(st.ti){clearInterval(st.ti);st.ti=null;}}
        }
function uTmr(){var b=document.getElementById('jepTmr');if(b){b.textContent='⏱️ '+st.tmr+'s';b.className='tmb '+(st.tmr<=10?'tmw':'tmn');}}
        if (state.audioCtx.state === 'suspended') {
function blurOn(){var c=document.getElementById('jepCtr');if(c)c.className='ctr blur';}
            state.audioCtx.resume();
function blurOff(){var c=document.getElementById('jepCtr');if(c)c.className='ctr';}
        }
function sel(ci,qi){var k=ci+'-'+qi;if(st.done[k])return;pSel();st.sel={c:ci,q:qi};var cat=cats[ci],qn=cat.q[qi];var mc=document.getElementById('jepMCat'),mt=document.getElementById('jepMTm'),sc=document.getElementById('jepScn'),qs=document.getElementById('jepQst'),an=document.getElementById('jepAns'),ab=document.getElementById('jepAsw'),bg=document.getElementById('jepBtg'),mo=document.getElementById('jepQM');if(mc)mc.textContent=cat.name+' - $'+qn.p;if(mt)mt.textContent="Team "+st.tm+"'s Turn";if(sc)sc.textContent=qn.s;if(qs)qs.textContent=qn.q;if(an)an.textContent=qn.a;if(ab)ab.style.display='none';if(bg)bg.innerHTML='<button class="btn brv" onclick="Jep.reveal()">Reveal Answer</button>';if(mo)mo.className='mov act';blurOn();sTmr();setTimeout(sMus,300);}
    }
function reveal(){xMus();xTmr();pRev();var ab=document.getElementById('jepAsw'),bg=document.getElementById('jepBtg');if(ab)ab.style.display='block';if(st.sel&&bg){var qn=cats[st.sel.c].q[st.sel.q];bg.innerHTML='<button class="btn bcr" onclick="Jep.ans(true)">✓ Correct (+$'+qn.p+')</button><button class="btn bic" onclick="Jep.ans(false)">✗ Incorrect (-$'+qn.p+')</button>';}}
 
function ans(cor){xMus();xTmr();cor?pCor():pInc();var qn=cats[st.sel.c].q[st.sel.q],k=st.sel.c+'-'+st.sel.q;st.tm===1?st.sc.t1+=(cor?qn.p:-qn.p):st.sc.t2+=(cor?qn.p:-qn.p);st.done[k]=true;st.tm=st.tm===1?2:1;var mo=document.getElementById('jepQM');if(mo)mo.className='mov';blurOff();bld();upd();if(Object.keys(st.done).length===cats.length*5)setTimeout(go,500);}
    function playTone(freq, dur, type, vol) {
function go(){pVic();var w;if(st.sc.t1>st.sc.t2)w="Team 1 Wins!";else if(st.sc.t2>st.sc.t1)w="Team 2 Wins!";else w="It's a Tie!";var fs=document.getElementById('jepFsc'),wn=document.getElementById('jepWin'),mo=document.getElementById('jepGO');if(fs)fs.innerHTML='<p>Team 1: $'+st.sc.t1+'</p><p>Team 2: $'+st.sc.t2+'</p>';if(wn)wn.textContent=w;if(mo)mo.className='mov act';blurOn();}
        if (state.muted || !state.audioCtx) return;
function reset(){xMus();xTmr();st.sc={t1:0,t2:0};st.tm=1;st.done={};st.sel=null;st.tmr=30;var qm=document.getElementById('jepQM'),gm=document.getElementById('jepGO'),sn=document.getElementById('jepSnd');if(qm)qm.className='mov';if(gm)gm.className='mov';if(sn)sn.style.display='block';blurOff();bld();upd();}
        type = type || 'sine';
function init(){bld();upd();}
        vol = vol || 0.3;
if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',init);else init();
        var osc = state.audioCtx.createOscillator();
return{mute:mute,reveal:reveal,ans:ans,reset:reset};
        var gain = state.audioCtx.createGain();
        osc.connect(gain);
        gain.connect(state.audioCtx.destination);
        osc.frequency.value = freq;
        osc.type = type;
        gain.gain.value = vol;
        gain.gain.exponentialRampToValueAtTime(0.01, state.audioCtx.currentTime + dur);
        osc.start();
        osc.stop(state.audioCtx.currentTime + dur);
    }
 
    function playSelect() {
        initAudio();
        playTone(523.25, 0.1, 'sine', 0.2);
        setTimeout(function() { playTone(659.25, 0.1, 'sine', 0.2); }, 50);
        setTimeout(function() { playTone(783.99, 0.15, 'sine', 0.2); }, 100);
    }
 
    function playCorrect() {
        initAudio();
        var notes = [523.25, 659.25, 783.99, 1046.50];
        for (var i = 0; i < notes.length; i++) {
            (function(idx) {
                setTimeout(function() { playTone(notes[idx], 0.2, 'sine', 0.25); }, idx * 100);
            })(i);
        }
    }
 
    function playWrong() {
        initAudio();
        playTone(200, 0.3, 'sawtooth', 0.15);
        setTimeout(function() { playTone(150, 0.4, 'sawtooth', 0.15); }, 150);
    }
 
    function playReveal() {
        initAudio();
        playTone(440, 0.1, 'triangle', 0.2);
        setTimeout(function() { playTone(554.37, 0.1, 'triangle', 0.2); }, 100);
        setTimeout(function() { playTone(659.25, 0.2, 'triangle', 0.2); }, 200);
    }
 
    function showView(viewId) {
        document.getElementById('jepBoardView').className = 'container jep-hidden';
        document.getElementById('jepQuestionView').className = 'container jep-hidden';
        document.getElementById('jepGameOverView').className = 'container jep-hidden';
        document.getElementById(viewId).className = 'container';
    }
 
    function buildBoard() {
        var board = document.getElementById('jepBoard');
        board.innerHTML = '';
        for (var c = 0; c < categories.length; c++) {
            var header = document.createElement('div');
            header.className = 'cat-header';
            header.textContent = categories[c].name;
            board.appendChild(header);
        }
        for (var q = 0; q < 5; q++) {
            for (var c = 0; c < categories.length; c++) {
                var cell = document.createElement('button');
                var key = c + '-' + q;
                cell.className = 'cell' + (state.answered[key] ? ' used' : '');
                cell.textContent = state.answered[key] ? '' : '$' + categories[c].questions[q].pts;
                cell.setAttribute('data-cat', c);
                cell.setAttribute('data-q', q);
                if (!state.answered[key]) {
                    cell.onclick = function() {
                        var catIdx = parseInt(this.getAttribute('data-cat'));
                        var qIdx = parseInt(this.getAttribute('data-q'));
                        selectQuestion(catIdx, qIdx);
                    };
                }
                board.appendChild(cell);
            }
        }
    }
 
    function updateScores() {
        var s1 = document.getElementById('jepScore1');
        var s2 = document.getElementById('jepScore2');
        var t1 = document.getElementById('jepTeam1');
        var t2 = document.getElementById('jepTeam2');
        var turn = document.getElementById('jepTurn');
 
        s1.textContent = '$' + state.scores.team1;
        s1.className = 'score ' + (state.scores.team1 >= 0 ? 'score-pos' : 'score-neg');
        s2.textContent = '$' + state.scores.team2;
        s2.className = 'score ' + (state.scores.team2 >= 0 ? 'score-pos' : 'score-neg');
        t1.className = 'team' + (state.currentTeam === 1 ? ' active' : '');
        t2.className = 'team' + (state.currentTeam === 2 ? ' active' : '');
        turn.textContent = '🎯 Team ' + state.currentTeam + "'s Turn to Pick";
    }
 
    function startTimer() {
        state.timer = 30;
        updateTimer();
        state.timerInterval = setInterval(function() {
            state.timer--;
            updateTimer();
            if (state.timer <= 0) {
                clearInterval(state.timerInterval);
            }
        }, 1000);
    }
 
    function stopTimer() {
        if (state.timerInterval) {
            clearInterval(state.timerInterval);
            state.timerInterval = null;
        }
    }
 
    function updateTimer() {
        var badge = document.getElementById('jepTimer');
        badge.textContent = '⏱️ ' + state.timer + 's';
        badge.className = 'timer-badge' + (state.timer <= 10 ? ' warning' : '');
    }
 
    function selectQuestion(catIdx, qIdx) {
        var key = catIdx + '-' + qIdx;
        if (state.answered[key]) return;
 
        playSelect();
        state.current = {cat: catIdx, q: qIdx};
 
        var cat = categories[catIdx];
        var question = cat.questions[qIdx];
 
        document.getElementById('jepQCat').textContent = cat.name + ' - $' + question.pts;
        document.getElementById('jepQTeam').textContent = "Team " + state.currentTeam + "'s Turn";
        document.getElementById('jepScenario').textContent = question.scenario;
        document.getElementById('jepQuestion').textContent = question.question;
        document.getElementById('jepAnswer').textContent = question.answer;
        document.getElementById('jepAnswerBox').className = 'answer-box jep-hidden';
        document.getElementById('jepButtons').innerHTML = '<button class="btn btn-reveal" onclick="JepGame.showAnswer()">Reveal Answer</button>';
 
        showView('jepQuestionView');
        startTimer();
    }
 
    function showAnswer() {
        stopTimer();
        playReveal();
        document.getElementById('jepAnswerBox').className = 'answer-box';
        var question = categories[state.current.cat].questions[state.current.q];
        document.getElementById('jepButtons').innerHTML =  
            '<button class="btn btn-correct" onclick="JepGame.answer(true)">✓ Correct (+$' + question.pts + ')</button>' +
            '<button class="btn btn-wrong" onclick="JepGame.answer(false)">✗ Incorrect (-$' + question.pts + ')</button>';
    }
 
    function answer(correct) {
        stopTimer();
        if (correct) {
            playCorrect();
        } else {
            playWrong();
        }
 
        var question = categories[state.current.cat].questions[state.current.q];
        var pts = question.pts;
        var key = state.current.cat + '-' + state.current.q;
 
        if (state.currentTeam === 1) {
            state.scores.team1 += correct ? pts : -pts;
        } else {
            state.scores.team2 += correct ? pts : -pts;
        }
 
        state.answered[key] = true;
        state.currentTeam = state.currentTeam === 1 ? 2 : 1;
        state.current = null;
 
        buildBoard();
        updateScores();
 
        if (Object.keys(state.answered).length === categories.length * 5) {
            setTimeout(showGameOver, 300);
        } else {
            showView('jepBoardView');
        }
    }
 
    function showGameOver() {
        var winner;
        if (state.scores.team1 > state.scores.team2) {
            winner = "Team 1 Wins!";
        } else if (state.scores.team2 > state.scores.team1) {
            winner = "Team 2 Wins!";
        } else {
            winner = "It's a Tie!";
        }
        document.getElementById('jepFinalScores').innerHTML = 'Team 1: $' + state.scores.team1 + '<br>Team 2: $' + state.scores.team2;
        document.getElementById('jepWinner').textContent = winner;
        showView('jepGameOverView');
    }
 
    function resetGame() {
        stopTimer();
        state.scores = {team1: 0, team2: 0};
        state.currentTeam = 1;
        state.answered = {};
        state.current = null;
        state.timer = 30;
        buildBoard();
        updateScores();
        showView('jepBoardView');
    }
 
    function toggleMute() {
        state.muted = !state.muted;
        document.getElementById('jepMuteBtn').textContent = state.muted ? '🔇' : '🔊';
    }
 
    function init() {
        buildBoard();
        updateScores();
        showView('jepBoardView');
    }
 
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', init);
    } else {
        init();
    }
 
    return {
        showAnswer: showAnswer,
        answer: answer,
        resetGame: resetGame,
        toggleMute: toggleMute
    };
})();
})();
</script>
</script>
</div></includeonly>
</div></includeonly>

Revision as of 01:00, 11 January 2026

Nursing Pharmacology Jeopardy Game for NSG 520 - Pathophysiology and Pharmacology

Usage

{{#widget:520Jeapordy}}