{"id":1718,"date":"2026-03-06T11:37:45","date_gmt":"2026-03-06T05:52:45","guid":{"rendered":"https:\/\/mindbody.com.np\/center\/?page_id=1718"},"modified":"2026-07-15T08:42:53","modified_gmt":"2026-07-15T02:57:53","slug":"live","status":"publish","type":"page","link":"https:\/\/mindbody.com.np\/center\/live\/","title":{"rendered":"Live Radio"},"content":{"rendered":"<div id=\"session-container\" style=\"border: 2px solid #f16812; padding: 20px; border-radius: 12px; background-color: #fff9f0; text-align: center; max-width: 450px; margin: 20px auto; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; line-height: 1.4; box-shadow: 0 4px 6px rgba(0,0,0,0.05);\">\r\n\r\n    <h3 id=\"session-title\">\ud83d\ude4f Loading...<\/h3>\r\n\r\n    <div style=\"background: rgba(241, 104, 18, 0.05); padding: 15px; border-radius: 8px;\">\r\n        <p style=\"margin:0;font-size:0.9em;color:#666;\">YOUR LOCAL SESSION TIME<\/p>\r\n        <div id=\"visitor-time\" style=\"font-size:1.4em;font-weight:bold;color:#f16812;\">Loading...<\/div>\r\n    <\/div>\r\n\r\n    <p id=\"local-day-zone\" style=\"color:#f16812;margin-top:10px;font-weight:600;\"><\/p>\r\n    <p id=\"countdown-timer\" style=\"color:#444;\"><\/p>\r\n\r\n    <div style=\"margin-top:20px;border-top:1px solid #e0c5a0;padding-top:15px;\">\r\n        <a id=\"session-link\"\r\n           href=\"#\"\r\n           target=\"_blank\"\r\n           rel=\"noopener noreferrer\"\r\n           style=\"display:inline-block;padding:12px 24px;border-radius:30px;font-weight:bold;border:2px solid #f16812;color:#f16812;text-decoration:none;\">\r\n            <span id=\"live-indicator\">\ud83d\udfe0 <\/span>\r\n            <span id=\"link-text\">Playing list<\/span>\r\n        <\/a>\r\n    <\/div>\r\n\r\n<\/div>\r\n\r\n<style>\r\n@keyframes blink{\r\n    0%{opacity:1;}\r\n    50%{opacity:.2;}\r\n    100%{opacity:1;}\r\n}\r\n<\/style>\r\n\r\n<script>\r\n(function(){\r\n\r\nconst non_live_page=\"https:\/\/mindbody.com.np\/center\/music-for-your-soul\/devotional\/\";\r\n\r\nfunction loadSessions(){\r\n\r\nfetch('https:\/\/mindbody.com.np\/clubhouse\/sessions.json')\r\n.then(res=>res.json())\r\n.then(data=>{\r\n\r\nconst now=new Date();\r\n\r\n\/* Nepal Time Parser *\/\r\nfunction parseNepalTime(timeStr,date){\r\n    const [h,m]=timeStr.split(\":\").map(Number);\r\n    const d=new Date(date);\r\n    d.setUTCHours(h-5,m-45,0,0);\r\n    return d;\r\n}\r\n\r\nfunction formatRange(s,e){\r\n    const opts={hour:'numeric',minute:'2-digit',hour12:true};\r\n    let start=s.toLocaleTimeString([],opts).replace(\/\\s?(am|pm)\/i,'');\r\n    let end=e.toLocaleTimeString([],opts).replace(\/am|pm\/i,m=>m.toUpperCase());\r\n    return `${start}\u2013${end}`;\r\n}\r\n\r\nfunction formatDuration(ms){\r\n    const m=Math.floor(ms\/60000);\r\n    const h=Math.floor(m\/60);\r\n    const r=m%60;\r\n    return h?`${h}h ${r}m`:`${r}m`;\r\n}\r\n\r\n\/* Time Zone Label *\/\r\nfunction getTimeZoneLabel(){\r\n    const tz=Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n\r\n    if(tz===\"Asia\/Kathmandu\"){\r\n        return \"Nepal Time\";\r\n    }else{\r\n        const city=tz.split(\"\/\").pop().replace(\/_\/g,\" \");\r\n        return `${city} Time`;\r\n    }\r\n}\r\n\r\n\/* Build schedule *\/\r\nlet allSessions=[];\r\n\r\nfor(let i=0;i<7;i++){\r\n\r\n    const date=new Date();\r\n    date.setDate(now.getDate()+i);\r\n\r\n    const day=date.getDay();\r\n\r\n    const dateStr=\r\n        date.getFullYear()+\"-\"+\r\n        String(date.getMonth()+1).padStart(2,\"0\")+\"-\"+\r\n        String(date.getDate()).padStart(2,\"0\");\r\n\r\n    const specials=data.special?.filter(s=>s.date===dateStr)||[];\r\n\r\n    if(specials.length){\r\n\r\n        specials.forEach(s=>{\r\n            allSessions.push({\r\n                s,\r\n                start:parseNepalTime(s.start,date),\r\n                end:parseNepalTime(s.end,date)\r\n            });\r\n        });\r\n\r\n    }else{\r\n\r\n        const recurring=data.recurring?.filter(s=>s.days.includes(day))||[];\r\n\r\n        recurring.forEach(s=>{\r\n            allSessions.push({\r\n                s,\r\n                start:parseNepalTime(s.start,date),\r\n                end:parseNepalTime(s.end,date)\r\n            });\r\n        });\r\n\r\n    }\r\n\r\n}\r\n\r\nallSessions.sort((a,b)=>a.start-b.start);\r\n\r\n\/* Find current\/next *\/\r\n\r\nlet current=null,next=null;\r\n\r\nfor(const item of allSessions){\r\n\r\n    if(now>=item.start && now<item.end){\r\n        current=item;\r\n        break;\r\n    }\r\n\r\n    if(now<item.start && !next){\r\n        next=item;\r\n    }\r\n\r\n}\r\n\r\nconst session=current||next;\r\n\r\nif(!session){\r\n    document.getElementById(\"session-title\").innerHTML=\"No sessions\";\r\n    return;\r\n}\r\n\r\n\/* Elements *\/\r\n\r\nconst title=document.getElementById(\"session-title\");\r\nconst time=document.getElementById(\"visitor-time\");\r\nconst zone=document.getElementById(\"local-day-zone\");\r\nconst count=document.getElementById(\"countdown-timer\");\r\nconst link=document.getElementById(\"session-link\");\r\nconst txt=document.getElementById(\"link-text\");\r\nconst liveDot=document.getElementById(\"live-indicator\");\r\n\r\nconst {s,start,end}=session;\r\n\r\nconst dayName=start.toLocaleDateString(undefined,{weekday:\"long\"});\r\nconst tzLabel=getTimeZoneLabel();\r\n\r\n\/* UI *\/\r\n\r\ntitle.innerHTML=s.name;\r\ntime.innerHTML=formatRange(start,end);\r\nzone.innerHTML=`${dayName} | ${tzLabel}`;\r\n\r\n\/* LIVE *\/\r\n\r\nif(current){\r\n\r\n    count.innerHTML=`Ends in ${formatDuration(end-now)}`;\r\n\r\n    liveDot.innerHTML=\"\ud83d\udfe2\";\r\n    liveDot.style.animation=\"blink 1s infinite\";\r\n\r\n    link.href=s.link;\r\n    txt.innerHTML=\"Join live session now\";\r\n\r\n    link.style.background=\"#f16812\";\r\n    link.style.color=\"#fff\";\r\n\r\n}\r\n\r\n\/* NOT LIVE *\/\r\n\r\nelse{\r\n\r\n    liveDot.innerHTML=\"\ud83d\udfe0\";\r\n    liveDot.style.animation=\"none\";\r\n\r\n    link.href=non_live_page;\r\n    txt.innerHTML=\"Playing list\";\r\n\r\n    link.style.background=\"\";\r\n    link.style.color=\"#f16812\";\r\n\r\n    const diff=start-now;\r\n    const sixHours=6*60*60*1000;\r\n\r\n    if(diff<=sixHours){\r\n\r\n        count.innerHTML=`Starts in ${formatDuration(diff)}`;\r\n\r\n    }else{\r\n\r\n        const today=new Date();\r\n        const tomorrow=new Date();\r\n        tomorrow.setDate(today.getDate()+1);\r\n\r\n        if(start.toDateString()===today.toDateString()){\r\n\r\n            count.innerHTML=\"Upcoming session today\";\r\n\r\n        }else if(start.toDateString()===tomorrow.toDateString()){\r\n\r\n            count.innerHTML=\"Upcoming session tomorrow\";\r\n\r\n        }else{\r\n\r\n            count.innerHTML=`Upcoming session ${dayName}`;\r\n\r\n        }\r\n\r\n    }\r\n\r\n}\r\n\r\n})\r\n.catch(()=>{\r\n\r\n    document.getElementById(\"session-title\").innerHTML=\"\u26a0\ufe0f Error loading sessions\";\r\n\r\n});\r\n\r\n}\r\n\r\nloadSessions();\r\nsetInterval(loadSessions,30000);\r\n\r\n})();\r\n<\/script>\r\n<script>\r\n\/\/ --- CONFIGURATION ---\r\nconst redirects = {\r\n    codeA: {\r\n        keyword: 'link',\r\n        url: 'https:\/\/mindbody.com.np\/clubhouse\/update1.php'\r\n    },\r\n    codeB: {\r\n        keyword: 'admin',\r\n        url: 'https:\/\/mindbody.com.np\/clubhouse\/adminer.php'\r\n    }\r\n};\r\nconst requiredMobileTaps = 4;\r\n\/\/ ---------------------\r\n\r\n\/\/ 1. DESKTOP LOGIC (Physical Keyboards)\r\nconst maxCodeLength = Math.max(redirects.codeA.keyword.length, redirects.codeB.keyword.length);\r\nlet inputBuffer = '';\r\n\r\nwindow.addEventListener('keyup', (e) => {\r\n    if (e.key.length === 1) {\r\n        inputBuffer += e.key.toLowerCase();\r\n        \r\n        if (inputBuffer.length > maxCodeLength) {\r\n            inputBuffer = inputBuffer.substring(inputBuffer.length - maxCodeLength);\r\n        }\r\n        \r\n        \/\/ Check for keyword matches\r\n        if (inputBuffer.endsWith(redirects.codeA.keyword)) {\r\n            window.location.href = redirects.codeA.url;\r\n        } else if (inputBuffer.endsWith(redirects.codeB.keyword)) {\r\n            window.location.href = redirects.codeB.url;\r\n        }\r\n    }\r\n});\r\n\r\n\/\/ 2. MOBILE LOGIC (Dual Tap Zones)\r\nlet leftTapCount = 0;\r\nlet rightTapCount = 0;\r\nlet lastLeftTapTime = 0;\r\nlet lastRightTapTime = 0;\r\n\r\nwindow.addEventListener('touchstart', (e) => {\r\n    const currentTime = new Date().getTime();\r\n    const touch = e.touches[0];\r\n    const screenWidth = window.innerWidth;\r\n    \r\n    \/\/ ZONE 1: Top-Left Corner (Redirects to Page A \/ 'magic')\r\n \u00a0 \u00a0if (touch.clientX < 100 && touch.clientY < 200) {\r\n        rightTapCount = 0; \/\/ Reset opposite zone\r\n        if (currentTime - lastLeftTapTime < 1000) {\r\n            leftTapCount++;\r\n        } else {\r\n            leftTapCount = 1; \r\n        }\r\n        lastLeftTapTime = currentTime;\r\n\r\n        if (leftTapCount === requiredMobileTaps) {\r\n            window.location.href = redirects.codeA.url;\r\n        }\r\n    } \r\n    \/\/ ZONE 2: Top-Right Corner (Redirects to Page B \/ 'secret')\r\n \u00a0 \u00a0else if (touch.clientX > (screenWidth - 100) && touch.clientY < 200) {\r\n        leftTapCount = 0; \/\/ Reset opposite zone\r\n        if (currentTime - lastRightTapTime < 1000) {\r\n            rightTapCount++;\r\n        } else {\r\n            rightTapCount = 1; \r\n        }\r\n        lastRightTapTime = currentTime;\r\n\r\n        if (rightTapCount === requiredMobileTaps) {\r\n            window.location.href = redirects.codeB.url;\r\n        }\r\n    } \r\n    \/\/ Reset counters if they tap anywhere else on the screen\r\n    else {\r\n        leftTapCount = 0;\r\n        rightTapCount = 0;\r\n    }\r\n});\r\n<\/script>\r\n\r\n<h6 class=\"wp-block-heading has-text-align-center\">Clubhouse Schedule\u00a0<\/h6>\r\n\r\n\r\n\r\n<h6 class=\"wp-block-heading has-text-align-center\">Sun | Mon | Tues | Wed | Fri<br \/><strong>Bhajan Kirtan<\/strong><\/h6>\r\n\r\n\r\n\r\n<h6 class=\"wp-block-heading has-text-align-center\">Thurs<br \/><strong>Bhagavad Gita<\/strong><\/h6>\r\n\r\n\r\n","protected":false},"excerpt":{"rendered":"<p>Clubhouse Schedule\u00a0 Sun | Mon | Tues | Wed | FriBhajan Kirtan ThursBhagavad Gita<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_eb_attr":"","_vp_format_video_url":"","_vp_image_focal_point":[],"footnotes":""},"categories":[],"tags":[],"class_list":["post-1718","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/mindbody.com.np\/center\/wp-json\/wp\/v2\/pages\/1718","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mindbody.com.np\/center\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mindbody.com.np\/center\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mindbody.com.np\/center\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mindbody.com.np\/center\/wp-json\/wp\/v2\/comments?post=1718"}],"version-history":[{"count":80,"href":"https:\/\/mindbody.com.np\/center\/wp-json\/wp\/v2\/pages\/1718\/revisions"}],"predecessor-version":[{"id":1881,"href":"https:\/\/mindbody.com.np\/center\/wp-json\/wp\/v2\/pages\/1718\/revisions\/1881"}],"wp:attachment":[{"href":"https:\/\/mindbody.com.np\/center\/wp-json\/wp\/v2\/media?parent=1718"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mindbody.com.np\/center\/wp-json\/wp\/v2\/categories?post=1718"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mindbody.com.np\/center\/wp-json\/wp\/v2\/tags?post=1718"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}