{"id":87,"date":"2026-01-12T13:52:26","date_gmt":"2026-01-12T13:52:26","guid":{"rendered":"http:\/\/localhost\/FXCodedAcademy\/?page_id=87"},"modified":"2026-07-06T07:04:28","modified_gmt":"2026-07-06T07:04:28","slug":"calender","status":"publish","type":"page","link":"https:\/\/fxcodedacademy.com\/index.php\/calender\/","title":{"rendered":"Calender"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"87\" class=\"elementor elementor-87\">\n\t\t\t\t<div class=\"elementor-element elementor-element-19253a9 e-flex e-con-boxed e-con e-parent\" data-id=\"19253a9\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-83cf6cb elementor-widget elementor-widget-html\" data-id=\"83cf6cb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- ============================================================\r\n     AQSA FX \u2014 Economic Calendar (ForexFactory table style)\r\n     WordPress: Paste this entire block into a \"Custom HTML\" block\r\n     Time auto-converts to each visitor's own local timezone\r\n============================================================ -->\r\n<div id=\"aqsaCal\" class=\"aqsa-cal\">\r\n  <div class=\"aqsa-cal-top\">\r\n    <div class=\"aqsa-cal-title\">Economic Calendar ( AQSA AI BOT )<\/div>\r\n    <div class=\"aqsa-cal-tz\" id=\"aqsaCalTz\">Detecting your local time\u2026<\/div>\r\n  <\/div>\r\n\r\n  <div class=\"aqsa-cal-filters\" id=\"aqsaCalFilters\">\r\n    <button class=\"aqsa-cal-pill active\" data-impact=\"All\">All<\/button>\r\n    <button class=\"aqsa-cal-pill\" data-impact=\"High\">High<\/button>\r\n    <button class=\"aqsa-cal-pill\" data-impact=\"Medium\">Medium<\/button>\r\n    <button class=\"aqsa-cal-pill\" data-impact=\"Low\">Low<\/button>\r\n  <\/div>\r\n\r\n  <div class=\"aqsa-cal-tablewrap\">\r\n    <table class=\"aqsa-cal-table\">\r\n      <thead>\r\n        <tr>\r\n          <th class=\"col-time\">Time<\/th>\r\n          <th class=\"col-cur\">Cur.<\/th>\r\n          <th class=\"col-imp\">Imp.<\/th>\r\n          <th class=\"col-event\">Event<\/th>\r\n          <th class=\"col-num\">Actual<\/th>\r\n          <th class=\"col-num\">Forecast<\/th>\r\n          <th class=\"col-num\">Previous<\/th>\r\n        <\/tr>\r\n      <\/thead>\r\n      <tbody id=\"aqsaCalBody\">\r\n        <tr><td colspan=\"7\" class=\"aqsa-cal-msg\">Loading calendar\u2026<\/td><\/tr>\r\n      <\/tbody>\r\n    <\/table>\r\n  <\/div>\r\n\r\n  <div class=\"aqsa-cal-foot\">Times shown in your local timezone \u00b7 <\/div>\r\n<\/div>\r\n\r\n<style>\r\n  #aqsaCal, #aqsaCal *{ box-sizing:border-box; }\r\n\r\n  .aqsa-cal{\r\n    --border:#e3e6ea;\r\n    --head-bg:#f7f8fa;\r\n    --day-bg:#eceef1;\r\n    --day-text:#4a4f57;\r\n    --text:#1f2328;\r\n    --muted:#8a8f98;\r\n    --high:#e0533d;\r\n    --medium:#f2a93b;\r\n    --low:#c9ccd1;\r\n    --link:#2d6cdf;\r\n    --up:#1a9c6b;\r\n    --down:#e0533d;\r\n\r\n    width: 100%;\r\n    margin: 0;\r\n    font-family: 'Plus Jakarta Sans', -apple-system, Segoe UI, Roboto, sans-serif;\r\n    color: var(--text);\r\n    background:#fff;\r\n    border: 1px solid var(--border);\r\n    border-radius: 10px;\r\n    padding: 16px;\r\n  }\r\n\r\n  .aqsa-cal-top{\r\n    display:flex; align-items:center; justify-content:space-between;\r\n    flex-wrap:wrap; gap:8px; margin-bottom:10px;\r\n  }\r\n  .aqsa-cal-title{ font-size:16px; font-weight:700; }\r\n  .aqsa-cal-tz{\r\n    font-family:'JetBrains Mono', monospace;\r\n    font-size:11.5px; color: var(--muted);\r\n    background: var(--head-bg);\r\n    border:1px solid var(--border);\r\n    padding:4px 10px; border-radius:999px;\r\n  }\r\n\r\n  .aqsa-cal-filters{ display:flex; gap:6px; margin-bottom:12px; flex-wrap:wrap; }\r\n  .aqsa-cal-pill{\r\n    font-size:11.5px; font-weight:600;\r\n    background:#fff; border:1px solid var(--border); color:var(--muted);\r\n    padding:5px 12px; border-radius:999px; cursor:pointer;\r\n  }\r\n  .aqsa-cal-pill:hover{ border-color:#b9bec7; color:var(--text); }\r\n  .aqsa-cal-pill.active{ background:#1f2328; border-color:#1f2328; color:#fff; }\r\n\r\n  .aqsa-cal-tablewrap{\r\n    overflow-x:auto;\r\n    border:1px solid var(--border);\r\n    border-radius:8px;\r\n  }\r\n  .aqsa-cal-table{\r\n    width:100%; border-collapse:collapse; font-size:12.5px; min-width:640px;\r\n  }\r\n  .aqsa-cal-table thead th{\r\n    background: var(--head-bg);\r\n    color: var(--muted);\r\n    font-weight:700; font-size:11px; text-transform:uppercase; letter-spacing:.4px;\r\n    padding:9px 10px; text-align:left; border-bottom:1px solid var(--border);\r\n  }\r\n  .aqsa-cal-table .col-num{ text-align:right; }\r\n  .aqsa-cal-table td{\r\n    padding:8px 10px; border-bottom:1px solid var(--border); vertical-align:middle;\r\n    white-space:nowrap;\r\n  }\r\n  .aqsa-cal-table td.col-event{ white-space:normal; font-weight:600; }\r\n  .aqsa-cal-table tbody tr:hover{ background:#fafbfc; }\r\n  .aqsa-cal-table tbody tr:last-child td{ border-bottom:none; }\r\n\r\n  .aqsa-day-row td{\r\n    background: var(--day-bg);\r\n    color: var(--day-text);\r\n    font-weight:700; font-size:11.5px;\r\n    text-align:center;\r\n    padding:7px 10px;\r\n    border-bottom:1px solid var(--border);\r\n  }\r\n\r\n  .aqsa-flag{ margin-right:6px; font-size:14px; }\r\n  .aqsa-cur-code{ font-family:'JetBrains Mono', monospace; font-size:11.5px; font-weight:700; color:var(--muted); }\r\n\r\n  .aqsa-imp-bars{ display:inline-flex; gap:2px; align-items:flex-end; }\r\n  .aqsa-imp-bars span{ width:5px; display:block; background:var(--low); border-radius:1px; }\r\n  .aqsa-imp-bars span:nth-child(1){ height:5px; }\r\n  .aqsa-imp-bars span:nth-child(2){ height:8px; }\r\n  .aqsa-imp-bars span:nth-child(3){ height:11px; }\r\n  .aqsa-imp-bars.High span{ background:var(--high); }\r\n  .aqsa-imp-bars.Medium span:nth-child(1),\r\n  .aqsa-imp-bars.Medium span:nth-child(2){ background:var(--medium); }\r\n  .aqsa-imp-bars.Low span:nth-child(1){ background:var(--low); }\r\n\r\n  .aqsa-live{\r\n    display:inline-block; margin-left:6px;\r\n    font-size:9px; font-weight:800; letter-spacing:.4px;\r\n    color:#fff; background:var(--high);\r\n    padding:1px 6px; border-radius:999px;\r\n  }\r\n\r\n  .aqsa-num-actual{ font-weight:700; }\r\n  .aqsa-num-actual.up{ color:var(--up); }\r\n  .aqsa-num-actual.down{ color:var(--down); }\r\n\r\n  .aqsa-cal-msg{ text-align:center; padding:26px 10px; color:var(--muted); font-size:13px; white-space:normal; }\r\n  .aqsa-cal-msg.error{ color:var(--high); }\r\n\r\n  .aqsa-cal-foot{ margin-top:8px; font-size:10.5px; color:var(--muted); text-align:right; }\r\n\r\n  @media (max-width:600px){\r\n    .aqsa-cal-table{ font-size:11.5px; }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n(function(){\r\n  \/\/ \u26a0\ufe0f Replace with your actual domain after uploading news-proxy.php\r\n  var CALENDAR_URL = \"https:\/\/fxcodedacademy.com\/news-proxy.php\";\r\n\r\n  var bodyEl    = document.getElementById('aqsaCalBody');\r\n  var tzEl      = document.getElementById('aqsaCalTz');\r\n  var filtersEl = document.getElementById('aqsaCalFilters');\r\n  var allEvents = [];\r\n  var currentFilter = 'All';\r\n\r\n  var FLAGS = {\r\n    USD:'\ud83c\uddfa\ud83c\uddf8', EUR:'\ud83c\uddea\ud83c\uddfa', GBP:'\ud83c\uddec\ud83c\udde7', JPY:'\ud83c\uddef\ud83c\uddf5', AUD:'\ud83c\udde6\ud83c\uddfa', NZD:'\ud83c\uddf3\ud83c\uddff',\r\n    CAD:'\ud83c\udde8\ud83c\udde6', CHF:'\ud83c\udde8\ud83c\udded', CNY:'\ud83c\udde8\ud83c\uddf3', HKD:'\ud83c\udded\ud83c\uddf0', SGD:'\ud83c\uddf8\ud83c\uddec', ZAR:'\ud83c\uddff\ud83c\udde6',\r\n    BRL:'\ud83c\udde7\ud83c\uddf7', MXN:'\ud83c\uddf2\ud83c\uddfd', TRY:'\ud83c\uddf9\ud83c\uddf7', INR:'\ud83c\uddee\ud83c\uddf3', KRW:'\ud83c\uddf0\ud83c\uddf7', SEK:'\ud83c\uddf8\ud83c\uddea',\r\n    NOK:'\ud83c\uddf3\ud83c\uddf4', RUB:'\ud83c\uddf7\ud83c\uddfa', ALL:'\ud83c\udff3\ufe0f'\r\n  };\r\n\r\n  var visitorTZ = Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC';\r\n  var friendlyTZName = visitorTZ;\r\n  try{\r\n    var parts = new Intl.DateTimeFormat('en-US', {\r\n      timeZoneName:'long', timeZone: visitorTZ, hour:'2-digit'\r\n    }).formatToParts(new Date());\r\n    var tzPart = parts.find(function(p){ return p.type === 'timeZoneName'; });\r\n    if(tzPart) friendlyTZName = tzPart.value;\r\n  }catch(e){}\r\n  tzEl.textContent = friendlyTZName + ' (' + visitorTZ + ')';\r\n\r\n  function fmtTime(date){\r\n    try{\r\n      return new Intl.DateTimeFormat('en-US', {\r\n        hour:'numeric', minute:'2-digit', hour12:true, timeZone: visitorTZ\r\n      }).format(date);\r\n    }catch(e){ return date.toLocaleTimeString(); }\r\n  }\r\n  function fmtDayKey(date){\r\n    try{\r\n      return new Intl.DateTimeFormat('en-CA', { timeZone: visitorTZ }).format(date); \/\/ YYYY-MM-DD, stable sort key\r\n    }catch(e){ return date.toISOString().slice(0,10); }\r\n  }\r\n  function fmtDayLabel(date){\r\n    try{\r\n      return new Intl.DateTimeFormat('en-US', {\r\n        weekday:'long', month:'long', day:'numeric', year:'numeric', timeZone: visitorTZ\r\n      }).format(date);\r\n    }catch(e){ return date.toDateString(); }\r\n  }\r\n\r\n  function impactBars(impact){\r\n    return '<span class=\"aqsa-imp-bars ' + impact + '\"><span><\/span><span><\/span><span><\/span><\/span>';\r\n  }\r\n\r\n  function render(){\r\n    var now = new Date();\r\n    var filtered = allEvents.filter(function(ev){\r\n      return currentFilter === 'All' || ev.impact === currentFilter;\r\n    });\r\n\r\n    if(filtered.length === 0){\r\n      bodyEl.innerHTML = '<tr><td colspan=\"7\" class=\"aqsa-cal-msg\">No news for this impact level right now.<\/td><\/tr>';\r\n      return;\r\n    }\r\n\r\n    var html = '';\r\n    var lastDayKey = null;\r\n\r\n    filtered.forEach(function(ev){\r\n      var dayKey = fmtDayKey(ev.date);\r\n      if(dayKey !== lastDayKey){\r\n        html += '<tr class=\"aqsa-day-row\"><td colspan=\"7\">' + fmtDayLabel(ev.date) + '<\/td><\/tr>';\r\n        lastDayKey = dayKey;\r\n      }\r\n\r\n      var diffMin = (ev.date - now) \/ 60000;\r\n      var isLive  = Math.abs(diffMin) <= 30 && ev.impact === 'High';\r\n      var flag    = FLAGS[ev.country] || '\ud83c\udff3\ufe0f';\r\n\r\n      var actualClass = '';\r\n      if(ev.actual !== '' && ev.forecast !== ''){\r\n        var a = parseFloat(ev.actual), f = parseFloat(ev.forecast);\r\n        if(!isNaN(a) && !isNaN(f)){\r\n          actualClass = a > f ? 'up' : (a < f ? 'down' : '');\r\n        }\r\n      }\r\n\r\n      html += '<tr>';\r\n      html += '  <td class=\"col-time\">' + fmtTime(ev.date) + '<\/td>';\r\n      html += '  <td><span class=\"aqsa-flag\">' + flag + '<\/span><span class=\"aqsa-cur-code\">' + ev.country + '<\/span><\/td>';\r\n      html += '  <td>' + impactBars(ev.impact) + '<\/td>';\r\n      html += '  <td class=\"col-event\">' + ev.title + (isLive ? '<span class=\"aqsa-live\">LIVE<\/span>' : '') + '<\/td>';\r\n      html += '  <td class=\"col-num\"><span class=\"aqsa-num-actual ' + actualClass + '\">' + (ev.actual || '&mdash;') + '<\/span><\/td>';\r\n      html += '  <td class=\"col-num\">' + (ev.forecast || '&mdash;') + '<\/td>';\r\n      html += '  <td class=\"col-num\">' + (ev.previous || '&mdash;') + '<\/td>';\r\n      html += '<\/tr>';\r\n    });\r\n\r\n    bodyEl.innerHTML = html;\r\n  }\r\n\r\n  function loadCalendar(){\r\n    fetch(CALENDAR_URL, { cache:'no-store' })\r\n      .then(function(res){\r\n        if(!res.ok) throw new Error('HTTP ' + res.status);\r\n        return res.json();\r\n      })\r\n      .then(function(data){\r\n        allEvents = (data || []).map(function(item){\r\n          return {\r\n            title:    item.title,\r\n            country:  item.country,\r\n            impact:   item.impact,\r\n            forecast: item.forecast || '',\r\n            previous: item.previous || '',\r\n            actual:   item.actual   || '',\r\n            date:     new Date(item.date)\r\n          };\r\n        }).filter(function(ev){ return !isNaN(ev.date.getTime()); })\r\n          .sort(function(a,b){ return a.date - b.date; });\r\n        render();\r\n      })\r\n      .catch(function(err){\r\n        bodyEl.innerHTML =\r\n          '<tr><td colspan=\"7\" class=\"aqsa-cal-msg error\">Could not load the news calendar (' + err.message + ').<br>' +\r\n          'Please check that the news-proxy.php URL is correct.<\/td><\/tr>';\r\n      });\r\n  }\r\n\r\n  filtersEl.addEventListener('click', function(e){\r\n    var btn = e.target.closest('.aqsa-cal-pill');\r\n    if(!btn) return;\r\n    filtersEl.querySelectorAll('.aqsa-cal-pill').forEach(function(p){ p.classList.remove('active'); });\r\n    btn.classList.add('active');\r\n    currentFilter = btn.getAttribute('data-impact');\r\n    render();\r\n  });\r\n\r\n  loadCalendar();\r\n  setInterval(loadCalendar, 15 * 60 * 1000);\r\n  setInterval(render, 60 * 1000);\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Economic Calendar ( AQSA AI BOT ) Detecting your local time\u2026 All High Medium Low Time Cur. Imp. Event Actual Forecast Previous Loading calendar\u2026 Times shown in your local timezone \u00b7<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_eb_attr":"","footnotes":""},"class_list":["post-87","page","type-page","status-publish","hentry"],"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"_links":{"self":[{"href":"https:\/\/fxcodedacademy.com\/index.php\/wp-json\/wp\/v2\/pages\/87","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fxcodedacademy.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/fxcodedacademy.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/fxcodedacademy.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fxcodedacademy.com\/index.php\/wp-json\/wp\/v2\/comments?post=87"}],"version-history":[{"count":52,"href":"https:\/\/fxcodedacademy.com\/index.php\/wp-json\/wp\/v2\/pages\/87\/revisions"}],"predecessor-version":[{"id":592,"href":"https:\/\/fxcodedacademy.com\/index.php\/wp-json\/wp\/v2\/pages\/87\/revisions\/592"}],"wp:attachment":[{"href":"https:\/\/fxcodedacademy.com\/index.php\/wp-json\/wp\/v2\/media?parent=87"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}