'use strict';

 document.addEventListener('DOMContentLoaded', function() {

  /**** close menu on Esc ****/

  const menuOpen = document.getElementById('f-menu');
  const overlay = document.getElementById('overlay');
  document.addEventListener('keyup', closeOnEsc);

  function closeOnEsc(e) {
    const key = e.key || e.keyCode;
    if (key === 'Escape' || key === 'Esc' || key === 27) {
      if (menuOpen.checked) { // only if menu is open
        menuOpen.checked = false;
        overlay.checked = true;
      }
    }
  }

  /**** close menu on cross click ****/

  const close = document.getElementById('menuClose');
  close.addEventListener('click', closeMenu);

  function closeMenu(e) {
    e.preventDefault();
    menuOpen.checked = false;
    overlay.checked = true;
  }

  /**** Close share button input on click outside input ****/

  const serverForm = document.getElementsByClassName('hidden');
  const formArr = [];
                                                /* eslint-disable no-cond-assign */
  for (let i = 0, e; e = serverForm[i]; ++i) {
    formArr.push(e);
  }
                                                /* eslint-enable no-cond-assign */

  document.addEventListener('click', trackShare);

  function trackShare(e) {
    let open = false;
    let openInput = null;
    formArr.forEach(f => {if (f.checked) {open = true; openInput = f;} });

    if (!e.target.classList.contains('hidden') && open === true) {
      const form = openInput.nextElementSibling;
      const formId = `#${form.id}`;
      const insideForm = closest(e.target, formId);
      if (insideForm === null) {
        openInput.checked = false;
      }
    }
  }

  function closest(el, selector) {
    const matchesSelector = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector;
    while (el) {
      if (matchesSelector.call(el, selector)) {
        return el;
      } else {
        el = el.parentElement;
      }
    }
    return null;
  }

  /**** Share page - github.com/distributopia/share-connect-support ****/
  const h1 = document.querySelector('h1');
  const postTitle = document.querySelector('head').querySelector('title');
  const oggProp = document.querySelector('meta[property="og:title"]');

  const t1 = (postTitle === null) ? '' : postTitle.textContent,
        t2 = (oggProp === null) ? '' : oggProp.content,
        t3 = (h1 === null) ? '' : h1.textContent;

  const text = t1 || t2 || t3;

  const link = encodeURIComponent(window.location.href);

  const btnsNodeList = document.querySelectorAll('.share-btn');

  const buttons = [];
  for (let i = 0; i < btnsNodeList.length; i++) {
    buttons.push(btnsNodeList[i])
  }

  const inputsNodeList = document.querySelectorAll('.popup input');

  const inputs = [];
  for (let i = 0; i < inputsNodeList.length; i++) {
    inputs.push(inputsNodeList[i])
  }

  // If url was typed without https://, add it
  function validateProtocol(url) {
    const check = url.match(/^https:\/\//i);
    if (check) {
      return url;
    } else {
      const newUrl = url.split('/').filter((n) => n.indexOf('.') > -1);
      return `https://${encodeURIComponent(newUrl)}`;
    }
  }

  const shareLink = function(e) {
    const isBtn = (e.target.name !== 'podurl');
    const service = isBtn ? e.target.value : e.target.nextSibling.value;
    const pod = isBtn ? e.target.previousSibling.value : e.target.value;
    const title = encodeURI(text).replace(/%20/g, '+');
    const path = validateProtocol(pod);

    if (service === 'diaspora' || service === 'friendica' || service === 'socialhome') {
      window.open(`${path}/bookmarklet?url=${link}&title=${title}`);
    } else if (service === 'gnusocial') {
      window.open(`${path}/notice/new?status_textarea=${title}&${link}`);
    } else if (service === 'mastodon') {
      window.open(`${path}/share?text=${title} ${link}`);
    } else if (service === 'hubzilla') {
      window.open(`${path}/rpost?f=&url=${link}&title=${title}`);
    } else {
      return;
    }
  };

  buttons.forEach((btn) => btn.addEventListener('click', shareLink));

  // shareLink on Enter
  inputs.forEach((input) => input.addEventListener('keyup', function(e) {
    const key = e.key || e.keyCode;
    if (key === 'Enter' || key === 13) {shareLink(e)}
  }));

 });