درباره سالن ماساژ در گرمدره
آموزش و خدمات ماساژ ترنج💆♀️🪔🌿
مخصوص بانوان و آقایان
«رهایی از استرس و احساس آرامش و نشاط »
اینستاگرام:
OpenStreetMap contributors' }).addTo(map); L.marker([lat, lon]).addTo(map); }; function updatePagination(totalItems) { if (totalItems > 12) { let totalPages = Math.ceil(totalItems / itemsPerPage); document.querySelector('.current-page').innerText = currentPage; document.querySelector('.total-pages').innerText = totalPages; } else { return; } }; function filterProducts() { let selectedCategory = document.getElementById('category-filter').value; let filteredProducts = selectedCategory === 'all' ? products : products.filter(p => p.CategoryId == selectedCategory); currentPage = 1; updatePagination(filteredProducts.length); renderProducts(filteredProducts.slice(0, itemsPerPage)); }; function renderProducts(products) { let productsList = document.getElementById('products-list'); productsList.innerHTML = ''; products.forEach(item => { let productCardWithDiscount = `
"); document.getElementById('modal-description-body').innerHTML = sanitizeHtml(regexToLinkJS(descriptionBody)); const priceBox = document.querySelector('.price-box'); if (product.Amount) { const priceElement = document.getElementById('modal-price'); priceElement.innerText = `${new Intl.NumberFormat('fa-IR').format(product.Amount - product.Amount * product.DiscountPercent / 100)} تومان`; priceBox.style.display = 'flex'; } else { priceBox.style.display = 'none'; } document.getElementById('main-image').src = `https://storage.inoti.com/s1/get/${product.UserId * 2}/EbcProduct/${product.MainImage}`; document.getElementById('modal-image1').src = `https://storage.inoti.com/s1/get/${product.UserId * 2}/EbcProduct/${product.MainImage}`; const imageElements = [ { id: 'modal-image2', src: product.Image2 }, { id: 'modal-image3', src: product.Image3 }, { id: 'modal-image4', src: product.Image4 }, { id: 'modal-image5', src: product.Image5 } ]; imageElements.forEach(img => { const imgElement = document.getElementById(img.id); if (img.src) { const imgUrl = `https://storage.inoti.com/s1/get/${product.UserId * 2}/EbcProduct/${img.src}`; fetch(imgUrl, { method: 'HEAD' }) .then(response => { if (response.ok) { imgElement.src = imgUrl; imgElement.style.display = 'block'; } else { imgElement.style.display = 'none'; } }) .catch(() => { imgElement.style.display = 'none'; }); } else { imgElement.style.display = 'none'; } }); detailModal.classList.remove('hidden'); detailModal.classList.add('visible'); } }); }); }; function changePage(direction) { let selectedCategory = document.getElementById('category-filter').value; let filteredProducts = selectedCategory === 'all' ? products : products.filter(p => p.Id == selectedCategory); let totalPages = Math.ceil(filteredProducts.length / itemsPerPage); if (direction === 'prev' && currentPage > 1) { currentPage--; } else if (direction === 'next' && currentPage < totalPages) { currentPage++; } let start = (currentPage - 1) * itemsPerPage; let end = start + itemsPerPage; renderProducts(filteredProducts.slice(start, end)); updatePagination(filteredProducts.length); }; function sanitizeHtml(html) { const parser = new DOMParser(); const doc = parser.parseFromString(html, 'text/html'); return doc.body.innerHTML; } function closeDetailModal() { detailModal.classList.remove('visible'); detailModal.classList.add('hidden'); }; document.addEventListener('DOMContentLoaded', function () { filterProducts(); document.querySelector('#card-modal-mask').addEventListener('click', (e) => { if (e.target === detailModal) { closeDetailModal(); } }); tabs.forEach(tab => { tab.addEventListener('click', () => { tabs.forEach(t => t.classList.remove('active-tab')); tab.classList.add('active-tab'); }); }); document.querySelectorAll('.input').forEach(input => { input.addEventListener('focus', () => input.classList.remove('error-style')); }); window.addEventListener('scroll', () => { let topTab = document.getElementById('topTab'); let screenWidth = window.innerWidth; let scrollTop = window.pageYOffset; let showFixedTab = screenWidth <= 768 ? scrollTop > 300 : scrollTop > 600; topTab.classList.toggle('fix-tab-top', showFixedTab); }); }); let upImage = document.querySelector('.up-image'); let albumImages = document.querySelectorAll('.album-img'); let otherImages = document.querySelector('.other-images'); let rightArrow = document.querySelector('.right-arrow'); let leftArrow = document.querySelector('.left-arrow'); let currentActiveImage = null; albumImages.forEach(img => { img.addEventListener('click', () => { upImage.src = img.src; if (currentActiveImage) { currentActiveImage.classList.remove('active'); } img.classList.add('active'); currentActiveImage = img; }); }); rightArrow.addEventListener('click', () => { otherImages.scrollBy({ left: 200, behavior: 'smooth' }); }); leftArrow.addEventListener('click', () => { otherImages.scrollBy({ left: -200, behavior: 'smooth' }); }); document.addEventListener('DOMContentLoaded', function () { const form = document.getElementById('smsForm'); const form1 = document.getElementById('form1'); const reCAPTCHASiteKey = '6LeJDysqAAAAAKfVRzx7qdKwaqs_efmnL9kxHQPW'; const mobileRegex = /^09\d{9}$/; function validateForm(inputs, submitBtn, reCaptchaResponseField, form) { let isValid = true; inputs.forEach(input => { const value = input.value.trim(); if (!value) { input.classList.add('error-style'); input.placeholder = `لطفا ${input.placeholder} را وارد کنید`; isValid = false; } else { input.classList.remove('error-style'); if (input.name === 'Contact.Mobile' || input.name === 'ProductContact.mobile') { if (!mobileRegex.test(value)) { input.classList.add('error-style'); input.value = ''; input.placeholder = '* شماره موبایل وارد شده صحیح نیست'; isValid = false; } } } }); if (isValid) { submitBtn.disabled = true; grecaptcha.ready(function () { grecaptcha.execute(reCAPTCHASiteKey, { action: 'submit' }).then(function (token) { reCaptchaResponseField.value = token; form.submit(); }).catch(function (error) { console.error('خطا در اجرای reCAPTCHA:', error); submitBtn.disabled = false; }); }); } return isValid; } form.addEventListener('submit', function (e) { e.preventDefault(); const inputs = form.querySelectorAll('.input'); const submitBtn = form.querySelector('button[type="submit"]'); const reCaptchaResponseField = document.getElementById('g-recaptcha-response'); validateForm(inputs, submitBtn, reCaptchaResponseField, form); }); form1.addEventListener('submit', function (e) { e.preventDefault(); const inputs = form1.querySelectorAll('.input'); const submitBtn1 = form1.querySelector('button[type="submit"]'); const reCaptchaResponseField1 = document.getElementById('g-recaptcha-response1'); validateForm(inputs, submitBtn1, reCaptchaResponseField1, form1); }); }); function checkNumber(e) { const isNumeric = /^-?\d*\.?\d*$/.test(e.value); if (!isNumeric) { e.value = ''; } } function regexToLinkJS(txt) { const regex = /(?