const varietyCatalog = [
{
slug: "ermolovka",
name: "Ермоловка",
region: "Центральный регион и ЦЧР",
maturity: "Среднепоздний",
avgYield: "131.4 ц/га",
maxYield: "165.7 ц/га",
protein: "более 15%",
},
{
slug: "volodya",
name: "Володя",
region: "ЦЧР, СКФО и Средневолжье",
maturity: "Среднеспелый",
avgYield: "108.6 ц/га",
maxYield: "122.6 ц/га",
protein: "до 18.2%",
},
{
slug: "df-2020",
name: "ДФ 2020",
region: "Средневолжье и Урал",
maturity: "Среднеранний",
avgYield: "118.6 ц/га",
maxYield: "124.6 ц/га",
protein: "ценная пшеница",
},
{
slug: "inteza",
name: "Интеза",
region: "Центральный регион и СКФО",
maturity: "Среднеранний",
avgYield: "118.5 ц/га",
maxYield: "129.1 ц/га",
protein: "до 15.9%",
},
{
slug: "sokrat",
name: "Сократ",
region: "Центральный регион",
maturity: "Среднепоздний",
avgYield: "136.2 ц/га",
maxYield: "163 ц/га",
protein: "рекордная урожайность",
},
{
slug: "sistema",
name: "Система",
region: "СКФО",
maturity: "Среднеспелый",
avgYield: "118.9 ц/га",
maxYield: "127.8 ц/га",
protein: "более 16%",
},
{
slug: "izumrud-dubovitskogo",
name: "Изумруд Дубовицкого",
region: "ЦЧР, Средневолжье и Урал",
maturity: "Раннеспелый",
avgYield: "109.1 ц/га",
maxYield: "115.6 ц/га",
protein: "высокие показатели белка",
},
];
function buildFooterSocialLinksMarkup() {
return `
`;
}
function normalizeFooterContacts() {
const footer = document.querySelector("footer");
footer?.querySelectorAll(".grid > div:last-child li").forEach((item) => {
item.textContent = item.textContent.replace(/^[^+\p{L}\p{N}]+/u, "").trim();
});
}
function initFooterSocialLinks() {
const footer = document.querySelector("footer");
const footerColumns = footer?.querySelectorAll(".grid > div");
const contactColumn = footerColumns?.[footerColumns.length - 1];
if (!contactColumn || contactColumn.querySelector("[data-footer-socials]")) return;
contactColumn.insertAdjacentHTML("beforeend", buildFooterSocialLinksMarkup());
}
function fillLeadVarieties(currentSlug) {
const group = document.getElementById("lead-variety-group");
if (!group) return;
group.innerHTML = "";
varietyCatalog.forEach((item) => {
const label = document.createElement("label");
label.className =
"lead-checkbox flex items-start gap-2 rounded-lg border border-gray-200 bg-white px-3 py-2";
label.innerHTML = `
${item.name}
`;
const checkbox = label.querySelector("input");
if (item.slug === currentSlug) {
checkbox.checked = true;
}
group.appendChild(label);
});
}
function renderOtherVarieties(currentSlug) {
const grid = document.getElementById("other-varieties-grid");
if (!grid) return;
const items = varietyCatalog.filter((item) => item.slug !== currentSlug);
grid.innerHTML = items
.map(
(item) => `
${item.name}
- Регион допуска: ${item.region}
- Срок созревания: ${item.maturity}
- Средняя урожайность: ${item.avgYield}
- Максимальная урожайность: ${item.maxYield}
- Ключевой показатель: ${item.protein}
`
)
.join("");
grid.querySelectorAll("[data-variety]").forEach((button) => {
button.addEventListener("click", () => scrollToLeadForm(button.dataset.variety));
});
}
function scrollToLeadForm(varietyName) {
document.getElementById("mobile-menu")?.classList.add("hidden");
const checkbox = document.querySelector(
`input[name="lead-variety"][value="${varietyName}"]`
);
if (checkbox) checkbox.checked = true;
document.getElementById("lead-form")?.scrollIntoView({ behavior: "smooth", block: "start" });
}
function applyPhoneMask(input) {
if (!input) return;
input.addEventListener("input", (event) => {
let digits = event.target.value.replace(/\D/g, "");
if (!digits) {
event.target.value = "";
return;
}
if (digits[0] === "8") digits = "7" + digits.slice(1);
if (digits[0] !== "7") digits = "7" + digits;
digits = digits.slice(0, 11);
let formatted = "+7";
if (digits.length > 1) formatted += " (" + digits.slice(1, 4);
if (digits.length >= 4) formatted += ")";
if (digits.length > 4) formatted += " " + digits.slice(4, 7);
if (digits.length > 7) formatted += "-" + digits.slice(7, 9);
if (digits.length > 9) formatted += "-" + digits.slice(9, 11);
event.target.value = formatted;
});
input.addEventListener("focus", () => {
if (!input.value) input.value = "+7";
});
input.addEventListener("blur", () => {
if (input.value === "+7") input.value = "";
});
}
async function submitLead(event) {
event.preventDefault();
const company = document.getElementById("lead-company").value.trim();
const name = document.getElementById("lead-name").value.trim();
const phone = document.getElementById("lead-phone").value.trim();
const checkedVarieties = [
...document.querySelectorAll('input[name="lead-variety"]:checked'),
].map((checkbox) => checkbox.value);
const variety = checkedVarieties.length > 0 ? checkedVarieties.join(", ") : "не указан";
const pack = document.getElementById("lead-package").value;
const volume = document.getElementById("lead-volume").value;
const out = document.getElementById("lead-result");
const btn = document.querySelector('#lead-form button[type="submit"]');
const phoneDigits = phone.replace(/\D/g, "");
if (phoneDigits.length !== 11 || !phoneDigits.startsWith("7")) {
out.className =
"mt-4 p-3 rounded bg-red-50 border border-red-200 text-sm text-red-800";
out.textContent =
"Введите корректный номер телефона в формате +7 (XXX) XXX-XX-XX";
out.classList.remove("hidden");
return;
}
btn.disabled = true;
btn.textContent = "Отправляем…";
out.classList.add("hidden");
const params = new URLSearchParams({
"fields[TITLE]": `Заявка с озимая.рф — ${company}`,
"fields[NAME]": name,
"fields[COMPANY_TITLE]": company,
"fields[PHONE][0][VALUE]": phone,
"fields[PHONE][0][VALUE_TYPE]": "WORK",
"fields[COMMENTS]": `Сорта: ${variety}\nПакет: ${pack}\nПлощадь посева: ${volume} га`,
"fields[SOURCE_ID]": "WEB",
"fields[SOURCE_DESCRIPTION]": "Форма на сайте озимая.рф",
});
try {
const response = await fetch("/api/lead", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: params.toString(),
});
const json = await response.json();
if (!json.result) {
throw new Error(JSON.stringify(json));
}
out.className =
"mt-4 p-3 rounded bg-green-50 border border-green-200 text-sm text-green-800";
out.textContent = `Заявка принята. Мы свяжемся с вами в ближайшее время. (${company}, ${volume} га)`;
document.getElementById("lead-form").reset();
fillLeadVarieties(document.body.dataset.varietySlug);
} catch (error) {
out.className =
"mt-4 p-3 rounded bg-red-50 border border-red-200 text-sm text-red-800";
out.innerHTML =
'Не удалось отправить заявку. Позвоните нам напрямую: +7 (495) 745-05-51 или попробуйте позже.';
console.error("Bitrix24 lead error:", error);
} finally {
out.classList.remove("hidden");
btn.disabled = false;
btn.textContent = "Отправить заявку";
}
}
document.addEventListener("DOMContentLoaded", () => {
const currentSlug = document.body.dataset.varietySlug;
fillLeadVarieties(currentSlug);
renderOtherVarieties(currentSlug);
normalizeFooterContacts();
initFooterSocialLinks();
const mobileMenuButton = document.getElementById("mobile-menu-btn");
const mobileMenu = document.getElementById("mobile-menu");
if (mobileMenuButton && mobileMenu) {
mobileMenuButton.addEventListener("click", () => {
mobileMenu.classList.toggle("hidden");
});
mobileMenu.querySelectorAll("a, button").forEach((item) => {
item.addEventListener("click", () => mobileMenu.classList.add("hidden"));
});
}
document.querySelectorAll("[data-scroll-target]").forEach((button) => {
button.addEventListener("click", () => {
mobileMenu?.classList.add("hidden");
const target = document.querySelector(button.dataset.scrollTarget);
if (target) {
target.scrollIntoView({ behavior: "smooth", block: "start" });
}
});
});
document.querySelectorAll("[data-variety]").forEach((button) => {
button.addEventListener("click", () => scrollToLeadForm(button.dataset.variety));
});
document.getElementById("lead-form")?.addEventListener("submit", submitLead);
applyPhoneMask(document.getElementById("lead-phone"));
});