<?php
/*
================================================================================
                JAVASCRIPT FUNDAMENTALS - COMPLETE LESSON
                Krane Digital Programming Academy
================================================================================
LESSON: JavaScript - Bringing Pages to Life
AUTHOR: Udoinyang, M. Clement (Mr. Krane)
DATE: 2026

DISCLAIMER: This educational material is protected by copyright.
================================================================================
*/

// =============================================================================
// INITIALIZATION
// =============================================================================

// Start session for progress tracking
session_start();

// Define base path
define('BASE_PATH', dirname(__DIR__));

// Include configuration (adjust path as needed)
if (file_exists(BASE_PATH . '/config.php')) {
    require_once BASE_PATH . '/config.php';
} else {
    // Fallback configuration if config.php doesn't exist
    define('SITE_NAME', 'Krane Digital Programming Academy');
    define('SITE_AUTHOR', 'Udoinyang, M. Clement (Mr. Krane)');
    define('SITE_TAGLINE', 'Empowering Dreams');
    define('KRANE_WEBSITE', 'https://kranedigitalhub.netlify.app');
    define('KRANE_FACEBOOK', 'https://web.facebook.com/KraneDigitalHub007');
    define('KRANE_INSTAGRAM', 'https://www.instagram.com/kranedigitalhub/');
    define('KRANE_TWITTER', 'https://x.com/KraneDigitalHub');
    define('KRANE_YOUTUBE', 'https://youtube.com/@kranedigitalhub');
    define('KRANE_WHATSAPP', 'https://wa.me/2348104727681');
}

// Track lesson progress
if (!isset($_SESSION['completed_lessons'])) {
    $_SESSION['completed_lessons'] = [];
}
$lesson_completed = in_array('javascript', $_SESSION['completed_lessons'] ?? []);

// Handle lesson completion
if (isset($_POST['mark_complete']) && !in_array('javascript', $_SESSION['completed_lessons'] ?? [])) {
    $_SESSION['completed_lessons'][] = 'javascript';
    $lesson_completed = true;
    $show_confetti = true;
}

// =============================================================================
// SIMPLE HEADER FUNCTION (if renderHeader doesn't exist)
// =============================================================================

if (!function_exists('renderHeader')) {
    function renderHeader($title, $currentPage) {
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JavaScript Fundamentals - <?php echo SITE_NAME; ?></title>
    <link rel="stylesheet" href="../assets/css/style.css">
    <link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700;900&family=Poppins:wght@300;400;600;700&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
    <style>
        :root {
            --bg-primary: #0a0a2a;
            --bg-secondary: #16163f;
            --text-primary: #ffffff;
            --text-secondary: #b8b8ff;
            --accent-primary: #00ffff;
            --accent-secondary: #9d4edd;
            --card-bg: rgba(22, 22, 63, 0.8);
        }
        
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        
        body {
            font-family: 'Poppins', sans-serif;
            background: linear-gradient(135deg, #0f0c29, #302b63, #24243e);
            color: var(--text-primary);
            line-height: 1.6;
        }
        
        .container {
            max-width: 1400px;
            margin: 0 auto;
            padding: 2rem;
        }
        
        /* Navigation */
        .navbar {
            background: rgba(22, 22, 63, 0.95);
            backdrop-filter: blur(10px);
            padding: 1rem 2rem;
            position: sticky;
            top: 0;
            z-index: 1000;
            border-bottom: 1px solid var(--accent-primary);
        }
        
        .nav-container {
            max-width: 1400px;
            margin: 0 auto;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }
        
        .logo {
            font-size: 1.5rem;
            font-weight: 700;
            text-decoration: none;
            font-family: 'Orbitron', sans-serif;
            color: var(--text-primary);
        }
        
        .neon-text {
            color: var(--accent-primary);
            text-shadow: 0 0 10px var(--accent-primary);
        }
        
        .accent {
            color: var(--accent-secondary);
        }
        
        .nav-links {
            display: flex;
            gap: 2rem;
        }
        
        .nav-links a {
            color: var(--text-primary);
            text-decoration: none;
            transition: color 0.3s;
        }
        
        .nav-links a:hover,
        .nav-links a.active {
            color: var(--accent-primary);
        }
        
        /* Hero Section */
        .hero-section {
            text-align: center;
            padding: 4rem 2rem;
            background: linear-gradient(135deg, rgba(102, 126, 234, 0.2), rgba(118, 75, 162, 0.2));
            border-radius: 20px;
            margin-bottom: 2rem;
        }
        
        .lead {
            font-size: 1.2rem;
            color: var(--text-secondary);
            margin-top: 1rem;
        }
        
        /* Glass Card */
        .glass-card {
            background: var(--card-bg);
            backdrop-filter: blur(10px);
            border: 1px solid rgba(255, 255, 255, 0.1);
            border-radius: 15px;
            padding: 2rem;
            margin: 2rem 0;
            box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
        }
        
        /* Section */
        .section {
            scroll-margin-top: 100px;
            margin: 3rem 0;
        }
        
        .section-subtitle {
            color: var(--accent-primary);
            font-size: 1.8rem;
            margin-bottom: 1.5rem;
            border-bottom: 2px solid var(--accent-secondary);
            padding-bottom: 0.5rem;
        }
        
        /* Grid Layouts */
        .grid-2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 2rem; }
        .grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; }
        .grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 2rem; }
        
        @media (max-width: 768px) {
            .grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr; }
        }
        
        /* Code Block */
        .code-block {
            background: #1e1e1e;
            border-radius: 10px;
            padding: 1.5rem;
            margin: 1.5rem 0;
            overflow-x: auto;
            border-left: 4px solid var(--accent-primary);
        }
        
        .code-block pre {
            color: #d4d4d4;
            font-family: 'Courier New', monospace;
        }
        
        /* Live Demo */
        .live-demo {
            background: rgba(255, 255, 255, 0.05);
            border-radius: 10px;
            padding: 2rem;
            margin: 2rem 0;
            border: 2px solid var(--accent-primary);
        }
        
        /* Buttons */
        .btn {
            display: inline-flex;
            align-items: center;
            gap: 0.5rem;
            padding: 0.8rem 1.5rem;
            border-radius: 50px;
            text-decoration: none;
            font-weight: 600;
            transition: all 0.3s;
            border: none;
            cursor: pointer;
        }
        
        .btn-primary {
            background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary));
            color: #0a0a2a;
        }
        
        .btn-primary:hover {
            transform: translateY(-3px);
            box-shadow: 0 0 20px var(--accent-primary);
        }
        
        .btn-secondary {
            background: transparent;
            color: var(--text-primary);
            border: 2px solid var(--accent-primary);
        }
        
        .btn-secondary:hover {
            background: var(--accent-primary);
            color: #0a0a2a;
        }
        
        .btn-large {
            padding: 1rem 2rem;
            font-size: 1.1rem;
        }
        
        /* Progress Tracker */
        .progress-tracker {
            background: var(--card-bg);
            border-radius: 10px;
            padding: 1rem;
            margin: 2rem auto;
        }
        
        .tracker-header {
            display: flex;
            justify-content: space-between;
            margin-bottom: 0.5rem;
        }
        
        .tracker-bar {
            height: 10px;
            background: rgba(255, 255, 255, 0.1);
            border-radius: 5px;
            overflow: hidden;
        }
        
        .tracker-fill {
            height: 100%;
            background: linear-gradient(90deg, var(--accent-primary), var(--accent-secondary));
            transition: width 0.5s;
        }
        
        /* Table */
        .data-table {
            width: 100%;
            border-collapse: collapse;
            background: rgba(255, 255, 255, 0.05);
            border-radius: 10px;
            overflow: hidden;
        }
        
        .data-table th {
            background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary));
            color: #0a0a2a;
            padding: 1rem;
        }
        
        .data-table td {
            padding: 1rem;
            border-bottom: 1px solid rgba(255, 255, 255, 0.1);
        }
        
        .data-table tr:hover {
            background: rgba(255, 255, 255, 0.1);
        }
        
        /* TOC Links */
        .toc-link {
            color: var(--text-secondary);
            text-decoration: none;
            display: block;
            padding: 0.5rem;
            transition: all 0.3s;
        }
        
        .toc-link:hover {
            color: var(--accent-primary);
            transform: translateX(10px);
        }
        
        /* JavaScript Console */
        .js-console {
            background: #1e1e1e;
            border-radius: 10px;
            padding: 1rem;
            font-family: 'Courier New', monospace;
            color: #00ff00;
            min-height: 100px;
            margin: 1rem 0;
        }
        
        .js-console .output {
            color: #00ff00;
        }
        
        .js-console .error {
            color: #ff6b6b;
        }
        
        /* Calculator */
        .calculator {
            background: #2a2a4a;
            padding: 2rem;
            border-radius: 15px;
            max-width: 300px;
            margin: 0 auto;
        }
        
        .calculator input {
            width: 100%;
            padding: 1rem;
            margin-bottom: 1rem;
            background: #1e1e3f;
            border: 1px solid var(--accent-primary);
            color: white;
            font-size: 1.2rem;
            text-align: right;
            border-radius: 5px;
        }
        
        .calculator-buttons {
            display: grid;
            grid-template-columns: repeat(4, 1fr);
            gap: 0.5rem;
        }
        
        .calc-btn {
            padding: 1rem;
            background: #1e1e3f;
            border: 1px solid var(--accent-primary);
            color: white;
            font-size: 1.1rem;
            cursor: pointer;
            border-radius: 5px;
            transition: all 0.3s;
        }
        
        .calc-btn:hover {
            background: var(--accent-primary);
            color: #0a0a2a;
        }
        
        /* Todo List */
        .todo-list {
            background: #2a2a4a;
            padding: 2rem;
            border-radius: 15px;
        }
        
        .todo-item {
            display: flex;
            align-items: center;
            gap: 1rem;
            padding: 0.5rem;
            border-bottom: 1px solid rgba(255,255,255,0.1);
        }
        
        .todo-item.completed span {
            text-decoration: line-through;
            opacity: 0.6;
        }
        
        /* Footer */
        .footer {
            background: #16163f;
            padding: 3rem 2rem;
            margin-top: 4rem;
            border-top: 1px solid var(--accent-primary);
        }
        
        .footer-content {
            max-width: 1400px;
            margin: 0 auto;
            text-align: center;
        }
        
        .footer-links {
            display: flex;
            gap: 2rem;
            justify-content: center;
            margin: 2rem 0;
            flex-wrap: wrap;
        }
        
        .footer-links a {
            color: var(--text-secondary);
            text-decoration: none;
        }
        
        .footer-links a:hover {
            color: var(--accent-primary);
        }
        
        .social-links {
            display: flex;
            gap: 1rem;
            justify-content: center;
            margin: 2rem 0;
        }
        
        .social-link {
            width: 40px;
            height: 40px;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            color: white;
            text-decoration: none;
            transition: transform 0.3s;
        }
        
        .social-link:hover {
            transform: translateY(-3px);
        }
        
        .facebook { background: #1877f2; }
        .instagram { background: #e4405f; }
        .twitter { background: #1da1f2; }
        .youtube { background: #ff0000; }
        .whatsapp { background: #25d366; }
        
        /* Back to Top */
        .back-to-top {
            position: fixed;
            bottom: 90px;
            right: 30px;
            width: 50px;
            height: 50px;
            background: linear-gradient(135deg, var(--accent-primary), var(--accent-secondary));
            border: none;
            border-radius: 50%;
            color: #0a0a2a;
            cursor: pointer;
            display: none;
            align-items: center;
            justify-content: center;
            font-size: 1.2rem;
            z-index: 999;
        }
        
        .back-to-top.show {
            display: flex;
        }
        
        /* Confetti */
        #confetti-canvas {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            pointer-events: none;
            z-index: 9999;
        }
        
        /* Game Board */
        .game-board {
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            gap: 0.5rem;
            max-width: 300px;
            margin: 0 auto;
        }
        
        .game-cell {
            aspect-ratio: 1;
            background: #1e1e3f;
            border: 2px solid var(--accent-primary);
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 2rem;
            cursor: pointer;
            transition: all 0.3s;
        }
        
        .game-cell:hover {
            background: var(--accent-primary);
            color: #0a0a2a;
        }
    </style>
</head>
<body>
    <!-- Confetti Canvas -->
    <canvas id="confetti-canvas"></canvas>

    <!-- Navigation -->
    <nav class="navbar">
        <div class="nav-container">
            <a href="../index.php" class="logo">
                <span class="neon-text">Krane<span class="accent">.dev</span></span>
            </a>
            
            <div class="nav-links">
                <a href="../index.php">Home</a>
                <a href="introduction.php">Intro</a>
                <a href="html.php">HTML</a>
                <a href="css.php">CSS</a>
                <a href="javascript.php" class="active">JavaScript</a>
                <a href="advanced.php">Advanced</a>
                <a href="conclusion.php">Conclusion</a>
            </div>
        </div>
    </nav>

    <main class="container">
<?php
    }
}

if (!function_exists('renderFooter')) {
    function renderFooter() {
?>
    </main>

    <!-- Back to Top Button -->
    <button id="backToTop" class="back-to-top">
        <i class="fas fa-arrow-up"></i>
    </button>

    <!-- Footer -->
    <footer class="footer">
        <div class="footer-content">
            <div class="footer-links">
                <a href="../index.php">Home</a>
                <a href="introduction.php">Introduction</a>
                <a href="html.php">HTML</a>
                <a href="css.php">CSS</a>
                <a href="javascript.php">JavaScript</a>
                <a href="advanced.php">Advanced</a>
                <a href="conclusion.php">Conclusion</a>
            </div>
            
            <div class="social-links">
                <a href="<?php echo KRANE_FACEBOOK; ?>" target="_blank" class="social-link facebook"><i class="fab fa-facebook-f"></i></a>
                <a href="<?php echo KRANE_INSTAGRAM; ?>" target="_blank" class="social-link instagram"><i class="fab fa-instagram"></i></a>
                <a href="<?php echo KRANE_TWITTER; ?>" target="_blank" class="social-link twitter"><i class="fab fa-twitter"></i></a>
                <a href="<?php echo KRANE_YOUTUBE; ?>" target="_blank" class="social-link youtube"><i class="fab fa-youtube"></i></a>
                <a href="<?php echo KRANE_WHATSAPP; ?>" target="_blank" class="social-link whatsapp"><i class="fab fa-whatsapp"></i></a>
            </div>
            
            <p>&copy; <?php echo date('Y'); ?> <?php echo SITE_NAME; ?>. All rights reserved.</p>
            <p style="color: #888; font-size: 0.9rem;"><?php echo SITE_AUTHOR; ?></p>
        </div>
    </footer>

    <script>
        // Back to Top Button
        const backToTop = document.getElementById('backToTop');
        window.addEventListener('scroll', () => {
            if (window.pageYOffset > 300) {
                backToTop.classList.add('show');
            } else {
                backToTop.classList.remove('show');
            }
        });
        
        backToTop.addEventListener('click', () => {
            window.scrollTo({ top: 0, behavior: 'smooth' });
        });

        // Confetti Effect
        <?php if (isset($show_confetti) && $show_confetti): ?>
        (function() {
            const canvas = document.getElementById('confetti-canvas');
            const ctx = canvas.getContext('2d');
            canvas.width = window.innerWidth;
            canvas.height = window.innerHeight;
            
            const particles = [];
            const colors = ['#00ffff', '#9d4edd', '#ff6b6b', '#ffd93d', '#4d4dff'];
            
            for (let i = 0; i < 100; i++) {
                particles.push({
                    x: Math.random() * canvas.width,
                    y: Math.random() * canvas.height - canvas.height,
                    vx: Math.random() * 2 - 1,
                    vy: Math.random() * 3 + 2,
                    color: colors[Math.floor(Math.random() * colors.length)],
                    size: Math.random() * 5 + 2
                });
            }
            
            function animate() {
                ctx.clearRect(0, 0, canvas.width, canvas.height);
                
                for (let i = particles.length - 1; i >= 0; i--) {
                    const p = particles[i];
                    p.x += p.vx;
                    p.y += p.vy;
                    
                    ctx.fillStyle = p.color;
                    ctx.beginPath();
                    ctx.arc(p.x, p.y, p.size, 0, Math.PI * 2);
                    ctx.fill();
                    
                    if (p.y > canvas.height) {
                        particles.splice(i, 1);
                    }
                }
                
                if (particles.length > 0) {
                    requestAnimationFrame(animate);
                } else {
                    canvas.style.display = 'none';
                }
            }
            
            animate();
            setTimeout(() => { canvas.style.display = 'none'; }, 5000);
        })();
        <?php endif; ?>
    </script>
</body>
</html>
<?php
    }
}

// =============================================================================
// RENDER THE PAGE
// =============================================================================

renderHeader('JavaScript Fundamentals', 'javascript');
?>

<!-- Hero Section -->
<section class="hero-section">
    <h1 class="neon-text" style="font-size: 3rem;"><i class="fab fa-js" style="color: #ffd93d;"></i> JAVASCRIPT FUNDAMENTALS</h1>
    <p class="lead">Bring Your Websites to Life with Interactive Code</p>
    
    <!-- Progress Tracker -->
    <div class="progress-tracker" style="max-width: 400px; margin: 2rem auto;">
        <div class="tracker-header">
            <span>Lesson Progress</span>
            <span><?php echo $lesson_completed ? '✅ Completed' : '⏳ In Progress'; ?></span>
        </div>
        <div class="tracker-bar">
            <div class="tracker-fill" style="width: <?php echo $lesson_completed ? '100' : '0'; ?>%;"></div>
        </div>
    </div>
</section>

<!-- Detailed Lesson Navigation -->
<div class="glass-card">
    <h3 style="color: #FFD700; margin-bottom: 1.5rem;"><i class="fas fa-list-ul"></i> JavaScript Curriculum</h3>
    
    <div class="grid-2">
        <div>
            <h4 style="color: #00ffff;">Section 4.1 - 4.4</h4>
            <ul style="list-style: none;">
                <li><a href="#section1" class="toc-link">📦 4.1 Variables & Data Types</a></li>
                <li><a href="#section2" class="toc-link">⚡ 4.2 Functions</a></li>
                <li><a href="#section3" class="toc-link">🌳 4.3 DOM Manipulation</a></li>
                <li><a href="#section4" class="toc-link">🖱️ 4.4 Events</a></li>
            </ul>
        </div>
        <div>
            <h4 style="color: #00ffff;">Section 4.5 - 4.8</h4>
            <ul style="list-style: none;">
                <li><a href="#section5" class="toc-link">✅ 4.5 Form Validation</a></li>
                <li><a href="#section6" class="toc-link">🌐 4.6 Working with APIs</a></li>
                <li><a href="#section7" class="toc-link">💾 4.7 Local Storage</a></li>
                <li><a href="#section8" class="toc-link">⏱️ 4.8 Async JavaScript</a></li>
            </ul>
        </div>
    </div>
</div>

<!-- JavaScript Console Demo -->
<div class="glass-card">
    <h3>🎮 JavaScript Console</h3>
    <p>Try JavaScript directly in your browser! Open your browser's console (F12) to see more.</p>
    <div class="js-console" id="console">
        <div>> JavaScript Ready!</div>
        <div>> Type your code below and click Run</div>
    </div>
    <div style="display: flex; gap: 0.5rem; margin-top: 0.5rem;">
        <input type="text" id="js-input" placeholder="Enter JavaScript code (e.g., 2 + 2)" style="flex: 1; padding: 0.5rem; background: #1e1e3f; color: white; border: 1px solid #00ffff; border-radius: 5px;">
        <button class="btn btn-primary" onclick="runJavaScript()">Run</button>
        <button class="btn btn-secondary" onclick="clearConsole()">Clear</button>
    </div>
</div>

<script>
function runJavaScript() {
    const input = document.getElementById('js-input').value;
    const console = document.getElementById('console');
    
    try {
        const result = eval(input);
        console.innerHTML += `<div class="output">> ${input}</div>`;
        console.innerHTML += `<div class="output">  ${result}</div>`;
    } catch (error) {
        console.innerHTML += `<div class="error">> Error: ${error.message}</div>`;
    }
    
    // Scroll to bottom
    console.scrollTop = console.scrollHeight;
}

function clearConsole() {
    document.getElementById('console').innerHTML = '<div>> Console cleared</div><div>> Ready for new commands</div>';
}
</script>

<!-- SECTION 1: VARIABLES & DATA TYPES -->
<section id="section1" class="section">
    <h2 class="section-subtitle"><span class="neon-text">4.1</span> Variables & Data Types</h2>
    
    <div class="grid-2">
        <div class="glass-card">
            <h3>Declaring Variables</h3>
            <div class="code-block">
                <pre>// Using let (modern, can be reassigned)
let name = "John";
let age = 25;

// Using const (cannot be reassigned)
const PI = 3.14159;
const birthYear = 1998;

// Using var (old way, avoid)
var oldWay = "deprecated";</pre>
            </div>
        </div>
        
        <div class="glass-card">
            <h3>Data Types</h3>
            <table class="data-table">
                <tr><th>Type</th><th>Example</th></tr>
                <tr><td>String</td><td>"Hello World"</td></tr>
                <tr><td>Number</td><td>42, 3.14</td></tr>
                <tr><td>Boolean</td><td>true, false</td></tr>
                <tr><td>Array</td><td>[1, 2, 3]</td></tr>
                <tr><td>Object</td><td>{name: "John"}</td></tr>
                <tr><td>Null</td><td>null</td></tr>
                <tr><td>Undefined</td><td>undefined</td></tr>
            </table>
        </div>
    </div>
    
    <div class="live-demo">
        <h3>✏️ Variable Playground</h3>
        <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 1rem;">
            <div>
                <div class="form-group">
                    <label>Your Name:</label>
                    <input type="text" id="varName" class="form-control" value="John">
                </div>
                <div class="form-group">
                    <label>Your Age:</label>
                    <input type="number" id="varAge" class="form-control" value="25">
                </div>
                <button class="btn btn-primary" onclick="displayVariables()">Show Variables</button>
            </div>
            <div>
                <div id="var-output" class="js-console" style="min-height: 150px;">
                    Output will appear here
                </div>
            </div>
        </div>
    </div>
    
    <script>
    function displayVariables() {
        const name = document.getElementById('varName').value;
        const age = parseInt(document.getElementById('varAge').value);
        const output = document.getElementById('var-output');
        
        const nextYear = age + 1;
        const message = `Hello ${name}! You are ${age} years old. Next year you'll be ${nextYear}.`;
        
        output.innerHTML = `
            <div>Name variable (string): "${name}"</div>
            <div>Age variable (number): ${age}</div>
            <div>Type of name: ${typeof name}</div>
            <div>Type of age: ${typeof age}</div>
            <div>${message}</div>
        `;
    }
    </script>
</section>

<!-- SECTION 2: FUNCTIONS -->
<section id="section2" class="section">
    <h2 class="section-subtitle"><span class="neon-text">4.2</span> Functions</h2>
    
    <div class="grid-3">
        <div class="glass-card">
            <h3>Function Declaration</h3>
            <div class="code-block">
                <pre>function greet(name) {
    return "Hello " + name;
}

// Call the function
let message = greet("John");</pre>
            </div>
            <button class="btn btn-secondary" onclick="alert(greet('John'))">Try it</button>
        </div>
        
        <div class="glass-card">
            <h3>Function Expression</h3>
            <div class="code-block">
                <pre>const add = function(a, b) {
    return a + b;
};

let sum = add(5, 3);</pre>
            </div>
            <button class="btn btn-secondary" onclick="alert('5 + 3 = ' + add(5,3))">Try it</button>
        </div>
        
        <div class="glass-card">
            <h3>Arrow Function</h3>
            <div class="code-block">
                <pre>const multiply = (a, b) => a * b;

let product = multiply(4, 5);</pre>
            </div>
            <button class="btn btn-secondary" onclick="alert('4 × 5 = ' + multiply(4,5))">Try it</button>
        </div>
    </div>
    
    <div class="live-demo">
        <h3>🧮 Function Calculator</h3>
        <div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem;">
            <input type="number" id="num1" placeholder="Number 1" value="10">
            <input type="number" id="num2" placeholder="Number 2" value="5">
            <select id="operation">
                <option value="add">Add (+)</option>
                <option value="subtract">Subtract (-)</option>
                <option value="multiply">Multiply (×)</option>
                <option value="divide">Divide (÷)</option>
            </select>
        </div>
        <button class="btn btn-primary" onclick="calculate()">Calculate</button>
        <div id="calc-result" class="js-console" style="margin-top: 1rem;"></div>
    </div>
    
    <script>
    function greet(name) { return "Hello " + name; }
    function add(a, b) { return a + b; }
    function multiply(a, b) { return a * b; }
    
    function calculate() {
        const a = parseFloat(document.getElementById('num1').value);
        const b = parseFloat(document.getElementById('num2').value);
        const op = document.getElementById('operation').value;
        let result;
        
        const operations = {
            add: () => a + b,
            subtract: () => a - b,
            multiply: () => a * b,
            divide: () => a / b
        };
        
        result = operations[op]();
        document.getElementById('calc-result').innerHTML = `Result: ${a} ${op} ${b} = ${result}`;
    }
    </script>
</section>

<!-- SECTION 3: DOM MANIPULATION -->
<section id="section3" class="section">
    <h2 class="section-subtitle"><span class="neon-text">4.3</span> DOM Manipulation</h2>
    
    <div class="grid-2">
        <div class="glass-card">
            <h3>Selecting Elements</h3>
            <div class="code-block">
                <pre>// By ID
let header = document.getElementById('header');

// By Class
let items = document.getElementsByClassName('item');

// By Tag
let paragraphs = document.getElementsByTagName('p');

// Query Selector (modern)
let first = document.querySelector('.class');
let all = document.querySelectorAll('div');</pre>
            </div>
        </div>
        
        <div class="glass-card">
            <h3>Changing Content</h3>
            <div class="code-block">
                <pre>// Change text
element.textContent = "New text";
element.innerHTML = "<strong>HTML</strong>";

// Change styles
element.style.color = "blue";
element.style.backgroundColor = "black";

// Add/remove classes
element.classList.add('active');
element.classList.remove('hidden');
element.classList.toggle('visible');</pre>
            </div>
        </div>
    </div>
    
    <div class="live-demo">
        <h3>🎨 DOM Playground</h3>
        <div id="dom-demo" style="background: #2a2a4a; padding: 2rem; border-radius: 10px; text-align: center;">
            <div id="target-element" style="background: #1e1e3f; padding: 2rem; border-radius: 10px; transition: all 0.3s;">
                Click the buttons to change me!
            </div>
        </div>
        <div style="display: flex; gap: 0.5rem; margin-top: 1rem; flex-wrap: wrap;">
            <button class="btn btn-secondary" onclick="changeText()">Change Text</button>
            <button class="btn btn-secondary" onclick="changeColor()">Change Color</button>
            <button class="btn btn-secondary" onclick="addBorder()">Add Border</button>
            <button class="btn btn-secondary" onclick="resetElement()">Reset</button>
        </div>
    </div>
    
    <script>
    function changeText() {
        const element = document.getElementById('target-element');
        element.innerHTML = 'Text changed by JavaScript! 🎉';
    }
    
    function changeColor() {
        const element = document.getElementById('target-element');
        element.style.background = '#00ffff';
        element.style.color = '#0a0a2a';
    }
    
    function addBorder() {
        const element = document.getElementById('target-element');
        element.style.border = '5px solid #ff6b6b';
    }
    
    function resetElement() {
        const element = document.getElementById('target-element');
        element.style.background = '#1e1e3f';
        element.style.color = 'white';
        element.style.border = 'none';
        element.innerHTML = 'Click the buttons to change me!';
    }
    </script>
</section>

<!-- SECTION 4: EVENTS -->
<section id="section4" class="section">
    <h2 class="section-subtitle"><span class="neon-text">4.4</span> Events</h2>
    
    <div class="grid-2">
        <div class="glass-card">
            <h3>Common Events</h3>
            <table class="data-table">
                <tr><th>Event</th><th>Description</th></tr>
                <tr><td>click</td><td>Element clicked</td></tr>
                <tr><td>mouseover</td><td>Mouse enters</td></tr>
                <tr><td>mouseout</td><td>Mouse leaves</td></tr>
                <tr><td>keydown</td><td>Key pressed</td></tr>
                <tr><td>submit</td><td>Form submitted</td></tr>
                <tr><td>load</td><td>Page loaded</td></tr>
                <tr><td>change</td><td>Input changed</td></tr>
            </table>
        </div>
        
        <div class="glass-card">
            <h3>Adding Events</h3>
            <div class="code-block">
                <pre>// Method 1: onclick property
button.onclick = function() {
    alert('Clicked!');
};

// Method 2: addEventListener (best)
button.addEventListener('click', function() {
    alert('Clicked!');
});

// Method 3: HTML attribute (avoid)
&lt;button onclick="alert()"&gt;Click&lt;/button&gt;</pre>
            </div>
        </div>
    </div>
    
    <div class="live-demo">
        <h3>🖱️ Event Playground</h3>
        <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 2rem;">
            <div>
                <div id="hover-box" style="background: #1e1e3f; padding: 3rem; text-align: center; border-radius: 10px; transition: all 0.3s;">
                    Hover over me!
                </div>
                <p id="hover-output">Waiting for hover...</p>
            </div>
            <div>
                <div style="background: #1e1e3f; padding: 2rem; border-radius: 10px;">
                    <p>Click counter: <span id="click-count">0</span></p>
                    <button class="btn btn-primary" id="click-button">Click Me!</button>
                </div>
            </div>
        </div>
    </div>
    
    <script>
    // Hover effects
    const hoverBox = document.getElementById('hover-box');
    const hoverOutput = document.getElementById('hover-output');
    
    hoverBox.addEventListener('mouseover', function() {
        this.style.background = '#00ffff';
        this.style.color = '#0a0a2a';
        hoverOutput.textContent = 'Mouse entered! 🎉';
    });
    
    hoverBox.addEventListener('mouseout', function() {
        this.style.background = '#1e1e3f';
        this.style.color = 'white';
        hoverOutput.textContent = 'Mouse left! 👋';
    });
    
    // Click counter
    let clickCount = 0;
    const clickButton = document.getElementById('click-button');
    const clickDisplay = document.getElementById('click-count');
    
    clickButton.addEventListener('click', function() {
        clickCount++;
        clickDisplay.textContent = clickCount;
        
        if (clickCount === 10) {
            alert('🎉 You clicked 10 times!');
        }
    });
    </script>
</section>

<!-- SECTION 5: FORM VALIDATION -->
<section id="section5" class="section">
    <h2 class="section-subtitle"><span class="neon-text">4.5</span> Form Validation</h2>
    
    <div class="grid-2">
        <div class="glass-card">
            <h3>Validation Rules</h3>
            <div class="code-block">
                <pre>function validateForm() {
    let name = document.getElementById('name').value;
    let email = document.getElementById('email').value;
    let password = document.getElementById('password').value;
    
    if (name.length < 3) {
        alert('Name must be at least 3 characters');
        return false;
    }
    
    if (!email.includes('@')) {
        alert('Invalid email');
        return false;
    }
    
    if (password.length < 6) {
        alert('Password too short');
        return false;
    }
    
    return true;
}</pre>
            </div>
        </div>
        
        <div class="glass-card">
            <h3>Real-time Validation</h3>
            <form id="validation-form" onsubmit="return validateForm(event)">
                <div class="form-group">
                    <label>Name:</label>
                    <input type="text" id="validate-name" class="form-control" onkeyup="validateName()">
                    <span id="name-error" style="color: #ff6b6b;"></span>
                </div>
                <div class="form-group">
                    <label>Email:</label>
                    <input type="email" id="validate-email" class="form-control" onkeyup="validateEmail()">
                    <span id="email-error" style="color: #ff6b6b;"></span>
                </div>
                <div class="form-group">
                    <label>Password:</label>
                    <input type="password" id="validate-password" class="form-control" onkeyup="validatePassword()">
                    <span id="password-error" style="color: #ff6b6b;"></span>
                </div>
                <button type="submit" class="btn btn-primary">Submit</button>
            </form>
        </div>
    </div>
    
    <script>
    function validateName() {
        const name = document.getElementById('validate-name').value;
        const error = document.getElementById('name-error');
        
        if (name.length < 3) {
            error.textContent = 'Name must be at least 3 characters';
            return false;
        } else {
            error.textContent = '✅';
            return true;
        }
    }
    
    function validateEmail() {
        const email = document.getElementById('validate-email').value;
        const error = document.getElementById('email-error');
        
        if (!email.includes('@') || !email.includes('.')) {
            error.textContent = 'Invalid email address';
            return false;
        } else {
            error.textContent = '✅';
            return true;
        }
    }
    
    function validatePassword() {
        const password = document.getElementById('validate-password').value;
        const error = document.getElementById('password-error');
        
        if (password.length < 6) {
            error.textContent = 'Password must be at least 6 characters';
            return false;
        } else {
            error.textContent = '✅';
            return true;
        }
    }
    
    function validateForm(event) {
        event.preventDefault();
        
        const nameValid = validateName();
        const emailValid = validateEmail();
        const passwordValid = validatePassword();
        
        if (nameValid && emailValid && passwordValid) {
            alert('✅ Form submitted successfully!');
            return true;
        } else {
            alert('❌ Please fix the errors');
            return false;
        }
    }
    </script>
</section>

<!-- SECTION 6: WORKING WITH APIS -->
<section id="section6" class="section">
    <h2 class="section-subtitle"><span class="neon-text">4.6</span> Working with APIs</h2>
    
    <div class="grid-2">
        <div class="glass-card">
            <h3>Fetch API</h3>
            <div class="code-block">
                <pre>// Fetch data from API
fetch('https://api.example.com/data')
    .then(response => response.json())
    .then(data => {
        console.log(data);
    })
    .catch(error => {
        console.error('Error:', error);
    });

// Using async/await
async function getData() {
    try {
        const response = await fetch(url);
        const data = await response.json();
        return data;
    } catch (error) {
        console.error(error);
    }
}</pre>
            </div>
        </div>
        
        <div class="glass-card">
            <h3>Demo: Random User API</h3>
            <button class="btn btn-primary" onclick="fetchUser()">Get Random User</button>
            <div id="user-data" style="margin-top: 1rem; padding: 1rem; background: #1e1e3f; border-radius: 5px;">
                Click button to fetch user data
            </div>
        </div>
    </div>
    
    <script>
    async function fetchUser() {
        const output = document.getElementById('user-data');
        output.innerHTML = 'Loading... ⏳';
        
        try {
            // Using Random User Generator API (free, no key needed)
            const response = await fetch('https://randomuser.me/api/');
            const data = await response.json();
            const user = data.results[0];
            
            output.innerHTML = `
                <img src="${user.picture.medium}" style="border-radius: 50%; margin-bottom: 1rem;">
                <p><strong>Name:</strong> ${user.name.first} ${user.name.last}</p>
                <p><strong>Email:</strong> ${user.email}</p>
                <p><strong>Country:</strong> ${user.location.country}</p>
                <p><strong>Phone:</strong> ${user.phone}</p>
            `;
        } catch (error) {
            output.innerHTML = 'Error fetching data: ' + error.message;
        }
    }
    </script>
</section>

<!-- SECTION 7: LOCAL STORAGE -->
<section id="section7" class="section">
    <h2 class="section-subtitle"><span class="neon-text">4.7</span> Local Storage</h2>
    
    <div class="grid-2">
        <div class="glass-card">
            <h3>Local Storage Methods</h3>
            <div class="code-block">
                <pre>// Save data
localStorage.setItem('key', 'value');

// Get data
let value = localStorage.getItem('key');

// Remove data
localStorage.removeItem('key');

// Clear all
localStorage.clear();

// Save objects
let user = {name: 'John', age: 25};
localStorage.setItem('user', JSON.stringify(user));

// Retrieve objects
let savedUser = JSON.parse(localStorage.getItem('user'));</pre>
            </div>
        </div>
        
        <div class="glass-card">
            <h3>Todo List App</h3>
            <div class="todo-list">
                <div style="display: flex; gap: 0.5rem; margin-bottom: 1rem;">
                    <input type="text" id="todo-input" placeholder="Add a task..." style="flex: 1; padding: 0.5rem;">
                    <button class="btn btn-primary" onclick="addTodo()">Add</button>
                </div>
                <div id="todo-list">
                    <!-- Todos will appear here -->
                </div>
                <button class="btn btn-secondary" onclick="clearTodos()" style="margin-top: 1rem;">Clear All</button>
            </div>
        </div>
    </div>
    
    <script>
    // Load todos from localStorage on page load
    let todos = JSON.parse(localStorage.getItem('todos')) || [];
    
    function displayTodos() {
        const list = document.getElementById('todo-list');
        list.innerHTML = '';
        
        todos.forEach((todo, index) => {
            list.innerHTML += `
                <div class="todo-item ${todo.completed ? 'completed' : ''}">
                    <input type="checkbox" ${todo.completed ? 'checked' : ''} onchange="toggleTodo(${index})">
                    <span>${todo.text}</span>
                    <button onclick="deleteTodo(${index})" style="margin-left: auto; background: none; border: none; color: #ff6b6b; cursor: pointer;">
                        <i class="fas fa-trash"></i>
                    </button>
                </div>
            `;
        });
    }
    
    function addTodo() {
        const input = document.getElementById('todo-input');
        const text = input.value.trim();
        
        if (text) {
            todos.push({text: text, completed: false});
            localStorage.setItem('todos', JSON.stringify(todos));
            input.value = '';
            displayTodos();
        }
    }
    
    function toggleTodo(index) {
        todos[index].completed = !todos[index].completed;
        localStorage.setItem('todos', JSON.stringify(todos));
        displayTodos();
    }
    
    function deleteTodo(index) {
        todos.splice(index, 1);
        localStorage.setItem('todos', JSON.stringify(todos));
        displayTodos();
    }
    
    function clearTodos() {
        if (confirm('Clear all todos?')) {
            todos = [];
            localStorage.setItem('todos', JSON.stringify(todos));
            displayTodos();
        }
    }
    
    // Initial display
    displayTodos();
    </script>
</section>

<!-- SECTION 8: ASYNC JAVASCRIPT -->
<section id="section8" class="section">
    <h2 class="section-subtitle"><span class="neon-text">4.8</span> Async JavaScript</h2>
    
    <div class="grid-3">
        <div class="glass-card">
            <h3>setTimeout</h3>
            <div class="code-block">
                <pre>// Run after delay
setTimeout(() => {
    console.log('2 seconds later');
}, 2000);</pre>
            </div>
            <button class="btn btn-secondary" onclick="demoTimeout()">Run Demo</button>
        </div>
        
        <div class="glass-card">
            <h3>setInterval</h3>
            <div class="code-block">
                <pre>// Run repeatedly
let count = 0;
let interval = setInterval(() => {
    console.log(count++);
    if (count > 5) clearInterval(interval);
}, 1000);</pre>
            </div>
            <button class="btn btn-secondary" onclick="demoInterval()">Run Demo</button>
        </div>
        
        <div class="glass-card">
            <h3>Promises</h3>
            <div class="code-block">
                <pre>let promise = new Promise((resolve, reject) => {
    // Async operation
    if (success) resolve(value);
    else reject(error);
});

promise.then(result => {
    // Handle success
}).catch(error => {
    // Handle error
});</pre>
            </div>
        </div>
    </div>
    
    <div class="live-demo">
        <h3>⏱️ Async Timer Demo</h3>
        <div style="text-align: center;">
            <div id="timer-display" style="font-size: 3rem; font-family: monospace; margin: 1rem;">5</div>
            <button class="btn btn-primary" onclick="startTimer()">Start Countdown</button>
        </div>
    </div>
    
    <script>
    function demoTimeout() {
        alert('This alert is immediate!');
        setTimeout(() => {
            alert('This appears 2 seconds later! (setTimeout demo)');
        }, 2000);
    }
    
    let intervalId;
    function demoInterval() {
        let count = 0;
        if (intervalId) clearInterval(intervalId);
        
        intervalId = setInterval(() => {
            alert(`Interval count: ${count++}`);
            if (count > 3) {
                clearInterval(intervalId);
                alert('Interval stopped!');
            }
        }, 1000);
    }
    
    function startTimer() {
        let timeLeft = 5;
        const display = document.getElementById('timer-display');
        
        const timer = setInterval(() => {
            timeLeft--;
            display.textContent = timeLeft;
            
            if (timeLeft <= 0) {
                clearInterval(timer);
                display.textContent = '🎉';
                confetti({particleCount: 100, spread: 70});
            }
        }, 1000);
    }
    </script>
</section>

<!-- PRACTICE PROJECT: TIC TAC TOE GAME -->
<section class="glass-card" style="background: linear-gradient(135deg, #667eea20, #764ba220);">
    <h2 style="color: #FFD700;">🎮 JavaScript Practice Project: Tic Tac Toe</h2>
    <p><strong>Build an Interactive Game!</strong></p>
    
    <div class="grid-2">
        <div>
            <h4>Requirements:</h4>
            <ul>
                <li>✅ 3x3 game board</li>
                <li>✅ Players take turns (X and O)</li>
                <li>✅ Check for winner</li>
                <li>✅ Detect draw</li>
                <li>✅ Reset game button</li>
                <li>✅ Display current player</li>
            </ul>
            
            <h4 style="margin-top: 1rem;">Try the Demo:</h4>
            <div id="game-status" style="margin-bottom: 1rem;">Current Player: X</div>
            <div class="game-board" id="game-board">
                <!-- Game cells will be generated here -->
            </div>
            <button class="btn btn-primary" onclick="resetGame()" style="margin-top: 1rem;">Reset Game</button>
        </div>
        
        <div>
            <h4>Starter Code:</h4>
            <div class="code-block">
                <pre>&lt;div class="game-board"&gt;
    &lt;div class="cell"&gt;&lt;/div&gt;
    ...
&lt;/div&gt;

&lt;script&gt;
let board = ['', '', '', '', '', '', '', '', ''];
let currentPlayer = 'X';
let gameActive = true;

function handleClick(index) {
    // Your game logic here
}
&lt;/script&gt;</pre>
            </div>
        </div>
    </div>
    
    <script>
    // Tic Tac Toe Game
    let board = ['', '', '', '', '', '', '', '', ''];
    let currentPlayer = 'X';
    let gameActive = true;
    
    const winConditions = [
        [0, 1, 2], [3, 4, 5], [6, 7, 8], // Rows
        [0, 3, 6], [1, 4, 7], [2, 5, 8], // Columns
        [0, 4, 8], [2, 4, 6] // Diagonals
    ];
    
    function createBoard() {
        const boardElement = document.getElementById('game-board');
        boardElement.innerHTML = '';
        
        for (let i = 0; i < 9; i++) {
            const cell = document.createElement('div');
            cell.className = 'game-cell';
            cell.setAttribute('data-index', i);
            cell.addEventListener('click', () => handleCellClick(i));
            boardElement.appendChild(cell);
        }
        updateBoard();
    }
    
    function handleCellClick(index) {
        if (!gameActive || board[index] !== '') return;
        
        board[index] = currentPlayer;
        updateBoard();
        checkWinner();
        
        if (gameActive) {
            currentPlayer = currentPlayer === 'X' ? 'O' : 'X';
            document.getElementById('game-status').textContent = `Current Player: ${currentPlayer}`;
        }
    }
    
    function checkWinner() {
        for (let condition of winConditions) {
            const [a, b, c] = condition;
            if (board[a] && board[a] === board[b] && board[a] === board[c]) {
                gameActive = false;
                document.getElementById('game-status').textContent = `🎉 Player ${board[a]} wins!`;
                
                // Highlight winning cells
                condition.forEach(index => {
                    document.querySelector(`[data-index="${index}"]`).style.background = '#4cd964';
                });
                
                confetti({particleCount: 100, spread: 70});
                return;
            }
        }
        
        if (!board.includes('')) {
            gameActive = false;
            document.getElementById('game-status').textContent = "It's a draw!";
        }
    }
    
    function updateBoard() {
        for (let i = 0; i < 9; i++) {
            const cell = document.querySelector(`[data-index="${i}"]`);
            if (cell) {
                cell.textContent = board[i];
            }
        }
    }
    
    function resetGame() {
        board = ['', '', '', '', '', '', '', '', ''];
        currentPlayer = 'X';
        gameActive = true;
        document.getElementById('game-status').textContent = 'Current Player: X';
        
        // Reset cell styles
        document.querySelectorAll('.game-cell').forEach(cell => {
            cell.style.background = '#1e1e3f';
        });
        
        updateBoard();
    }
    
    // Initialize game
    createBoard();
    </script>
</section>

<!-- RESOURCES -->
<section class="glass-card">
    <h3 style="color: #FFD700;">📚 JavaScript Resources</h3>
    <div class="grid-3">
        <a href="#" class="toc-link"><i class="fas fa-file-pdf"></i> JS Cheatsheet</a>
        <a href="#" class="toc-link"><i class="fas fa-file-archive"></i> Example Code</a>
        <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript" target="_blank" class="toc-link"><i class="fas fa-external-link-alt"></i> MDN JS Docs</a>
        <a href="https://javascript.info/" target="_blank" class="toc-link"><i class="fas fa-external-link-alt"></i> JavaScript.info</a>
        <a href="https://www.freecodecamp.org/" target="_blank" class="toc-link"><i class="fas fa-external-link-alt"></i> freeCodeCamp</a>
        <a href="https://codepen.io/" target="_blank" class="toc-link"><i class="fas fa-external-link-alt"></i> CodePen</a>
    </div>
</section>

<!-- LESSON COMPLETION -->
<section style="text-align: center; margin: 3rem 0;">
    <?php if (!$lesson_completed): ?>
    <form method="POST">
        <button type="submit" name="mark_complete" class="btn btn-primary btn-large">
            <i class="fas fa-check-circle"></i> Mark Lesson Complete
        </button>
    </form>
    <?php else: ?>
    <div style="background: #4cd964; color: #2c3e50; padding: 2rem; border-radius: 10px;">
        <i class="fas fa-trophy" style="font-size: 3rem;"></i>
        <h3>🎉 Congratulations!</h3>
        <p>You've mastered JavaScript Fundamentals!</p>
        <a href="advanced.php" class="btn btn-primary">Continue to Advanced Topics →</a>
    </div>
    <?php endif; ?>
</section>

<!-- BACK TO MAIN MENU -->
<div style="text-align: center; margin: 2rem 0;">
    <a href="../index.php" class="btn btn-secondary">
        <i class="fas fa-home"></i> Back to Main Menu
    </a>
</div>

<?php renderFooter(); ?>