PageSourceSearch

https://gutscheine.cafe-wien.at/

html cafe-wien.at collected 2026-10-02 07:18:51 UTC 101,201 bytes, 2,315 lines download raw bytes

1<!DOCTYPE html>
2<html dir="ltr" lang="de">
3<head>
4
5    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6    <meta name="viewport" content="width=device-width, initial-scale=1" />
7
8        <meta name="robots" content="index,follow" />
9    <meta name="language" content="de" />
10            <meta name="author" content="Querfeld's Wiener Kaffeehaus GesmbH" />
11                <meta name="publisher" content="Querfeld's Wiener Kaffeehaus GesmbH" />
12                <meta name="company" content="Querfeld's Wiener Kaffeehaus GesmbH" />
13                <meta name="page-topic" content="Gutscheine Querfeld's Wiener Kaffeehaus" />
14        <meta name="reply-to" content="" />
15    <meta name="distribution" content="global" />
16    <meta name="revisit-after" content="5" />
17<link rel="apple-touch-icon" sizes="57x57" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/apple-icon-57x57.png">
18<link rel="apple-touch-icon" sizes="60x60" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/apple-icon-60x60.png">
19<link rel="apple-touch-icon" sizes="72x72" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/apple-icon-72x72.png">
20<link rel="apple-touch-icon" sizes="76x76" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/apple-icon-76x76.png">
21<link rel="apple-touch-icon" sizes="114x114" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/apple-icon-114x114.png">
22<link rel="apple-touch-icon" sizes="120x120" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/apple-icon-120x120.png">
23<link rel="apple-touch-icon" sizes="144x144" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/apple-icon-144x144.png">
24<link rel="apple-touch-icon" sizes="152x152" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/apple-icon-152x152.png">
25<link rel="apple-touch-icon" sizes="180x180" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/apple-icon-180x180.png">
26<link rel="icon" type="image/png" sizes="16x16" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/favicon-16x16.png">
27<link rel="icon" type="image/png" sizes="32x32" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/favicon-32x32.png">
28<link rel="icon" type="image/png" sizes="96x96" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/favicon-96x96.png">
29<link rel="icon" type="image/png" sizes="192x192" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/android-icon-192x192.png">
30<meta name="msapplication-TitleImage" content="https://gutscheine.cafe-wien.at/templates/qwk/favicon/ms-icon-144x144.png">
31<link rel="alternate" hreflang="de" href="https://gutscheine.cafe-wien.at/" />
32<link rel="alternate" hreflang="en" href="https://gutscheine.cafe-wien.at/en" />
33<link rel="alternate" hreflang="x-default" href="https://gutscheine.cafe-wien.at/en" />
34        <meta name="description" content="Schenken Sie Ihren Liebsten unvergessliche Genussmomente mit unseren exklusiven Gutscheinen. Ob für einen gemütlichen Brunch oder einen schnellen Kaffee zum Mitnehmen – bei uns finden Sie das perfekte Geschenk für jeden Anlass. Bestellen Sie jetzt online und lassen Sie sich von unserem schnellen und zuverlässigen Service begeistern. Besuchen Sie uns noch heute und erleben Sie die Magie des Kaffeegenusses in unseren Kaffeehäusern!" />
35        <meta name="keywords" content="Gutscheine Gutscheinpakete Gutscheine Schenken Freude Urlaub Kaffee Geschenk Wien" />
36        <title>Gutscheine Querfeld's Wiener Kaffeehaus</title>
37                    <link rel="canonical" href="https://gutscheine.cafe-wien.at/" />
38            
39<!-- icon template -->
40<script type="text/html" id="manage-consent-template">
41    <svg width="40" height="40" version="1.1" viewBox="0 0 23.138 27.429" xmlns="http://www.w3.org/2000/svg">
42     <g transform="translate(.24982 .72053)" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.8521">
43      <path d="m11.479 17.811c0.69344 3.9193 3.6964 7.0479 6.5726 7.2872"/>
44      <path d="m12.771 25.774c-10.207-8.2456 0.09164-17.214 1.9773-8.0642 1.5655 7.8623 8.9959 1.0835 6.208-4.4861-7.0193-13.782-25.331-3.8717-16.481 12.134"/>
45      <path d="m8.0864 25.566c-8.8039-10.91 5.8265-23.049 10.189-8.5278"/>
46      <path d="m21.953 8.9673c-7.2914-8.3059-16.657-6.975-21.271 1.964"/>
47      <path d="m20.404 3.6563c-7.5124-5.3367-13.285-4.0659-19.069 0.95229"/>
48     </g>
49    </svg>
50</script>
vendor: 1 bytes, line 50
50
51<script type="text/css" id="klaro-css-override">
52/*
53 * Custom CSS override for Klaro ConsentManager
54 */
55
56/* overlay transparent background */
57.klaro .cookie-modal .cm-bg {
58    background-color: rgba(0,0,0,0.5);
59}
60
61/* modal */
62.klaro .cookie-modal .cm-modal.cm-klaro, .klaro .cookie-notice:not(.cookie-modal-notice) {
63    background-color: rgb(255, 255, 255);
64}
65
66/* keywords */
67.klaro .cookie-notice strong {
68    color: rgb(153, 123, 46);
69}
70
71/* heading */
72.klaro .cookie-modal h1 {
73    color: rgb(153, 123, 46);
74}
75
76/* text color */
77.klaro .cookie-modal p, .klaro .cookie-modal strong, .klaro .cookie-modal h1, .klaro .cookie-modal h2, .klaro .cookie-modal ul, .klaro .cookie-modal li, .klaro .cookie-notice p, .klaro .cookie-notice strong, .klaro .cookie-notice h1, .klaro .cookie-notice h2, .klaro .cookie-notice ul, .klaro .cookie-notice li {
78    color: rgb(56, 56, 56);
79}
80
81/* text color dark */
82.klaro .cookie-modal .cm-list-description, .klaro .cookie-notice .cm-list-description {
83    color: rgb(56, 56, 56);
84}
85
86/* header (general description) */
87.klaro .cookie-modal .cm-modal .cm-header {
88    border-bottom: 1px solid rgb(56, 56, 56);
89}
90
91/* footer (save-buttons) */
92.klaro .cookie-modal .cm-modal .cm-footer {
93    border-top: 1px solid rgb(56, 56, 56);
94}
95
96/* link color */
97.klaro .cookie-modal a, .klaro .cookie-notice a {
98    color: rgb(80, 80, 80);
99}
100
101/* toggle input */
102.klaro .cookie-modal .cm-list-label .slider, .klaro .cookie-notice .cm-list-label .slider {
103    background-color: rgb(56, 56, 56);
104}
105
106/* input checked */
107.klaro .cookie-modal .cm-list-input:checked+.cm-list-label .slider, .klaro .cookie-notice .cm-list-input:checked+.cm-list-label .slider {
108    background-color: rgb(153, 123, 46);
109}
110
111/* input locked */
112.klaro .cookie-modal .cm-list-input.required:checked+.cm-list-label .slider, .klaro .cookie-notice .cm-list-input.required:checked+.cm-list-label .slider {
113    background-color: rgb(153, 123, 46);
114}
115
116/* input half locked */
117  .klaro .cookie-modal .cm-list-input.only-required+.cm-list-label .slider, .klaro .cookie-notice .cm-list-input.only-required+.cm-list-label .slider
118, .klaro .cookie-modal .cm-list-input.half-checked:checked+.cm-list-label .slider, .klaro .cookie-notice .cm-list-input.half-checked:checked+.cm-list-label .slider {
119    background-color: rgb(153, 123, 46);
120}
121
122/*close button*/
123.klaro .cookie-modal .cm-modal .hide svg {
124 stroke: rgb(153, 123, 46);
125}
126
127/* button */
128.klaro .cookie-modal .cm-btn, .klaro .cookie-notice .cm-btn {
129    background-color: rgb(56, 56, 56);
130    color: #ffffff;
131}
132
133/* button success */
134.klaro .cookie-modal .cm-btn.cm-btn-info, .klaro .cookie-notice .cm-btn.cm-btn-info
135, .klaro .cookie-modal .cm-btn.cm-btn-success, .klaro .cookie-notice .cm-btn.cm-btn-success
136{
137    background-color: rgb(153, 123, 46);
138    color: #ffffff;
139}
140
141/* fingerprint icon */
142#klaro-edit-btn {
143    stroke: #2B3435;
144    stroke: rgb(80, 80, 80);
145}
146
147/* position fix for purpose item list */
148#klaro label, #klaro div.label {
149    position: unset !important;
150}
151
152.klaro .cookie-modal .cm-btn, .klaro .cookie-notice .cm-btn {
153    padding: 0.6em;
154}
155
156.klaro #id-cookie-title {
157    font-size: 20px;
158}
159
160</script>
vendor: 1 bytes, line 160
160
161<script type="text/javascript">
162
163!function (w, d) {
164
165    let configWithCallback = {"acceptAll":true,"mustConsent":null,"showNoticeTitle":true,"services":[{"name":"Session","default":null,"purposes":["functional"],"cookies":[["\/^XTCsid\\d*$\/"],["\/^XTCsid\\d*$\/","\/",".cafe-wien.at"],["\/^XTCsid\\d*$\/","\/","cafe-wien.at"],["\/^XTCsid\\d*$\/","\/","gutscheine.cafe-wien.at"]],"required":true},{"name":"Warenkorb","default":null,"purposes":["functional"],"cookies":[["cart_id"],["cart_id","\/",".cafe-wien.at"],["cart_id","\/","cafe-wien.at"],["cart_id","\/","gutscheine.cafe-wien.at"]],"required":true},{"name":"Land","default":null,"purposes":["functional"],"cookies":[["inc_visitor_country_iso2"],["inc_visitor_country_iso2","\/",".cafe-wien.at"],["inc_visitor_country_iso2","\/","cafe-wien.at"],["inc_visitor_country_iso2","\/","gutscheine.cafe-wien.at"]],"required":true},{"name":"Referenz URL","default":null,"purposes":["functional"],"cookies":[["referrer_url"],["referrer_url","\/",".cafe-wien.at"],["referrer_url","\/","cafe-wien.at"],["referrer_url","\/","gutscheine.cafe-wien.at"]],"required":true},{"name":"Safari Drittanbieter Cookie Check","default":null,"purposes":["functional"],"cookies":[["safari_third_cookie"],["safari_third_cookie","\/",".cafe-wien.at"],["safari_third_cookie","\/","cafe-wien.at"],["safari_third_cookie","\/","gutscheine.cafe-wien.at"]],"required":true},{"name":"FacebookPixel","default":null,"purposes":["marketing"],"cookies":[["^_fbp"],["^_fbp","\/",".cafe-wien.at"],["^_fbp","\/","cafe-wien.at"],["^_fbp","\/","gutscheine.cafe-wien.at"]],"required":false}],"translations":{"de":{"Session":{"title":"Session","description":""},"Warenkorb":{"title":"Warenkorb","description":""},"Land":{"title":"Land","description":""},"Referenz URL":{"title":"Referenz URL","description":""},"Safari Drittanbieter Cookie Check":{"title":"Safari Drittanbieter Cookie Check","description":""},"FacebookPixel":{"title":"FacebookPixel","description":""},"purposes":{"advertisement":{"title":"Anzeigen","description":"Diese Dienste verarbeiten pers\u00f6nliche Daten, um Ihnen personalisierte oder interessenbezogene Werbung zu zeigen."},"functional":{"title":"Essenziell","description":"Essenzielle Cookies erm\u00f6glichen grundlegende Funktionen und sind f\u00fcr die einwandfreie Funktion der Website erforderlich."},"marketing":{"title":"Marketing","description":"Marketing Cookies werden von Drittanbietern oder Publishern verwendet, um personalisierte Werbung anzuzeigen. Sie tun dies, indem sie Besucher \u00fcber Websites hinweg verfolgen."},"performance":{"title":"Optimierung der Leistung","description":"Diese Dienste verarbeiten personenbezogene Daten, um den von dieser Website angebotenen Service zu optimieren."}},"consentModal":{"title":"Wir sch\u00e4tzen Ihre Privatsph\u00e4re","description":"Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell, w\u00e4hrend andere uns helfen, diese Website und Ihre Erfahrung zu verbessern.\r\nHier k\u00f6nnen Sie verschiedene auf dieser Website verwendete Tags \/ Tracker \/ Analyse-Tools ausw\u00e4hlen und deaktivieren."},"consentNotice":{"description":"Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell, w\u00e4hrend andere uns helfen, diese Website und Ihre Erfahrung zu verbessern.","learnMore":"Erweiterte Einstellungen "}},"en":{"Session":{"title":"Session","description":""},"Warenkorb":{"title":"Shopping Cart","description":""},"Land":{"title":"Country","description":""},"Referenz URL":{"title":"referrer url","description":""},"Safari Drittanbieter Cookie Check":{"title":"safari third party check","description":""},"FacebookPixel":{"title":"FacebookPixel","description":""},"purposes":{"advertisement":{"title":"Advertisements","description":"These services process personal information to sho"},"functional":{"title":"Essential","description":"Essential cookies enable fundamental functionaliti"},"marketing":{"title":"Marketing","description":"Marketing cookies are used by third parties or pub"},"performance":{"title":"Performance Optimization","description":"The
165se services process personal information to opt"}},"consentModal":{"title":"We value your privacy","description":"We use cookies on our website. Some of them are essential, while others help us to improve this website and your experience.\r\nHere you can choose or deactivate different tags \/ tracker \/ analytic-tools used on this website."},"consentNotice":{"description":"We use cookies on our website. Some of them are essential, while others help us to improve this website and your experience.","learnMore":"advanced settings "}},"it":{"Session":{"title":"Session","description":""},"Warenkorb":{"title":"carrello della spesa","description":""},"Land":{"title":"nazione","description":""},"Referenz URL":{"title":"URL di riferimento","description":""},"Safari Drittanbieter Cookie Check":{"title":"cookie di terze parti safari","description":""},"consentNotice":{"learnMore":"impostazioni avanzate "}},"fr":{"Session":{"title":"Session","description":""},"Warenkorb":{"title":"Panier","description":""},"Land":{"title":"Pays","description":""},"Referenz URL":{"title":"URL de r\u00e9f\u00e9rence","description":""}
165,"Safari Drittanbieter Cookie Check":{"title":"cookie tiers safari","description":""},"consentNotice":{"learnMore":"r\u00e9glages avanc\u00e9s "}},"sl":{"Warenkorb":{"title":"Ko\u0161arica","description":""},"Land":{"title":"Dr\u017eava","description":""},"Referenz URL":{"title":"Napotitveni URL","description":""},"Safari Drittanbieter Cookie Check":{"title":"Safari preverjanje tretje osebe","description":""},"consentModal":{"privacyPolicy":{"text":" "}},"app":{"required":{"title":"obvezno"},"purpose":"Namen"},"purposeItem":{"app":"Namen","apps":"Nameni"},"decline":"Zavrni","ok":"V redu","acceptSelected":"Sprejmi izbrano","acceptAll":"Sprejmi vse","poweredBy":"Klaro!"},"hr":{"Warenkorb":{"title":"Ko\u0161arica","description":""},"Land":{"title":"Dr\u017eava","description":""},"Referenz URL":{"title":"Referentni URL","description":""},"Safari Drittanbieter Cookie Check":{"title":"Safari provjera tre\u0107e strane","description":""},"consentNotice":{"learnMore":"Saznajte vi\u0161e "},"purposeItem":{"app":"Svrha","apps":"Svrhe"},"acceptSelected":"Prihvati odabrano","acceptAll":"Prihvati sve"}}};
166    for (let a of configWithCallback.services) {
167        a.callback = function (s, o) {
168            //callback for specific service
169        }
170    }
171
172    configWithCallback.callback = function (s, o) {
173        //callback for every service
174        if (0) {
175            window.dataLayer = window.dataLayer || []
176            dataLayer.push({event: "consentManagerChange", service_name: o.name, service_value: s});
177        }
178    }
179
180    var
181        // script element
182          klaroScript = d.createElement("SCRIPT")
183
184        // Klaro source - current version: 0.7.22
185        , klaroSrc = "https://gutscheine.cafe-wien.at/includes/javascript/klaro/klaro.js"
186
187        // load indicator
188        , klaroLoaded = false
189
190        , klaroCssOverride = d.querySelector("#klaro-css-override")
191
192        // main function
193        , callback = function () {
194            var consentConfig = (configWithCallback);
195            var i, x, cookies, rgx, editBtn, style;
196
197            window.consentConfig = consentConfig;
198
199            // turn cookie regex strings to actual regex
200            for(i = 0; i < consentConfig.services.length; i++) {
201                cookies = consentConfig.services[i].cookies;
202                for(x = 0; x < cookies.length; x++) {
203
204                    if(cookies[x][0].match(/^\/?\^|\$$/)) {
205                        rgx = new RegExp(cookies[x][0].replace(/^\/|\/$/g, ""));
206                        consentConfig.services[i].cookies[x][0] = rgx;
207                    }
208                }
209            }
210
211            // append klaroManager to global scope
212            window.klaroManager = klaro.getManager(consentConfig);
213
214            // dynamically append style element after Klaro was loaded
215            // to make sure styles are overridden
216            style = d.createElement("STYLE");
217            style.innerHTML = klaroCssOverride.innerHTML;
218            d.head.appendChild(style);
219
220            // note: after confirmation, Kalro can't be displayed as notice
221            if(!klaroManager.confirmed) {
222                klaro.show(consentConfig);
223            }
224
225            // add edit button (fingerprint icon)
226            editBtn = d.createElement("a");
227            editBtn.href = "#";
228            editBtn.title = "Cookies bearbeiten ";
229            editBtn.innerHTML = d.querySelector("#manage-consent-template").innerHTML;
230            editBtn.id = "klaro-edit-btn";
231            editBtn.style = "position:fixed; bottom:20px; right:20px; font-size:10px;";
232            editBtn.addEventListener("click", function(event) {
233                event.preventDefault();
234                klaro.show(consentConfig);
235                return false;
236            });
237            d.body.appendChild(editBtn);
238        }
239
240
241        // load trigger for main function
242        , loadCallback = function() {
243            // check if Klaro was loaded and document is ready
244            if(klaroLoaded === false || ["interactive", "complete"].indexOf(d.readyState) === -1) {
245                return;
246            }
247
248            callback();
249
250            d.removeEventListener("readystatechange", loadCallback);
251            klaroScript.removeEventListener("load", loadCallback);
252        }
253
254        ;
255
256
257    d.addEventListener("readystatechange", loadCallback);
258
259    // append script element to load Klaro.js
260    klaroScript.src = klaroSrc;
261    klaroScript.addEventListener("load", function() {
262        klaroLoaded = true;
263        loadCallback();
264    });
265    d.head.appendChild(klaroScript);
266
267    loadCallback();
268} (window, document);
269
270</script>
270
271<!-- Google Tag Manager -->
272<script>
vendor: 341 bytes, lines 272-276
272
273    (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});
274    var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';
275    j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })
276    (window,document,'script','dataLayer','
276GTM-KRB2DS3
vendor: 4 bytes, line 276
276');
277</script>
vendor: 68 bytes, lines 277-278
277
278<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
278GTM-KRB2DS3
vendor: 83 bytes, line 278
278" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
279<!-- End Google Tag Manager -->
280<script>
281    function waitForGTM(callback) {
282        const timeout = 5000;
283        const start = Date.now();
284        (function isLoaded() {
285            if (checkGTMs()) {
286                callback();
287            } else if (Date.now() - start < timeout) {
288                setTimeout(isLoaded, 50);
289            } else {
290                console.log('GTM not loaded in time');
291            }
292        })();
293
294        function checkGTMs() {
295            
296            
297
298            if (!window.google_tag_manager) {
299                return false;
300            }
301            
302                        
303            if (!window.google_tag_manager['GTM-KRB2DS3']) {
304                return false;
305            }
306            
307                        
308            return true;
309        }
310    }
311</script>
311
312
313
314<script data-type="text/javascript" data-name="FacebookPixel" type="text/plain">
vendor: 439 bytes, lines 314-320
314
315    !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
316        n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
317        n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
318        t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
319        document,'script','https://connect.facebook.net/en_US/fbevents.js');
320        fbq('init', '
320586203133161955
vendor: 39 bytes, lines 320-322
320');
321    
322    fbq('track', 'PageView');
323</script>
323
324
325<!-- Copyright (c) 2000-2020 etracker GmbH. All rights reserved. -->
326<!-- This material may not be reproduced, displayed, modified or distributed -->
327<!-- without the express prior written permission of the copyright holder. -->
328<!-- etracker tracklet 5.0 -->
329<script>
330    
331    var et_seg1 = "qwk";
332    var et_seg2 = "ecom";
333</script>
vendor: 1 bytes, line 333
333
334<script id="_etLoader" data-block-cookies="true" data-respect-dnt="true" data-secure-code="OXELj9" src="//code.etracker.com/code/e.js" async></script>
334
335<!-- etracker tracklet 5.0 end -->
336
337    <base href="https://gutscheine.cafe-wien.at/" />
338
339    <link rel="stylesheet" type="text/css" href="templates/qwk/t1/stylesheet.css?v=2157"/>
340    
341    
341<script>
342                
343// init CookieHandler in global namespace
344var CookieHandler;
345
346
347!function (w, d) {
348
349    "use strict";
350
351
352        /** {Object} */
353    var COOKIE_SUPPORT = {"device":null,"version":"","isSafari":false,"isMobile":false,"browser":null,"sameSiteSupport":true,"isFbAppBrowser":false},
354
355
356        /**
357        *
358        * @param v
359        * @returns {boolean}
360        * @private
361        */
362        _bool = function (v) {
363            if(typeof v === "string" && v.toUpperCase() === "FALSE") {
364                return false;
365            }
366            return !!v;
367        }
368        /**
369        *
370        * @param v
371        * @returns {boolean}
372        * @private
373        */
374        , _defined = function (v) {
375            return typeof v !== "undefined";
376        }
377        ;
378
379    /**
380    *
381    * @type {{get: CookieHandler.get, set: CookieHandler.set, remove: CookieHandler.remove}}
382    */
383    CookieHandler = {
384        /**
385        * get all cookies or cookie value by name
386        * @param name {string}
387        * @returns {*}
388        */
389        get    : function (name) {
390            var   cookies = document.cookie.split(/\s*;\s*/) // array with cookie strings (name=value)
391                , i         // iterator number
392                , t         // temporary array containing name and value ([name, value])
393                , r = {}    // result object
394                ;
395            for(i = 0; i < cookies.length; i++) {
396                t = cookies[i].split("=");
397                t[0] = decodeURIComponent(t[0]);
398                t[1] = decodeURIComponent(t[1]);
399                r[t[0]] = t[1];
400                if(name && t[0] === name) {
401                    return t[1];
402                }
403            }
404            return r;
405        },
406        /**
407        * sets cookie and adds default flags if not given
408        * @param name {string}
409        * @param value {string}
410        * @param s {object}
411        *   object containing the settings i.e.
412        *   {
413        *       path    : "/",
414        *       domain  : "example.com",
415        *       expires : 86400, // seconds till expiration date (will be converted to date string)
416        *       SameSite: "none",
417        *       secure  : true
418        *   }
419        * @returns {string|boolean}
420        */
421        set    : function (name, value, s) {
422            var parts,
423                i,
424                cookieStr,
425                remove = false;
426
427            // prepare value and name
428            // .get() will always return a string
429            value   = value.toString();
430            name    = name.toString();
431            s = s || {};
432
433            parts = [encodeURIComponent(name) + "=" + encodeURIComponent(value)];
434
435            if(!_defined(s.SameSite) && document.location.protocol === 'https:') {
436                // Safari turns any SameSite flag into strict => solution: do not add it
437                if(COOKIE_SUPPORT.sameSiteSupport === true) {
438                    s.SameSite = "none";
439                }
440                if(!_defined(s.secure)) {
441                    s.secure = true;
442                }
443            }
444
445            for(i in s) {
446                switch(i) {
447                    case "expires":
448                        if(s[i] < 0) {
449                            remove = true;
450                        }
451                        s[i] = (new Date(Date.now()+(s[i] * 1000))).toGMTString();
452                        break;
453                    case "secure":
454                        if(_bool(s[i])) {
455                            s[i] = "";
456                        } else {
457                            delete s[i];
458                        }
459                        break;
460                    case "path":
461                    case "domain":
462                    case "SameSite":
463                    default:
464                        break;
465                }
466                if(_defined(s[i])) {
467                    parts.push(i + (s[i] ? "=" + s[i] : ""));
468                }
469            }
470            cookieStr = parts.join("; ");
471            document.cookie = cookieStr;
472
473            if(remove === false && this.get(name) !== value) {
474                console.error("Cookiehandler.set() failed to set cookie with string \"" + cookieStr + "\"");
475                return false;
476            }
477
478            console.info("CookieHandler.set() set cookie with string %c\"" + cookieStr + "\"", "color: #50B000; text-decoration: underline;");
479            return cookieStr;
480        },
481        /**
482        * remove cookie by name (sets expiration date 1 minute in the past)
483        * @param name
484        * @returns {*}
485        */
486        remove : function (name) {
487            return this.set(name, "", {expires : -60});
488        },
489
490        /**
491        * prints help to console
492        */
493        help : function () {
494            var nl = "\n",
495                tb = "\t",
496                lines = [
497                  "CookieHandler.get([name]) {...}"
498                , tb + "Returns cookie value by name."
499                , tb + "Returns object with key => values if no name given."
500                , ""
501                , "CookieHandler.set(name, value[, s]) {...}"
502                , tb + "Sets the cookie with name and value."
503                , tb + "The third parameter s(ettings) is optional."
504                , tb + "Returns false on error."
505                , tb + "Some settings may be applied by default (SameSite=none; secure)"
506                , tb + "example:"
507                , tb + "{"
508                , tb + "    path    : \"/\","
509                , tb + "    domain  : \"example.com\","
510                , tb + "    expires : 86400, // seconds till expiration date (will be converted to date string)"
511                , tb + "    SameSite: \"none\","
512                , tb + "    secure  : true"
513                , tb + "}"
514                , ""
515                , "CookieHandler.remove(name) {...}"
516                , tb + "Removes cookie by setting its expiration date 1 minute into the past."
517                , ""
518                , "CookieHandler.help() {...}"
519                , tb + "Prints help to console."
520            ];
521
522            console.info("%c" + lines.join(nl), "color: #888888;");
523        }
524    };
525
526
527} (window, document);
528            </script>
528
529
530    
530<script>
531        var selected;
532        var submitter = null;
533
534        function submitFunction() {
535            submitter = 1;
536        }
537        function popupWindow(url) {
538            window.open(url,'popupWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=no,width=100,height=100,screenX=150,screenY=150,top=150,left=150')
539        }
540
541        function selectRowEffect(object, buttonSelect) {
542            if (!selected) {
543                if (document.getElementById) {
544                    selected = document.getElementById('defaultSelected');
545                } else {
546                    selected = document.all['defaultSelected'];
547                }
548            }
549
550            if (selected) selected.className = 'moduleRow';
551            object.className = 'moduleRowSelected';
552            selected = object;
553        }
554
555        function rowOverEffect(object) {
556            if (object.className == 'moduleRow') object.className = 'moduleRowOver';
557        }
558
559        function rowOutEffect(object) {
560            if (object.className == 'moduleRowOver') object.className = 'moduleRow';
561        }
562
563
564        // Für Checkout Prozess
565
566        function selectRowEffectCheckoutP(object, buttonSelect) {
567
568            if (selected) selected.className = 'moduleRowCheckout';
569            object.className = 'moduleRowSelectedCheckout';
570            selected = object;
571
572        }
573
574        function selectRowEffectCheckout(object, buttonSelect) {
575
576            if (!selected) {
577                if (document.getElementById) {
578                    selected = document.getElementById('defaultSelected');
579                } else {
580                    selected = document.all['defaultSelected'];
581                }
582            }
583
584            if (selected) {
585                selected.className = 'moduleRowCheckout';
586                var oldPayment = $(selected).find(":radio").attr("value");
587                if(selected !== object) {
588                    $("#subDiv_"+oldPayment).slideUp(function() {
589                        crossDomainIframeResize(false);
590                    });
591                }
592            }
593            object.className = 'moduleRowSelectedCheckout';
594            selected = object;
595
596                        $(object).find(":radio").attr("checked", "checked");
597            var payment = $(object).find(":radio").attr("value");
598            $("#subDiv_"+payment).slideDown(function() {
599                crossDomainIframeResize(false);
600            });
601
602            //remove subselection
603            if (typeof subSelected !== "undefined" && subSelected) {
604                subSelected.className = 'moduleSubRowCheckout';
605            }
606        }
607
608        function rowOverEffectCheckout(object) {
609            if (object.className == 'moduleRowCheckout') object.className = 'moduleRowOverCheckout';
610        }
611
612        function rowOutEffectCheckout(object) {
613            if (object.className == 'moduleRowOverCheckout') object.className = 'moduleRowCheckout';
614        }
615
616        // ENDE
617
618        // Für Checkout Prozess im Administrationsbereich (ROX)
619
620        function selectRowEffectCheckoutROX(object, buttonSelect) {
621            if (!selected) {
622                if (document.getElementById) {
623                    selected = document.getElementById('defaultSelected');
624                } else {
625                    selected = document.all['defaultSelected'];
626                }
627            }
628
629            if (selected)
630                selected.className = 'moduleRowCheckout_rox';
631            object.className = 'moduleRowSelectedCheckout_rox';
632            selected = object;
633
634        }
635
636        function rowOverEffectCheckoutROX(object) {
637            if (object.className == 'moduleRowCheckout_rox') object.className = 'moduleRowOverCheckout_rox';
638        }
639
640        function rowOutEffectCheckoutROX(object) {
641            if (object.className == 'moduleRowOverCheckout_rox') object.className = 'moduleRowCheckout_rox';
642        }
643
644        // ENDE
645
646                function optimizeSizeSelectbox()
647        {
648            var inputSize = $(":text").eq(-1).outerWidth();
649            var webbrowser = jQuery.browser;
650            var sizeEdit = 0;
651            chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
652
653            if(inputSize > 20)
654            {
655                $("select").css("width", inputSize + sizeEdit);
656            }
657        }
658        // ENDE
659
660        function popupImageWindow(url) {
661            window.open(url,'popupImageWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=100,height=100,screenX=150,screenY=150,top=150,left=150')
662        }
663    </script>
663
664     
664<script>
665            if (top === self && "" != ''){
666                function iCheckWebsiteRedirect()
667                {
668                    window.location = "";
669                }
670
671                if(typeof jQuery == "undefined" || false === false)
672                {
673                    iCheckWebsiteRedirect();
674                }
675                else
676                {
677                    jQuery.ajax({
678                        url: "logoff.php?action=ajax",
679                        success: function() {
680                            iCheckWebsiteRedirect();
681                        },
682                        error: function() {
683                            iCheckWebsiteRedirect();
684                        },
685                        async: false
686                    });
687                }
688            }
689        </script>
689
690        
691<script type="text/javascript" src="./templates/qwk/t1/javascript/libs/jquery/jquery.js"></script>
vendor: 1 bytes, line 691
691
692<script type="text/javascript" src="./templates/qwk/t1/javascript/libs/jquery-ui/jquery-ui.js"></script>
692
693
694<script type="text/javascript" >
695
696	function strpos (haystack, needle, offset) {
697		// Finds position of first occurrence of a string within another
698		var i = (haystack+'').indexOf(needle, (offset ? offset : 0));
699		return i === -1 ? false : i;
700	}
701
702	var prevHeight = 0, alreadyJumped = false;
703	function crossDomainIframeResize(jumpToNavtrailAnchor, jumpOffset) {
704		
705		var iframe = document.getElementById( 'inneriframe' );
706
707		if (typeof jumpOffset == "undefined") jumpOffset = 0;
708
709		// webkit browsers (safari,chrome) provide wrong scrollHeight so get only offsetHeight ### 10_215 ###
710
711        var height = $("#navtrail_anchor").height();
712		//var height = document.body.offsetHeight;
713		if (height != prevHeight || jumpToNavtrailAnchor) {
714			prevHeight = height;
715
716			if(height == 0) {
717				height = 1800;
718			}
719
720			if (window.parent != window) {
721				try {
722					if(window.parent.updateIFrame)
723					window.parent.updateIFrame(height,'');
724
725                } catch (e) {
726                    //console.warn("not embedded in start.php");
727                }
728
729                try {
730
731					var navtrailJumpOffset
732                        = parseInt(window.getComputedStyle(document.getElementById("navtrail_anchor")).marginTop)
733                        + jumpOffset;
734
735											if (typeof console !== "undefined") {
736							console.warn("ResizeIframe url is not configured. Fallback to postMessge-API.");
737                            if (!alreadyJumped || jumpToNavtrailAnchor) {
738                                window.top.postMessage(["Inc.updateIFrame", height, true, navtrailJumpOffset], "*");
739                                alreadyJumped = true;
740                            } else {
741                                window.top.postMessage(["Inc.updateIFrame", height], "*");
742                            }
743						}
744									} catch (e) {
745                    console.error(e);
746				}
747			} else {
748				$("body").addClass("standalone");
749			}
750		}
751	}
752
753	$().ready(function() {
754        crossDomainIframeResize(true);
755    });
756
757	$(window).on("load", function() {
758    setTimeout(function() {crossDomainIframeResize(true) }, 300);
759    crossDomainIframeResize(true);
760        $(window).resize(function() {
761            if (crossDomainResizeHandler) clearTimeout(crossDomainResizeHandler);
762            crossDomainResizeHandler = setTimeout(function() {crossDomainIframeResize(false) }, 300);
763        });
764	});
765
766</script>
766
767<!-- xtc_get_shop_analytics_code -->    
767<script>
768        // Input Replacement
769        function textReplacement(input){
770            var originalvalue = input.val();
771            input.focus( function(){
772                if( $.trim(input.val()) == originalvalue ){ input.val(''); }
773            });
774            input.blur( function(){
775                if( $.trim(input.val()) == '' ){ input.val(originalvalue); }
776            });
777        }
778
779                // FIX SAFARI THIRD PARTY COOKIE PROBLEM
780        if (window.top != window) {     // wenn in iframe
781            if (navigator.userAgent.indexOf("Safari") >= 0 && navigator.userAgent.indexOf("Chrome") == -1) { // und der Browser ist safari
782
783                var safariCookieFirstPartySaved = false;
784
785                var safariPopupFunc = function (event) {
786                    var target;
787                    if (document.cookie.indexOf("safari_third_cookie=1") == -1 && (!localStorage || (localStorage && localStorage.getItem("safari_third_cookie") !== "1"))) {   // only ONCE
788
789                        // find target of click event
790                        target = event.target || event.srcElement;
791                        if(target.nodeType === 3) {
792                            target = target.parentNode;
793                        }
794
795                        CookieHandler.set("safari_third_cookie", "1");
796                        try {
797                            localStorage.setItem("safari_third_cookie", "1");
798                        } catch(e) {
799                            console.log("localStorage could not be written");
800                        }
801
802                        if (!safariCookieFirstPartySaved) {
803                            var safariCookieUrl =  "https://gutscheine.cafe-wien.at/safari_third_party.php";
804                            var safariPopup = window.open(safariCookieUrl);
805                            if (safariPopup) {
806                                safariPopup.blur();
807                                window.focus();
808                            } else {
809                                if (console) console.log("Safari Third Party Fix probably blocked by popup blocker.");
810                            }
811                            safariCookieFirstPartySaved = true;
812                        }
813
814                        // check for file input and
815                        // use preventDefault to stop file dialog in Safari
816                        if(target && target.nodeName === 'INPUT' && target.type === 'file') {
817                            event.preventDefault();
818                            return false;
819                        }
820                    }
821                    window.removeEventListener('click', safariPopupFunc);
822                };
823
824                window.addEventListener('click', safariPopupFunc);
825                // $(window).one('click', safariPopupFunc);
826
827            }
828        }
829                </script>
829
830    
831<script>
832    document.addEventListener("DOMContentLoaded", function() {
833        var html =  '<div class="cookie-msg">' +
834            'Diese Internetseite verwendet Cookies, um die Nutzererfahrung zu verbessern und den Benutzern bestimmte Dienste und Funktionen bereitzustellen. ' +
835            '<a href="https://gutscheine.cafe-wien.at/datenschutz" target="_blank" rel="noopener" class="cookie-details">Details anzeigen</a> ' +
836            '<div class="button">' +
837            '<a id="cookie-btn" class="buttonLink">OK</a>' +
838            '</div>' +
839            '</div>';
840        var div = document.createElement("div");
841        div.innerHTML = html;
842        div.id = "cookie-bar";
843        div.style.display = 'none';
844
845        if (localStorage && localStorage.getItem("cookiesallowed") !== "1") {
846            div.style.display = 'block';
847        }
848        document.body.appendChild(div);
849        document.getElementById("cookie-btn").addEventListener("click", function() {
850            if (localStorage) {
851                localStorage.setItem("cookiesallowed", "1");
852                div.style.display = 'none';
853            }
854        });
855    });
856</script>
856
857<style>
858    #cookie-bar {
859        z-index: 1000;
860        position: fixed;
861        bottom: 0;
862        left: 0;
863        right: 0;
864        background:white;
865    }
866    .cookie-msg {
867        padding:1em;
868        text-align: center;
869    }
870    .cookie-msg .button, .cookie-msg .button .buttonLink {
871        display: inline-block;
872        vertical-align: middle;
873    }
874</style>
875
876    
877<script type="text/javascript">
878    !function(w, d) {
879
880        "use strict";
881
882        /**
883         * @type Array
884         */
885        var localStorageWhitelist = [];
886
887        /**
888         *
889         * @param name
890         * @param whitelist
891         * @param getResult
892         * @returns {boolean}
893         */
894        var whitelistCheck = function (name, whitelist, getResult) {
895            if(whitelist.indexOf(name) === -1) {
896                if(getResult) {
897                    return false;
898                }
899                throw "\"" + name + "\" not whitelisted! whitelist: " + whitelist.join(", ");
900            }
901            return true;
902        };
903
904        /**
905         *
906         * @type {}
907         * object containing functions that can be called from outside
908         */
909        var Inc = {
910
911            setLocalStorage : function (name, value) {
912                whitelistCheck(name, localStorageWhitelist);
913                localStorage.setItem(name, value);
914            }
915            , removeLocalStorage : function (name) {
916                whitelistCheck(name, localStorageWhitelist);
917                localStorage.removeItem(name);
918            }
919
920
921            , consentManager : {
922                /**
923                 * accept/reject single service and it's cookies
924                 * @param name
925                 * @param value
926                 */
927                set : function (name, value) {
928                    if(typeof klaroManager === "undefined") return console.error("klaroManager undefined!");
929                    klaroManager.updateConsent(name, !!value);
930                    klaroManager.saveAndApplyConsents();
931                }
932
933                /**
934                 * reset service to default
935                 * @param name
936                 */
937                , reset : function (name) {
938                    if(typeof klaroManager === "undefined") return console.error("klaroManager undefined!");
939                    if(name) {
940                        this.set(klaroManager.getDefaultConsent(name));
941                        return;
942                    }
943                    klaroManager.resetConsents();
944                    klaroManager.saveAndApplyConsents();
945                }
946
947                /**
948                 * accept/reject all services and their cookies that match given purpose
949                 * @param purpose
950                 * @param value
951                 */
952                , setByPurpose : function (purpose, value) {
953                    if(typeof klaroManager === "undefined") return console.error("klaroManager undefined!");
954                    var services = klaroManager.config.services, i;
955                    for(i = 0; i < services.length; i++) {
956                        if(services[i].purposes.indexOf(purpose) !== -1) {
957                            this.set(services[i].name, value);
958                        }
959                    }
960                    klaroManager.saveAndApplyConsents();
961                }
962
963                /**
964                 * accept/reject all services and their cookies that are optional
965                 * @param value
966                 */
967                , setByOptional : function ( value ) {
968                    if(typeof klaroManager === "undefined") return console.error("klaroManager undefined!");
969                    var services = klaroManager.config.services, i;
970                    for(i = 0; i < services.length; i++) {
971                        if(services[i].required === false) {
972                            this.set(services[i].name, value);
973                        }
974                    }
975                    klaroManager.saveAndApplyConsents();
976
977                }
978
979                /**
980                 * alias for this.setByOptional()
981                 * @param value
982                 * @returns {void | undefined}
983                 */
984                , setAll : function ( value ) {
985                    return this.setByOptional ( value );
986                }
987            }
988
989        };
990
991        w.incTest = Inc;
992
993        // listen for postMessage event
994        w.addEventListener("message", function (event) {
995
996            var funcName, args, rawName, returnValue, funcArr, tempFunc, i;
997
998            // check data-type
999            switch(({}).toString.call(event.data).replace(/^\[\w+ |\]$/g,"").toUpperCase()) {
1000                // array
1001                case "ARRAY":
1002                    args = event.data;
1003                    rawName = args.shift();
1004                    funcName = rawName.replace(/^inc(ert)?\./i, "");
1005                    funcArr = funcName.split(".");
1006
1007                    // check if function name is prefixed with Inc. or Incert.
1008                    if(funcName === rawName) {
1009                        return;
1010                    }
1011
1012                    tempFunc = Inc;
1013
1014                    // search in IncertClass instance
1015                    for( i = 0; i < funcArr.length; i++) {
1016                        if(!tempFunc[funcArr[i]]) {
1017                            break;
1018                        }
1019                        if(i === (funcArr.length -1)) {
1020                            // apply args to function with appropriate context
1021                            returnValue = tempFunc[funcArr[i]].apply(tempFunc, args);
1022                            console.info("\"" + rawName + "\" called successfully!; arguments:", args, "; returnValue:", returnValue);
1023                            return;
1024                        }
1025                        tempFunc = tempFunc[funcArr[i]];
1026                    }
1027
1028                    throw "\"" + rawName + "\" is not defined";
1029
1030                    break;
1031                default:
1032                    break;
1033            }
1034        });
1035    } (window, document);
1036</script>
1036
1037
1038</head>
1039<body class="body" onload="crossDomainIframeResize();">
1040
1041
1042
1043      
1044
1045
1046
1047
1048
1049
1050    
1051
1052
1053
1054
1055
1056
1057
1058                
1059
1060
1061<script>
1062    var oneColumnWindowWidth = parseInt("600") || 400,
1063        twoColumnWindowWidth = parseInt("1200") || 640,
1064        respDropSidebarWindowWidth = parseInt("800") || 800,
1065        voucherSliderItemMargin = ((parseInt("20") || 20) / 2),
1066        listingSpecialCountdownFormat = "" | "%DT %Hh %Mm %Ss";
1067
1068    //Thumbs Voucher Slider Settings (see slick-init.js)
1069    var voucherSliderShowArrows = ("" == "1") || false,
1070        voucherSliderShowDots = ("1" == "1") || false,
1071        voucherSliderCenterMode = ("" == "1") || false,
1072        vSliderMinItems = parseInt("1") || 1,
1073        vSliderMaxItems = parseInt("2") || 3,
1074        cSliderMinItems = parseInt("1") || 1,
1075        cSliderMaxItems = parseInt("3") || 1,
1076        voucherSliderItemsToShowMobile = parseInt("3") || 1,
1077        voucherSliderItemsToShowTablet = parseInt("5") || 3,
1078        voucherSliderItemsToShowDesktop = parseInt("5") || 5;
1079
1080    var currentCurrencySymbol = "\u20ac";
1081</script>
1081
1082
1083
1084<script>
1085  const subShopId = -1;
1086</script>
1086
1087
1088<script type="text/javascript"
1089        src="./templates/qwk/t1/javascript/live.min.js?v=2157"></script>
1089
1090
1091<div class="body-inc " id="navtrail_anchor">
1092            <!--Header -->
1093            <header class="inc-header sticky">
1094                <a href="#inc-body" class="sr-only">Zum Hauptinhalt</a>
1095                <div class="inc-header-inner">
1096                                            
1097
1098<div class="box-header">
1099    <a href="https://gutscheine.cafe-wien.at/" class="header-logo" >
1100        <img src="templates/qwk/images/exp_logo.png" alt="Schritt zurück" />
1101    </a>
1102        <a class="customer-website" href="https://www.cafe-wien.at/" target="_blank">             <span class="icon-sphere" aria-hidden="true"></span>
1103            <span class="website-url hidden-xs" >zur Website</span>
1104        </a>
1105    </div>
1106                    
1107                    <div class="inc-navigation-container ">
1108                                                    
1109
1110
1111
1112<ul class="inc-page-navigation" role="navigation" id="inc-page-navigation-container">
1113    <li>
1114        <a href="https://www.cafe-wien.at/de/die-cafes/standorte.html">
1115           Unsere Cafes & Restaurants
1116        </a>
1117    </li>
1118                <li class="language-switch-burger hidden-navi-sm-md-lg">
1119            
1120<div class="language-switch">
1121                  <div class="language-switch-shortcode">
1122                                                      <a href="https://gutscheine.cafe-wien.at/" aria-label="Deutsch" class="language-item selected">
1123                                                      <span class="language-item-shortcode">de</span>
1124                                          </a>
1125                                                                        <a href="https://gutscheine.cafe-wien.at/en" aria-label="Englisch" class="language-item ">
1126                                                      <span class="language-item-shortcode">en</span>
1127                                          </a>
1128                                                                                                                                                                                                                                                                        </div>
1129      </div>
1130
1131
1132<script>
1133      $(".language-toggle-active-element").on('click', function(event){
1134            event.stopImmediatePropagation();
1135            $(this).parent().toggleClass('opened');
1136      });
1137</script>
1137
1138
1139        </li>
1140    </ul>
1141
1142<script>
1143    let id = 0;
1144    let currentId = 0;
1145</script>
1145
1146                                                                                                                
1147
1148
1149    <ul class="inc-shop-navi">
1150                                                                            <li class="inc-nav-item">
1151                    <a class="inc-nav-link inc-nav-value-check-page" href="https://gutscheine.cafe-wien.at/wert-abfragen" title="Wertabfrage" aria-label="Wertabfrage">
1152                        <i class="im icon-card" aria-hidden="true"></i>
1153                        <span class="inc-nav-link-caption">Wertabfrage</span>
1154                    </a>
1155                </li>
1156                                    
1157        <!--
1158        <li class="inc-nav-item">
1159            <a class="inc-nav-link inc-nav-account" href="https://gutscheine.cafe-wien.at/wert-abfragen" title="Konto" aria-label="Konto">
1160                <i class="im icon-card" aria-hidden="true"></i>
1161                <span class="inc-nav-link-caption">Wertabfrage</span>
1162            </a>
1163        </li>
1164        -->
1165
1166        <li class="inc-nav-item ">
1167            <a class="inc-nav-link inc-nav-cart inc-modal-control"
1168               href="https://gutscheine.cafe-wien.at/warenkorb" data-toggle="modal-cart">
1169                <div class="inc-nav-cart-inner">
1170                    <i class="im icon-shopping-cart" aria-hidden="true"></i>
1171                    <span class="inc-nav-link-caption"> Warenkorb</span>
1172                    <span id="inc-cartItemCount"
1173                          class="empty">0</span>
1174                </div>
1175            </a>
1176                                        <div class="inc-modal-menu inc-nav-cart " id="modal-cart">
1177                                        <div class="inc-modal-menu-inner">
1178                        
1179
1180
1181
1182    
1183<div class="infobox-cart">
1184    <div class="infobox-cart-header">
1185        <h3><a href="https://gutscheine.cafe-wien.at/warenkorb">Ihr Warenkorb</a></h3>
1186    </div>
1187    <div class="infobox-cart-content-container">
1188        <table class="infobox-cart-content">
1189            <tbody class="infobox-cart-content-tbody">
1190            <!-- Fill via Ajax -->
1191            </tbody>
1192        </table>
1193        <div class="infobox-cart-empty-content" style="display: none;">
1194            Sie haben noch keine Artikel in Ihrem Warenkorb.
1195        </div>
1196    </div>
1197    <div id="infobox-cart-reservations"></div>
1198</div>
1199<div class="inc-modal-menu-footer">
1200        <div class="infobox-cart-total-sum-text-container">
1201        <div class="infobox-cart-total-sum-text">
1202            Summe
1203            <span id="infobox-cart-total-sum"></span>
1204        </div>
1205        <span id="infobox-cart-total-points"></span>
1206        
1207                <div class="infobox-shipping-link">
1208            <a href="https://gutscheine.cafe-wien.at/popup?coID=1" class="ajax popup">
1209                zzgl. Versandkosten
1210            </a>
1211        </div>
1212                    </div>
1213
1214    
1215            <a class="call-to-action" href="https://gutscheine.cafe-wien.at/checkout-daten">zur Kasse</a>
1216    </div>
1217
1218<script>
1219  let showCartImage = "";
1220  let showCartItemQuantity = "";
1221  let showCartItemDelete = "";
1222  let pointSingleLabel = "Punkt";
1223  let pointsMultipleLabel = "Punkte";
1224</script>
1224
1225
1226
1227<script>
1228  $().ready(function () {
1229    
1230    loadShoppingCart();
1231  });
1232
1233  if (!String.format) {
1234    // String format function is used to inject variables into lang-file strings
1235    // {i} indicators will be replaced by the corresponding variables
1236    String.format = function (format) {
1237      var args = Array.prototype.slice.call(arguments, 1);
1238      return format.replace(/{(\d+)}/g, function (match, number) {
1239        return typeof args[number] != 'undefined' ? args[number] : match;
1240      });
1241    };
1242  }
1243
1244  
1245</script>
1245
1246
1247
1248                                            </div>
1249                </div>
1250                    </li>
1251
1252                                <div class="hidden-navi-xs">
1253            
1254<div class="language-switch">
1255                  <div class="language-switch-shortcode">
1256                                                      <a href="https://gutscheine.cafe-wien.at/" aria-label="Deutsch" class="language-item selected">
1257                                                      <span class="language-item-shortcode">de</span>
1258                                          </a>
1259                                                                        <a href="https://gutscheine.cafe-wien.at/en" aria-label="Englisch" class="language-item ">
1260                                                      <span class="language-item-shortcode">en</span>
1261                                          </a>
1262                                                                                                                                                                                                                                                                        </div>
1263      </div>
1264
1265
1266<script>
1267      $(".language-toggle-active-element").on('click', function(event){
1268            event.stopImmediatePropagation();
1269            $(this).parent().toggleClass('opened');
1270      });
1271</script>
1271
1272
1273        </div>
1274                    </ul>                                                    
1275                            
1276
1277<button type="button" id="navigation-toggle-responsive" aria-expanded="false" aria-controls="inc-page-navigation-container">
1278    <span class="sr-only">
1279        <span class="navigation-toggle-responsive-open">Navigation öffnen</span>
1280        <span class="navigation-toggle-responsive-close" style="display: none">Navigation schließen</span>
1281    </span>
1282   <div class="navigation-toggle-responsive-burger" aria-hidden="true">
1283       <span></span>
1284       <span></span>
1285       <span></span>
1286   </div>
1287</button>
1288<script src="./templates/qwk/t1/javascript/header-mobile.js"></script>
1288                    </div>
1289                </div>
1290            </header>
1291
1292            <noscript>
1293                <div class="inc-error-box center" role="alert">
1294                    Bitte <b>aktivieren Sie JavaScript</b> in Ihrem Browser! Andernfalls kann es zu Problemen bei der Anzeige der Produkte, bzw. bei der Durchführung Ihrer Bestellung kommen.
1295                </div>
1296            </noscript>
1297
1298            <!--Sidebar -->
1299            
1300            <!--Content -->
1301            <div class="content-inc " id="inc-body" role="main">
1302                <!-- Breadcrumbs / Navtrail and Wizard -->
1303                                                                                                                                                                                                                                    
1304                
1305                <!-- DISPLAY_CATEGORIES_WITH_PRODUCTS -->
1306                                    
1307
1308
1309<div class="inc-startpage">
1310    
1311    
1312
1313                                                                
1314<!-- Implement Slick Slider -->
1315<script type="text/javascript" src="./templates/qwk/t1/javascript/libs/slick/slick.js"></script>
1315
1316<link rel="stylesheet" href="./templates/qwk/t1/javascript/libs/slick/slick.css" />
1317
1318<script>
1319  //News Slider Settings Init (see slick-news.js)
1320  var newsSliderShowArrows = ("" == "1") || false,
1321          newsSliderShowDots = ("1" == "1") || false,
1322          newsSliderInfinite = ("1" == "1") || false;
1323</script>
1323
1324
1325
1326        
1327        
1328        
1329        
1330        
1331                                        <section class="inc-startpage-section inc-startpage-text ">
1332                <div class="inc-content-container">
1333                    <h1>Willkommen im Querfeld Gutscheinshop!</h1>                                                           </div>
1334            </section>
1335                        
1336        
1337        
1338        
1339        
1340                                            
1341        
1342                                
1343
1344        
1345    <section class="inc-startpage-section infobox-cat-teaser ">
1346        <div class="inc-content-container">
1347
1348                        
1349            
1349<script>
1350              async function getCat(callback, id){
1351                let d = new Date();
1352                await $.ajax({
1353                  url: appendSubShopId("api/frontend/eventSequence?includeLinks&includeEventDates&eventDateLimit=10&q=eq(categoryId," + id + ")sort(%2BexternalId)&eventDateFrom=" + (d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate())),
1354                  async:true,
1355                  success: (data) =>{
1356                    callback(true, id, data);
1357                  },
1358                  error: () => {
1359                    callback(false);
1360                  }
1361                });
1362              }
1363
1364              function renderEventSequence(success, id, data){
1365                if(success){
1366                  if(data.length > 0){
1367                    $("#inc-category-item-"+id+" > .inc-category-item-inner").append('<div id="inc-event-sequences-{$id}"></div>');
1368                    for (let i = 0; i < data.length; i++) {
1369                      if(!data[i].hasOwnProperty("eventDates")) continue;
1370                      for (let j = 0; j < data[i].eventDates.length; j++) {
1371                        let object = data[i].eventDates[j];
1372                        for (let item of object.eventProducts) {
1373                          if(!data[i].hasOwnProperty("eventProductLink")) {
1374
1375                            let salesStartArray = (''+object.salesStart).split(/[- :]/);
1376                            let salesEndArray = (''+object.salesEnd).split(/[- :]/);
1377                            object.salesStart = new Date(salesStartArray[0], salesStartArray[1]-1, salesStartArray[2], salesStartArray[3], salesStartArray[4], salesStartArray[5]);
1378                            object.salesEnd = new Date(salesEndArray[0], salesEndArray[1]-1, salesEndArray[2], salesEndArray[3], salesEndArray[4], salesEndArray[5]);
1379
1380                            if(!(object.state == "SOLD_OUT" || object.state == "ELAPSED" || object.state == "CANCELED" || object.available == 0 || item.available == 0 || object.salesStart > new Date() || object.salesEnd < new Date())) {
1381                              data[i].eventProductLink = item.productLink;
1382                            }
1383                          } else break;
1384                        }
1385                      }
1386                      let object = data[i], image;
1387                      object.sequenceImage == null ? image = object.image : image = object.sequenceImage;
1388                      if(!object.hasOwnProperty("eventProductLink")) continue;
1389                      $("#inc-event-sequences-"+id).append(`
1390                        <div class="inc-event-item">
1391                          <div class="inc-event-image">
1392                            <img src="${image}"/>
1393                          </div>
1394                          <div class="inc-event-inner">
1395                            <h2>${object.name}</h2>
1396                            <p>${object.description.substr(0, 200) + "\u2026"}</p>
1397                            <a class="call-to-action" href="${object.eventProductLink}"></a>
1398                          </div>
1399                        </div>`);
1400                    }
1401                    if (typeof $.fn.slick !== "undefined") {
1402                      $("#inc-event-sequences-"+id).slick({
1403                        arrows: true,
1404                        dots: true,
1405                        slidesToShow: 3,
1406                        slidesToScroll: 3,
1407                        infinite: true,
1408                        responsive: [
1409                          {
1410                            breakpoint: oneColumnWindowWidth,
1411                            settings: {
1412                              swipeToSlide: true,
1413                              slidesToShow: 1
1414                            }
1415                          }
1416                        ]
1417                      });
1418                    }
1419                  }
1420                } else{
1421                  console.log("yikes!");
1422                }
1423              }
1424            </script>
1424
1425            
1426
1427                             <h2 class="contentsTopicsStartpage">Unsere Kategorien</h2>                <div class="inc-category-list-item-wrapper">
1428                    <!--
1429                                                                                                                                        -->
1430                    <!-- Different data, so different calls (if) -->
1431
1432
1433
1434<a class="inc-category-item" id="inc-category-item-32" href="https://gutscheine.cafe-wien.at/cafe-landtmann" >
1435        <div class="inc-category-item-inner">
1436            <div class="inc-category-item-image">
1437                                    <img src="templates/qwk/images/categories/32.jpg" alt="" title=""/>
1438                            </div>
1439            <div class="inc-category-item-desc">
1440                <div class="inc-category-item-desc-inner">
1441                    <h3>
1442                                                    Café Landtmann
1443                                            </h3>
1444                                            
1445                                                                                    <div class="inc-category-item-more-link">
1446                                    Zu den Gutscheinen
1447                                </div>
1448                                                                                        </div>
1449            </div>
1450                </div>
1451</a>                    <!--
1452                                                                                                                                                                    -->
1453                    <!-- Different data, so different calls (if) -->
1454
1455
1456
1457<a class="inc-category-item" id="inc-category-item-36" href="https://gutscheine.cafe-wien.at/cafe-museum" >
1458        <div class="inc-category-item-inner">
1459            <div class="inc-category-item-image">
1460                                    <img src="templates/qwk/images/categories/36.jpg" alt="" title=""/>
1461                            </div>
1462            <div class="inc-category-item-desc">
1463                <div class="inc-category-item-desc-inner">
1464                    <h3>
1465                                                    Café Museum
1466                                            </h3>
1467                                            
1468                                                                                    <div class="inc-category-item-more-link">
1469                                    Zu den Gutscheinen
1470                                </div>
1471                                                                                        </div>
1472            </div>
1473                </div>
1474</a>                    <!--
1475                                                                                                                -->
1476                    <!-- Different data, so different calls (if) -->
1477
1478
1479
1480<a class="inc-category-item" id="inc-category-item-40" href="https://gutscheine.cafe-wien.at/cafe-mozart" >
1481        <div class="inc-category-item-inner">
1482            <div class="inc-category-item-image">
1483                                    <img src="templates/qwk/images/categories/40.jpg" alt="" title=""/>
1484                            </div>
1485            <div class="inc-category-item-desc">
1486                <div class="inc-category-item-desc-inner">
1487                    <h3>
1488                                                    Café Mozart
1489                                            </h3>
1490                                            
1491                                                                                    <div class="inc-category-item-more-link">
1492                                    Zu den Gutscheinen
1493                                </div>
1494                                                                                        </div>
1495            </div>
1496                </div>
1497</a>                    <!--
1498                                                                                                                -->
1499                    <!-- Different data, so different calls (if) -->
1500
1501
1502
1503<a class="inc-category-item" id="inc-category-item-44" href="https://gutscheine.cafe-wien.at/crossfields" >
1504        <div class="inc-category-item-inner">
1505            <div class="inc-category-item-image">
1506                                    <img src="templates/qwk/images/categories/44.jpg" alt="" title=""/>
1507                            </div>
1508            <div class="inc-category-item-desc">
1509                <div class="inc-category-item-desc-inner">
1510                    <h3>
1511                                                    Crossfield's
1512                                            </h3>
1513                                            
1514                                                                                    <div class="inc-category-item-more-link">
1515                                    Zu den Gutscheinen
1516                                </div>
1517                                                                                        </div>
1518            </div>
1519                </div>
1520</a>                    <!--
1521                                                                                                                -->
1522                    <!-- Different data, so different calls (if) -->
1523
1524
1525
1526<a class="inc-category-item" id="inc-category-item-52" href="https://gutscheine.cafe-wien.at/bootshaus" >
1527        <div class="inc-category-item-inner">
1528            <div class="inc-category-item-image">
1529                                    <img src="templates/qwk/images/categories/52.jpg" alt="" title=""/>
1530                            </div>
1531            <div class="inc-category-item-desc">
1532                <div class="inc-category-item-desc-inner">
1533                    <h3>
1534                                                    Bootshaus
1535                                            </h3>
1536                                            
1537                                                                                    <div class="inc-category-item-more-link">
1538                                    Zu den Gutscheinen
1539                                </div>
1540                                                                                        </div>
1541            </div>
1542                </div>
1543</a>                    <!--
1544                                                                                                                -->
1545                    <!-- Different data, so different calls (if) -->
1546
1547
1548
1549<a class="inc-category-item" id="inc-category-item-56" href="https://gutscheine.cafe-wien.at/napoleon" >
1550        <div class="inc-category-item-inner">
1551            <div class="inc-category-item-image">
1552                                    <img src="templates/qwk/images/categories/56.jpg" alt="" title=""/>
1553                            </div>
1554            <div class="inc-category-item-desc">
1555                <div class="inc-category-item-desc-inner">
1556                    <h3>
1557                                                    Napoleon
1558                                            </h3>
1559                                            
1560                                                                                    <div class="inc-category-item-more-link">
1561                                    Zu den Gutscheinen
1562                                </div>
1563                                                                                        </div>
1564            </div>
1565                </div>
1566</a>                    <!--
1567                                                                                                                -->
1568                    <!-- Different data, so different calls (if) -->
1569
1570
1571
1572<a class="inc-category-item" id="inc-category-item-60" href="https://gutscheine.cafe-wien.at/anlass-gutscheine" >
1573        <div class="inc-category-item-inner">
1574            <div class="inc-category-item-image">
1575                                    <img src="templates/qwk/images/categories/60.jpg" alt="" title=""/>
1576                            </div>
1577            <div class="inc-category-item-desc">
1578                <div class="inc-category-item-desc-inner">
1579                    <h3>
1580                                                    Anlass-Gutscheine
1581                                            </h3>
1582                                            
1583                                                                                    <div class="inc-category-item-more-link">
1584                                    Zu den Gutscheinen
1585                                </div>
1586                                                                                        </div>
1587            </div>
1588                </div>
1589</a>                    <!--
1590                                                                            -->
1591                </div>
1592                    </div>
1593    </section>
1594    
1594<script>
1595        const max_category_items = 3;
1596    </script>
1596
1597    
1597<script type="text/javascript" src="./templates/qwk/t1/javascript/category-list-fill-row.js"></script>
1597
1598
1599        
1600        
1601        
1602                                            
1603        
1604        
1605                                
1606        
1607        
1608                                            
1609        
1610        
1611        
1612        
1613                                            
1614        
1615        
1616        
1617        
1618                                            
1619        
1620        
1621        
1622        
1623            
1624    
1625        
1626<div id="inc-faq-container">
1627    <div class="inc-content-container">
1628        <h2 class="contentsTopicsStartpage">FAQ</h2>
1629        <div id="inc-faq-accordion" class="accordion faq"></div>
1630    </div>
1631</div>
1632
1633<script>
1634    let filterSection = "startpage";
1635    let filterProduct = "";
1636    let filterCategory = "";
1637
1638    let filterParentProduct = "";
1639</script>
1639
1640
1641<script>
1642    let faqUrl= "api/frontend/faq";
1643
1644    if(filterSection !== '') faqUrl += "/" + filterSection;
1645    
1646    if(filterParentProduct !== '') faqUrl += "?product=" + filterParentProduct;
1647    else if(filterProduct !== '') faqUrl += "?product=" + filterProduct;
1648    
1649    if(filterCategory !== '' && filterProduct == '') faqUrl += "?category=" + filterCategory;
1650    else if(filterCategory !== '') faqUrl += "&category=" + filterCategory;
1651
1652    $().ready(function() {
1653        getFaqData();
1654    });
1655    async function getFaqData() {
1656        await $.ajax({
1657            url: appendSubShopId(faqUrl),
1658            async: true,
1659            success: (data) => {
1660                if(data.length > 0) {
1661                    //FAQ SCHEMA (SEO)
1662                    const script = document.createElement('script');
1663                    script.setAttribute('type', 'application/ld+json');
1664                    var schemaData = {
1665                        "@context":"https://schema.org",
1666                        "@type":"FAQPage",
1667                        "mainEntity":[]
1668                    };
1669
1670                    //All Questions and answers
1671                    for (let i = 0; i < data.length; i++) {
1672                      let accordionRowButton = `<button type="button" aria-expanded="false" class="accordion-button"
1673                            aria-controls="sect${i}" id="accordion-sect-${i}">${data[i].question}</button>`;
1674
1675                      let accordionRowInner = `<div id="sect${i}" role="region" aria-labelledby="accordion-sect-${i}"
1676                            class="accordion-content" style="height:0;"><div class="accordion-content-inner">${data[i].answer}</div></div>`;
1677                      $('#inc-faq-accordion').append($('<div class="accordion-section"></div>').append(accordionRowButton).append(accordionRowInner));
1678
1679
1680                        //FAQ schema (SEO)s
1681                        schemaData.mainEntity.push({
1682                                "@type":"Question",
1683                                "name":data[i].question,
1684                                "acceptedAnswer": {
1685                                    "@type": "Answer",
1686                                    "text":data[i].answer
1687                    }
1688                        });
1689                    }
1690
1691                    //FAQ schema (SEO)
1692                    script.textContent = JSON.stringify(schemaData);
1693                    document.head.appendChild(script);
1694                } else {
1695                    $('#inc-faq-container').hide();
1696                }
1697            },
1698            error: () => {
1699                console.log('error getting faq');
1700
1701                $('#inc-faq-container').hide();
1702            }
1703        });
1704    }
1705</script>
1705
1706</div>
1707                                
1708
1709                                                    
1710                                                        <section class="inc-section-value-check">
1711                        
1712
1713
1714
1715    <div class="infobox-value-check">
1716        <div class="inc-content-container">
1717                            <h2>
1718                                            Wertabfrage & Digitale Ablage
1719                                    </h2>
1720                        <div class="infobox-content">
1721                
1722
1723<script src="./templates/qwk/t1/javascript/libs/vue/vue.js"></script>
vendor: 1 bytes, line 1723
1723
1724<script src="./templates/qwk/t1/javascript/libs/qrcodejs/qrcodejs.js"></script>
vendor: 1 bytes, line 1724
1724
1725<script type="text/javascript" src="./templates/qwk/t1/javascript/getCaptcha.js"></script>
1725
1726
1727<script>
1728    const currentRequestCount = null;
1729        const maxRequestCount = 3;
1730</script>
1730
1731        <div id="inc-value-check">
1732            <div class="inc-voucher-lookup-container">
1733                <div class="inc-value-check-form">
1734                  <div class="inc-content-container">
1735                                                <p>
1736                                                                Barcode / QR-Code eingeben, Wert abfragen und im Wallet am Smartphone speichern.
1737                                                        </p>
1738                                              <message
1739                                v-bind:status="status"
1740                        ></message>
1741                        <check-form
1742                                v-on:set-status="setStatus"
1743                                v-on:set-success-message="setSuccessMessage"
1744                        ></check-form>
1745                    </div>
1746                </div>
1747                <div class="inc-value-check-result " v-if="success.show">
1748                  <div class="inc-content-container">
1749                                        <booking
1750                            v-bind:status="status"
1751                            v-bind:success="success">
1752                    </booking>
1753                                        <div class="inc-value-check-result-inner ">
1754                                            <status
1755                              v-bind:status="status"
1756                              v-bind:success="success"
1757                      ></status>
1758                                                                  <recharge-value-card
1759                              v-bind:status="status"
1760                              v-bind:success="success">
1761                      </recharge-value-card>
1762                                                                  <qrcode
1763                              v-bind:status="status"
1764                              v-bind:success="success"
1765                      ></qrcode>
1766                                          </div>
1767                  </div>
1768                </div>
1769            </div>
1770        </div>
1771
1772
1773<script type="text/x-template" id="message">
1774    <div v-if="!status.state && status.msg" class="inc-error-box">{{ status.msg }}</div>
1775</script>
vendor: 1 bytes, line 1775
1775
1776<script type="text/x-template" id="status">
1777    <div id="inc-value-check-response-details" class="inc-value-check-result-item" v-if="success.show">
1778            <h3>{{response.name}}</h3>
1779            <span class="voucher-price">
1780                <span class="currency-left">€</span>
1781                {{ response.currentValue }}
1782                <span class="currency-left"></span>
1783            </span>
1784            
1785                <p>{{response.shortDescription}}</p>
1786            
1787            <p class="voucher-redeem-date-info">
1788                <span><b>Ausstellungsdatum:</b> <span>{{response.issueDate}}</span></span><br/>
1789                <span><b>Gültig bis:</b> <span>{{response.validUntil}}</span></span>
1790            </p>
1791
1792        
1793    </div>
1794</script>
1794
1795
1796<script type="text/x-template" id="qrcode">
1797    <div id="inc-value-check-qr-code" class="inc-value-check-result-item" v-if="success.show">
1798            <h3>Download und im Wallet speichern</h3>
1799            <p></p>
1800            <div id="qr-code-outlet"></div>
1801            <a href="" id="qr-code-link" class="inc-download-link default-button"><span class="icon-download"></span>Download</a>
1802    </div>
1803</script>
1803
1804
1805<script type="text/x-template" id="booking">
1806    <div id="inc-value-check-info-booking" v-if="success.show" class="inc-value-check-result-item">
1807            {{response.code}}
1808            Code ist gültig. 
1809            <template v-if="response.master">
1810                Sie können den Artikel einlösen:  
1811                <a v-bind:href="response.variantTicketMaster.link">{{ response.variantTicketMaster.name }}</a>
1812                <button class="call-to-action" onclick="fetchProductVariants(openQuickbuy, response.master, true, '', true)"> Jetzt buchen </button>
1813            </template>
1814            <template v-else>
1815                Sie können den Artikel nun einlösen. 
1816            </template>
1817            <form id="applyVoucherForm" class="hidden" action="" method="post">
1818                <input type="text" name="gv_redeem_code" v-bind:value="response.code"/>
1819            </form>
1820    </div>
1821</script>
1821
1822
1823<script type="text/x-template" id="recharge-value-card">
1824  <div id="inc-value-check-recharge" class="inc-value-check-result-item" v-if="success.show && success.chargeLimits">
1825    <div class="inc-value-recharge-form" >
1826      <h3>Wertkarte beladen</h3>
1827      
1828        <p>Bitte tragen Sie den Wert ein, den Sie auf die Karte laden möchten. Sie werden dann in den Warenkorb weitergeleitet.</p>
1829      
1830      <form v-on:submit="validate" class="inc-form-inner ">
1831        <div class="inc-value-recharge-form-inner">
1832          <div class="form-field">
1833            <span class="currency-left">€</span>
1834            <input type="text" v-model="updateValue.value" :class="(updateValue.value ? 'not-empty' : '') + (updateValue.hasError ? ' invalid' : '')"
1835                   placeholder="Wert eingeben" required/>
1836            <span class="currency-right"></span>
1837          </div>
1838          <button class="button call-to-action" type="submit">Beladen</button>
1839        </div>
1840        <span class="error" v-if="updateValue.hasMinError">
1841          Der Mindestbetrag beträgt €{{success.chargeLimits.min}} 
1842        </span>
1843        <span class="error" v-if="updateValue.hasMaxError">
1844          Der Maximalbetrag beträgt €{{success.chargeLimits.min}} 
1845        </span>
1846      </form>
1847    </div>
1848  </div>
1849  
1850</script>
1850
1851
1852<script type="text/x-template" id="check-form">
1853    <form v-on:submit="validate" class="inc-form-inner inc-value-check-form">
1854        <div class="inc-value-check-form-inner">
1855            <div class="form-field">
1856                <input type="text" v-model="voucher.value" :class="(voucher.value ? 'not-empty' : '') + (voucher.hasError ? ' invalid' : '')"
1857                       placeholder="Code eingeben" required/>
1858            </div>
1859            <button class="button call-to-action" type="submit">Code überprüfen</button>
1860        </div>
1861        <div ref="captcha"></div>
1862    </form>
1863</script>
1863
1864
1865<script>
1866    window.addEventListener('DOMContentLoaded', function() {
1867
1868        Vue.component("status",
1869            {
1870                template: "#status",
1871                props: ["status", "success"],
1872                methods: {
1873                    applyVoucher: function(){
1874                        $('#applyVoucherForm').submit();
1875                    }
1876                }
1877            });
1878        Vue.component("booking",
1879            {
1880                template: "#booking",
1881                props: ["status", "success"]
1882            });
1883
1884        Vue.component("qrcode",
1885            {
1886                template: "#qrcode",
1887                props: ["status", "success"]
1888            });
1889
1890        Vue.component("message",
1891            {
1892                template: "#message",
1893                props: ["status", "success"]
1894            });
1895
1896        Vue.component("recharge-value-card",
1897            {
1898                template: "#recharge-value-card",
1899                props: ["status", "success"],
1900                data: function () {
1901                    let getParams = new URLSearchParams(location.search);
1902                    let rechargeValue = '';
1903                    if(getParams.has('code')){
1904                        rechargeValue = getParams.get('code');
1905                    }
1906                    return {
1907                        updateValue:
1908                            {
1909                                value: rechargeValue,
1910                                hasError: false,
1911                                hasMinError: false,
1912                                hasMaxError: false
1913                            }
1914                    }
1915                },
1916                methods:
1917                    {
1918                        validate: function (e) {
1919                            if(e) e.preventDefault();
1920                            this._data.updateValue.hasError = false;
1921                            let value = parseFloat(this._data.updateValue.value);
1922                            if (!this._data.updateValue.value || this._data.updateValue.value.trim() == "") {
1923                                this._data.updateValue.hasError = true;
1924                                return;
1925                            }
1926                            else {
1927                                if(value < voucherValueCheck.success.chargeLimits.min) {
1928                                    this._data.updateValue.hasMinError = true;
1929                                    this._data.updateValue.hasError = true;
1930                                    return;
1931                                }
1932                                else if(value > voucherValueCheck.success.chargeLimits.max) {
1933                                    this._data.updateValue.hasMaxError = true;
1934                                    this._data.updateValue.hasError = true;
1935                                    return;
1936                                }
1937                                var _this = this;
1938                                    _this.submitRequest(null);
1939                            }
1940                        },
1941                        submitRequest() {
1942                            var _this = this;
1943                            fetch("/api/frontend/shoppingCart/addCardRecharge", {
1944                                  method: "POST",
1945                                  body: JSON.stringify({
1946                                      cardCode: voucherValueCheck.success.code,
1947                                      rechargeAmount: parseFloat(this.updateValue.value)
1948                                  })
1949                                })
1950                                .then(async response => {
1951                                    const data = await response.json();
1952                                  if(response.status == 200) {
1953                                      location.href= data; //link to shoppingcart
1954                                  }
1955                                })
1956                                .catch((err) => {
1957                                    console.error(err);
1958                                });
1959                        }
1960                    }
1961            });
1962        Vue.component("check-form",
1963            {
1964                template: "#check-form",
1965                props: [],
1966                data: function () {
1967                    let getParams = new URLSearchParams(location.search);
1968                    let code = '';
1969                    if(getParams.has('code')){
1970                        code = getParams.get('code');
1971                    }
1972                    return {
1973                      attempt: {
1974                            current: currentRequestCount,
1975                            tracked: 0,
1976                            max: maxRequestCount
1977                        },
1978                        voucher:
1979                            {
1980                                value: code,
1981                                hasError: false
1982                            },
1983                        success: false,
1984                        captcha: {
1985                          instance: null
1986                        }
1987                    }
1988                },
1989                mounted: function(){
1990                    if(this.voucher.value != '')
1991                        this.validate(null, true);
1992                },
1993                methods:
1994                    {
1995                        renderQRCode: function (token) {
1996                            setTimeout(function () {
1997                                let url = window.location.origin + "/download_passbook.php?token=" + token;
1998
1999                                // QRCode can't handle strings in the length range of 192 - 220
2000                                // https://stackoverflow.com/questions/30796584/qrcode-js-error-code-length-overflow-17161056/73544657#comment123108831_34890253
2001                                if (url.length >= 192) {
2002                                    url = url.padEnd(220);
2003                                }
2004
2005                                $('#qr-code-outlet').html('');
2006                                new QRCode(
2007                                    document.getElementById("qr-code-outlet"),
2008                                    url);
2009                                document.getElementById("qr-code-link").setAttribute("href", url);
2010                            }, 200)
2011                        },
2012                        setStatus: function (msg, state) {
2013                            this.$emit(
2014                                'set-status',
2015                                {
2016                                    msg: msg,
2017                                    status: state
2018                                }
2019                            );
2020                        },
2021                        setSuccessMessage: function (response) {
2022                            if (typeof response !== "undefined") {
2023                                this.$emit(
2024                                    'set-success-message',
2025                                    {
2026                                        initialValue: response.initialValue,
2027                                        currentValue: response.currentValue,
2028                                        orderId: response.orderId,
2029                                        code: response.code,
2030                                        chargeLimits: response.chargeLimits,
2031                                        show: true
2032                                    }
2033                                );
2034                            } else {
2035                                this.$emit(
2036                                    'set-success-message',
2037                                    false
2038                                );
2039                            }
2040                        },
2041                        requiresCaptcha: function ()
2042                        {
2043                            return this._data.captcha.instance || (this._data.attempt.tracked + this._data.attempt.current >= this._data.attempt.max);
2044                        },
2045                        validate: function (e) {
2046                            if(e) e.preventDefault();
2047                            this._data.voucher.hasError = false;
2048                            this.setStatus("", false);
2049                            this.setSuccessMessage();
2050                            if (!this._data.voucher.value || this._data.voucher.value.trim() == "") {
2051                                this._data.voucher.hasError = true;
2052                                this.setStatus("Bitte geben Sie einen Code ein.", false);
2053                              }
2054                              else if(this.requiresCaptcha() && !this._data.captcha.instance.validate())
2055                              {
2056                                this.setStatus("", false);
2057                              }
2058                              else {
2059                                var _this = this;
2060                                  if (this.requiresCaptcha()) {
2061                                    this._data.captcha.instance.submit().then(function (captchaData) {
2062                                      _this.submitRequest(captchaData);
2063                                    });
2064                                }
2065                                else {
2066                                  _this.submitRequest(null);
2067                                }
2068                            }
2069                        },
2070                        submitRequest(captchaData) {
2071                            var _this = this;
2072                            const captchaParams = captchaData ? '?' + new URLSearchParams(captchaData).toString() : '';
2073
2074                            let voucherValue = _this._data.voucher.value.replaceAll("=", "%3D").replaceAll("&", "%26").replaceAll("?", "%3F").replaceAll("/", "%E2");
2075                            fetch("api/redeemapp/voucher/valueCheck/" + voucherValue + captchaParams)
2076                            .then(function (res) { return res.json(); })
2077                            .then(function (res) {
2078                                response = res;
2079                                try {
2080                                    if (parseInt(response.status) === -1) {
2081                                            _this.setStatus("Bitte überprüfen Sie die Captcha Eingabe.", false);
2082                                            // _this.increaseAttempt();
2083                                            _this.renderCaptcha();
2084                                    }
2085                                    else if (!response.status) {
2086                                        _this._data.voucher.hasError = true;
2087                                        _this.setStatus("Ungültiger Code.", false);
2088                                        _this.increaseAttempt();
2089                                    } else {
2090                                        if(response.variantTicketMaster) {
2091                                            response.master = {
2092                                                VARIANT_PRODUCT_IDS: response.variantTicketMaster.variants,
2093                                                PRODUCTS_IMAGE_POPUP: response.variantTicketMaster.image,
2094                                                PRODUCTS_LINK: response.variantTicketMaster.link,
2095                                                PRODUCTS_ID: response.variantTicketMaster.id,
2096                                                PRODUCTS_NAME: response.variantTicketMaster.name,
2097                                                PRODUCTS_IMAGE_ALT_TEXT: response.variantTicketMaster.imageAltText
2098                                            };
2099                                            presetVariant = response.assignedVariantTicketId;
2100                                        }
2101                                        _this.setSuccessMessage(response);
2102                                        if(response.pkpassToken) _this.renderQRCode(response.pkpassToken);
2103                                        $('#applyVoucherForm input[name=gv_redeem_code]').val(response.code);
2104                                        productsId = response.variantTicketMaster ? response.variantTicketMaster.id : '';
2105
2106                                        
2107
2108                                    }
2109                                    if (typeof crossDomainIframeResize === "function") setTimeout(function(){crossDomainIframeResize(false);}, 0);
2110                                } catch (exception) {
2111                                    if (exception instanceof SyntaxError) {
2112                                        _this.setStatus("Ein interner Fehler ist aufgetreten. Bitte versuchen Sie es erneut.", false);
2113                                         _this.increaseAttempt();
2114                                    }
2115                                    else {
2116                                        console.error(exception);
2117                                    }
2118                                }
2119                            }).catch(function (err) {
2120                                 if (err.response && err.response.data.code == "ERR_VOUCHER_CANCELED")
2121                                  {
2122                                      _this.setStatus("Dieser Artikel wurde storniert und kann nicht mehr eingelöst werden.", false);
2123                                  }
2124                                  else
2125                                  {
2126                                _this.increaseAttempt();
2127                                  }
2128                            });
2129                      },
2130                      increaseAttempt: function () {
2131                        this._data.attempt.tracked++;
2132
2133                        if (this._data.captcha.instance) {
2134                          this._data.captcha.instance.refresh();
2135                        }
2136                        else if (this.requiresCaptcha()) {
2137                          this.renderCaptcha();
2138                        }
2139                      },
2140                      renderCaptcha: function () {
2141                        var _this = this;
2142                        getCaptcha().then(function () {
2143                          _this._data.captcha.instance = IncCaptcha.render(_this.$refs.captcha);
2144                          _this.$refs.captcha.classList.add('captcha-container');
2145                        });
2146                      }
2147                    },
2148                    mounted: function () {
2149                      if (this.requiresCaptcha()) {
2150                        this.renderCaptcha();
2151                        }
2152                    }
2153            });
2154
2155        Vue.config.ignoredElements = ['d'];
2156
2157        var voucherValueCheck = new Vue(
2158            {
2159                el: "#inc-value-check",
2160                data:
2161                    {
2162                        status:
2163                            {
2164                                state: "",
2165                                msg: ""
2166                            },
2167                        success:
2168                            {
2169                                initialValue: "",
2170                                currentValue: "",
2171                                orderId: "",
2172                                show: false,
2173                                code: "",
2174                                chargeLimits: {
2175                                    min: null,
2176                                    max: null
2177                                },
2178                            },
2179                        downloadUrl: ""
2180                    },
2181                methods:
2182                    {
2183                        setStatus: function (status) {
2184                            this.status.state = status.state;
2185                            this.status.msg = status.msg;
2186                        },
2187                        setSuccessMessage: function (response) {
2188                            if (response) {
2189                                this.success.show = true;
2190                                this.success.initialValue = response.initialValue;
2191                                this.success.currentValue = response.currentValue;
2192                                this.success.orderId = response.orderId;
2193                                this.success.code = response.code;
2194                                this.success.chargeLimits = response.chargeLimits;
2195                            } else {
2196                                this.success.show = false;
2197                            }
2198                        }
2199                    }
2200            }
2201        );
2202    });
2203</script>
2203
2204
2205
2206            </div>
2207        </div>
2208    </div>
2209
2210                    </section>
2211                                                </div>
2212
2213            <!--Footer -->
2214                            <footer>
2215                                                <div class="footer-main-bar">
2216                                    <div class="inner-footer-main-bar inc-content-container cc-clear-padding-top-bottom">
2217                                                                                                                                                                                                            <div class="footer-content-links footer-column">
2218                                                
2219
2220
2221<div class="infobox-more">
2222  <h3>Info</h3>
2223  <div class="infobox-content-left">
2224    <ul class="content-links"><li><a class="content_link" href="https://gutscheine.cafe-wien.at/widerrufsformular"> Widerruf</a></li><li><a class="content_link" href="https://gutscheine.cafe-wien.at/versand-de"> Versand</a></li><li><a class="content_link" href="https://gutscheine.cafe-wien.at/datenschutz"> Datenschutz</a></li><li><a class="content_link" href="https://gutscheine.cafe-wien.at/agb"> AGB</a></li><li><a class="content_link" href="https://gutscheine.cafe-wien.at/impressum"> Impressum</a></li><li><a class="content_link" href="https://gutscheine.cafe-wien.at/kontakt"> Kontakt</a></li></ul>
2225      </div>
2226</div>
2227
2228                                            </div>
2229                                                                                <div class="footer-column footer-column-incert-logo">
2230                                            <!-- Incert Logo -->
2231                                            <div class="incert-logo" role="contentinfo" aria-label="author of the website">
2232    <span class="incert-logo-info ">eCommerce-System by</span>
2233        <a target="_blank" href="https://www.incert.at" class="incert-logo-link">
2234        <img class="regular-incert-logo" src="./images/incert-logo.png" alt="INCERT eTourismus GmbH" />
2235        <img class="hover-incert-logo" src="./images/incert-logo-green.png" alt="INCERT eTourismus GmbH hover" aria-hidden="true" />
2236    </a>
2237    </div>                                        </div>
2238                                    </div>
2239                                </div>
2240
2241                </footer>
2242                    </div>
2243
2244<script type="text/javascript" src="./templates/qwk/t1/javascript/localization/datepicker-de.js"></script>
vendor: 1 bytes, line 2244
2244
2245<script>
2246  let lightboxImages = [];
2247  let lightboxContent = [];
2248</script>
2248
2249<div id="inc-lightbox" class="inc-lightbox-overlay inc-lightbox-close">
2250
2251    <div class="inc-lightbox-inner">
2252        <button class="inc-lightbox-switch inc-prev" disabled></button>
2253        <button class="inc-lightbox-close"></button>
2254        <h3 class="inc-lightbox-header"></h3>
2255        <div class="inc-lightbox-content"></div>
2256
2257        <div class="inc-cart-info">
2258            <p class="inc-lightbox-message"></p>
2259            <div class="inc-lightbox-buttons">
2260                <button class="inc-lightbox-close">weitere Artikel</button>
2261                <div><a role="button" href="https://gutscheine.cafe-wien.at/warenkorb">zur Kasse</a></div>
2262            </div>
2263        </div>
2264
2265        <button class="inc-lightbox-switch inc-next" disabled></button>
2266    </div>
2267</div>
2268
2269<script type="text/html" id="inc-lightbox-reference">
2270    <div class="inc-lightbox-overlay inc-lightbox-close"></div>
2271    <div class="inc-lightbox-inner">
2272        <button class="inc-lightbox-close"></button>
2273        <div class="inc-cart-info">
2274            <p class="inc-lightbox-message">Message</p>
2275            <div class="inc-lightbox-buttons">
2276                <button class="inc-lightbox-close">weitere Artikel</button>
2277                <div><a role="button" href="https://gutscheine.cafe-wien.at/warenkorb">zur Kasse</a></div>
2278            </div>
2279        </div>
2280    </div>
2281</script>
2281
2282    
2283
2284
2285    
2285<script>var CURRENT_TEMPLATE = "qwk/t1";</script>
2285
2286    
2286<script>
2287        var $meta = $("<meta>").attr("name", "viewport").attr("content", "width=device-width");
2288        $("head").append($meta);
2289    </script>
2289
2290    
2291    
2291<script>
2292        //Systeme die in FB integriert sind und wenn man dort im Warenkorb auf "Bestellen" klickt,
2293        //dass man weitergeleitet wird in ein neues Fenster und nicht in FB
2294        if (window.parent.testFacebook && window.parent.testFacebook() == "true") {
2295            $().ready(function () {
2296                $("body").addClass("facebook");
2297                $(".total_sum_buttons div.button a.buttonLink").click(function () {
2298
2299                    window.open("?gotocat=checkout", "_blank");
2300                    window.location.href = "index.php";
2301
2302                    return false;
2303                });
2304            });
2305        }
2306    </script>
2306
2307     
2307<script>
2308    (function()
2309    {
2310        var div = document.createElement('DIV');
2311            div.setAttribute('style', 'display:none;');
2312            div.innerHTML = '<iframe id="inneriframe" width="1" height="1"></iframe>';
2313            document.body.appendChild(div);
2314    })();
2315     </script>
2315 </body> </html>

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.