1document.addEventListener('DOMContentLoaded',function(){function isValidEmail(email){const re=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;return re.test(String(email).toLowerCase())} 2function displayFormFeedbackMessage(messageType,messageText){let form=document.getElementById('political-ad-form');if(!form)return;let feedbackMessage=form.querySelector('.feedback-message');let feedbackText=feedbackMessage?feedbackMessage.querySelector('.feedback-message-text'):null;if(feedbackMessage&&feedbackText){feedbackText.textContent=messageText;feedbackMessage.classList.remove('success','failed','warning','hidden');feedbackMessage.classList.add(messageType);setTimeout(function(){feedbackMessage.classList.add('hidden')},5000)}} 3const form=document.getElementById('political-ad-form');if(!form){return} 4form.addEventListener('submit',function(e){e.preventDefault();if(typeof pcfData==='undefined'){console.error('Form data object (pcfData) is not defined. This script cannot submit the form.');console.error('This object is usually created by wp_localize_script in WordPress.');displayFormFeedbackMessage('failed','ΣÏάλμα διαμÏÏÏÏÏηÏ. Î ÏÏÏμα δεν μÏοÏεί να Ï Ïοβληθεί.');return} 5const submitBtn=form.querySelector('button[type="submit"]');const messageDiv=form.querySelector('.message');let isValid=!0;const requiredFields=form.querySelectorAll('input[required], textarea[required], input[placeholder*="*"], textarea[placeholder*="*"]');requiredFields.forEach(function(field){const value=field.value.trim();const column=field.closest('.column');const errorMsg=column?column.querySelector('.validation-error'):null;if(value===''){if(errorMsg)errorMsg.classList.remove('hidden');isValid=!1}else{if(errorMsg)errorMsg.classList.add('hidden')}});const emailField=form.querySelector('#email');if(emailField){const emailValue=emailField.value.trim();const emailColumn=emailField.closest('.column');const emailError=emailColumn?emailColumn.querySelector('.validation-error'):null;if(emailError){if(emailValue===''){emailError.textContent='Το Ïεδίο είναι Ï ÏοÏÏεÏÏικÏ';emailError.classList.remove('hidden');isValid=!1}else if(!isValidEmail(emailValue)){emailError.textContent='ΠαÏÎ±ÎºÎ±Î»Ï ÎµÎ¹ÏάγεÏε ÎÎ³ÎºÏ Ïο email';emailError.classList.remove('hidden');isValid=!1}else{emailError.classList.add('hidden')}}else if(emailValue===''||!isValidEmail(emailValue)){isValid=!1}} 6if(!isValid){return!1} 7submitBtn.disabled=!0;submitBtn.textContent='ÎÏοÏÏολή...';if(messageDiv){messageDiv.style.display='none'} 8function submitForm(token){const formData=new URLSearchParams();formData.append('action','submit_contact_form');formData.append('nonce',pcfData.nonce);formData.append('fullname',form.querySelector('#fullname')?form.querySelector('#fullname').value:'');formData.append('email',form.querySelector('#email')?form.querySelector('#email').value:'');formData.append('phone',form.querySelector('#phone')?form.querySelector('#phone').value:'');formData.append('info',form.querySelector('#info')?form.querySelector('#info').value:'');formData.append('message',form.querySelector('#message')?form.querySelector('#message').value:'');formData.append('recaptcha_token',token);fetch(pcfData.ajaxurl,{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded',},body:formData,}).then(response=>{if(!response.ok){throw new Error('Network response was not ok: '+response.statusText)} 9return response.json()}).then(data=>{if(data.success){displayFormFeedbackMessage('success','Το Î¼Î®Î½Ï Î¼Î± ÏÎ±Ï Ï Ïοβλήθηκε με εÏιÏÏ Ïια.');form.reset()}else{console.log('error',data);displayFormFeedbackMessage('failed','ΠαÏÎ¿Ï ÏιάÏÏηκε ÏÏάλμα. ΠαÏÎ±ÎºÎ±Î»Ï Î´Î¿ÎºÎ¹Î¼Î¬ÏÏε ξανά.')}}).catch(error=>{console.log('error',error);displayFormFeedbackMessage('failed','ΠαÏÎ¿Ï ÏιάÏÏηκε ÏÏάλμα. ΠαÏÎ±ÎºÎ±Î»Ï Î´Î¿ÎºÎ¹Î¼Î¬ÏÏε ξανά.')}).finally(()=>{submitBtn.disabled=!1;submitBtn.textContent='Î¥Ïοβολή'})} 10if(typeof grecaptcha!=='undefined'&&grecaptcha.execute&&pcfData.siteKey){grecaptcha.ready(function(){gre
10captcha.execute(pcfData.siteKey,{action:'submit'}).then(function(token){console.log('reCAPTCHA token generated:',token);submitForm(token)}).catch(function(error){console.error('reCAPTCHA error:',error);displayFormFeedbackMessage('failed','reCAPTCHA error. ΠαÏÎ±ÎºÎ±Î»Ï Î´Î¿ÎºÎ¹Î¼Î¬ÏÏε ξανά.');submitBtn.disabled=!1;submitBtn.textContent='Î¥Ïοβολή'})})}else{console.log('reCAPTCHA not configured. Submitting without token.');console.log('grecaptcha defined:',typeof grecaptcha!=='undefined');console.log('siteKey:',pcfData.siteKey);submitForm('')}})})
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.