{"id":4362,"date":"2022-12-19T12:50:36","date_gmt":"2022-12-19T11:50:36","guid":{"rendered":"https:\/\/www.mjtunes.com\/mjtunes-radio-michael-jackson-radio-depuis-2006\/"},"modified":"2026-09-01T14:48:00","modified_gmt":"2026-09-01T12:48:00","slug":"home-marseille04","status":"publish","type":"page","link":"https:\/\/www.mjtunes.com\/fr\/","title":{"rendered":"MjTunes Radio \u2013 Michael Jackson Radio Depuis 2006"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"4362\" class=\"elementor elementor-4362 elementor-20\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7a4d290b elementor-section-stretched elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7a4d290b\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-custom\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-cff4926\" data-id=\"cff4926\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-485d363 elementor-widget elementor-widget-image\" data-id=\"485d363\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/www.mjtunes.com\/\">\n\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"266\" src=\"https:\/\/www.mjtunes.com\/wp-content\/uploads\/2024\/10\/mjtunes-HDready72-ok-e1787939574471-1024x266.png\" class=\"attachment-large size-large wp-image-4359\" alt=\"\" srcset=\"https:\/\/www.mjtunes.com\/wp-content\/uploads\/2024\/10\/mjtunes-HDready72-ok-e1787939574471-1024x266.png 1024w, https:\/\/www.mjtunes.com\/wp-content\/uploads\/2024\/10\/mjtunes-HDready72-ok-e1787939574471-300x78.png 300w, https:\/\/www.mjtunes.com\/wp-content\/uploads\/2024\/10\/mjtunes-HDready72-ok-e1787939574471-768x200.png 768w, https:\/\/www.mjtunes.com\/wp-content\/uploads\/2024\/10\/mjtunes-HDready72-ok-e1787939574471-1536x400.png 1536w, https:\/\/www.mjtunes.com\/wp-content\/uploads\/2024\/10\/mjtunes-HDready72-ok-e1787939574471-2048x533.png 2048w, https:\/\/www.mjtunes.com\/wp-content\/uploads\/2024\/10\/mjtunes-HDready72-ok-e1787939574471-1x1.png 1w, https:\/\/www.mjtunes.com\/wp-content\/uploads\/2024\/10\/mjtunes-HDready72-ok-e1787939574471-10x3.png 10w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a5b16e8 elementor-section-stretched elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a5b16e8\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-custom\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-eaee8f6\" data-id=\"eaee8f6\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-543baf5 elementor-widget elementor-widget-html\" data-id=\"543baf5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div id=\"mjt-share-menu\">\r\n    <button id=\"mjt-share-btn\" class=\"mjt-share-main-btn\">\r\n        <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n            <path d=\"M4 12C4 9.79 5.79 8 8 8H14V5L20 10L14 15V12H8C6.9 12 6 12.9 6 14C6 15.1 6.9 16 8 16H12V18H8C5.79 18 4 16.21 4 14C4 11.79 5.79 10 8 10H14V8H8C5.79 8 4 9.79 4 12Z\" fill=\"#fff\"\/>\r\n        <\/svg>\r\n        <span>SHARE<\/span>\r\n    <\/button>\r\n\r\n    <div id=\"mjt-share-options\" class=\"hidden\">\r\n\r\n        <a id=\"share-facebook\" class=\"mjt-share-item\" target=\"_blank\">\r\n            <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"#1877F2\">\r\n                <path d=\"M22 12C22 6.48 17.52 2 12 2S2 6.48 2 12c0 4.99 3.66 9.13 8.44 9.88v-6.99H8v-2.89h2.44V9.83c0-2.41 1.43-3.74 3.62-3.74 1.05 0 2.15.19 2.15.19v2.36h-1.21c-1.19 0-1.56.74-1.56 1.5v1.8h2.66l-.43 2.89h-2.23v6.99C18.34 21.13 22 16.99 22 12z\"\/>\r\n            <\/svg>\r\n            Facebook\r\n        <\/a>\r\n\r\n        <a id=\"share-x\" class=\"mjt-share-item\" target=\"_blank\">\r\n            <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"#fff\">\r\n                <path d=\"M18.25 2H21l-6.56 7.44L22 22h-6.75l-4.36-5.72L5.75 22H3l7.06-8.01L2 2h6.75l3.87 5.1L18.25 2z\"\/>\r\n            <\/svg>\r\n            X\r\n        <\/a>\r\n\r\n        <a id=\"share-whatsapp\" class=\"mjt-share-item\" target=\"_blank\">\r\n            <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"#25D366\">\r\n                <path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.472-.148-.67.149-.198.297-.768.967-.94 1.165-.173.198-.347.223-.644.074-.297-.149-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.173.198-.297.298-.495.099-.198.05-.371-.025-.52-.074-.149-.669-1.611-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.095 3.2 5.076 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.872.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347zM12.004 2C6.49 2 2 6.49 2 12.004c0 2.114.555 4.06 1.523 5.76L2 22l4.355-1.523A9.93 9.93 0 0 0 12.004 22C17.51 22 22 17.51 22 12.004 22 6.49 17.51 2 12.004 2z\"\/>\r\n            <\/svg>\r\n            WhatsApp\r\n        <\/a>\r\n\r\n        <a id=\"share-messenger\" class=\"mjt-share-item\" target=\"_blank\">\r\n            <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"#0084FF\">\r\n                <path d=\"M12 2C6.48 2 2 6.09 2 11.2c0 2.88 1.44 5.45 3.72 7.14v3.66l3.41-1.87c.93.26 1.92.4 2.87.4 5.52 0 10-4.09 10-9.2C22 6.09 17.52 2 12 2zm5.07 7.93l-2.97 3.16-2.13-2.16-3.9 2.16 4.03-4.31 2.13 2.16 2.84-3.01z\"\/>\r\n            <\/svg>\r\n            Messenger\r\n        <\/a>\r\n\r\n        <a id=\"share-copy\" class=\"mjt-share-item\">\r\n            \ud83d\udd17 Copy link\r\n        <\/a>\r\n\r\n    <\/div>\r\n<\/div>\r\n\r\n<style>\r\n\r\n.mjt-share-main-btn {\r\n    background: #000;\r\n    color: #fff;\r\n    padding: 10px 16px;\r\n    border-radius: 30px;\r\n    cursor: pointer;\r\n    border: none;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n    font-weight: 600;\r\n}\r\n\r\n#mjt-share-options.hidden {\r\n    display: none;\r\n}\r\n\r\n.mjt-share-item {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n    color: #fff;\r\n    text-decoration: none;\r\n    padding: 8px;\r\n    background: #222;\r\n    border-radius: 6px;\r\n    font-size: 14px;\r\n}\r\n\r\n.mjt-share-item:hover {\r\n    background: #333;\r\n}\r\n#mjt-share-menu {\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: center;\r\n    justify-content: center;\r\n    width: 100%;\r\n}\r\n\r\n#mjt-share-options {\r\n    position: relative;\r\n    top: 0;\r\n    left: 0;\r\n    transform: translateX(0);\r\n    background: #111;\r\n    padding: 12px;\r\n    border-radius: 10px;\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 10px;\r\n    width: 200px;\r\n    box-shadow: 0 4px 12px rgba(0,0,0,0.4);\r\n    z-index: 999;\r\n}\r\n\r\n\r\n#mjt-share-options {\r\n    transform-origin: top center;\r\n    animation: mjtFade 0.15s ease-out;\r\n}\r\n\r\n@keyframes mjtFade {\r\n    from { opacity: 0; transform: scale(0.95); }\r\n    to { opacity: 1; transform: scale(1); }\r\n}\r\n\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-98bc09c elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"98bc09c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"mjtunes-player-container\">\n    <!-- Zone du titre -->\n    <div id=\"mjtunes-song-display\" class=\"mjtunes-track-title\">MJTunes Radio<\/div>\n    \n    <!-- Lecteur Audio Natif \u00c9pur\u00e9 -->\n    <div class=\"mjtunes-audio-wrapper\">\n        <audio id=\"mjtunes-core-stream\" preload=\"none\">\n            <source src=\"https:\/\/zeno.fm\" type=\"audio\/mpeg\">\n            Votre navigateur ne supporte pas ce lecteur.\n        <\/audio>\n        \n        <!-- Bouton interactif d'origine -->\n        <button id=\"mjtunes-toggle-btn\" class=\"mjtunes-play-button\">\n            <span id=\"mjtunes-btn-text\">\u25b6 Listen to MjTunes.com<\/span>\n            <!-- La roue de chargement noire (masqu\u00e9e au d\u00e9part) -->\n            <span id=\"mjtunes-button-loader\" class=\"mjtunes-btn-spinner\"><\/span>\n        <\/button>\n    <\/div>\n<\/div>\n\n<style>\n\/* Design Premium Noir et Or pour MJTunes *\/\n.mjtunes-player-container {\n    font-family: Arial, sans-serif;\n    background: #0000004f;\n    color: #ffffff;\n    padding: 25px;\n    border-radius: 12px;\n    text-align: center;\n    max-width: 100%;\n    border: 2px solid #98ffff;\n}\n.mjtunes-status {\n    font-size: 18px;\n    font-weight: bold;\n    color: #ff3f1e;\n    letter-spacing: 0px;\n    margin-bottom: 10px;\n}\n.mjtunes-track-title {\n    font-size: 1.3em;\n    font-weight: bold;\n    color: #ffffff;\n    margin-bottom: 25px;\n    min-height: 35px;\n}\n.mjtunes-play-button {\n    background: #ffcc00;\n    color: #000000;\n    border: none;\n    padding: 12px 30px;\n    font-size: 0.95em;\n    font-weight: bold;\n    border-radius: 30px;\n    cursor: pointer;\n    transition: all 0.2s ease-in-out;\n    letter-spacing: 1px;\n    box-shadow: 0 4px 10px rgba(255, 204, 0, 0.3);\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 10px;\n    min-width: 240px; \/* \u00c9vite que le bouton change de taille pendant le chargement *\/\n}\n.mjtunes-play-button:hover {\n    background: #ffffff;\n    transform: scale(1.04);\n}\n.mjtunes-play-button.active-playing {\n    background: #ff0055;\n    color: #ffffff;\n    box-shadow: 0 4px 10px rgba(255, 0, 85, 0.4);\n}\n\n\/* --- LE LOADER GRAPHIQUE --- *\/\n.mjtunes-btn-spinner {\n    display: none; \/* Masqu\u00e9 par d\u00e9faut *\/\n    width: 16px;\n    height: 16px;\n    border: 3px solid rgba(0, 0, 0, 0.15);\n    border-radius: 50%;\n    border-top-color: #000000; \/* Couleur noire pour trancher sur le jaune *\/\n    animation: mjtunesSpin 0.7s linear infinite;\n}\n\/* Version blanche quand le bouton devient rose (Pause) *\/\n.mjtunes-play-button.active-playing .mjtunes-btn-spinner {\n    border: 3px solid rgba(255, 255, 255, 0.2);\n    border-top-color: #ffffff;\n}\n@keyframes mjtunesSpin {\n    to { transform: rotate(360deg); }\n}\n<\/style>\n\n<script>\n(function() {\n    \/\/ S\u00e9curit\u00e9 Elementor anti-doublons\n    if (window.mjTunesFinalCoreReady) return;\n    window.mjTunesFinalCoreReady = true;\n\n    const STREAM_ID = \"v6x5e7s42k8uv\";\n    \n    \/\/ API alternative stable de Zeno (Format SSE texte basique)\n    const metaUrl = `https:\/\/api.zeno.fm\/mounts\/metadata\/subscribe\/${STREAM_ID}`;\n\n    \/\/ --- 1. FONCTION AUDIO (PLAY \/ PAUSE) ---\n    const audioTrack = document.getElementById('mjtunes-core-stream');\n    const actionBtn = document.getElementById('mjtunes-toggle-btn');\n\n    if (audioTrack && actionBtn) {\n        actionBtn.addEventListener('click', function() {\n            if (audioTrack.paused) {\n                \/\/ Pour \u00e9viter le blocage du direct, on recharge l'adresse \u00e0 la seconde pr\u00e8s\n                audioTrack.src = \"https:\/\/stream.zeno.fm\/\" + STREAM_ID;\n                audioTrack.play()\n                    .then(() => {\n                        actionBtn.textContent = \"\u23f8 PAUSE\";\n                        actionBtn.classList.add('active-playing');\n                    })\n                    .catch(err => {\n                        console.error(\"Le navigateur bloque la lecture automatique :\", err);\n                    });\n            } else {\n                audioTrack.pause();\n                audioTrack.src = \"\"; \/\/ Coupe la bande passante instantan\u00e9ment\n                actionBtn.textContent = \"\u25b6 Listen to MjTunes.com\";\n                actionBtn.classList.remove('active-playing');\n            }\n        });\n    }\n\n    \/\/ --- 2. FONCTION DE R\u00c9CUP\u00c9RATION DU TITRE ---\n    function startMetadataListener() {\n        const liveSource = new EventSource(metaUrl);\n\n        liveSource.onmessage = function(event) {\n            try {\n                const parsed = JSON.parse(event.data);\n                const display = document.getElementById('mjtunes-song-display');\n                if (!display) return;\n\n                let titleFound = \"\";\n                if (parsed.streamTitle && parsed.streamTitle.trim() !== \"\") {\n                    titleFound = parsed.streamTitle;\n                } else if (parsed.currentArtist && parsed.currentSong) {\n                    titleFound = parsed.currentArtist + \" - \" + parsed.currentSong;\n                } else if (parsed.currentSong) {\n                    titleFound = parsed.currentSong;\n                }\n\n                if (titleFound && !titleFound.includes(\"undefined\")) {\n                    display.textContent = titleFound;\n                } else {\n                    display.textContent = \"MJTunes Radio\";\n                }\n            } catch (e) {\n                console.log(\"Lecture des m\u00e9tadonn\u00e9es...\");\n            }\n        };\n\n        liveSource.onerror = function() {\n            liveSource.close();\n            \/\/ Reconnexion en arri\u00e8re-plan toutes les 12 secondes\n            setTimeout(startMetadataListener, 12000);\n        };\n    }\n\n    \/\/ D\u00e9marrage automatique\n    startMetadataListener();\n})();\n<\/script>\n<script>\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n    const btn = document.getElementById('mjtunes-toggle-btn');\n    const loader = document.getElementById('mjtunes-button-loader');\n    \n    if (btn && loader) {\n        \/\/ Clic sur le bouton jaune -> On allume la roue\n        btn.addEventListener('click', function() {\n            if (!btn.classList.contains('active-playing')) {\n                loader.style.display = \"inline-block\";\n            } else {\n                loader.style.display = \"none\";\n            }\n        });\n\n        \/\/ La musique d\u00e9marre (le bouton devient rose) -> On coupe la roue\n        const observer = new MutationObserver(function() {\n            if (btn.classList.contains('active-playing')) {\n                loader.style.display = \"none\";\n            }\n        });\n        observer.observe(btn, { attributes: true, attributeFilter: ['class'] });\n    }\n});\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f356596 elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"f356596\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n    \/* Cadre principal de la grille *\/\n    .zara-schedule-container {\n        max-width: 100%; \n        margin: 0 auto; \n        font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n    }\n    \n    \/* Barre d'information sur le fuseau horaire *\/\n    .zara-tz-info {\n        background: #f4f4f5; \n        padding: 10px 14px; \n        border-left: 4px solid #e67e22; \n        margin-bottom: 12px; \n        font-weight: 500; \n        font-size: 13px;\n        color: #3f3f46;\n        border-radius: 0 4px 4px 0;\n    }\n    \n    \/* Zone de la liste : MODIFI\u00c9E (Plus de hauteur max, plus de scroll) *\/\n    .zara-list-scroll {\n        border: 1px solid #e4e4e7; \n        border-radius: 8px; \n        padding: 8px; \n        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);\n        background: #ffffff;\n        margin-bottom: 15px;\n    }\n    \n    \/* Ligne standard d'un programme *\/\n    .zara-row {\n        display: flex; \n        padding: 10px 6px; \n        font-size: 12px; \n        align-items: center;\n        border-bottom: 1px solid #f4f4f5;\n        transition: background 0.2s ease;\n    }\n    \n    \/* Les lignes masqu\u00e9es par d\u00e9faut *\/\n    .zara-row.zara-hidden {\n        display: none !important;\n    }\n    \n    \/* Effet de survol sur les lignes *\/\n    .zara-row:hover {\n        background: #fafafa;\n    }\n    \n    \/* Colonne du Jour *\/\n    .zara-day {\n        width: 75px; \n        font-weight: 700; \n        color: #18181b;\n    }\n    \n    \/* Colonne de l'Heure *\/\n    .zara-time {\n        width: 45px; \n        color: #e67e22; \n        font-weight: 700;\n    }\n    \n    \/* Colonne du Nom du Programme *\/\n    .zara-prog {\n        flex: 1; \n        font-weight: 500;\n        color: #27272a;\n    }\n    \n    \/* SURLIGNAGE : Ligne du programme actuellement EN DIRECT *\/\n    .zara-row.active-live {\n        background: #f0fdf4 !important; \/* Fond vert tr\u00e8s clair *\/\n        border-left: 4px solid #16a34a; \/* Barre lat\u00e9rale verte *\/\n        font-weight: 700;\n        padding-left: 2px;\n    }\n    \n    \/* Le badge \"EN DIRECT\" *\/\n    .zara-badge-live {\n        background: #16a34a; \n        color: #ffffff; \n        padding: 2px 8px; \n        border-radius: 4px; \n        font-size: 11px; \n        font-weight: 700;\n        margin-left: 10px; \n        display: inline-block;\n        letter-spacing: 0.5px;\n    }\n\n    \/* --- NOUVEAU BOUTON LOAD MORE --- *\/\n    .zara-load-more-container {\n        text-align: center;\n        margin: 15px 0 5px 0;\n    }\n.zara-load-more-btn {\n    background: #f3230e;\n    color: #ffffff;\n    border: 2px solid #6acacd;\n    padding: 10px 24px;\n    font-size: 13px;\n    font-weight: bold;\n    border-radius: 20px;\n    cursor: pointer;\n    transition: all 0.2s ease-in-out;\n    box-shadow: 0 4px 10px rgba(230, 126, 34, 0.2);\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n}\n    .zara-load-more-btn:hover {\n        background: #6acacd;\n        color: #000;\n        transform: translateY(-1px);\n        box-shadow: 0 6px 14px rgba(230, 126, 34, 0.3);\n    }\n    .zara-load-more-btn:active {\n        transform: translateY(0);\n    }\n<\/style>\n\n<div class=\"zara-schedule-container\">\n    <div id=\"zara-tz-info\" class=\"zara-tz-info\">\n        \ud83d\udd52 Grille cal\u00e9e sur votre heure locale\n    <\/div>\n    <div id=\"zara-list-output\" class=\"zara-list-scroll\">\n        <!-- Les lignes g\u00e9n\u00e9r\u00e9es par le script vont s'injecter ici -->\n    <\/div>\n    <!-- Nouveau conteneur de bouton Load More -->\n    <div class=\"zara-load-more-container\">\n        <button id=\"zara-load-more\" class=\"zara-load-more-btn\" style=\"display: none;\"><\/button>\n    <\/div>\n<\/div>\n\n\n<script>\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n    const srcTz = \"Europe\/Paris\";\n    const userTz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n    const userLang = (navigator.language || navigator.userLanguage).substring(0, 2);\n\n    const translations = {\n        fr: { intro: \"\ud83d\udd52 Grille cal\u00e9e sur votre heure locale\", badge: \"EN DIRECT\", loadMore: \"Voir plus de programmes\", days: [\"Dimanche\", \"Lundi\", \"Mardi\", \"Mercredi\", \"Jeudi\", \"Vendredi\", \"Samedi\"] },\n        en: { intro: \"\ud83d\udd52 Schedule set to your local time\", badge: \"LIVE\", loadMore: \"Load more shows\", days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"] },\n        es: { intro: \"\ud83d\udd52 Horario adaptado a su hora local\", badge: \"EN DIRECTO\", loadMore: \"Ver m\u00e1s programas\", days: [\"Domingo\", \"Lunes\", \"Martes\", \"Mi\u00e9rcoles\", \"Jueves\", \"Viernes\", \"S\u00e1bado\"] }\n    };\n\n    const lang = translations[userLang] ? translations[userLang] : translations['en'];\n\n    const infoBar = document.getElementById(\"zara-tz-info\");\n    if(infoBar) {\n        infoBar.innerHTML = `${lang.intro} (<strong>${userTz}<\/strong>)`;\n    }\n\n    \/\/ Nombre d'\u00e9l\u00e9ments \u00e0 afficher initialement \u00e0 partir du direct\n    const ITEMS_PER_PAGE = 10;\n    let currentVisibleCount = ITEMS_PER_PAGE;\n    let globalActiveIdx = -1;\n\n    const rawData = [\n        {d:1,t:\"00:00\",p:\"Solo Years\"},{d:1,t:\"02:00\",p:\"Mike In The Mix\"},{d:1,t:\"03:00\",p:\"On Stage\"},{d:1,t:\"04:00\",p:\"HITstory\"},{d:1,t:\"05:00\",p:\"Love You All\"},{d:1,t:\"06:00\",p:\"General Program\"},{d:1,t:\"10:30\",p:\"Mike In The Mix\"},{d:1,t:\"11:30\",p:\"Rock The World\"},{d:1,t:\"12:00\",p:\"HITstory\"},{d:1,t:\"14:00\",p:\"Visionary\"},{d:1,t:\"16:00\",p:\"MJ and Friends\"},{d:1,t:\"16:30\",p:\"Mike In The Mix\"},{d:1,t:\"17:00\",p:\"Jackson Street\"},{d:1,t:\"18:00\",p:\"On Stage\"},{d:1,t:\"18:30\",p:\"Pure MJ\"},{d:1,t:\"20:30\",p:\"Love You All\"},{d:1,t:\"21:00\",p:\"DJ Xposed\"},{d:1,t:\"21:30\",p:\"HITstory\"},\n        {d:2,t:\"00:00\",p:\"Love You All\"},{d:2,t:\"02:00\",p:\"HITstory\"},{d:2,t:\"03:00\",p:\"Solo Years\"},{d:2,t:\"06:00\",p:\"Pure MJ\"},{d:2,t:\"07:00\",p:\"Jackson Street\"},{d:2,t:\"09:00\",p:\"Love You All\"},{d:2,t:\"10:00\",p:\"Mike In The Mix\"},{d:2,t:\"10:30\",p:\"General Program\"},{d:2,t:\"13:00\",p:\"Mike In The Mix\"},{d:2,t:\"14:00\",p:\"Rock The World\"},{d:2,t:\"14:30\",p:\"Love You All\"},{d:2,t:\"16:00\",p:\"HITstory\"},{d:2,t:\"17:00\",p:\"On Stage\"},{d:2,t:\"18:00\",p:\"Visionary\"},{d:2,t:\"20:00\",p:\"MJ and Friends\"},{d:2,t:\"20:30\",p:\"Jackson Street\"},{d:2,t:\"21:00\",p:\"Mike In The Mix\"},{d:2,t:\"21:30\",p:\"Solo Years\"},{d:2,t:\"23:30\",p:\"Mike In The Mix\"},\n        {d:3,t:\"00:00\",p:\"On Stage\"},{d:3,t:\"01:30\",p:\"HITstory\"},{d:3,t:\"02:00\",p:\"Love You All\"},{d:3,t:\"03:00\",p:\"General Program\"},{d:3,t:\"06:00\",p:\"Mike In The Mix\"},{d:3,t:\"07:00\",p:\"Solo Years\"},{d:3,t:\"10:00\",p:\"Jackson Street\"},{d:3,t:\"11:00\",p:\"On Stage\"},{d:3,t:\"12:00\",p:\"MJ and Friends\"},{d:3,t:\"12:30\",p:\"Rock The World\"},{d:3,t:\"13:00\",p:\"Love You All\"},{d:3,t:\"15:00\",p:\"Mike In The Mix\"},{d:3,t:\"16:00\",p:\"Jackson Street\"},{d:3,t:\"17:00\",p:\"Pure MJ\"},{d:3,t:\"18:00\",p:\"DJ Xposed\"},{d:3,t:\"18:30\",p:\"Rock The World\"},{d:3,t:\"19:00\",p:\"On Stage\"},{d:3,t:\"20:30\",p:\"Visionary\"},{d:3,t:\"22:30\",p:\"HITstory\"},{d:3,t:\"23:30\",p:\"Solo Years\"},\n        {d:4,t:\"01:00\",p:\"Mike In The Mix\"},{d:4,t:\"02:00\",p:\"Visionary\"},{d:4,t:\"03:30\",p:\"DJ Xposed\"},{d:4,t:\"04:00\",p:\"MJ and Friends\"},{d:4,t:\"04:30\",p:\"Pure MJ\"},{d:4,t:\"06:00\",p:\"HITstory\"},{d:4,t:\"08:00\",p:\"General Program\"},{d:4,t:\"10:00\",p:\"Love You All\"},{d:4,t:\"12:00\",p:\"On Stage\"},{d:4,t:\"14:00\",p:\"Solo Years\"},{d:4,t:\"16:30\",p:\"Mike In The Mix\"},{d:4,t:\"17:00\",p:\"Rock The World\"},{d:4,t:\"17:30\",p:\"Pure MJ\"},{d:4,t:\"18:00\",p:\"General Program\"},{d:4,t:\"21:00\",p:\"Jackson Street\"},{d:4,t:\"22:00\",p:\"Rock The World\"},{d:4,t:\"22:30\",p:\"Love You All\"},\n        {d:5,t:\"00:00\",p:\"General Program\"},{d:5,t:\"02:00\",p:\"Solo Years\"},{d:5,t:\"04:00\",p:\"Mike In The Mix\"},{d:5,t:\"05:00\",p:\"Jackson Street\"},{d:5,t:\"07:00\",p:\"Visionary\"},{d:5,t:\"08:00\",p:\"On Stage\"},{d:5,t:\"10:00\",p:\"HITstory\"},{d:5,t:\"12:00\",p:\"Pure MJ\"},{d:5,t:\"13:00\",p:\"Love You All\"},{d:5,t:\"14:00\",p:\"Jackson Street\"},{d:5,t:\"15:00\",p:\"Solo Years\"},{d:5,t:\"16:00\",p:\"HITstory\"},{d:5,t:\"17:00\",p:\"Love You All\"},{d:5,t:\"17:30\",p:\"Jackson Street\"},{d:5,t:\"18:00\",p:\"MJ and Friends\"},{d:5,t:\"18:30\",p:\"On Stage\"},{d:5,t:\"19:30\",p:\"Rock The World\"},{d:5,t:\"20:00\",p:\"HITstory\"},{d:5,t:\"21:00\",p:\"Love You All\"},{d:5,t:\"23:00\",p:\"Pure MJ\"},\n        {d:6,t:\"01:00\",p:\"DJ Xposed\"},{d:6,t:\"01:30\",p:\"On Stage\"},{d:6,t:\"03:00\",p:\"HITstory\"},{d:6,t:\"04:00\",p:\"Love You All\"},{d:6,t:\"06:00\",p:\"General Program\"},{d:6,t:\"08:30\",p:\"MJ and Friends\"},{d:6,t:\"09:00\",p:\"DJ Xposed\"},{d:6,t:\"10:00\",p:\"Visionary\"},{d:6,t:\"12:00\",p:\"HITstory\"},{d:6,t:\"13:00\",p:\"Solo Years\"},{d:6,t:\"14:30\",p:\"Jackson Street\"},{d:6,t:\"15:00\",p:\"On Stage\"},{d:6,t:\"16:00\",p:\"Love You All\"},{d:6,t:\"17:00\",p:\"Mike In The Mix\"},{d:6,t:\"18:00\",p:\"Rock The World\"},{d:6,t:\"18:30\",p:\"Jackson Street\"},{d:6,t:\"19:30\",p:\"On Stage\"},{d:6,t:\"20:00\",p:\"General Program\"},{d:6,t:\"21:30\",p:\"DJ Xposed\"},{d:6,t:\"22:00\",p:\"Solo Years\"},{d:6,t:\"23:00\",p:\"Pure MJ\"},\n        {d:0,t:\"00:00\",p:\"Mike In The Mix\"},{d:0,t:\"01:00\",p:\"Love You All\"},{d:0,t:\"02:00\",p:\"General Program\"},{d:0,t:\"04:00\",p:\"Rock The World\"},{d:0,t:\"04:30\",p:\"Visionary\"},{d:0,t:\"06:00\",p:\"On Stage\"},{d:0,t:\"08:00\",p:\"Pure MJ\"},{d:0,t:\"09:00\",p:\"HITstory\"},{d:0,t:\"10:00\",p:\"Jackson Street\"},{d:0,t:\"11:00\",p:\"Love You All\"},{d:0,t:\"12:00\",p:\"Mike In The Mix\"},{d:0,t:\"12:30\",p:\"General Program\"},{d:0,t:\"15:00\",p:\"MJ and Friends\"},{d:0,t:\"15:30\",p:\"Rock The World\"},{d:0,t:\"16:00\",p:\"HITstory\"},{d:0,t:\"17:00\",p:\"Pure MJ\"},{d:0,t:\"18:30\",p:\"On Stage\"},{d:0,t:\"20:00\",p:\"Solo Years\"},{d:0,t:\"22:30\",p:\"DJ Xposed\"},{d:0,t:\"23:00\",p:\"Jackson Street\"}\n    ];\n\n    const currentNow = new Date();\n    const currentDay = currentNow.getDay();\n    const mondayOffset = currentNow.getDate() - currentDay + (currentDay === 0 ? -6 : 1);\n    const baseMonday = new Date(new Date(currentNow).setDate(mondayOffset));\n\n    let processed = rawData.map(item => {\n        const [h, m] = item.t.split(\":\");\n        const emissionDate = new Date(baseMonday.getFullYear(), baseMonday.getMonth(), baseMonday.getDate() + (item.d === 0 ? 6 : item.d - 1), parseInt(h), parseInt(m), 0);\n        \n        const parisString = emissionDate.toLocaleString(\"en-US\", { timeZone: srcTz });\n        const pDate = new Date(parisString);\n        const diff = emissionDate.getTime() - pDate.getTime();\n        \n        const userLocalDate = new Date(emissionDate.getTime() + diff);\n        const cleanParisDay = item.d; \n        const parisMinTotal = (cleanParisDay * 1440) + (parseInt(h) * 60) + parseInt(m);\n\n        return {\n            pMin: parisMinTotal,\n            day: lang.days[userLocalDate.getDay()],\n            timeStr: userLocalDate.getHours().toString().padStart(2, \"0\") + \":\" + userLocalDate.getMinutes().toString().padStart(2, \"0\"),\n            prog: item.p\n        };\n    });\n\n    processed.sort((a, b) => a.pMin - b.pMin);\n\n    \/\/ Initialisation et gestion du bouton Load More\n    const loadMoreBtn = document.getElementById(\"zara-load-more\");\n    if (loadMoreBtn) {\n        loadMoreBtn.textContent = lang.loadMore;\n        loadMoreBtn.addEventListener(\"click\", function() {\n            \/\/ Affiche 10 \u00e9l\u00e9ments suppl\u00e9mentaires \u00e0 chaque clic\n            currentVisibleCount += ITEMS_PER_PAGE;\n            renderDOMList();\n        });\n    }\n\n    function updateLiveSchedule(isFirstLoad) {\n        const nowParisStr = new Date().toLocaleString(\"en-US\", { timeZone: srcTz });\n        const nowParisDate = new Date(nowParisStr);\n        const nowParisMin = (nowParisDate.getDay() * 1440) + (nowParisDate.getHours() * 60) + nowParisDate.getMinutes();\n\n        let activeIdx = -1;\n        for (let k = 0; k < processed.length; k++) {\n            if (processed[k].pMin <= nowParisMin) activeIdx = k;\n        }\n        if (activeIdx === -1) activeIdx = processed.length - 1;\n\n        \/\/ Si le programme en direct change, on applique la mise \u00e0 jour\n        if (globalActiveIdx !== activeIdx) {\n            globalActiveIdx = activeIdx;\n            \/\/ Au premier chargement ou changement de live, on r\u00e9aligne la pagination sur le direct\n            if (!isFirstLoad) {\n                currentVisibleCount = ITEMS_PER_PAGE;\n            }\n            renderDOMList();\n        }\n    }\n\n    function renderDOMList() {\n        let html = \"\";\n        \n        \/\/ On calcule l'index maximal de visibilit\u00e9 bas\u00e9 sur le bouton Load More\n        const maxVisibleIndex = globalActiveIdx + currentVisibleCount;\n\n        processed.forEach((item, index) => {\n            const isCur = (index === globalActiveIdx);\n            \n            \/\/ Les \u00e9l\u00e9ments pass\u00e9s (avant le direct) sont masqu\u00e9s pour \u00e9purer l'interface\n            \/\/ Les \u00e9l\u00e9ments au-del\u00e0 de la limite \"Load More\" re\u00e7oivent la classe zara-hidden\n            let isHidden = (index < globalActiveIdx || index >= maxVisibleIndex);\n            \n            const rowClass = isCur ? \"zara-row active-live\" : (isHidden ? \"zara-row zara-hidden\" : \"zara-row\");\n            const badge = isCur ? ` <span class='zara-badge-live'>${lang.badge}<\/span>` : \"\";\n            const idAttr = isCur ? \" id='zara-active'\" : \"\";\n\n            html += `<div${idAttr} class=\"${rowClass}\">\n                <div class=\"zara-day\">${item.day}<\/div>\n                <div class=\"zara-time\">${item.timeStr}<\/div>\n                <div class=\"zara-prog\">${item.prog}${badge}<\/div>\n            <\/div>`;\n        });\n\n        const out = document.getElementById(\"zara-list-output\");\n        if (out) {\n            out.innerHTML = html;\n        }\n\n        \/\/ Affichage ou masquage dynamique du bouton Load More s'il reste des programmes \u00e0 d\u00e9couvrir\n        if (loadMoreBtn) {\n            if (maxVisibleIndex >= processed.length) {\n                loadMoreBtn.style.display = \"none\";\n            } else {\n                loadMoreBtn.style.display = \"inline-block\";\n            }\n        }\n    }\n\n    \/\/ Premier rendu au chargement du DOM Elementor\n    updateLiveSchedule(true);\n\n    \/\/ V\u00e9rification l\u00e9g\u00e8re toutes les 10 secondes pour suivre le direct\n    setInterval(function() {\n        updateLiveSchedule(false);\n    }, 10000);\n});\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>SHARE Facebook X WhatsApp Messenger \ud83d\udd17 Copy link MJTunes Radio Votre navigateur ne supporte pas ce lecteur. \u25b6 Listen to MjTunes.com \ud83d\udd52 Grille cal\u00e9e sur&#8230;<\/p>\n","protected":false},"author":1,"featured_media":4361,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4362","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/www.mjtunes.com\/fr\/wp-json\/wp\/v2\/pages\/4362","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mjtunes.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.mjtunes.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.mjtunes.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mjtunes.com\/fr\/wp-json\/wp\/v2\/comments?post=4362"}],"version-history":[{"count":3,"href":"https:\/\/www.mjtunes.com\/fr\/wp-json\/wp\/v2\/pages\/4362\/revisions"}],"predecessor-version":[{"id":4373,"href":"https:\/\/www.mjtunes.com\/fr\/wp-json\/wp\/v2\/pages\/4362\/revisions\/4373"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mjtunes.com\/fr\/wp-json\/wp\/v2\/media\/4361"}],"wp:attachment":[{"href":"https:\/\/www.mjtunes.com\/fr\/wp-json\/wp\/v2\/media?parent=4362"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}