{"id":7832,"date":"2025-01-07T18:07:08","date_gmt":"2025-01-07T17:07:08","guid":{"rendered":"https:\/\/putz24.ch\/configurador-de-precios-para-limpieza-de-cristales\/"},"modified":"2025-07-23T18:42:22","modified_gmt":"2025-07-23T16:42:22","slug":"price-configurator-for-window-cleaning","status":"publish","type":"page","link":"https:\/\/www.putz24.ch\/es\/price-configurator-for-window-cleaning\/","title":{"rendered":"Price configurator for window cleaning"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"7832\" class=\"elementor elementor-7832 elementor-6601\">\n\t\t\t\t\t\t<section class=\"pix-elementor-divider elementor-section elementor-top-section elementor-element elementor-element-f59348b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f59348b\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-587d370\" data-id=\"587d370\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b8bf48c elementor-widget elementor-widget-pix-highlighted-text\" data-id=\"b8bf48c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"pix-highlighted-text.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"el-b8bf48c\" class=\"pix-highlighted-element text-center \"><h2 class=\"pix-highlighted-items \" style=\"\" data-anim-type=\"\" data-anim-delay=\"\"><span id=\"el-b8bf48c-0\" class=\"pix-highlight-bg   elementor-repeater-item-a65e3b0 el-b8bf48c-0 animate-in\" data-anim-type=\"highlight-grow\" data-anim-delay=\"200\"><span   class=\"pix-highlighted-text pix-highlight-item font-weight-normal  font-weight-bold heading-font text-heading-default\">Book<\/span><\/span><span id=\"el-b8bf48c-1\"  class=\" elementor-repeater-item-3d6442b\"><span   class=\"pix-highlighted-text  pix-highlight-item font-weight-normal  heading-font text-heading-default\"> Window Cleaning<\/span><\/span><\/h2><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7f81533 elementor-widget elementor-widget-pix-text\" data-id=\"7f81533\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"pix-text.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"pix-el-text w-100 text-center \" ><p class=\"text-20 resp-option text-dark-opacity-5 text-center \" >Book your window cleaning today with just one click \u2013 fast, binding, and without any waiting time. Once completed, you will immediately receive your order confirmation by email.<\/p><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-749edf9 elementor-widget elementor-widget-pix-alert\" data-id=\"749edf9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"pix-alert.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"alert position-relative d-flex flex-column flex-sm-row justify-content-between align-items-center alert-warning   rounded-lg font-weight-bold shadow\" role=\"alert\" ><div class=\"pix-alert-title mr-2 flex-grow-1 mb-2 mb-sm-0 order-2\">Please note: This configurator is currently available in German only.<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"pix-divider  position-relative pix-bottom-divider elementor-element elementor-element-f59348b\" data-style=\"style-8\" ><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"100%\" height=\"300px\" viewBox=\"0 0 1200 366\" preserveAspectRatio=\"none\"><g class=\"animate-in\" data-anim-type=\"fade-in-up\" data-anim-delay=\"300\"><polygon fill=\"url(#divider-pix-accordion-670910-bottom-overlay-layer-3)\" points=\"0 240 1200 0 1200 366 0 366\" \/><\/g><polygon fill=\"#FFFFFF00\"  points=\"0 300 1200 60 1200 366 0 366\" \/><polygon fill=\"#ffffff\" points=\"0 360 1200 120 1200 366 0 366\"\/><defs><linearGradient id=\"divider-pix-accordion-670910-bottom-overlay-layer-3\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\"   stop-color=\"#00000014\"\/><stop offset=\"100%\"   stop-color=\"#FFFFFF03\"\/><\/linearGradient><\/defs><\/svg><\/div>\t\t<section class=\"pix-elementor-divider elementor-section elementor-top-section elementor-element elementor-element-a15ab3f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a15ab3f\" data-element_type=\"section\" data-e-type=\"section\" id=\"pix_section_comparison_table\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c42571f\" data-id=\"c42571f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9d2e07b elementor-widget elementor-widget-html\" data-id=\"9d2e07b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"de\">\r\n    <style>\r\na.back_to_top {\r\n    display: none !important;\r\n}\r\n<\/style>\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>Fensterreinigung Konfigurator<\/title>\r\n    <link rel=\"stylesheet\" href=\"https:\/\/putz24.ch\/webhooks\/bitrix\/styles_fensterreinigungen.css\">\r\n<\/head>\r\n<body>\r\n    <!-- Externer Container f\u00fcr den gesamten Konfigurator -->\r\n    <div class=\"main-container\">\r\n        <div class=\"konfigurator-container\">\r\n            <!-- Linke Seite: Eingaben -->\r\n            <div class=\"input-section\">\r\n                <form id=\"window-cleaning-form\" action=\"https:\/\/putz24.ch\/webhooks\/bitrix\/create_fensterreinigung.php\" method=\"POST\" onsubmit=\"return handleSubmit(event)\">\r\n                    <!-- Versteckte Felder -->\r\n<input type=\"hidden\" id=\"total-amount-input\" name=\"total-amount\">\r\n<input type=\"hidden\" id=\"subtotal-input\" name=\"subtotal\">\r\n<input type=\"hidden\" id=\"tax-input\" name=\"tax\">\r\n<input type=\"hidden\" id=\"total-hours-input\" name=\"total-hours\">\r\n<input type=\"hidden\" id=\"total-minutes-input\" name=\"total-minutes\">\r\n<input type=\"hidden\" id=\"height-surcharge-input\" name=\"height-surcharge\">\r\n<input type=\"hidden\" id=\"base-time-per-window-input\" name=\"base-time-per-window\">\r\n\r\n                    <!-- Liegenschaftsdetails -->\r\n                    <div class=\"input-container\">\r\n                        <h2>Liegenschaftsdetails<\/h2>\r\n                        <label for=\"building-type\">Art des Geb\u00e4udes:<\/label>\r\n                        <select id=\"building-type\" name=\"building-type\" required>\r\n                            <option value=\"wohnung\">Wohnung<\/option>\r\n                            <option value=\"b\u00fcrogeb\u00e4ude\">B\u00fcrogeb\u00e4ude<\/option>\r\n                            <option value=\"wohnblock\">Wohnblock<\/option>\r\n                            <option value=\"mischgebaeude\">Mischgeb\u00e4ude<\/option>\r\n                            <option value=\"haus\">Haus<\/option>\r\n                            <option value=\"mehrfamilienhaus\">Mehrfamilienhaus<\/option>\r\n                        <\/select>\r\n                        <label for=\"property-address\">Adresse der Liegenschaft:<\/label>\r\n                        <input type=\"text\" id=\"property-address\" name=\"property-address\" required>\r\n\r\n                        <div class=\"konfigurator-row\">\r\n                            <!-- PLZ -->\r\n                            <div class=\"konfigurator-column kon-column-3\">\r\n                                <label for=\"property-zip\">PLZ:<\/label>\r\n                                <input type=\"text\" id=\"property-zip\" name=\"property-zip\" required>\r\n                            <\/div>\r\n                        \r\n                            <!-- Ort -->\r\n                            <div class=\"konfigurator-column kon-column-9\">\r\n                                <label for=\"property-city\">Ort:<\/label>\r\n                                <input type=\"text\" id=\"property-city\" name=\"property-city\" required>\r\n                            <\/div>\r\n                        <\/div>\r\n                        <label for=\"erste_reinigung\">Wunschdatum der Fensterreinigung*<\/label>\r\n                        <input type=\"date\" id=\"erste_reinigung\" name=\"erste_reinigung\" required>\r\n                        \r\n                    <\/div>\r\n                    <!-- Details der Fensterreinigung -->\r\n                    <div class=\"input-container\">\r\n                        <h2>Details der Fensterreinigung<\/h2>\r\n                        <label for=\"window-count\">Anzahl der Fenster:<\/label>\r\n                        <input type=\"number\" id=\"window-count\" name=\"window-count\" min=\"1\" required>\r\n\r\n                        <label for=\"window-type\">Fensterart:<\/label>\r\n                        <select id=\"window-type\" name=\"window-type\" required>\r\n                            <option value=\"standard\">Standardfenster<\/option>\r\n                            <option value=\"schiebefenster\">Schiebefenster<\/option>\r\n                            <option value=\"glasfl\u00e4chen\">Gro\u00dfe Glasfl\u00e4chen<\/option>\r\n                        <\/select>\r\n\r\n                        <label for=\"cleaning-interval\">Reinigungsintervall:<\/label>\r\n                        <select id=\"cleaning-interval\" name=\"cleaning-interval\" required>\r\n                            <option value=\"einmalig\">Einmalig<\/option>\r\n                            <option value=\"monatlich\">Monatlich<\/option>\r\n                            <option value=\"viertelj\u00e4hrlich\">Viertelj\u00e4hrlich<\/option>\r\n                            <option value=\"halbj\u00e4hrlich\">Halbj\u00e4hrlich<\/option>\r\n                        <\/select>\r\n\r\n                        <label for=\"window-height\">H\u00f6he der Fenster:<\/label>\r\n                        <select id=\"window-height\" name=\"window-height\" required>\r\n                            <option value=\"ohne-leiter\">Erreichbar ohne Leiter<\/option>\r\n                            <option value=\"bis-2m\">Bis zu 2 Meter (+10% Aufschlag)<\/option>\r\n                            <option value=\"\u00fcber-2m\">\u00dcber 2 Meter (nur mit Teleskopstangen, +20% Aufschlag)<\/option>\r\n                        <\/select>\r\n                    <\/div>\r\n                    <!-- Zusatzdienstleistungen -->\r\n                    <div class=\"input-container\">\r\n                        <h2>Zusatzdienstleistungen<\/h2>\r\n                        <div class=\"checkbox-container\">\r\n                            <input type=\"checkbox\" id=\"with-shutters\" name=\"with-shutters\">\r\n                            <label for=\"with-shutters\">Mit Rolll\u00e4den (30 Minuten pro Fenster)<\/label>\r\n                        <\/div>\r\n                        <div class=\"checkbox-container\">\r\n                            <input type=\"checkbox\" id=\"frame-cleaning\" name=\"frame-cleaning\">\r\n                            <label for=\"frame-cleaning\">Fensterrahmen reinigen<\/label>\r\n                        <\/div>\r\n                        <div class=\"checkbox-container\">\r\n                            <input type=\"checkbox\" id=\"ledge-cleaning\" name=\"ledge-cleaning\">\r\n                            <label for=\"ledge-cleaning\">Fensterb\u00e4nke reinigen<\/label>\r\n                        <\/div>\r\n                    <\/div>\r\n                    \r\n                    <!-- Kontaktdaten -->\r\n                    <div class=\"input-container\">\r\n                        <h2>Kontaktdaten<\/h2>\r\n                        <label for=\"contact-name\">Name der Kontaktperson vor Ort:<\/label>\r\n                        <input type=\"text\" id=\"contact-name\" name=\"contact-name\" required>\r\n                        <label for=\"contact-phone\">Telefonnummer der Kontaktperson:<\/label>\r\n                        <input type=\"tel\" id=\"contact-phone\" name=\"contact-phone\" required>\r\n                        <label for=\"contact-email\">E-Mail-Adresse der Kontaktperson:<\/label>\r\n                        <input type=\"email\" id=\"contact-email\" name=\"contact-email\" required>\r\n                    <\/div>\r\n                    <!-- Allgemeine Informationen -->\r\n                    <div class=\"input-container\">\r\n                        <h2>Allgemeine Informationen<\/h2>\r\n                        <label for=\"salutation\">Anrede:<\/label>\r\n                        <select id=\"salutation\" name=\"salutation\" required>\r\n                            <option value=\"herr\">Herr<\/option>\r\n                            <option value=\"frau\">Frau<\/option>\r\n                            <option value=\"firma\">Firma<\/option>\r\n                        <\/select>\r\n                        <label for=\"customer-name\">Name \/ Firmenname:<\/label>\r\n                        <input type=\"text\" id=\"customer-name\" name=\"customer-name\" required>\r\n                        <label for=\"customer-phone\">Telefonnummer:<\/label>\r\n                        <input type=\"tel\" id=\"customer-phone\" name=\"customer-phone\" required>\r\n                        <label for=\"customer-email\">E-Mail-Adresse:<\/label>\r\n                        <input type=\"email\" id=\"customer-email\" name=\"customer-email\" required>\r\n                        <label for=\"customer-address\">Adresse:<\/label>\r\n                        <input type=\"text\" id=\"customer-address\" name=\"customer-address\" required>\r\n                        <div class=\"konfigurator-row\">\r\n                            <!-- PLZ -->\r\n                            <div class=\"konfigurator-column kon-column-3\">\r\n                                <label for=\"customer-zip\">PLZ:<\/label>\r\n                                <input type=\"text\" id=\"customer-zip\" name=\"customer-zip\" required>\r\n                            <\/div>\r\n                        \r\n                            <!-- Ort -->\r\n                            <div class=\"konfigurator-column kon-column-9\">\r\n                                <label for=\"customer-city\">Ort:<\/label>\r\n                                <input type=\"text\" id=\"customer-city\" name=\"customer-city\" required>\r\n                            <\/div>\r\n                        <\/div>\r\n                        \r\n                        <label for=\"additional-notes\">Zus\u00e4tzliche Bemerkungen:<\/label>\r\n                        <textarea id=\"additional-notes\" name=\"additional-notes\" rows=\"4\"><\/textarea>\r\n                    <\/div>\r\n\r\n<!-- Checkbox f\u00fcr die AGB -->\r\n<div class=\"input-container\">\r\n    <div class=\"checkbox-container\">\r\n        <input type=\"checkbox\" id=\"agb-checkbox\" required>\r\n        <label for=\"agb-checkbox\">\r\n            Ich habe die <a href=\"https:\/\/putz24.ch\/agb\/fensterreinigung\/\" target=\"_blank\">Nutzungsbedingungen<\/a> und die <a href=\"https:\/\/putz24.ch\/datenschutzrichtlinie\/\" target=\"_blank\">AGB<\/a> gelesen und akzeptiere diese.\r\n        <\/label>\r\n    <\/div>\r\n<!-- Angebot-Button -->\r\n<button type=\"button\" id=\"angebot-button\" class=\"agb-button\">\r\n    Vertragsabschluss\r\n<\/button>\r\n\r\n\r\n<\/div>\r\n                <\/form>\r\n            <\/div>\r\n<!-- Rechte Seite: Kostenzusammenstellung -->\r\n<div class=\"input-container summary-section\">\r\n    <h2>Kostenzusammenstellung<\/h2>\r\n    <div id=\"summary-details\">\r\n        <p><strong>Gesamte Fensteranzahl:<\/strong> <span id=\"summary-window-count\">0<\/span><\/p>\r\n        <p><strong>Basiszeit pro Fenster:<\/strong> <span id=\"summary-base-time\">0 Minuten<\/span><\/p>\r\n        <p><strong>Zusatzdienstleistungen:<\/strong> <span id=\"summary-services\">Keine<\/span><\/p>\r\n        <p><strong>H\u00f6henaufschlag:<\/strong> <span id=\"summary-height\">0%<\/span><\/p>\r\n        <p><strong>Gesamte Reinigungszeit:<\/strong><\/p>\r\n        <div class=\"time-summary\">\r\n            <p id=\"summary-total-time-minutes\">0 Minuten<\/p>\r\n            <p id=\"summary-total-time-hours\">0 Stunden<\/p>\r\n        <div class=\"cost-breakdown\">\r\n            <p><strong>Subtotal:<\/strong> <span id=\"subtotal\">CHF 0.00<\/span><\/p>\r\n            <p><strong>Exkl. MWST (8.1%):<\/strong> <span id=\"tax\">CHF 0.00<\/span><\/p>\r\n            <p><strong>Gesamtbetrag:<\/strong> <span id=\"total-amount\">CHF 0.00<\/span><\/p>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n\r\n\r\n\r\n        <\/div>\r\n\r\n<!-- Sticky Footer -->\r\n<div id=\"fensterreinigung-sticky-footer\" class=\"fensterreinigung-sticky-footer\">\r\n    <div class=\"fensterreinigung-footer-header\" onclick=\"toggleStickyFooter()\">\r\n        <div class=\"footer-left\">\r\n            <span class=\"total-label\">TOTAL<\/span>\r\n            <span class=\"total-subtext\">(pro Reinigung)<\/span>\r\n        <\/div>\r\n        <div class=\"footer-center\">\r\n            <div class=\"swipe-handle\"><\/div>\r\n        <\/div>\r\n        <div class=\"footer-right\">\r\n            <span id=\"footer-summary-total\" class=\"total-amount\">CHF 0.00<\/span>\r\n        <\/div>\r\n    <\/div>\r\n    <div id=\"fensterreinigung-footer-content\" class=\"fensterreinigung-footer-content\">\r\n        <!-- Der Inhalt bleibt versteckt, bis die Klasse \"show\" hinzugef\u00fcgt wird -->\r\n        <p>Gesamte Fensteranzahl: <span id=\"footer-summary-window-count\">0<\/span><\/p>\r\n        <p>Basiszeit pro Fenster: <span id=\"footer-summary-base-time\">0 Minuten<\/span><\/p>\r\n        <p>Zusatzdienstleistungen: <span id=\"footer-summary-services\">Keine<\/span><\/p>\r\n        <p>H\u00f6henaufschlag: <span id=\"footer-summary-height\">0%<\/span><\/p>\r\n        <p>Gesamte Reinigungszeit:<\/p>\r\n        <div class=\"time-summary\">\r\n            <p id=\"footer-summary-total-time-minutes\">0 Minuten<\/p>\r\n            <p id=\"footer-summary-total-time-hours\">0 Stunden<\/p>\r\n        <hr>\r\n        <p>Subtotal: <span id=\"footer-summary-subtotal\">CHF 0.00<\/span><\/p>\r\n        <p>Exkl. MWST (8.1%): <span id=\"footer-summary-tax\">CHF 0.00<\/span><\/p>\r\n    <\/div>\r\n<\/div>\r\n    <\/div>\r\n\r\n<!-- Erfolgsmeldung Popup -->\r\n<div id=\"konfigurator-success-modal\" class=\"konfigurator-modal\">\r\n<div class=\"konfigurator-modal-content\">\r\n<h5>Vielen Dank!<\/h5>\r\n<p>Ihre Anfrage wurde erfolgreich gesendet. Wir melden uns in K\u00fcrze bei Ihnen.<\/p>\r\n<button onclick=\"closeKonfiguratorSuccessModal()\">Schlie\u00dfen<\/button>\r\n<\/div>\r\n<\/div>\r\n    <script>\r\n\r\n            \/\/ Funktion, um das heutige Datum plus 10 Tage zu berechnen und als Mindestwert zu setzen\r\n    function setMinDate() {\r\n        const dateInput = document.getElementById('erste_reinigung');\r\n        const today = new Date();\r\n        today.setDate(today.getDate() + 10); \/\/ 10 Tage in der Zukunft\r\n        const yyyy = today.getFullYear();\r\n        const mm = String(today.getMonth() + 1).padStart(2, '0'); \/\/ Monate sind 0-basiert\r\n        const dd = String(today.getDate()).padStart(2, '0');\r\n\r\n        dateInput.min = `${yyyy}-${mm}-${dd}`; \/\/ Setze das Mindestdatum im Format YYYY-MM-DD\r\n    }\r\n\r\n    \/\/ Setzt das Mindestdatum beim Laden der Seite\r\n    window.onload = setMinDate;\r\n        \/\/ Berechnet die Kosten und aktualisiert die Felder\r\n        function calculateOffer() {\r\nconst windowCount = parseInt(document.getElementById('window-count').value) || 0;\r\nconst windowType = document.getElementById('window-type').value;\r\nconst height = document.getElementById('window-height').value;\r\nconst withShutters = document.getElementById('with-shutters').checked;\r\nconst frameCleaning = document.getElementById('frame-cleaning').checked;\r\nconst ledgeCleaning = document.getElementById('ledge-cleaning').checked;\r\n\r\nconst baseTimePerWindow = 15; \/\/ Minuten f\u00fcr Standardfenster\r\nconst shutterExtraTime = withShutters ? 15 : 0; \/\/ Rolll\u00e4den-Zeit\r\nconst frameCleaningTime = frameCleaning ? 5 : 0; \/\/ Minuten f\u00fcr Rahmenreinigung\r\nconst ledgeCleaningTime = ledgeCleaning ? 5 : 0; \/\/ Minuten f\u00fcr Fensterb\u00e4nke\r\n\r\n\/\/ H\u00f6henaufschlag berechnen\r\nconst heightMultiplier = height === 'bis-2m' ? 1.1 : height === '\u00fcber-2m' ? 1.2 : 1.0;\r\nconst totalTimePerWindow = (baseTimePerWindow + shutterExtraTime + frameCleaningTime + ledgeCleaningTime) * heightMultiplier;\r\n\r\n\/\/ Gesamte Reinigungszeit berechnen\r\nconst totalTime = totalTimePerWindow * windowCount; \/\/ Zeit in Minuten\r\nconst totalHoursDecimal = totalTime \/ 60; \/\/ Dezimalstunden\r\nconst totalMinutes = Math.round(totalHoursDecimal * 60); \/\/ Minuten berechnet aus Stunden\r\n\r\n\/\/ Berechnung der Kosten\r\nconst hourlyRate = 54; \/\/ CHF 54\/Stunde\r\nconst subtotal = totalHoursDecimal * hourlyRate; \/\/ Gesamtkosten ohne Steuer\r\nconst taxRate = 0.081; \/\/ 8.1% MWST\r\nconst tax = subtotal * taxRate;\r\nconst totalAmount = subtotal + tax;\r\n\r\n\/\/ Versteckte Felder aktualisieren\r\ndocument.getElementById('total-amount-input').value = totalAmount.toFixed(2);\r\ndocument.getElementById('subtotal-input').value = subtotal.toFixed(2);\r\ndocument.getElementById('tax-input').value = tax.toFixed(2);\r\ndocument.getElementById('total-hours-input').value = totalHoursDecimal.toFixed(2); \/\/ Dezimalstunden\r\ndocument.getElementById('total-minutes-input').value = totalMinutes; \/\/ Minuten aus Stunden berechnet\r\ndocument.getElementById('height-surcharge-input').value = ((heightMultiplier - 1) * 100).toFixed(2);\r\ndocument.getElementById('base-time-per-window-input').value = totalTimePerWindow.toFixed(2); \/\/ Basiszeit pro Fenster\r\n\r\n\/\/ Zusammenfassung aktualisieren\r\ndocument.getElementById('summary-window-count').textContent = windowCount;\r\ndocument.getElementById('summary-base-time').textContent = `${totalTimePerWindow.toFixed(2)} Minuten`;\r\ndocument.getElementById('summary-height').textContent = `${((heightMultiplier - 1) * 100).toFixed(0)}%`;\r\ndocument.getElementById('summary-total-time-minutes').textContent = `${totalTime.toFixed(2)} Minuten`;\r\ndocument.getElementById('summary-total-time-hours').textContent = `${totalHoursDecimal.toFixed(2)} Stunden`; \/\/ Dezimalstunden\r\ndocument.getElementById('subtotal').textContent = `CHF ${subtotal.toFixed(2)}`;\r\ndocument.getElementById('tax').textContent = `CHF ${tax.toFixed(2)}`;\r\ndocument.getElementById('total-amount').textContent = `CHF ${totalAmount.toFixed(2)}`;\r\n\r\n\/\/ Sticky Footer aktualisieren\r\nupdateStickyFooter(windowCount, totalTimePerWindow, heightMultiplier, totalTime, totalHoursDecimal, subtotal, tax, totalAmount);\r\n}\r\n\/\/ Aktualisiert die Sticky-Footer-Felder\r\nfunction updateStickyFooter(windowCount, totalTimePerWindow, heightMultiplier, totalTime, totalHoursDecimal, subtotal, tax, totalAmount) {\r\ndocument.getElementById('footer-summary-window-count').textContent = windowCount;\r\ndocument.getElementById('footer-summary-base-time').textContent = `${totalTimePerWindow.toFixed(2)} Minuten`;\r\ndocument.getElementById('footer-summary-height').textContent = `${((heightMultiplier - 1) * 100).toFixed(0)}%`;\r\ndocument.getElementById('footer-summary-total-time-minutes').textContent = `${totalTime.toFixed(2)} Minuten`;\r\ndocument.getElementById('footer-summary-total-time-hours').textContent = `${totalHoursDecimal.toFixed(2)} Stunden`; \/\/ Dezimalstunden\r\ndocument.getElementById('footer-summary-subtotal').textContent = `CHF ${subtotal.toFixed(2)}`;\r\ndocument.getElementById('footer-summary-tax').textContent = `CHF ${tax.toFixed(2)}`;\r\ndocument.getElementById('footer-summary-total').textContent = `CHF ${totalAmount.toFixed(2)}`;\r\n}\r\n    \r\n\/\/ Zeigt das Erfolgspopup an\r\nfunction showKonfiguratorSuccessModal() {\r\nconst modal = document.getElementById('konfigurator-success-modal');\r\nif (modal) {\r\nmodal.style.display = 'flex'; \/\/ Popup anzeigen\r\n}\r\n}\r\n\r\n\/\/ Schlie\u00dft das Erfolgspopup und l\u00e4dt die Seite neu\r\nfunction closeKonfiguratorSuccessModal() {\r\nconst modal = document.getElementById('konfigurator-success-modal');\r\nif (modal) {\r\nmodal.style.display = 'none';\r\nlocation.reload(); \/\/ Seite neu laden\r\n}\r\n}\r\n\r\n\/\/ Formular absenden\r\n\/\/ Zeigt das Erfolgspopup an\r\nfunction showKonfiguratorSuccessModal() {\r\nconst modal = document.getElementById('konfigurator-success-modal');\r\nif (modal) {\r\nmodal.style.display = 'flex'; \/\/ Popup anzeigen\r\n}\r\n}\r\n\r\n\/\/ Schlie\u00dft das Erfolgspopup und l\u00e4dt die Seite neu\r\nfunction closeKonfiguratorSuccessModal() {\r\nconst modal = document.getElementById('konfigurator-success-modal');\r\nif (modal) {\r\nmodal.style.display = 'none';\r\nlocation.reload(); \/\/ Seite neu laden\r\n}\r\n}\r\n\r\n\/\/ Formular absenden\r\nfunction handleSubmit(event) {\r\nevent.preventDefault();\r\n\r\nconst form = document.getElementById('window-cleaning-form');\r\nconst formData = new FormData(form);\r\n\r\n\/\/ \u00dcberpr\u00fcfen, ob alle Felder ausgef\u00fcllt sind\r\nlet isValid = true;\r\nform.querySelectorAll('input[required], select[required], textarea[required]').forEach(field => {\r\nif (!field.value.trim()) {\r\n    field.scrollIntoView({ behavior: 'smooth', block: 'center' }); \/\/ Scrolle zum fehlerhaften Feld\r\n    field.focus(); \/\/ Setze den Fokus auf das Feld\r\n    isValid = false;\r\n    return false; \/\/ Schleife abbrechen\r\n}\r\n});\r\n\r\nif (!isValid) {\r\nalert('Bitte f\u00fcllen Sie alle erforderlichen Felder aus.');\r\nreturn;\r\n}\r\n\r\n\/\/ \u00dcberpr\u00fcfen, ob die versteckten Felder ausgef\u00fcllt sind\r\nif (!formData.get('total-amount') || !formData.get('subtotal') || !formData.get('tax')) {\r\nalert('Bitte berechnen Sie zuerst die Kosten, bevor Sie das Formular absenden.');\r\nreturn;\r\n}\r\n\r\n\/\/ Anfrage absenden\r\nfetch(form.action, {\r\nmethod: 'POST',\r\nbody: formData,\r\n})\r\n.then(response => response.json())\r\n.then(data => {\r\n    if (data.success) {\r\n        showKonfiguratorSuccessModal(); \/\/ Erfolgspopup anzeigen\r\n    } else {\r\n        alert(data.message || 'Bitte f\u00fcllen Sie eine korrekte E-Mail Adresse aus.');\r\n    }\r\n})\r\n.catch(error => {\r\n    console.error('Fehler:', error);\r\n    alert('Bitte f\u00fcllen Sie eine korrekte E-Mail Adresse aus.');\r\n});\r\n}\r\n\r\n\/\/ Initialisierung bei Seitenladen\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n\/\/ Ereignis f\u00fcr Popup-Schlie\u00dfen\r\nconst closeButton = document.querySelector('.konfigurator-modal-content button');\r\nif (closeButton) {\r\ncloseButton.addEventListener('click', closeKonfiguratorSuccessModal);\r\n}\r\n\r\n\/\/ Ereignis f\u00fcr Angebot-Button\r\nconst angebotButton = document.getElementById('angebot-button');\r\nif (angebotButton) {\r\nangebotButton.addEventListener('click', () => {\r\n    const agbCheckbox = document.getElementById('agb-checkbox');\r\n\r\n    if (!agbCheckbox.checked) {\r\n        alert('Bitte akzeptieren Sie die AGB, um fortzufahren.');\r\n        return;\r\n    }\r\n\r\n    const form = document.getElementById('window-cleaning-form');\r\n    handleSubmit(new Event('submit', { bubbles: true, cancelable: true }));\r\n});\r\n}\r\n\r\ncalculateOffer(); \/\/ Initiale Berechnung\r\n});\r\n\r\n\/\/ Input- und Change-Events f\u00fcr die Kalkulation\r\ndocument.querySelectorAll('#window-count, #window-type, #window-height, #with-shutters, #frame-cleaning, #ledge-cleaning').forEach(element => {\r\nelement.addEventListener('input', calculateOffer);\r\nelement.addEventListener('change', calculateOffer);\r\n});\r\n\r\n\r\n\r\n\r\n        \/\/ Sticky-Footer-Logik\r\n        function toggleStickyFooter() {\r\n            const footerContent = document.getElementById('fensterreinigung-footer-content');\r\n            footerContent.classList.toggle('show');\r\n        }\r\n    \r\n        document.addEventListener('DOMContentLoaded', () => {\r\n            const footerContent = document.getElementById('fensterreinigung-footer-content');\r\n            footerContent.classList.remove('show');\r\n            calculateOffer(); \/\/ Initiale Berechnung\r\n        });\r\n\r\n\r\n\r\n    <\/script>\r\n    \r\n<\/body>\r\n<\/html>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"pix-divider  position-relative pix-bottom-divider elementor-element elementor-element-a15ab3f\" data-style=\"style-8\" ><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"100%\" height=\"300px\" viewBox=\"0 0 1200 366\" preserveAspectRatio=\"none\"><polygon fill=\"#ffffff\" points=\"0 360 1200 120 1200 366 0 366\"\/><defs><\/defs><\/svg><\/div>\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Book Window Cleaning Book your window cleaning today with just one click \u2013 fast, binding, and without any waiting time. Once completed, you will immediately receive your order confirmation by email. Please note: This configurator is currently available in German&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-7832","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.putz24.ch\/es\/wp-json\/wp\/v2\/pages\/7832","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.putz24.ch\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.putz24.ch\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.putz24.ch\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.putz24.ch\/es\/wp-json\/wp\/v2\/comments?post=7832"}],"version-history":[{"count":53,"href":"https:\/\/www.putz24.ch\/es\/wp-json\/wp\/v2\/pages\/7832\/revisions"}],"predecessor-version":[{"id":44547,"href":"https:\/\/www.putz24.ch\/es\/wp-json\/wp\/v2\/pages\/7832\/revisions\/44547"}],"wp:attachment":[{"href":"https:\/\/www.putz24.ch\/es\/wp-json\/wp\/v2\/media?parent=7832"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}