/home/bdqbpbxa/demo-subdomains/billine.goodface.com.ua/js/script.js
// Preloader settings

$(document).ready(function () {
  const getPreloader = $(".preloader");

  if (getPreloader.length) {
    lockScroll();
  }
});

$(window).on("load", function () {
  const getPreloader = $(".preloader");

  if (getPreloader.length) {
    setTimeout(function () {
      unlockScroll();

      getPreloader.fadeOut(700, function () {
        getPreloader.remove();
      });
    }, 4000);
  }
});

// Custom scrollbar init

$(window).on("load", function () {
  const getScrollbar = $(".--custom-scrollbar");

  if (!getScrollbar.length) return;

  $(".--custom-scrollbar").each(function () {
    if ($(this).is(".api-navigation")) return;

    $(this).overlayScrollbars({
      className: "os-theme-dark",

      scrollbars: {
        clickScrolling: true,
      },
    });
  });
});

// Dropdowns functionality

$(document).on("mouseenter", ".--dropdown__value", function () {
  $(this).closest(".--dropdown").addClass("-active");
});

$(document).on("mouseleave", ".--dropdown", function () {
  $(this).closest(".--dropdown").removeClass("-active");
});

// customClickOutsideCallback(".--dropdown.-active", function (e, selector) {
//   $(selector).removeClass("-active");
// });

// Mobile menu functionality

$(".header__open-menu-button").on("click", function () {
  const header = $(this).closest(".header");
  const menu = header.find(".header__menu");

  if ($(this).hasClass("-active")) {
    unlockScroll();

    $(this).removeClass("-active");
    menu.removeClass("-active");

    header.removeClass("-menu-opened");
  } else {
    lockScroll();

    $(this).addClass("-active");
    menu.addClass("-active");

    header.addClass("-menu-opened");
  }
});

// Scroll header style

$(window).on("scroll", function () {
  const offset = $(this)[0].scrollY;

  if (offset <= 0) {
    $(".header").removeClass("-scrolled");
  } else {
    $(".header").addClass("-scrolled");
  }
});

// Gradient hover init

$(window).on("load", function () {
  const getGradientHover = $(".--gradient-hover");

  if (!getGradientHover.length) return;

  getGradientHover.each(function () {
    const getText = $(this).text().trim();
    $(this).attr("data-hover-text", getText);
  });
});

// Sending form settings

function loadingFormSending(container) {
  container.find(".--sending-loading").addClass("-active");
}

function formSendingSuccess(container) {
  container.find(".--sending-success").addClass("-active");
}

function formSendingError(container) {
  container.find(".--sending-error").addClass("-active");
}

function backToForm(container) {
  container.find(".--sending-block").removeClass("-active");
}

function resetForm(form) {
  form
    .find("[data-important], .input")
    .removeClass("-valid -invalid -focus -fill");

  form.find("input, textarea").each(function () {
    $(this)[0].value = "";
  });
}

$(document).on("submit", ".form form", function (e) {
  e.preventDefault();

  const form = $(this)[0];
  const isFormValid = formValidation(e.target);

  if (isFormValid) {
    const getFormBlock = $(form.closest(".form"));
    const getFormSendingContainer = $(
      form.closest(".--sending-form-container")
    );

    loadingFormSending(getFormSendingContainer);

    let formData = new FormData();

    let url = "";
    let social = "";
    let message = "";
    let phone = "";
    let file = "";

    const name = $(this)[0].name.value;
    const email = $(this)[0].email.value;

    const formName = $(this).attr("name");
    const language = document.documentElement.lang.toUpperCase();

    if (formName == "connect") {
      formData.append("formName", "Заявка на підключення");

      url = $(this)[0].url.value;
      social = $(this)[0].social.value;
      message = $(this)[0].message.value;
    } else if (formName == "join") {
      formData.append("formName", "Заявка на роботу в команді");

      phone = $(this)[0].phone.value;
      file = $(this)[0].file.files[0];
    }

    formData.append("send", true);
    formData.append("language", language);
    formData.append("name", name);
    formData.append("url", url);
    formData.append("email", email);
    formData.append("social", social);
    formData.append("message", message);
    formData.append("phone", phone);
    formData.append("file", file);

    $.ajax({
      type: "post",
      processData: false,
      contentType: false,
      url: "mail.php",
      data: formData,
      success: function (data) {
        formSendingSuccess(getFormSendingContainer);
        resetForm(getFormBlock);
      },
      error: function () {
        formSendingError(getFormSendingContainer);
      },
    });
  }
});

$(document).on("click", ".--back-to-form", function () {
  const container = $(this).closest(".--sending-form-container");
  backToForm(container);
});

// Accordions

function openCustomAccordion(accordion) {
  const container = accordion.find(".--accordion__content-container").eq(0);
  const contentHeight = accordion
    .find(".--accordion__content")
    .eq(0)
    .outerHeight();

  accordion.addClass("-open");
  container.css("height", `${contentHeight}px`);

  closeSameAccordionGroup(accordion);
}

function closeCustomAccordion(accordion) {
  const container = accordion.find(".--accordion__content-container").eq(0);
  const containerCurrentHeight = container.outerHeight();

  container.css({
    height: `${containerCurrentHeight}px`,
    transition: "unset",
  });

  container.outerHeight(); // Lifehack

  container.css({
    height: "0px",
    transition: "",
  });

  accordion.removeClass("-open");

  closeAccordionChildren(accordion);
}

function closeAccordionChildren(accordion) {
  if (accordion.is("[data-close-children]")) {
    accordion.find(".--accordion").each(function () {
      closeCustomAccordion($(this));
    });
  }
}

function closeSameAccordionGroup(accordion) {
  const groupName = accordion.attr("data-accordion-group");

  if (groupName) {
    $(`.--accordion[data-accordion-group="${groupName}"]`).each(function () {
      if (accordion[0] !== this) {
        closeCustomAccordion($(this));
      }
    });
  }
}

fullTransitionendCallback(
  ".--accordion__content-container",
  function (e) {
    const accordion = $(e.target).closest(".--accordion");
    const isOpen = accordion.hasClass("-open");

    accordion.removeAttr("data-accordion-in-process");

    if (isOpen) {
      $(e.target).css("height", "auto");
    }
  },
  "height"
);

$(document).on("click", ".--accordion__open", function () {
  const accordion = $(this).closest(".--accordion");
  const isAccordionLock =
    accordion.find("[data-accordion-in-process]").length ||
    accordion.parent().closest("[data-accordion-in-process]").length;

  if (isAccordionLock) return;

  accordion.attr("data-accordion-in-process", true);

  const isOpen = accordion.hasClass("-open");

  if (isOpen) {
    closeCustomAccordion(accordion);
  } else {
    openCustomAccordion(accordion);
  }
});

// API editor settings

$(document).ready(function () {
  const getEditor = $(".api-editor");

  if (!getEditor.length) return;

  getEditor.each(function () {
    const getLink = $(this).find("a");

    getLink.each(function () {
      $(this).addClass("--gradient-hover default-link");
    });
  });
});

$(".--copy-code").on("click", function () {
  const getText = $(this).text().trim();
  const getContainer = $(this).closest(".--code-container");
  const getCopyButton = getContainer.find(".copy-to-clipboard-button");

  getCopyButton.trigger("click");
  $(this).addClass("-copied");
  $(this).text("Copied!");

  setTimeout(() => {
    $(this).removeClass("-copied");
    $(this).text(getText);
  }, 1500);
});

// API | Code expand/collapse

function expandCollapseCodeFunction(ths, action) {
  const getContainer = $(ths).closest(".--code-container");
  const getCode = getContainer.find(".--code-response");
  const getDetails = getCode.find("details");

  getDetails.each(function () {
    if (action == "open") {
      $(this).attr("open", "");
    } else {
      $(this).removeAttr("open");
    }
  });
}

$(".--collapse-code").on("click", function () {
  expandCollapseCodeFunction(this);
});

$(".--expand-code").on("click", function () {
  expandCollapseCodeFunction(this, "open");
});

$(document).ready(function () {
  const getCodeRespones = $(".--code-response");

  if (!getCodeRespones.length) return;

  $(".--code-response").each(function () {
    expandCollapseCodeFunction(this);
  });
});

// API | Navigation settings

$(document).ready(function () {
  const getNavigationBlock = $(".api-navigation");

  if (!getNavigationBlock.length) return;

  const getContainer = $(".api-content-container");

  getContainer.each(function () {
    if ($(this).find("h1").length) return;

    let createAccordionHTML = "";

    const getH2 = $(this).find("h2");
    const getH3 = $(this).find("h3");

    const getH2Id = getH2.attr("id");
    const getH2Text = getH2.text().trim();

    createAccordionHTML = `
      <div class="api-nav__accordion">
        <div class="api-nav__button">
          <a href="#${getH2Id}" class="text-2 mob-text-2 --bold-text --gradient-hover">
            ${getH2Text}
          </a>
        </div>
      </div>
    `;

    if (getH3.length) {
      let createAccordionContentHTML = "";

      getH3.each(function () {
        const getH3Id = $(this).attr("id");
        const getH3Text = $(this).text().trim();
        const getH3Method = $(this).attr("data-method");

        if (getH3Method == "get") {
          createAccordionContentHTML += `
            <li class="api-nav__nav">
              <span class="api-nav__request -get">GET</span>
              <a href="#${getH3Id}" class="api-nav__nav-link text-3 --gradient-hover">
                ${getH3Text}
              </a>
            </li>
          `;
        } else if (getH3Method == "post") {
          createAccordionContentHTML += `
            <li class="api-nav__nav">
              <span class="api-nav__request -post">POST</span>
              <a href="#${getH3Id}" class="api-nav__nav-link text-3 --gradient-hover">
                ${getH3Text}
              </a>
            </li>
          `;
        } else {
          createAccordionContentHTML += `
            <li class="api-nav__nav">
              <a href="#${getH3Id}" class="api-nav__nav-link text-3 --gradient-hover">
                ${getH3Text}
              </a>
            </li>
          `;
        }
      });

      if (document.documentElement.lang !== "uk") {
        createAccordionHTML = `
        <div class="api-nav__accordion --accordion">
          <div class="api-nav__button --accordion-button">
            <a href="#${getH2Id}" class="text-2 mob-text-2 --bold-text --gradient-hover">
              ${getH2Text}
            </a>
            <span
              class="--mask-item --accordion__open"
              style="
                -webkit-mask-image: url('../images/icons/caret-down.svg');
                mask-image: url('../images/icons/caret-down.svg');
              "
            ></span>
          </div>
          <div class="api-nav__content --accordion__content-container">
            <div class="--accordion__content">
              <ul>
                ${createAccordionContentHTML}
              </ul>
            </div>
          </div>
        </div>
      `;
      } else {
        createAccordionHTML = `
        <div class="api-nav__accordion --accordion">
          <div class="api-nav__button --accordion-button">
            <a href="#${getH2Id}" class="text-2 mob-text-2 --bold-text --gradient-hover">
              ${getH2Text}
            </a>
            <span
              class="--mask-item --accordion__open"
              style="
                -webkit-mask-image: url('images/icons/caret-down.svg');
                mask-image: url('images/icons/caret-down.svg');
              "
            ></span>
          </div>
          <div class="api-nav__content --accordion__content-container">
            <div class="--accordion__content">
              <ul>
                ${createAccordionContentHTML}
              </ul>
            </div>
          </div>
        </div>
      `;
      }
    }

    getNavigationBlock.append(createAccordionHTML);
  });

  getNavigationBlock.overlayScrollbars({
    className: "os-theme-dark",

    scrollbars: {
      clickScrolling: true,
    },
  });
});

// $(document).ready(function () {
//   const getNavBlock = $(".api-navigation");
//
//   if (!getNavBlock.length) return;
//
//   getNavBlock.find(".--accordion").each(function () {
//     openCustomAccordion($(this));
//   });
// });

// API | Anchor settings

$(document).ready(function () {
  const getApiContent = $(".api-content");

  if (!getApiContent.length) return;

  const getAnchor = getApiContent.find("[id]");

  getAnchor.each(function () {
    const getText = $(this).text().trim();
    const getArray = getText.split(" ");

    const getLastWord = getArray.splice(-1, 1);
    const newTag = `<span>${getLastWord[0]}</span>`;

    getArray.push(newTag);
    const newAnchorText = getArray.join(" ");

    $(this)[0].innerHTML = newAnchorText;
  });
});

$(".api-editor [id]").on("click", function () {
  const getId = $(this).attr("id");

  history.pushState(
    {
      id: getId,
      source: "web",
    },
    "Welcome",
    `#${getId}`
  );

  $("html, body").animate(
    {
      scrollTop: $(this).offset().top - 138,
    },
    600,
    function () {}
  );
});

$(window).on("load", function () {
  if (!$(".api-section").length) return;

  const getId = window.location.hash.substr(1);

  if (getId) {
    const getAnchor = $(`#${getId}`);
    const getOffset = getAnchor.offset().top - 140;

    window.scrollTo(0, getOffset);
  }
});

$(window).on("scroll", function () {
  const getNavigationBlock = $(".api-navigation");

  if (!getNavigationBlock.length) return;

  getNavigationBlock.find("[href]").removeClass("-active");

  const getApiContent = $(".api-content");

  const getScrollOffsetTop = window.scrollY + 140;

  let isActiveAnchor = null;

  getApiContent.each(function () {
    const getAnchor = $(this).find("[id]");

    if (!getAnchor.length) return;

    getAnchor.each(function () {
      const getAnchorOffsetTop = $(this).offset().top;

      if (getScrollOffsetTop >= getAnchorOffsetTop) {
        isActiveAnchor = $(this);
      }
    });
  });

  if (isActiveAnchor) {
    const getId = isActiveAnchor.attr("id");
    const getActiveNavLink = getNavigationBlock.find(`[href="#${getId}"]`);

    getActiveNavLink.addClass("-active");
  }

  // getNavigationBlock.find(".--accordion").each(function () {
  //   const getAccordionContent = $(this).find(".--accordion__content-container");
  //   const getActiveLink = getAccordionContent.find(".-active");
  //
  //   if (getActiveLink.length) {
  //     openCustomAccordion($(this));
  //     return;
  //   }
  //
  //   closeCustomAccordion($(this));
  // });
});

// Get random number

function getRandomNumber(min, max) {
  const getRandomNumber = Math.random() * (max - min) + min;
  const getFixedRandomNumber = +getRandomNumber.toFixed(2);

  return getFixedRandomNumber;
}

// Levitation animation adjustment

$(document).ready(function () {
  const getAnimation = $(
    ".info-block.-integration .info-block__image-box, .info-block.-payment .info-block__image-box"
  );

  if (!getAnimation.length) return;

  getAnimation.each(function () {
    const getNumber = getRandomNumber(0, 10);
    $(this).css("animation-delay", `-${getNumber}s`);
  });
});

// Currency interactive image adjustment

$(".currency-ani-block__button").on("click", function () {
  $(this).closest(".currency-ani-block__item").toggleClass("-active");
});

// Graph interactive image adjustment

$(document).on("mouseenter", ".graph-ani-block__graph", function () {
  const getIndex = $(this).index();
  const getContainer = $(this).closest(".graph-ani-block__graph-box");
  const getMonth = getContainer.find(".graph-ani-block__month").eq(getIndex);

  $(this).addClass("-active");
  $(this).siblings().removeClass("-active");

  getMonth.addClass("-active");
  getMonth.siblings().removeClass("-active");
});

// Connect way animation adjustment

$(document).ready(function () {
  const getBlock = $(".connect-main__way");

  if (!getBlock.length) return;

  let setDelayNumber = 0.3;

  $(".connect-way__item").each(function () {
    if ($(this).css("display") == "none") return;

    let getPrevItem = $(this).prev();

    if (getPrevItem.length) {
      if (
        !getPrevItem.hasClass("connect-way__item") ||
        getPrevItem.css("display") == "none"
      ) {
        getPrevItem = getPrevItem.prev();
      }

      const getPrevItemOffset = getPrevItem.offset().top;
      const getCurrentItemOffset = $(this).offset().top;

      if (getPrevItemOffset < getCurrentItemOffset) {
        setDelayNumber += 0.2;
      }
    }

    $(this).css("transition-delay", `${setDelayNumber}s`);

    setDelayNumber += 0.1;
  });

  $(".connect-main__way-img .way-img").each(function () {
    let setDelayNumberArrow = 0.5;

    $(this)
      .find(".way-arrow")
      .each(function () {
        $(this).css("transition-delay", `${setDelayNumberArrow}s`);
        setDelayNumberArrow += 0.2;
      });
  });

  let oldDateObj = new Date();
  let newDateObj = new Date();
  let timeIndex = 0;

  $(".connect-way__time").each(function () {
    if (timeIndex === 1) {
      newDateObj.setTime(oldDateObj.getTime() + 5 * 60 * 1000);
    } else if (timeIndex === 2) {
      newDateObj.setTime(oldDateObj.getTime() + 10 * 60 * 1000);
    } else if (timeIndex === 3) {
      newDateObj.setTime(oldDateObj.getTime() + 40 * 60 * 1000);
    } else if (timeIndex === 4) {
      newDateObj.setTime(oldDateObj.getTime() + 50 * 60 * 1000);
    } else if (timeIndex === 5) {
      newDateObj.setTime(oldDateObj.getTime() + 60 * 60 * 1000);
    } else if (timeIndex === 6) {
      newDateObj.setTime(oldDateObj.getTime() + 150 * 60 * 1000);
    } else if (timeIndex === 7) {
      newDateObj.setTime(oldDateObj.getTime() + 210 * 60 * 1000);
    }

    const getHours = newDateObj.getHours();
    const getMinutes = String(newDateObj.getMinutes()).padStart(2, "0");

    $(this).append(`
      ${getHours}<span>:</span>${getMinutes}
    `);

    timeIndex++;
  });
});

// Cookie adjustment

$(document).ready(function () {
  const getCookie = $.cookie("cookiePermission");

  if (getCookie) {
    $(".cookie-block").remove();
  }
});

$(".cookie__button").on("click", function () {
  $(this)
    .closest(".cookie-block")
    .fadeOut(400, function () {
      $(this).remove();
    });

  $.cookie("cookiePermission", true, { expires: 365, path: "/" });
});