';
resultCount.textContent = '0 товаров';
return;
}
var html = '';
for (var i = 0; i < products.length; i++) {
var p = products[i];
var priceStr = p.price.toLocaleString('ru-RU') + ' ₽';
var oldStr = p.oldPrice ? '
' + p.oldPrice.toLocaleString('ru-RU') + ' ₽' : '';
html +=
'
' +
'
' +
'

' +
'
' + p.category + '' +
'
' +
'
' +
'
' + p.name + '
' +
'
' + p.description + '
' +
'
' +
'
' + priceStr + '' + oldStr + '
' +
'
' +
'
' +
'
' +
'
';
}
grid.innerHTML = html;
resultCount.textContent = products.length + ' ' + pluralize(products.length, ['товар', 'товара', 'товаров']);
}
function pluralize(n, forms) { return forms[(n % 10 === 1 && n % 100 !== 11) ? 0 : (n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20)) ? 1 : 2]; }
/* ===== Filter + search ===== */
function filterProducts() {
var query = searchInput.value.trim().toLowerCase();
var filtered = PRODUCTS.filter(function(p) {
if (activeFilter !== 'Все' && p.category !== activeFilter) { return false; }
if (query) {
return p.name.toLowerCase().indexOf(query) !== -1 ||
p.description.toLowerCase().indexOf(query) !== -1 ||
p.category.toLowerCase().indexOf(query) !== -1;
}
return true;
});
renderGrid(filtered);
}
/* ===== Open popup ===== */
function openPopup(productId) {
var p = null;
for (var i = 0; i < PRODUCTS.length; i++) {
if (PRODUCTS[i].id === productId) { p = PRODUCTS[i]; break; }
}
if (!p) { return; }
currentProductId = productId;
/* Gallery */
popupMainImg.src = p.images[0];
popupMainImg.alt = p.name;
var thumbsHtml = '';
for (var j = 0; j < p.images.length; j++) {
thumbsHtml += '';
}
popupThumbs.innerHTML = thumbsHtml;
/* Info */
popupCategory.textContent = p.category.toUpperCase();
popupName.textContent = p.name;
popupPrice.textContent = p.price.toLocaleString('ru-RU') + ' ₽';
popupPriceOld.textContent = p.oldPrice ? p.oldPrice.toLocaleString('ru-RU') + ' ₽' : '';
popupPriceOld.style.display = p.oldPrice ? '' : 'none';
popupDesc.textContent = p.description;
/* Characteristics */
var charsHtml = '';
var keys = Object.keys(p.characteristics);
for (var k = 0; k < keys.length; k++) {
charsHtml += '
| ' + keys[k] + ' | ' + p.characteristics[keys[k]] + ' |
';
}
popupCharsTable.innerHTML = charsHtml;
/* Included */
var inclHtml = '';
for (var m = 0; m < p.included.length; m++) {
inclHtml += '
' + p.included[m] + '';
}
popupIncludedList.innerHTML = inclHtml;
/* Layout */
popupLayoutText.textContent = p.layout;
/* WhatsApp */
var phone = '79261234567'; /* ← замени на свой номер */
var msg = 'Здравствуйте! Меня интересует товар: ' + p.name + ' (' + p.price.toLocaleString('ru-RU') + ' ₽). Каталог на сайте.';
whatsappBtn.href = 'https://wa.me/' + phone + '?text=' + encodeURIComponent(msg);
/* Reset tabs */
var tabs = popupInner.querySelectorAll('.cat1__popup-tab');
var contents = popupInner.querySelectorAll('.cat1__popup-tab-content');
for (var t = 0; t < tabs.length; t++) { tabs[t].classList.remove('cat1__popup-tab--active'); }
for (var c = 0; c < contents.length; c++) { contents[c].classList.remove('cat1__popup-tab-content--active'); }
if (tabs[0]) { tabs[0].classList.add('cat1__popup-tab--active'); }
if (contents[0]) { contents[0].classList.add('cat1__popup-tab-content--active'); }
/* Show */
document.body.style.overflow = 'hidden';
overlay.classList.add('cat1__overlay--open');
popup.classList.add('cat1__popup--open');
}
function closePopup() {
document.body.style.overflow = '';
overlay.classList.remove('cat1__overlay--open');
popup.classList.remove('cat1__popup--open');
currentProductId = null;
}
/* ===== Event listeners ===== */
/* Filter buttons (delegation) */
filtersWrap.addEventListener('click', function(e) {
var btn = e.target.closest('.cat1__filter-btn');
if (!btn) { return; }
var cat = btn.getAttribute('data-cat');
if (cat === activeFilter) { return; }
activeFilter = cat;
var allBtns = filtersWrap.querySelectorAll('.cat1__filter-btn');
for (var i = 0; i < allBtns.length; i++) {
allBtns[i].classList.remove('cat1__filter-btn--active');
}
btn.classList.add('cat1__filter-btn--active');
filterProducts();
});
/* Search */
searchInput.addEventListener('input', filterProducts);
/* Card click (delegation) */
grid.addEventListener('click', function(e) {
var card = e.target.closest('.cat1__card');
if (!card) { return; }
var id = parseInt(card.getAttribute('data-id'), 10);
openPopup(id);
});
/* Close popup */
popupClose.addEventListener('click', closePopup);
overlay.addEventListener('click', closePopup);
/* Close on Escape */
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') { closePopup(); }
});
/* Tab switching */
popupInner.addEventListener('click', function(e) {
var tab = e.target.closest('.cat1__popup-tab');
if (!tab) { return; }
var target = tab.getAttribute('data-tab');
var allTabs = popupInner.querySelectorAll('.cat1__popup-tab');
var allContents = popupInner.querySelectorAll('.cat1__popup-tab-content');
for (var i = 0; i < allTabs.length; i++) {
allTabs[i].classList.remove('cat1__popup-tab--active');
}
for (var j = 0; j < allContents.length; j++) {
allContents[j].classList.remove('cat1__popup-tab-content--active');
}
tab.classList.add('cat1__popup-tab--active');
var contentEl = document.getElementById('cat1-popup-tab-' + target);
if (contentEl) { contentEl.classList.add('cat1__popup-tab-content--active'); }
});
/* Thumbnail click (delegation) */
popupThumbs.addEventListener('click', function(e) {
var thumb = e.target.closest('.cat1__popup-thumb');
if (!thumb) { return; }
var index = parseInt(thumb.getAttribute('data-index'), 10);
if (currentProductId === null) { return; }
var p = null;
for (var i = 0; i < PRODUCTS.length; i++) {
if (PRODUCTS[i].id === currentProductId) { p = PRODUCTS[i]; break; }
}
if (!p || !p.images[index]) { return; }
popupMainImg.src = p.images[index];
var allThumbs = popupThumbs.querySelectorAll('.cat1__popup-thumb');
for (var j = 0; j < allThumbs.length; j++) {
allThumbs[j].classList.remove('cat1__popup-thumb--active');
}
thumb.classList.add('cat1__popup-thumb--active');
});
/* ===== Init ===== */
renderFilters();
filterProducts();
})();