/home/bdqbpbxa/demo-subdomains/billine.goodface.com.ua/js/form.js
// Input's mask

$(document).ready(function () {
  const phoneMask = $(".--phone-mask");

  if (!phoneMask.length) return;

  phoneMask.inputmask({
    mask: "+38 (999) 999 99 99",
    showMaskOnHover: false,
  });
});

// Adaptive textarea height

function setTextareaAdaptiveHeight(e) {
  e.target.style.height = "0";
  e.target.style.height = `${e.target.scrollHeight}px`;
}

function updateTextareaAdaptiveHeight() {
  $("textarea.-adaptive-height").trigger("input");
}

$(window).on("resize", updateTextareaAdaptiveHeight);
$(document).on("input", "textarea.-adaptive-height", setTextareaAdaptiveHeight);

// Form validation

function formValidation(form) {
  $(form)
    .find("[data-important]")
    .removeClass("-valid -invalid")
    .each(function () {
      const input = $(this).find("input, textarea");
      const validationType = $(this).attr("data-important");

      if (validationType === "email") emailValidator(input);
      if (validationType === "count") countValidator(input);
      if (validationType === "length") lengthValidator(input);
      if (validationType === "checked") isCheckedValidator(input);
      if (validationType === "not-empty") notEmptyValidator(input);
      if (validationType === "inputmask") inputmaskValidator(input);
      if (validationType === "file") fileValidator(input);
    });

  return $(form).find("[data-important].-invalid").length === 0;
}

$(document).on(
  "focus",
  ".form [data-important] input, .form [data-important] textarea",
  function () {
    $(this).closest("[data-important]").removeClass("-valid -invalid");
  }
);

// Form validation - helper

function setInputValidation(input, status) {
  if (status) {
    input.closest("[data-important]").addClass("-valid");
  } else {
    input.closest("[data-important]").addClass("-invalid");
  }
}

// Form validation - validators

function notEmptyValidator(input) {
  setInputValidation(input, input.val().trim().length > 0);
}

function inputmaskValidator(input) {
  setInputValidation(input, input.inputmask("isComplete"));
}

function isCheckedValidator(input) {
  setInputValidation(input, input.is(":checked"));
}

function emailValidator(input) {
  const value = input.val().trim();
  const reg =
    /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{1,}))$/;

  setInputValidation(input, reg.test(String(value).toLowerCase()));
}

function countValidator(input) {
  let isValid = true;

  const value = input.val().trim();

  const min = input.data("min");
  const max = input.data("max");

  if (value.length === 0) isValid = false;

  if (min && value < min) isValid = false;

  if (max && value > max) isValid = false;

  setInputValidation(input, isValid);
}

function lengthValidator(input) {
  const value = input.val().trim();

  const minLength = input.closest("[data-important]").attr("data-min-length");
  const maxLength = input.closest("[data-important]").attr("data-max-length");

  let isValid = false;

  if (minLength && maxLength) {
    isValid = value.length >= minLength && value.length <= maxLength;
  }

  if (minLength && !maxLength) {
    isValid = value.length >= minLength;
  }

  if (!minLength && maxLength) {
    isValid = value.length <= maxLength;
  }

  setInputValidation(input, isValid);
}

function fileValidator(input) {
  const files = input[0].files;

  let isValid = false;

  if (!files.length || files.length > 1) {
    setInputValidation(input, isValid);
    return;
  }

  const file = files[0];
  const fileType = file.type;
  const fileSize = file.size;

  const checkFileType = fileType == "application/pdf";
  const checkFileSize = fileSize <= 5242880;

  if (checkFileType && checkFileSize) {
    isValid = true;
  }

  setInputValidation(input, isValid);
}

// Form's elements focus functions

$(document).on("focus", ".input input, .input textarea", function () {
  const parent = $(this).closest(".input");
  parent.addClass("-focus");
});

$(document).on("blur", ".input input, .input textarea", function () {
  const parent = $(this).closest(".input");

  if (parent.hasClass("-fill")) return;

  parent.removeClass("-focus");
});

// Form's elements input functions

$(document).on("input", ".input input, .input textarea", function () {
  const value = $(this).val();
  const parent = $(this).closest(".input");

  if (value.length > 0) {
    parent.addClass("-fill");
  } else {
    parent.removeClass("-fill");
  }
});

// Upload file helper

$(document).on("focus", ".input.-file .input__box", function () {
  $(this).closest("[data-important]").removeClass("-valid -invalid");
});

$(document).on("click", ".input.-file .input__file-button", function () {
  const parent = $(this).closest(".input");
  const input = parent.find('input[type="file"]');

  input.trigger("click");
});

$(document).on("change", `.input.-file input[type="file"]`, function () {
  const parent = $(this).closest(".input");

  if ($(this).val().length) {
    parent.addClass("-fill");
  } else {
    parent.removeClass("-fill");
    return;
  }

  const infoBox = parent.find(".file-info__info-box");
  const nameBox = infoBox.find("p");
  const sizeBox = infoBox.find("span");
  const sizeUnit = sizeBox.attr("data-unit");

  const files = $(this)[0].files;
  const file = files[0];

  const fileName = file.name;
  const fileSize = (file.size / 1048576).toFixed(2);

  nameBox.text(fileName);
  sizeBox.text(`(${fileSize} ${sizeUnit})`);
});

$(document).on("click", ".input.-file .file-info__remove-icon", function () {
  const parent = $(this).closest(".input");
  const input = parent.find('input[type="file"]');

  input.attr("type", "text");

  input[0].value = "";
  parent.removeClass("-fill");

  input.attr("type", "file");
});

// Checkboxes

$(document).on("click", ".--checkbox", function () {
  const input = $(this).find('input[type="checkbox"]');
  const checked = input.is(":checked");

  $(this).toggleClass("-checked");
  input[0].checked = !checked;
});

function customCheckboxReady() {
  $(".--checkbox").each(function () {
    const checked = $(this).find('input[type="checkbox"]').is(":checked");
    const hasCheckedClass = $(this).hasClass("-checked");

    if (checked && !hasCheckedClass) {
      $(this).addClass("-checked");
    } else if (!checked && hasCheckedClass) {
      $(this).removeClass("-checked");
    }
  });
}

$(window).on("load", customCheckboxReady);