/* eslint-disable */
function getUrl(container) {
  const urlParams = new URLSearchParams(window.location.search);
  const baseUrl = window.__gemJobBoardUrl;
  const gemJobId =
    urlParams.get("gem_jid") || container.getAttribute("data-gem-jid");
  if (gemJobId) {
    const showApplicationForm =
      container.getAttribute("data-gem-ats") === "application-only";
    var jobPostUrl = `${baseUrl}/${encodeURIComponent(gemJobId)}${
      showApplicationForm ? "/application" : "?embed=true"
    }`;
    const url = new URL(jobPostUrl);
    return url.href;
  }
  return baseUrl + "?embed=true";
}

function loadIframe() {
  if (!window.__gemAutoLoadIframeTimerId) {
    addIframeIfNotExists();
    window.__gemAutoLoadIframeTimerId = window.setInterval(function () {
      addIframeIfNotExists();
    }, 100);
  }
}

function addIframeIfNotExists() {
  var container = document.getElementById("gem_job_board_embed");
  if (
    container &&
    document.getElementById("gem_job_board_embed_iframe") === null
  ) {
    var srcUrl = getUrl(container);
    var iframe = getOrCreateIframe(srcUrl);
    container.appendChild(iframe);
  }
}

function getOrCreateIframe(srcUrl) {
  var iframe = document.getElementById("gem_job_board_embed_iframe");
  if (!iframe) {
    iframe = document.createElement("iframe");
    iframe.id = "gem_job_board_embed_iframe";
    iframe.src = srcUrl;
    iframe.title = "Gem Job Board";
    iframe.frameBorder = "0";
    iframe.scrolling = "no";
    iframe.style.width = "100%";
  }
  return iframe;
}

function handleMessage(event) {
  if (
    event.origin !== window.location.origin &&
    event.origin !== "https://jobs.gem.com"
  ) {
    return;
  }

  if (event.data.type !== "SET_HEIGHT") {
    return;
  }

  var height = event.data.height;
  // For the footer
  var HEIGHT_BUFFER = 32;
  var iframe = document.getElementById("gem_job_board_embed_iframe");
  if (iframe && height) {
    iframe.style.height = height + HEIGHT_BUFFER + "px";
  }
}

(function () {
  if (document.readyState === "complete") {
    loadIframe();
  } else {
    window.addEventListener("DOMContentLoaded", loadIframe);
    window.addEventListener("load", loadIframe);
  }
  window.addEventListener("message", handleMessage);
})();
