document.addEventListener('DOMContentLoaded', function () { var selectAllCheckbox = document.getElementById('rec_selectAll'); var itemCheckboxes = document.querySelectorAll('.rec_item-checkbox'); var step1Btn = document.getElementById('rec_step1_btn'); if (selectAllCheckbox && itemCheckboxes.length > 0) { selectAllCheckbox.addEventListener('change', function () { var isChecked = this.checked; for (var i = 0; i < itemCheckboxes.length; i++) { var checkbox = itemCheckboxes[i]; checkbox.checked = isChecked; var row = checkbox.closest('tr'); var qtyInput = row ? row.querySelector('.rec_qty-input') : null; if (qtyInput) { qtyInput.disabled = !isChecked; } } }); // Pojedyncze kliknięcia for (var i = 0; i < itemCheckboxes.length; i++) { itemCheckboxes[i].addEventListener('change', function () { var row = this.closest('tr'); var qtyInput = row ? row.querySelector('.rec_qty-input') : null; if (qtyInput) { qtyInput.disabled = !this.checked; } var checkedCount = document.querySelectorAll('.rec_item-checkbox:checked').length; if (checkedCount === itemCheckboxes.length) { selectAllCheckbox.checked = true; selectAllCheckbox.indeterminate = false; } else if (checkedCount === 0) { selectAllCheckbox.checked = false; selectAllCheckbox.indeterminate = false; } else { selectAllCheckbox.checked = false; selectAllCheckbox.indeterminate = true; } }); } // --- BLOKADA WPISYWANIA ZBYT DUŻEJ ILOŚCI Z PALCA --- var qtyInputs = document.querySelectorAll('.rec_qty-input'); for (var i = 0; i < qtyInputs.length; i++) { var input = qtyInputs[i]; input.addEventListener('input', function () { var val = parseInt(this.value, 10); var max = parseInt(this.getAttribute('max'), 10); var min = parseInt(this.getAttribute('min'), 10) || 1; if (this.value === "") return; if (val > max) { this.value = max; } if (val < min) { this.value = min; } }); input.addEventListener('blur', function () { if (this.value === "") { this.value = 1; } }); } } if (step1Btn) { step1Btn.addEventListener('click', function (e) { e.preventDefault(); var checkedCount = document.querySelectorAll('.rec_item-checkbox:checked').length; if (checkedCount === 0) { var noProductsMsg = ''; salert(noProductsMsg ? noProductsMsg : 'Nie wybrano żadnego produktu.', 2500); return; } return sendReclamation(step1Btn); }); } var addProductBtn = document.getElementById('rec_add_product_btn'); var productsContainer = document.getElementById('rec_products_container'); var step1ManualBtn = document.getElementById('rec_step1_manual_btn'); var productIndex = 0; if (addProductBtn && productsContainer) { addProductBtn.addEventListener('click', function (e) { e.preventDefault(); productIndex++; var clonedNode = document.querySelector('#product-template').cloneNode(true); clonedNode.style.display = ""; clonedNode.id = ""; clonedNode.setAttribute('data-index', productIndex); var inputs = clonedNode.querySelectorAll('input'); for (var i = 0; i < inputs.length; i++) { inputs[i].name = inputs[i].name.replace('paramId', productIndex); } productsContainer.appendChild(clonedNode); clonedNode.querySelector('.rec_btn-remove').addEventListener('click', function () { clonedNode.remove(); setProductsNumbers(); }); }); function setProductsNumbers() { var boxes = productsContainer.querySelectorAll('.rec_manual-product-box'); productIndex = boxes.length - 1; boxes.forEach(function (box, index) { box.setAttribute('data-index', index); box.querySelector('input[name*="[name]"]').setAttribute('name', 'manual_products[' + index + '][name]'); box.querySelector('input[name*="[price]"]').setAttribute('name', 'manual_products[' + index + '][price]'); box.querySelector('input[name*="[qty]"]').setAttribute('name', 'manual_products[' + index + '][qty]'); }); } } // Przycisk "Kontynuuj" dla ścieżki ręcznej z walidacją pól if (step1ManualBtn) { step1ManualBtn.addEventListener('click', function (e) { e.preventDefault(); var manualInputs = document.querySelectorAll('#rec_step1_manual .rec_input[required]'); var allValid = true; for (var i = 0; i < manualInputs.length; i++) { var input = manualInputs[i]; if (!input.value.trim()) { input.style.borderColor = '#ef4444'; allValid = false; } else { input.style.borderColor = '#cbd5e1'; } } if (!allValid) { var missingFieldsMsg = ''; salert(missingFieldsMsg ? missingFieldsMsg : 'Uzupełnij wszystkie wymagane pola.', 2500); return; } return sendReclamation(step1ManualBtn); }); } }); function sendReclamation(button) { var form = document.querySelector('#reclamation-form'); if (!form) { return; } button.disabled = true; fetch(form.action, { method: 'POST', body: new FormData(form) }) .then(async function (response) { var text = await response.text(); try { return JSON.parse(text); } catch (e) { throw new Error('Niepoprawny JSON: ' + text); } }) .then(function (response) { var message = (response && response.message) ? response.message : 'Wystąpił błąd. Spróbuj ponownie.'; if (response && response.status === 'success') { salert(message, 2500); } else { salert(message, 2500); button.disabled = false; if (window.grecaptcha) { grecaptcha.reset(); } } }) .catch(function (error) { console.error(error); salert('Wystąpił błąd. Spróbuj ponownie.', 2500); button.disabled = false; if (window.grecaptcha) { grecaptcha.reset(); } }); }