"use strict"; const form = document.querySelector(".input-wrapper"); const nipError = document.querySelector(".nip-error"); const emailError = document.querySelector(".email-error"); const passwordError = document.querySelector(".password-error"); const confirmPasswordError = document.querySelector(".confirm-error"); const phoneNumberError = document.querySelector(".phone-error"); const zipError = document.querySelector(".postal-error"); const deliveryZipError = document.querySelector(".delivery-zip-error"); const deliveryDataCheckbox = document.querySelector("#checkboxDeliveryData"); const deliveryContainer = document.querySelector(".deliveryContainer"); const passwordValidation = (password) => { return password.length >= 5; }; function phoneNumberValidation(phoneNumber) { // Check if phoneNumber is not empty if (!phoneNumber) { return false; } // Check if '+' is not at the first position if (phoneNumber[0] === "+" && phoneNumber.indexOf("+", 1) !== -1) { return false; } // Remove '-' characters const cleanedPhoneNumber = phoneNumber.replace(/-/g, ""); // Check if cleanedPhoneNumber has at least 9 digits return /^[\d+]{9,}$/.test(cleanedPhoneNumber); } const passwordConfirmationValidation = (password, confirmPassword) => { return password === confirmPassword; }; const emailValidation = (email) => { const emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/; return emailRegex.test(email); }; function zipValidation(zipCode) { // Polish zip code pattern const pattern = /^[0-9]{2}-[0-9]{3}$/; return pattern.test(zipCode); } function deliveryZipCodeValidation(zipCode) { // Polish zip code pattern const pattern = /^[0-9]{2}-[0-9]{3}$/; return pattern.test(zipCode); } function nipValidation(nip) { if (typeof nip !== "string") return false; nip = nip.replace(/[ \-]/gi, ""); let weight = [6, 5, 7, 2, 3, 4, 5, 6, 7]; let sum = 0; let controlNumber = parseInt(nip.substring(9, 10)); let weightCount = weight.length; for (let i = 0; i < weightCount; i++) { sum += parseInt(nip.substr(i, 1)) * weight[i]; } return sum % 11 === controlNumber; } function deliveryFieldsValidation(values) { const deliveryFields = Object.keys(values).filter((key) => key.includes("delivery") ); const filledDeliveryFields = deliveryFields.filter((field) => Boolean(values[field]) ); if ( filledDeliveryFields.length > 0 && filledDeliveryFields.length !== deliveryFields.length ) { return false; } return true; } const postData = async (values) => { const data = { request:"add_new_b2b_temp_user", city: values.city, nip: values.nip, phoneNumber: values.phoneNumber, companyName: values.companyName, street: values.street, postalCode: values.postalCode, email: values.email, password: values.password, deliveryCity: values.deliveryCity, deliveryAddress: values.deliveryAddress, deliveryPostalCode: values.deliveryPostalCode, }; const response = await fetch( "https://www.hurtopony.pl/scripts/endpoints/add_b2b_user.php", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(data), } ); return response.json(); // Return the response as a JSON object }; deliveryDataCheckbox.addEventListener("change", (event) => { if (event.target.checked) { deliveryContainer.classList.add("hidden"); } else { deliveryContainer.classList.remove("hidden"); } }); form.addEventListener("submit", async (event) => { event.preventDefault(); const values = Array.from(event.target.elements).reduce((acc, input) => { if (input.name) { acc[input.name] = input.value; } return acc; }, {}); if (!emailValidation(values.email)) { emailError.textContent = "Wpisz poprawny adres email"; return; } else if (!passwordValidation(values.password)) { passwordError.textContent = "Hasło musi mieć minimum 5 znaków"; return; } else if (!zipValidation(values.postalCode)) { zipError.textContent = "Wpisz poprawny kod pocztowy"; return; } else if ( !passwordConfirmationValidation(values.password, values.confirmPassword) ) { confirmPasswordError.textContent = "Hasła nie są takie same"; return; } else if (!phoneNumberValidation(values.phoneNumber)) { phoneNumberError.textContent = "Wpisz poprawny numer telefonu"; return; } else if (!nipValidation(values.nip)) { nipError.textContent = "Wpisz poprawny NIP"; return; } else if (!deliveryFieldsValidation(values)) { deliveryZipError.textContent = "Uzupełnij wszystkie pola dostawy"; if (!deliveryZipCodeValidation(values.deliveryPostalCode)) { deliveryZipError.textContent = "Wpisz poprawny kod pocztowy"; return; } return; } else { nipError.textContent = ""; emailError.textContent = ""; passwordError.textContent = ""; confirmPasswordError.textContent = ""; phoneNumberError.textContent = ""; zipError.textContent = ""; deliveryZipError.textContent = ""; } const response = await postData(values); if (response.success === 0) { document.querySelector(".error-form-response").classList.remove("hidden"); setTimeout(() => { document.querySelector(".error-form-response").classList.add("hidden"); }, 4000); } else { form.reset(); document.querySelector(".form-response").classList.remove("hidden"); setTimeout(() => { document.querySelector(".form-response").classList.add("hidden"); }, 4000); } });