document.addEventListener("DOMContentLoaded", function () {
    const form = document.querySelector("form");
    const email = document.getElementById("email");
    const confirmEmail = document.getElementById("confirmEmail");

    // Disable copy/paste for confirm email
    confirmEmail.addEventListener("paste", function (e) {
        e.preventDefault();
        alert("Pasting is disabled in the confirm email field.");
    });
    confirmEmail.addEventListener("copy", function (e) {
        e.preventDefault();
    });

    form.addEventListener("submit", function (e) {
        let isValid = true;
        let messages = [];

        const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
        const alphanumericPattern = /^[A-Za-z0-9 ]+$/;
        const alphaOnlyPattern = /^[A-Za-z ]+$/;

        // Validate required fields
        const requiredFields = [
            "firstName", "lastName", "email", "confirmEmail", "phone",
            "street", "city", "state", "zip", "captcha", "acceptPolicy"
        ];

        for (const fieldId of requiredFields) {
            const field = document.getElementById(fieldId);
            if (field) {
                if ((field.type === "checkbox" || field.type === "radio") && !field.checked) {
                    const groupName = field.name || field.id;
                    const anyChecked = document.querySelector(`input[name='${groupName}']:checked`);
                    if (!anyChecked) {
                        messages.push(`Please select a value for ${groupName}.`);
                        isValid = false;
                    }
                } else if (!field.value.trim()) {
                    messages.push(`Please fill out the ${fieldId} field.`);
                    isValid = false;
                }
            }
        }

        // Gender radio group validation
        const genderSelected = document.querySelector("input[name='gender']:checked");
        if (!genderSelected) {
            messages.push("Please select your gender.");
            isValid = false;
        }

        // Email format check
        if (!emailPattern.test(email.value.trim())) {
            messages.push("Email format is invalid.");
            isValid = false;
        }
        if (!emailPattern.test(confirmEmail.value.trim())) {
            messages.push("Confirm Email format is invalid.");
            isValid = false;
        }

        // Email match check
        if (email.value.trim() !== confirmEmail.value.trim()) {
            messages.push("Email and Confirm Email do not match.");
            isValid = false;
        }

        // ZIP code validation
        const zip = document.getElementById("zip");
        if (zip && !/^\d{5}$/.test(zip.value.trim())) {
            messages.push("ZIP code must be exactly 5 digits.");
            isValid = false;
        }

        // Alphanumeric field validation
        const alphanumericFields = ["firstName", "lastName", "street", "apt"];
        for (const id of alphanumericFields) {
            const field = document.getElementById(id);
            if (field && field.value.trim() !== "" && !alphanumericPattern.test(field.value)) {
                messages.push(`${id} must contain only letters, numbers, and spaces.`);
                isValid = false;
            }
        }

        // City must contain only letters and spaces
        const city = document.getElementById("city");
        if (city && city.value.trim() !== "" && !alphaOnlyPattern.test(city.value)) {
            messages.push("City must contain only letters and spaces.");
            isValid = false;
        }

        // Character length validation
        const lengthChecks = [
            { id: "firstName", max: 30 },
            { id: "lastName", max: 30 },
            { id: "email", max: 30 },
            { id: "confirmEmail", max: 30 },
            { id: "street", max: 30 },
            { id: "city", max: 30 },
            { id: "phone", max: 14 },
            { id: "apt", max: 5 },
        ];
        for (const check of lengthChecks) {
            const field = document.getElementById(check.id);
            if (field && field.value.length > check.max) {
                messages.push(`${check.id} must not exceed ${check.max} characters.`);
                isValid = false;
            }
        }

        if (!isValid) {
            e.preventDefault();
            alert(messages.join("\n"));
        }
    });
});
  