Загрузка данных


document.addEventListener("DOMContentLoaded", () => {
  
  // --- УТИЛИТА: Безопасное добавление событий ---
  const addEvent = (id, event, callback) => {
    const el = document.getElementById(id) || document.querySelector(id);
    if (el) el.addEventListener(event, callback);
  };

  // --- 1. МАСКА ТЕЛЕФОНА ---
  addEvent('input[name="phone"]', "input", (e) => {
    let value = e.target.value.replace(/\D/g, "");
    if (value.startsWith("7") || value.startsWith("8")) value = value.substring(1);
    
    let formatted = "+7 ";
    if (value.length > 0) formatted += "(" + value.substring(0, 3);
    if (value.length > 3) formatted += ") " + value.substring(3, 6);
    if (value.length > 6) formatted += "-" + value.substring(6, 8);
    if (value.length > 8) formatted += "-" + value.substring(8, 10);
    
    e.target.value = formatted.substring(0, 18);
  });

  // --- 2. ВАЛИДАЦИЯ ПАРОЛЯ ---
  const pass = document.getElementById("password");
  const confirm = document.getElementById("password_confirm");
  const submitBtn = document.querySelector(".reg-button");

  if (pass && confirm) {
    const validate = () => {
      const isMatch = confirm.value.length === 0 || pass.value === confirm.value;
      confirm.style.borderColor = isMatch ? "var(--border-color)" : "#ff4b4b";
      if (submitBtn) {
        submitBtn.disabled = !isMatch || pass.value.length < 4;
        submitBtn.style.opacity = submitBtn.disabled ? "0.5" : "1";
      }
    };
    pass.addEventListener("input", validate);
    confirm.addEventListener("input", validate);
  }

  // --- 3. ПЕРЕКЛЮЧАТЕЛЬ ТИПА ПОЛЬЗОВАТЕЛЯ ---
  const btnPrivate = document.getElementById('btn-private');
  const btnCompany = document.getElementById('btn-company');
  const labelName = document.getElementById('label-name');
  const typeInput = document.getElementById('user-type');

  if (btnPrivate && btnCompany) {
    [btnPrivate, btnCompany].forEach(btn => {
      btn.addEventListener('click', () => {
        btnPrivate.classList.toggle('active', btn === btnPrivate);
        btnCompany.classList.toggle('active', btn === btnCompany);
        if (typeInput) typeInput.value = btn === btnPrivate ? 'private' : 'company';
        if (labelName) labelName.innerText = btn === btnPrivate ? 'ФИО' : 'Название компании';
      });
    });
  }

  // --- 4. ЯЗЫКОВОЙ ДРОПДАУН ---
  addEvent('.dropbtn', 'click', (e) => {
    e.stopPropagation();
    document.querySelector(".dropdown-content")?.classList.toggle("show");
  });

  document.querySelectorAll(".dropdown-content a").forEach(link => {
    link.addEventListener("click", (e) => {
      const langText = document.getElementById("languageText");
      if (langText) langText.textContent = link.getAttribute("data-lang");
      document.querySelector(".dropdown-content")?.classList.remove("show");
    });
  });

  // --- 5. ЛОГИКА СЛАЙДЕРА (ПОРТФОЛИО) ---
  const track = document.getElementById("track");
  if (track) {
    const slides = document.querySelectorAll(".slide");
    const prevBtn = document.getElementById("prevBtn");
    const nextBtn = document.getElementById("nextBtn");
    
    let currentIndex = 1; // Обычно начинают с 1, если есть клоны
    let isTransitioning = false;

    const updateCarousel = (animate = true) => {
      track.style.transition = animate ? "transform 0.6s cubic-bezier(0.22, 1, 0.36, 1)" : "none";
      
      const slideWidth = slides[0].offsetWidth;
      const gap = parseInt(window.getComputedStyle(track).gap) || 0;
      const viewportWidth = track.parentElement.offsetWidth;
      
      // Центрирование активного слайда
      const centerOffset = (viewportWidth - slideWidth) / 2;
      const position = -(currentIndex * (slideWidth + gap)) + centerOffset;
      
      track.style.transform = `translateX(${position}px)`;
      
      slides.forEach((s, i) => s.classList.toggle("active", i === currentIndex));
    };

    const moveSlide = (direction) => {
      if (isTransitioning) return;
      isTransitioning = true;
      currentIndex += direction;
      updateCarousel();
    };

    // Назначаем события кнопкам здесь, а не в HTML
    prevBtn?.addEventListener('click', () => moveSlide(-1));
    nextBtn?.addEventListener('click', () => moveSlide(1));

    track.addEventListener("transitionend", () => {
      isTransitioning = false;
      // Бесконечный цикл (логика клонов)
      if (currentIndex === slides.length - 1) {
        currentIndex = 1;
        updateCarousel(false);
      } else if (currentIndex === 0) {
        currentIndex = slides.length - 2;
        updateCarousel(false);
      }
    });

    window.addEventListener("resize", () => updateCarousel(false));
    // Инициализация
    setTimeout(() => updateCarousel(false), 100);
  }
});