LFP = new Object();
LFP.MODULES = new Object();
LFP.UTIL = new Object();
LFP.MENU = new Object();
LFP.SETTINGS = new Object();

LFP.init = function(menu_label,menu_url) {
  LFP.UTIL.skipElement("skip-navigation");
  LFP.MENU.menu_label = menu_label;
  LFP.MENU.menu_url = menu_url;
  LFP.SETTINGS.prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
  let vh = window.innerHeight / 100;
  document.documentElement.style.setProperty('--vh',`${vh}px`);
}
LFP.UTIL.htmlToElement = function(html) {
  var template = document.createElement('template');
  html = html.trim(); // Never return a text node of whitespace as the result
  template.innerHTML = html;
  return template.content.firstChild;
}
LFP.UTIL.templateToElement = function(html) {
  var template = document.createElement('template');
  template.innerHTML = html;
  return template.content.firstChild;
}
LFP.UTIL.includeScript = function(filename,shouldDefer) {
  var script  = document.createElement('script');
  script.src  = filename;
  script.type = 'text/javascript';
  script.defer = shouldDefer;
  document.getElementsByTagName('head').item(0).appendChild(script);
}
LFP.UTIL.skipElement = function(elementID) {
  let skippy = document.getElementById(elementID);
  skippy.addEventListener("keyup", function(event) {
    if (event.keyCode === 13 || event.keyCode === 32) {skippy.click();}
  });
}
LFP.UTIL.getOffset = function( el ) {
  var _x = 0;
  var _y = 0;
  while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ) ) {
    _x += el.offsetLeft - el.scrollLeft;
    _y += el.offsetTop - el.scrollTop;
    el = el.offsetParent;
  }
  return { top: _y, left: _x };
}
LFP.UTIL.getTextWidth = function(text, font) {
  var canvas = LFP.UTIL.getTextWidth.canvas || (LFP.UTIL.getTextWidth.canvas = document.createElement("canvas"));
  var context = canvas.getContext("2d");
  context.font = font;
  var metrics = context.measureText(text);
  return metrics.width;
}
LFP.UTIL.updateURL = function(newSegment) {
  if (LFP.SETTINGS.featureURL==undefined || LFP.SETTINGS.featureURL=="") {
    console.error("LFP.UTIL.updateURL >> LFP.SETTINGS.featureURL not set");
    return;
  }
  let newURL = LFP.SETTINGS.featureURL;
  if (newSegment!="") {
    newURL = newURL + "/" + newSegment;
  }
  window.history.replaceState('','',newURL);
}
LFP.UTIL.getContentHeight = function() {
  let content = document.getElementById("maincontent");
  let contentHeight = 0;
  let contentElements = content.querySelectorAll('.entry-element-container');
  contentElements.forEach(element => {
    contentHeight += element.getBoundingClientRect().height;
  });
  return contentHeight;
}
LFP.UTIL.progressBar = function() {
  let progressBar = document.getElementById("progress_bar");
  if (!progressBar) {
    console.log("NO PROGRESS BAR");
    return;
  }
  let content = document.getElementById("maincontent");
  let progressSpan = progressBar.querySelector(".progress");
  let contentHeight = LFP.UTIL.getContentHeight();
  console.log(`MAIN CONTENT HEIGHT: ${contentHeight}`);
  content.dataset.contentHeight = contentHeight;
  content.dataset.thresholdIndex = 0;
  content.addEventListener('scroll', function(event) {
    let currentPos = event.target.scrollTop;
    let totalHeight = event.target.dataset.contentHeight;
    let percentage = Math.ceil((currentPos / totalHeight) * 10000) / 100;
    let currentIndex = Math.floor(percentage / 2);
    progressSpan.style.width = percentage + "%";
    if (currentIndex==event.target.dataset.thresholdIndex) {return;}
    event.target.dataset.thresholdIndex = currentIndex;
    let contentHeightCheck = LFP.UTIL.getContentHeight();
    if (contentHeightCheck!=totalHeight) {
      event.target.dataset.contentHeight = contentHeightCheck;
    }
  });
}
LFP.UTIL.updatePhoenixCSS = function(styleBlock) {
  let iframes = document.querySelectorAll('.entry-element-container.audio iframe');
  iframes.forEach(iframe => {
    let originalSrc = iframe.getAttribute('src');
    let srcArray = originalSrc.split('https://www.cbc.ca');
    if (srcArray.length==0) {return;}
    console.log(`iframe [${srcArray[1]}] loaded`);
    iframe.setAttribute('src',srcArray[1]);
    checkIframe(iframe,styleBlock);
  });
  
  function checkIframe(element,styleBlock) {
    let styleString = styleBlock;
    element.addEventListener("load", function() {
      let iframeDoc = element.contentDocument || element.contentWindow.document;
      let headElement = iframeDoc.getElementsByTagName("head")[0];
      headElement.innerHTML += styleString;
    });
  }
}
