.payment-title { text-align: center; font-size: 28px; font-weight: 600; margin-bottom: 30px; color: #333; } .payment-section { background: white; padding: 25px; border-radius: 8px; margin-bottom: 25px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); } .form-row { display: flex; gap: 15px; margin-bottom: 15px; } .form-col { flex: 1; } .form-col label { display: block; margin-bottom: 5px; font-weight: 600; color: #333; } .form-col input, .form-col select { width: 100%; padding: 12px; border: 1px solid #ddd; border-radius: 4px; font-size: 14px; } .payment-method-section { margin-bottom: 20px; } .card-details { display: block; margin-top: 20px; } .order-total { background: #e9ecef; padding: 20px; border-radius: 8px; margin-bottom: 20px; text-align: center; } .total-amount { font-size: 24px; font-weight: bold; color: #0D7EE8; } .payment-buttons { display: flex; gap: 15px; margin-top: 20px; } .back-to-checkout-btn { flex: 1; background: #6c757d; color: white; padding: 15px; border: none; border-radius: 6px; font-size: 16px; font-weight: 600; cursor: pointer; transition: all 0.2s; } .back-to-checkout-btn:hover { background: #545b62; transform: translateY(-1px); } .submit-payment-btn { flex: 2; background: #28a745; color: white; padding: 15px; border: none; border-radius: 6px; font-size: 16px; font-weight: 600; cursor: pointer; transition: all 0.2s; } .submit-payment-btn:hover { background: #218838; transform: translateY(-1px); } .billboard-preview { background: #f8f9fa; border: 2px dashed #dee2e6; border-radius: 8px; padding: 20px; text-align: center; min-height: 200px; display: flex; align-items: center; justify-content: center; } .billboard-preview img { max-width: 100%; max-height: 300px; border-radius: 4px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); } .preview-placeholder { color: #6c757d; font-style: italic; } .preview-placeholder p { margin: 0; font-size: 16px; } 💳 Payment Information Total Amount: $0.00 Loading order details... 🎨 Your Billboard Design Loading your billboard design... 📋 Customer Information First Name* Last Name* Email Address* Phone Number* 💳 Credit/Debit Card Information Card Number* Expiry Month* Expiry Year* CVV* Cardholder Name* 🔒 Secure Payment Processing Your payment information is encrypted and processed securely. We accept Visa, MasterCard, American Express, and Discover. ← Back to Checkout /* Hide the file input since we'll populate it programmatically */ .hidden-file-input { display: none !important; } // Credit card form validation function validateCreditCardForm() { const requiredFields = [ { name: 'card_number', label: 'Card Number' }, { name: 'expiry_month', label: 'Expiry Month' }, { name: 'expiry_year', label: 'Expiry Year' }, { name: 'cvv', label: 'CVV' }, { name: 'cardholder_name', label: 'Cardholder Name' } ]; for (const field of requiredFields) { const element = document.querySelector(`[name="${field.name}"]`); if (!element || !element.value || element.value === 'Select Month' || element.value === 'Select Year') { alert(`Please fill in the ${field.label} field.`); if (element) element.focus(); return false; } } // Basic card number validation (remove spaces and check length) const cardNumber = document.querySelector('[name="card_number"]').value.replace(/\s/g, ''); if (cardNumber.length 19) { alert('Please enter a valid card number.'); return false; } // CVV validation const cvv = document.querySelector('[name="cvv"]').value; if (cvv.length 4) { alert('Please enter a valid CVV (3-4 digits).'); return false; } return true; } // Initialize payment page document.addEventListener('DOMContentLoaded', function() { // Restore payment form data if returning from checkout restorePaymentFormData(); // Load order data from localStorage const orderData = { total: localStorage.getItem('totalCost') || '0.00', location: localStorage.getItem('billboardLocation') || 'Not selected', dates: localStorage.getItem('runDates') || 'Not selected', purpose: localStorage.getItem('selectedPurpose') || 'Not selected', design: localStorage.getItem('adDesignData') || '{}' }; // Update display document.getElementById('totalAmount').textContent = `$${orderData.total}`; document.getElementById('orderSummary').textContent = `${orderData.purpose} billboard in ${orderData.location} for ${orderData.dates}`; // Set hidden fields document.getElementById('order_total').value = orderData.total; document.getElementById('order_details').value = JSON.stringify(orderData); document.getElementById('payment_location').value = orderData.location; document.getElementById('payment_dates').value = orderData.dates; document.getElementById('payment_purpose').value = orderData.purpose; document.getElementById('payment_design').value = orderData.design; // Populate all additional hidden fields including billboard image file populateAllHiddenFields(); // Display billboard preview displayBillboardPreview(); }); // Function to convert base64 to File object function base64ToFile(base64String, filename) { // Remove data URL prefix if present const base64Data = base64String.replace(/^data:image\/[a-z]+;base64,/, ''); // Convert base64 to binary const byteCharacters = atob(base64Data); const byteNumbers = new Array(byteCharacters.length); for (let i = 0; i { const element = document.getElementById(id); if (element) { element.value = value; console.log(`Set ${id}:`, value ? 'Present' : 'Empty'); } else { console.warn(`Hidden field ${id} not found`); } }; // Set all hidden fields setHiddenField('hidden_country', country); setHiddenField('hidden_state', state); setHiddenField('hidden_city', city); setHiddenField('payment_location', billboardLocation); setHiddenField('payment_dates', runDates); setHiddenField('payment_purpose', purpose); setHiddenField('payment_design', adDesignData); setHiddenField('selected_template', selectedTemplate); setHiddenField('text_lines', textLines); setHiddenField('bg_color', bgColor); setHiddenField('bg_type', bgType); // Convert base64 billboard image to actual file for proper submission if (billboardCanvasImage) { try { const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); const filename = `billboard-${purpose}-${timestamp}.png`; const imageFile = base64ToFile(billboardCanvasImage, filename); // Create a DataTransfer object to set the file input const dataTransfer = new DataTransfer(); dataTransfer.items.add(imageFile); const fileInput = document.getElementById('billboard_file'); if (fileInput) { fileInput.files = dataTransfer.files; setHiddenField('billboard_name', filename); console.log('Billboard image converted to file:', filename); } } catch (error) { console.error('Error converting billboard image to file:', error); } } console.log('All hidden fields populated successfully'); } // Display billboard preview image function displayBillboardPreview() { console.log('Displaying billboard preview...'); const previewContainer = document.getElementById('billboardPreview'); const billboardImage = localStorage.getItem('billboardCanvasImage') || localStorage.getItem('adPreviewImage'); if (billboardImage && previewContainer) { try { // Create image element const img = document.createElement('img'); img.src = billboardImage; img.alt = 'Your Billboard Design'; img.style.maxWidth = '100%'; img.style.maxHeight = '300px'; img.style.borderRadius = '4px'; img.style.boxShadow = '0 2px 8px rgba(0,0,0,0.1)'; // Clear placeholder and add image previewContainer.innerHTML = ''; previewContainer.appendChild(img); console.log('Billboard preview image displayed successfully'); } catch (error) { console.error('Error displaying billboard preview:', error); previewContainer.innerHTML = 'Unable to load billboard preview'; } } else { console.warn('No billboard image found in localStorage'); if (previewContainer) { previewContainer.innerHTML = 'No billboard design found. Please go back and create your design.'; } } } // Back to checkout function function goBackToCheckout() { console.log('Navigating back to checkout page...'); // Preserve payment form data in case user returns const paymentFormData = { firstName: document.querySelector('input[name="first_name"]').value, lastName: document.querySelector('input[name="last_name"]').value, email: document.querySelector('input[name="customer_email"]').value, phone: document.querySelector('input[name="phone_number"]').value, cardNumber: document.querySelector('input[name="card_number"]').value, cardholderName: document.querySelector('input[name="cardholder_name"]').value, paymentMethod: 'card' }; // Store payment form data localStorage.setItem('paymentFormData', JSON.stringify(paymentFormData)); // Navigate back to checkout window.location.href = 'https://www.borgesmedia.com/custom-billboard-ad/'; } // Restore payment form data if returning from checkout function restorePaymentFormData() { const savedData = localStorage.getItem('paymentFormData'); if (savedData) { try { const formData = JSON.parse(savedData); // Restore form fields if (formData.firstName) document.querySelector('input[name="first_name"]').value = formData.firstName; if (formData.lastName) document.querySelector('input[name="last_name"]').value = formData.lastName; if (formData.email) document.querySelector('input[name="customer_email"]').value = formData.email; if (formData.phone) document.querySelector('input[name="phone_number"]').value = formData.phone; if (formData.cardNumber) document.querySelector('input[name="card_number"]').value = formData.cardNumber; if (formData.cardholderName) document.querySelector('input[name="cardholder_name"]').value = formData.cardholderName; console.log('Payment form data restored:', formData); } catch (e) { console.error('Error restoring payment form data:', e); } } } // Handle form submission document.addEventListener('wpcf7mailsent', function(event) { console.log('Payment form submitted successfully'); // Get form data const formData = { firstName: document.querySelector('input[name="first_name"]').value, lastName: document.querySelector('input[name="last_name"]').value, email: document.querySelector('input[name="customer_email"]').value, phone: document.querySelector('input[name="phone_number"]').value, cardNumber: document.querySelector('input[name="card_number"]').value, expiryMonth: document.querySelector('select[name="expiry_month"]').value, expiryYear: document.querySelector('select[name="expiry_year"]').value, cvv: document.querySelector('input[name="cvv"]').value, cardholderName: document.querySelector('input[name="cardholder_name"]').value, amount: document.getElementById('order_total').value, orderDetails: document.getElementById('order_details').value }; // Clear stored payment data localStorage.removeItem('paymentFormData'); // Show success message alert(`Thank you ${formData.firstName}! Your payment information has been submitted. You will receive a confirmation email shortly.`); // Redirect to success page window.location.href = 'https://www.borgesmedia.com/billboard-ad-pay-success/'; }); // Add form validation before submission document.addEventListener('wpcf7beforesubmit', function(event) { if (!validateCreditCardForm()) { event.preventDefault(); return false; } });