maksymalnie redukując wydatki
na energię i ogrzewanie

<code>
<div class="lead-popup tabs-wrapper tabs-wrapper-popup">
<div class="popup-action-element">
<div class="tabs-header tabs-header-popup">
<div class="tab tab-popup active czyste-powietrze tab-0" onclick="ToggleTab(this,'tab-0')">
<div class="tab-title">Zadzwoń teraz</div>
</div>
<div class="tab tab-popup moj-prad tab-1" onclick="ToggleTab(this,'tab-1')">
<div class="tab-title">Wybierz termin</div>
</div>
</div>
</div>
<div class="tab-0 tab-content tab-content-popup wycena active popup-action-element">
<form class="lead-popup form-wrapper form-wrapper-popup">
<h2 class="title-popup">Umów się na <span>bezpłatną wycenę</span> teraz</h2>
<div class="cell-popup first-name">
<div class="input-wrapper-popup">
<div id="name-msg" class="error-msg"></div>
<div class="inner-label"><span>IMIĘ</span></div>
<div class="name">
<input type="text" id="name" name="first_name" value="" maxlength="35" onkeypress="ValidatePressedKey(event,'char')">
</div>
</div>
</div>
<div class="cell-popup phone">
<div class="input-wrapper-popup">
<div id="phone-msg" class="error-msg"></div>
<div class="inner-label"><span>TELEFON</span></div>
<div class="phone-number">
<div class="prefix">+48</div>
<input type="text" id="phone" name="phone" value="" maxlength="9" onkeypress="ValidatePressedKey(event,'number')">
</div>
</div>
</div>
<div class="recaptcha-error recaptcha not-visible">
Recaptcha error. Prosimy spróbować później.
</div>
<div class="cell-popup agreement">
<div class="checkbox-wrapper">
<div class="agreement-checkbox">
<input type="checkbox" value="1" id="agreement" name="agreement">
<label for="data-agreement"></label>
</div>
</div>
<div class="label"><div class="short">
Wyrażam zgodę na przetwarzanie moich danych osobowych przez Sunday Polska sp. z o.o., w szczególności na kontakt telefoniczny i mailowy, w celu przedstawienia oferty. <a onclick="ToggleTwoClasses(this,'label','short','more','not-visible')">więcej</a></div><div class="more not-visible">
Wyrażam zgodę na przetwarzanie przez Sunday Polska sp. z o.o. z siedzibą w Warszawie moich danych osobowych podanych w powyższym formularzu, w celu kontaktowania się ze mną telefonicznie lub mailowo i przedstawiania informacji handlowych. Jestem świadomy/a przysługującego mi prawa do wycofania zgody. Szczegóły dotyczące przetwarzania danych osobowych dostępne są w Polityce Prywatności.<br>
Administratorem Państwa danych osobowych jest Sunday Polska sp. z o.o., ul. Domaniewska 37, 02−675 Warszawa. Podane przez Państwa dane będą wykorzystane w celu przedstawienia oferty handlowej na Państwa wniosek.<br>
Więcej o tym, jak przetwarzamy Państwa dane znajdą Państwo w <a href="/polityka-prywatnosci/" target="_blank" rel="noopener">Polityce Prywatności</a> Sunday Polska sp. z o.o. <a onclick="ToggleTwoClasses(this,'label','more','short','not-visible')" class="less">mniej</a></div></div>
<div id="agreement-msg" class="error-msg"></div>
</div>
<div class="btn-wrapper">
<input id="submit-lead" type="submit" name="send_request" value="WYŚLIJ">
</div>
</form>
</div>
<div class="tab-1 tab-content tab-content-popup zamow popup-action-element">
<form class="lead-popup form-wrapper form-wrapper-popup">
<h2 class="title-popup">Zamów <span>bezpłatną wycenę</span></h2>
<div class="cell-popup first-name">
<div class="input-wrapper-popup">
<div id="name-order-msg" class="error-msg"></div>
<div class="inner-label"><span>IMIĘ</span></div>
<div class="name">
<input type="text" id="name-order" name="first_name" value="" maxlength="35" onkeypress="ValidatePressedKey(event,'char')">
</div>
</div>
</div>
<div class="cell-popup phone">
<div class="input-wrapper-popup">
<div id="phone-order-msg" class="error-msg"></div>
<div class="inner-label"><span>TELEFON</span></div>
<div class="phone-number">
<div class="prefix">+48</div>
<input type="text" id="phone-order" name="phone" value="" maxlength="9" onkeypress="ValidatePressedKey(event,'number')">
</div>
</div>
</div>
<div class="cell-popup contact-title">WYBIERZ TERMIN I ZOSTAW NUMER TELEFONU<br>
– ZADZWONIMY DO CIEBIE!
</div>
<div class="cell-popup date">
<div class="input-wrapper-popup">
<div class="inner-label"><span>DATA</span></div>
<div class="date-input-display">
<input id="date-order" type="date" placeholder="Wybierz datę" value="">
<div class="date-text"></div>
</div>
<div id="date-order-msg" class="error-msg"></div>
</div>
</div>
<div class="cell-popup hour"><div class="input-wrapper-popup"><div class="inner-label"><span>GODZINA</span></div>
<select id="hour-order"></select>
<input type="hidden" name="require_contact_hour" value="1"><div id="hour-order-msg" class="error-msg"></div></div>
</div>
<div class="recaptcha-error recaptcha-order not-visible">
Recaptcha error. Prosimy spróbować później.
</div>
<div class="cell-popup agreement">
<div class="checkbox-wrapper">
<div class="agreement-checkbox">
<input type="checkbox" value="1" id="agreement-order" name="agreement">
<label for="data-agreement"></label>
</div>
</div>
<div class="label"><div class="short">
Wyrażam zgodę na przetwarzanie moich danych osobowych przez Sunday Polska sp. z o.o., w szczególności na kontakt telefoniczny i mailowy, w celu przedstawienia oferty. <a onclick="ToggleTwoClasses(this,'label','short','more','not-visible')">więcej</a></div><div class="more not-visible">
Wyrażam zgodę na przetwarzanie przez Sunday Polska sp. z o.o. z siedzibą w Warszawie moich danych osobowych podanych w powyższym formularzu, w celu kontaktowania się ze mną telefonicznie lub mailowo i przedstawiania informacji handlowych. Jestem świadomy/a przysługującego mi prawa do wycofania zgody. Szczegóły dotyczące przetwarzania danych osobowych dostępne są w Polityce Prywatności.<br>
Administratorem Państwa danych osobowych jest Sunday Polska sp. z o.o., ul. Domaniewska 37, 02−675 Warszawa. Podane przez Państwa dane będą wykorzystane w celu przedstawienia oferty handlowej na Państwa wniosek.<br>
Więcej o tym, jak przetwarzamy Państwa dane znajdą Państwo w <a href="/polityka-prywatnosci/" target="_blank" rel="noopener">Polityce Prywatności</a> Sunday Polska sp. z o.o. <a onclick="ToggleTwoClasses(this,'label','more','short','not-visible')" class="less">mniej</a></div></div>
<div id="agreement-order-msg" class="error-msg"></div>
</div>
<div class="btn-wrapper">
<input id="submit-lead-order" type="submit" name="send_request" value="ZAMAWIAM">
<input type="hidden" value="" class="recaptchaResponse" name="recaptcha">
</div>
</form>
</div>
<div class="tab-content tab-content-popup close-popup">
<div class="lead-popup form-wrapper form-wrapper-popup">
<h2 class="title-popup"><span>Dziękujemy!</span></h2>
<h4 class="title subtitle-popup">Prosimy czekać na kontakt</h4>
<div class="btn-wrapper">
<input id="close-popup" type="submit" name="send_request" value="Zamknij">
</div>
</div>
</div>
</div>
<script>
function getFields() {
const name = document.getElementById('name')
const phone = document.getElementById('phone')
const agreement = document.getElementById('agreement')
return [name, phone, agreement]
}
function getOrderFields() {
const name = document.getElementById('name-order')
const phone = document.getElementById('phone-order')
const date = document.getElementById('date-order')
const hour = document.getElementById('hour-order')
const agreement = document.getElementById('agreement-order')
return [name, phone, date, hour, agreement]
}
function getUtmParams() {
const utm_items = {};
utm_parameters.forEach(function(parameter) {
try {
utm_items[parameter] = getCookie(parameter) || '';
} catch(e) {
console.error(e)
}
});
return utm_items
}
async function postLead(name, phoneNumber, date, hour) {
const token = document.querySelector('.recaptchaResponse').value
const {utm_source, utm_medium, utm_campaign, utm_term, utm_content, sp_source, sp_medium, sp_campaign, sp_term, sp_content} = getUtmParams()
console.log(getUtmParams())
const hasDateTime = !!(date && hour)
const url = 'https://v2.virus.sundaypolska.pl/api/leads'
// const url = 'http://localhost/api/leads'
let data = {
name,
phoneNumber,
sourceDetails: hasDateTime ? 'website-popup-date' : 'website-popup',
sourceMethod: 'recaptcha-api',
utmSource : sp_source ? sp_source : utm_source,
utmMedium : sp_medium ? sp_medium : utm_medium,
utmCampaign : sp_campaign ? sp_campaign : utm_campaign,
utmTerm : sp_term ? sp_term : utm_term,
utmContent : sp_content ? sp_content : utm_content,
token,
}
if (hasDateTime) {
const contactDate = new Date(`${date} ${hour}`)
data = {
...data,
contactDate,
}
}
try {
const lead = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data)
})
return await lead.json()
}
catch (e) {
console.log(e)
}
}
function toggleRecaptchaMessage(selector) {
SetCaptchaToken()
document.querySelector(selector).classList.remove('not-visible')
setTimeout(() => {
document.querySelector(selector).classList.add('not-visible')
}, 3000)
}
async function createLead() {
const [name, phone] = getFields()
const lead = await postLead(name.value, phone.value)
if (!lead.success) {
toggleRecaptchaMessage('.recaptcha')
} else {
showCloseMessage()
}
}
async function createLeadOrder() {
const [name, phone, date, hour] = getOrderFields()
const lead = await postLead(name.value, phone.value, date.value, hour.value)
if (!lead.success) {
toggleRecaptchaMessage('.recaptcha-order')
} else {
showCloseMessage()
}
}
function showCloseMessage() {
const actionElement = document.querySelectorAll('.popup-action-element')
actionElement.forEach(element => {
element.style.display = 'none'
})
const closePopup = document.querySelector('.close-popup')
closePopup.style.display = 'block'
const mainWrapper = document.querySelector('.tabs-wrapper-popup')
mainWrapper.style.marginTop = '25px'
mainWrapper.style.marginLeft = '8px'
}
function toggleErrorToField(field, invalid, message) {
const errorField = document.getElementById(`${field}-msg`)
errorField.style.display = invalid ? 'block' : 'none'
errorField.innerText = invalid ? message : ''
errorField.parentElement.style.border = invalid ? "red 1px solid" : ['agreement', 'agreement-order'].includes(field) ? 'none' : "#33058D 1px solid"
}
function fieldValidationFailed(field) {
return ['text', 'select-one', 'date'].includes(field.type) && !field.value || field.type === 'checkbox' && !field.checked
}
function phoneNumberIsInvalid(fields) {
const [, phone] = fields
return phone.value && phone.value.length < 9
}
function addValidationError(field, errors) {
const invalidField = fieldValidationFailed(field)
toggleErrorToField(field.id, invalidField, 'Pole obowiązkowe')
if (invalidField) errors.push(field.id)
}
function validate(fields) {
const errors = []
fields.forEach(field => {
addValidationError(field, errors)
})
if (phoneNumberIsInvalid(fields)) {
const phoneField = fields.length === getFields().length ? 'phone' : 'phone-order'
toggleErrorToField(phoneField, true, 'Numer telefonu jest nieprawidłowy')
errors.push(phoneField)
}
return !errors.length
}
function submitForm(e, order) {
e.preventDefault();
if (order) {
if (!validate(getOrderFields())) return false
createLeadOrder()
} else {
if (!validate(getFields())) return false
createLead()
}
}
async function getAvailableDates() {
const url = 'https://v2.virus.sundaypolska.pl/api/website-calendar/dates?token=zxcvxzcv'; // TOKEN ???
fetch(url)
.then(res => res.json())
.then(data => {
const dates = data.data.dates
const firstDay = dates[0].date
const lastDay = dates[dates.length - 1].date
const datePicker = document.getElementById('date-order')
datePicker.setAttribute('value', firstDay)
datePicker.setAttribute('min', firstDay)
datePicker.setAttribute('max', lastDay)
getAvailableTimes(firstDay)
setDateText(firstDay)
})
}
getAvailableDates()
async function getAvailableTimes(date) {
const select = document.getElementById('hour-order');
select.innerHTML = ""
const url = 'https://v2.virus.sundaypolska.pl/api/website-calendar/dates?token=zxcvxzcv'; // TOKEN ???
fetch(url)
.then(res => res.json())
.then(data => {
const selectedDateTimes = data.data.dates.filter(dateTime => dateTime.date === date)
selectedDateTimes.forEach(time => {
const opt = document.createElement('option');
opt.value = time.time;
opt.innerHTML = time.time;
select.appendChild(opt);
})
})
}
function setDateText(text) {
const dateText = document.querySelector('.date-text')
dateText.innerHTML = text
}
function onDateChange(e) {
const date = e.target.value
getAvailableTimes(date)
setDateText(date)
}
function closePopup() {
const popup = document.getElementById('sgpb-popup-dialog-main-div-wrapper')
const overlay = document.querySelector('.sgpb-theme-2-overlay')
popup.style.display = 'none'
overlay.style.display = 'none'
}
document.getElementById('close-popup').addEventListener('click', closePopup)
document.getElementById('submit-lead').addEventListener('click', submitForm)
document.getElementById('submit-lead-order').addEventListener('click', (e) => submitForm(e, 'order'))
document.getElementById('date-order').addEventListener('change', onDateChange)
</script>
</code>