// ===================================== // CONFIG // ===================================== const WEBAPP_URL = "https://script.google.com/macros/s/AKfycbzdNCyVqmKBkRcCFWRNkqRxgo8afUoyRhQh3MQSFYWVPTM78UT8keOVNUF4X460cZdeVQ/exec"; // Max 5 images, 5MB each const MAX_FILES = 5; const MAX_FILE_SIZE_MB = 5; // ===================================== // Convert file to Base64 // ===================================== function fileToBase64(file) { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => { const base64 = reader.result.split(',')[1]; resolve(base64); }; reader.onerror = reject; reader.readAsDataURL(file); }); } // ===================================== // Form Handler // ===================================== document.addEventListener("DOMContentLoaded", function () { const form = document.getElementById("alnfArtistForm"); if (!form) return; form.addEventListener("submit", async (e) => { e.preventDefault(); const submitBtn = form.querySelector("button[type='submit']"); submitBtn.disabled = true; submitBtn.textContent = "Submitting..."; // Collect Fields const fields = { name: form.name.value.trim(), email: form.email.value.trim(), phone: form.phone.value.trim(), address: form.address.value.trim(), howLearned: form.howLearned.value, artDetails: form.artDetails.value.trim(), priceRange: form.priceRange.value.trim(), member: form.member.value, website: form.website.value.trim(), teach: form.teach.value, volunteer: form.volunteer.value, comments: form.comments.value.trim() }; // Validate required fields for (const key in fields) { if (fields[key] === "" && form[key].hasAttribute("required")) { alert("Please complete all required fields."); submitBtn.disabled = false; submitBtn.textContent = "Submit Application"; return; } } // Process Files const fileInput = document.getElementById("alnfImages"); const files = fileInput.files; if (files.length === 0) { alert("Please attach at least one artwork image."); submitBtn.disabled = false; submitBtn.textContent = "Submit Application"; return; } if (files.length > MAX_FILES) { alert("Please upload no more than 5 images."); submitBtn.disabled = false; submitBtn.textContent = "Submit Application"; return; } const filePayload = []; for (let file of files) { if (file.size / 1024 / 1024 > MAX_FILE_SIZE_MB) { alert(`Each file must be under ${MAX_FILE_SIZE_MB}MB.`); submitBtn.disabled = false; submitBtn.textContent = "Submit Application"; return; } const base64 = await fileToBase64(file); filePayload.push({ filename: file.name, mimeType: file.type, content: base64 }); } // Build POST payload const payload = { fields: fields, files: filePayload }; try { const response = await fetch(WEBAPP_URL, { method: "POST", mode: "cors", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }); const result = await response.json(); if (result.success && result.redirect) { window.location.href = result.redirect; return; } alert("Error submitting form: " + (result.error || "Unknown error")); } catch (err) { console.error(err); alert("Network error. Please try again."); } submitBtn.disabled = false; submitBtn.textContent = "Submit Application"; }); });