PageSourceSearch

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

html cafe-wien.at collected 2026-10-02 07:19:02 UTC 101,048 bytes, 2,316 lines download raw bytes

1<!DOCTYPE html>
2<html dir='ltr' lang='en'>
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="en" />
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/en" />
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 = "edit cookies ";
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            'This website uses cookies to improve the user experience and to provide users with specific services and features. ' +
835            '<a href="https://gutscheine.cafe-wien.at/en/data-protection" target="_blank" rel="noopener" class="cookie-details">Show details</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">to main</a>
1095                <div class="inc-header-inner">
1096                                            
1097
1098<div class="box-header">
1099    <a href="https://gutscheine.cafe-wien.at/en" class="header-logo" >
1100        <img src="templates/qwk/images/exp_logo.png" alt="home" />
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" >to the 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           Our 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 ">
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 selected">
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/en/value-check" title="Value check" aria-label="Value check">
1152                        <i class="im icon-card" aria-hidden="true"></i>
1153                        <span class="inc-nav-link-caption">Value check</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/en/value-check" title="User account" aria-label="User account">
1160                <i class="im icon-card" aria-hidden="true"></i>
1161                <span class="inc-nav-link-caption">Value check</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/en/shoppingcart" 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"> Voucher Basket</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/en/shoppingcart">Your shopping cart</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            You do not have any products in your shopping cart yet.
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            Total
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/en/popup?coID=1" class="ajax popup">
1209                excl. shipping costs
1210            </a>
1211        </div>
1212                    </div>
1213
1214    
1215            <a class="call-to-action" href="https://gutscheine.cafe-wien.at/en/checkout-shop">Checkout</a>
1216    </div>
1217
1218<script>
1219  let showCartImage = "";
1220  let showCartItemQuantity = "";
1221  let showCartItemDelete = "";
1222  let pointSingleLabel = "Point";
1223  let pointsMultipleLabel = "Points";
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 ">
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 selected">
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">Open Navigation</span>
1280        <span class="navigation-toggle-responsive-close" style="display: none">Close Navigation</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                    JavaScript must be enabled in order for you to use this shop in standard view. However, it seems JavaScript is either disabled or not supported by your browser. To use standard view, enable JavaScript by changing your browser options.
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><br />
1334Welcome to the Querfeld gift shop!</h1>                                                           </div>
1335            </section>
1336                        
1337        
1338        
1339        
1340        
1341                                            
1342        
1343                                
1344
1345        
1346    <section class="inc-startpage-section infobox-cat-teaser ">
1347        <div class="inc-content-container">
1348
1349                        
1350            
1350<script>
1351              async function getCat(callback, id){
1352                let d = new Date();
1353                await $.ajax({
1354                  url: appendSubShopId("api/frontend/eventSequence?includeLinks&includeEventDates&eventDateLimit=10&q=eq(categoryId," + id + ")sort(%2BexternalId)&eventDateFrom=" + (d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate())),
1355                  async:true,
1356                  success: (data) =>{
1357                    callback(true, id, data);
1358                  },
1359                  error: () => {
1360                    callback(false);
1361                  }
1362                });
1363              }
1364
1365              function renderEventSequence(success, id, data){
1366                if(success){
1367                  if(data.length > 0){
1368                    $("#inc-category-item-"+id+" > .inc-category-item-inner").append('<div id="inc-event-sequences-{$id}"></div>');
1369                    for (let i = 0; i < data.length; i++) {
1370                      if(!data[i].hasOwnProperty("eventDates")) continue;
1371                      for (let j = 0; j < data[i].eventDates.length; j++) {
1372                        let object = data[i].eventDates[j];
1373                        for (let item of object.eventProducts) {
1374                          if(!data[i].hasOwnProperty("eventProductLink")) {
1375
1376                            let salesStartArray = (''+object.salesStart).split(/[- :]/);
1377                            let salesEndArray = (''+object.salesEnd).split(/[- :]/);
1378                            object.salesStart = new Date(salesStartArray[0], salesStartArray[1]-1, salesStartArray[2], salesStartArray[3], salesStartArray[4], salesStartArray[5]);
1379                            object.salesEnd = new Date(salesEndArray[0], salesEndArray[1]-1, salesEndArray[2], salesEndArray[3], salesEndArray[4], salesEndArray[5]);
1380
1381                            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())) {
1382                              data[i].eventProductLink = item.productLink;
1383                            }
1384                          } else break;
1385                        }
1386                      }
1387                      let object = data[i], image;
1388                      object.sequenceImage == null ? image = object.image : image = object.sequenceImage;
1389                      if(!object.hasOwnProperty("eventProductLink")) continue;
1390                      $("#inc-event-sequences-"+id).append(`
1391                        <div class="inc-event-item">
1392                          <div class="inc-event-image">
1393                            <img src="${image}"/>
1394                          </div>
1395                          <div class="inc-event-inner">
1396                            <h2>${object.name}</h2>
1397                            <p>${object.description.substr(0, 200) + "\u2026"}</p>
1398                            <a class="call-to-action" href="${object.eventProductLink}"></a>
1399                          </div>
1400                        </div>`);
1401                    }
1402                    if (typeof $.fn.slick !== "undefined") {
1403                      $("#inc-event-sequences-"+id).slick({
1404                        arrows: true,
1405                        dots: true,
1406                        slidesToShow: 3,
1407                        slidesToScroll: 3,
1408                        infinite: true,
1409                        responsive: [
1410                          {
1411                            breakpoint: oneColumnWindowWidth,
1412                            settings: {
1413                              swipeToSlide: true,
1414                              slidesToShow: 1
1415                            }
1416                          }
1417                        ]
1418                      });
1419                    }
1420                  }
1421                } else{
1422                  console.log("yikes!");
1423                }
1424              }
1425            </script>
1425
1426            
1427
1428                             <h2 class="contentsTopicsStartpage">Our categories</h2>                <div class="inc-category-list-item-wrapper">
1429                    <!--
1430                                                                                                                                        -->
1431                    <!-- Different data, so different calls (if) -->
1432
1433
1434
1435<a class="inc-category-item" id="inc-category-item-32" href="https://gutscheine.cafe-wien.at/en/cafe-landtmann" >
1436        <div class="inc-category-item-inner">
1437            <div class="inc-category-item-image">
1438                                    <img src="templates/qwk/images/categories/32.jpg" alt="" title=""/>
1439                            </div>
1440            <div class="inc-category-item-desc">
1441                <div class="inc-category-item-desc-inner">
1442                    <h3>
1443                                                    Café Landtmann
1444                                            </h3>
1445                                            
1446                                                                                    <div class="inc-category-item-more-link">
1447                                    show more
1448                                </div>
1449                                                                                        </div>
1450            </div>
1451                </div>
1452</a>                    <!--
1453                                                                                                                -->
1454                    <!-- Different data, so different calls (if) -->
1455
1456
1457
1458<a class="inc-category-item" id="inc-category-item-36" href="https://gutscheine.cafe-wien.at/en/cafe-museum" >
1459        <div class="inc-category-item-inner">
1460            <div class="inc-category-item-image">
1461                                    <img src="templates/qwk/images/categories/36.jpg" alt="" title=""/>
1462                            </div>
1463            <div class="inc-category-item-desc">
1464                <div class="inc-category-item-desc-inner">
1465                    <h3>
1466                                                    Café Museum
1467                                            </h3>
1468                                            
1469                                                                                    <div class="inc-category-item-more-link">
1470                                    show more
1471                                </div>
1472                                                                                        </div>
1473            </div>
1474                </div>
1475</a>                    <!--
1476                                                                                                                -->
1477                    <!-- Different data, so different calls (if) -->
1478
1479
1480
1481<a class="inc-category-item" id="inc-category-item-40" href="https://gutscheine.cafe-wien.at/en/cafe-mozart" >
1482        <div class="inc-category-item-inner">
1483            <div class="inc-category-item-image">
1484                                    <img src="templates/qwk/images/categories/40.jpg" alt="" title=""/>
1485                            </div>
1486            <div class="inc-category-item-desc">
1487                <div class="inc-category-item-desc-inner">
1488                    <h3>
1489                                                    Café Mozart
1490                                            </h3>
1491                                            
1492                                                                                    <div class="inc-category-item-more-link">
1493                                    show more
1494                                </div>
1495                                                                                        </div>
1496            </div>
1497                </div>
1498</a>                    <!--
1499                                                                                                                -->
1500                    <!-- Different data, so different calls (if) -->
1501
1502
1503
1504<a class="inc-category-item" id="inc-category-item-44" href="https://gutscheine.cafe-wien.at/en/crossfields" >
1505        <div class="inc-category-item-inner">
1506            <div class="inc-category-item-image">
1507                                    <img src="templates/qwk/images/categories/44.jpg" alt="" title=""/>
1508                            </div>
1509            <div class="inc-category-item-desc">
1510                <div class="inc-category-item-desc-inner">
1511                    <h3>
1512                                                    Crossfield's
1513                                            </h3>
1514                                            
1515                                                                                    <div class="inc-category-item-more-link">
1516                                    show more
1517                                </div>
1518                                                                                        </div>
1519            </div>
1520                </div>
1521</a>                    <!--
1522                                                                                                                -->
1523                    <!-- Different data, so different calls (if) -->
1524
1525
1526
1527<a class="inc-category-item" id="inc-category-item-52" href="https://gutscheine.cafe-wien.at/en/bootshaus" >
1528        <div class="inc-category-item-inner">
1529            <div class="inc-category-item-image">
1530                                    <img src="templates/qwk/images/categories/52.jpg" alt="" title=""/>
1531                            </div>
1532            <div class="inc-category-item-desc">
1533                <div class="inc-category-item-desc-inner">
1534                    <h3>
1535                                                    Bootshaus
1536                                            </h3>
1537                                            
1538                                                                                    <div class="inc-category-item-more-link">
1539                                    show more
1540                                </div>
1541                                                                                        </div>
1542            </div>
1543                </div>
1544</a>                    <!--
1545                                                                                                                -->
1546                    <!-- Different data, so different calls (if) -->
1547
1548
1549
1550<a class="inc-category-item" id="inc-category-item-56" href="https://gutscheine.cafe-wien.at/en/napoleon" >
1551        <div class="inc-category-item-inner">
1552            <div class="inc-category-item-image">
1553                                    <img src="templates/qwk/images/categories/56.jpg" alt="" title=""/>
1554                            </div>
1555            <div class="inc-category-item-desc">
1556                <div class="inc-category-item-desc-inner">
1557                    <h3>
1558                                                    Napoleon
1559                                            </h3>
1560                                            
1561                                                                                    <div class="inc-category-item-more-link">
1562                                    show more
1563                                </div>
1564                                                                                        </div>
1565            </div>
1566                </div>
1567</a>                    <!--
1568                                                                                                                -->
1569                    <!-- Different data, so different calls (if) -->
1570
1571
1572
1573<a class="inc-category-item" id="inc-category-item-60" href="https://gutscheine.cafe-wien.at/en?cat=c60_.html" >
1574        <div class="inc-category-item-inner">
1575            <div class="inc-category-item-image">
1576                                    <img src="templates/qwk/images/categories/60.jpg" alt="" title=""/>
1577                            </div>
1578            <div class="inc-category-item-desc">
1579                <div class="inc-category-item-desc-inner">
1580                    <h3>
1581                                                    
1582                                            </h3>
1583                                            
1584                                                                                    <div class="inc-category-item-more-link">
1585                                    show more
1586                                </div>
1587                                                                                        </div>
1588            </div>
1589                </div>
1590</a>                    <!--
1591                                                                            -->
1592                </div>
1593                    </div>
1594    </section>
1595    
1595<script>
1596        const max_category_items = 3;
1597    </script>
1597
1598    
1598<script type="text/javascript" src="./templates/qwk/t1/javascript/category-list-fill-row.js"></script>
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        
1627<div id="inc-faq-container">
1628    <div class="inc-content-container">
1629        <h2 class="contentsTopicsStartpage">FAQ</h2>
1630        <div id="inc-faq-accordion" class="accordion faq"></div>
1631    </div>
1632</div>
1633
1634<script>
1635    let filterSection = "startpage";
1636    let filterProduct = "";
1637    let filterCategory = "";
1638
1639    let filterParentProduct = "";
1640</script>
1640
1641
1642<script>
1643    let faqUrl= "api/frontend/faq";
1644
1645    if(filterSection !== '') faqUrl += "/" + filterSection;
1646    
1647    if(filterParentProduct !== '') faqUrl += "?product=" + filterParentProduct;
1648    else if(filterProduct !== '') faqUrl += "?product=" + filterProduct;
1649    
1650    if(filterCategory !== '' && filterProduct == '') faqUrl += "?category=" + filterCategory;
1651    else if(filterCategory !== '') faqUrl += "&category=" + filterCategory;
1652
1653    $().ready(function() {
1654        getFaqData();
1655    });
1656    async function getFaqData() {
1657        await $.ajax({
1658            url: appendSubShopId(faqUrl),
1659            async: true,
1660            success: (data) => {
1661                if(data.length > 0) {
1662                    //FAQ SCHEMA (SEO)
1663                    const script = document.createElement('script');
1664                    script.setAttribute('type', 'application/ld+json');
1665                    var schemaData = {
1666                        "@context":"https://schema.org",
1667                        "@type":"FAQPage",
1668                        "mainEntity":[]
1669                    };
1670
1671                    //All Questions and answers
1672                    for (let i = 0; i < data.length; i++) {
1673                      let accordionRowButton = `<button type="button" aria-expanded="false" class="accordion-button"
1674                            aria-controls="sect${i}" id="accordion-sect-${i}">${data[i].question}</button>`;
1675
1676                      let accordionRowInner = `<div id="sect${i}" role="region" aria-labelledby="accordion-sect-${i}"
1677                            class="accordion-content" style="height:0;"><div class="accordion-content-inner">${data[i].answer}</div></div>`;
1678                      $('#inc-faq-accordion').append($('<div class="accordion-section"></div>').append(accordionRowButton).append(accordionRowInner));
1679
1680
1681                        //FAQ schema (SEO)s
1682                        schemaData.mainEntity.push({
1683                                "@type":"Question",
1684                                "name":data[i].question,
1685                                "acceptedAnswer": {
1686                                    "@type": "Answer",
1687                                    "text":data[i].answer
1688                    }
1689                        });
1690                    }
1691
1692                    //FAQ schema (SEO)
1693                    script.textContent = JSON.stringify(schemaData);
1694                    document.head.appendChild(script);
1695                } else {
1696                    $('#inc-faq-container').hide();
1697                }
1698            },
1699            error: () => {
1700                console.log('error getting faq');
1701
1702                $('#inc-faq-container').hide();
1703            }
1704        });
1705    }
1706</script>
1706
1707</div>
1708                                
1709
1710                                                    
1711                                                        <section class="inc-section-value-check">
1712                        
1713
1714
1715
1716    <div class="infobox-value-check">
1717        <div class="inc-content-container">
1718                            <h2>
1719                                            Value check & digital storage
1720                                    </h2>
1721                        <div class="infobox-content">
1722                
1723
1724<script src="./templates/qwk/t1/javascript/libs/vue/vue.js"></script>
vendor: 1 bytes, line 1724
1724
1725<script src="./templates/qwk/t1/javascript/libs/qrcodejs/qrcodejs.js"></script>
vendor: 1 bytes, line 1725
1725
1726<script type="text/javascript" src="./templates/qwk/t1/javascript/getCaptcha.js"></script>
1726
1727
1728<script>
1729    const currentRequestCount = null;
1730        const maxRequestCount = 3;
1731</script>
1731
1732        <div id="inc-value-check">
1733            <div class="inc-voucher-lookup-container">
1734                <div class="inc-value-check-form">
1735                  <div class="inc-content-container">
1736                                                <p>
1737                                                                Enter the barcode / QR code, check the value and save it in the wallet on your smartphone.
1738                                                        </p>
1739                                              <message
1740                                v-bind:status="status"
1741                        ></message>
1742                        <check-form
1743                                v-on:set-status="setStatus"
1744                                v-on:set-success-message="setSuccessMessage"
1745                        ></check-form>
1746                    </div>
1747                </div>
1748                <div class="inc-value-check-result " v-if="success.show">
1749                  <div class="inc-content-container">
1750                                        <booking
1751                            v-bind:status="status"
1752                            v-bind:success="success">
1753                    </booking>
1754                                        <div class="inc-value-check-result-inner ">
1755                                            <status
1756                              v-bind:status="status"
1757                              v-bind:success="success"
1758                      ></status>
1759                                                                  <recharge-value-card
1760                              v-bind:status="status"
1761                              v-bind:success="success">
1762                      </recharge-value-card>
1763                                                                  <qrcode
1764                              v-bind:status="status"
1765                              v-bind:success="success"
1766                      ></qrcode>
1767                                          </div>
1768                  </div>
1769                </div>
1770            </div>
1771        </div>
1772
1773
1774<script type="text/x-template" id="message">
1775    <div v-if="!status.state && status.msg" class="inc-error-box">{{ status.msg }}</div>
1776</script>
vendor: 1 bytes, line 1776
1776
1777<script type="text/x-template" id="status">
1778    <div id="inc-value-check-response-details" class="inc-value-check-result-item" v-if="success.show">
1779            <h3>{{response.name}}</h3>
1780            <span class="voucher-price">
1781                <span class="currency-left">€</span>
1782                {{ response.currentValue }}
1783                <span class="currency-left"></span>
1784            </span>
1785            
1786                <p>{{response.shortDescription}}</p>
1787            
1788            <p class="voucher-redeem-date-info">
1789                <span><b>Issue date:</b> <span>{{response.issueDate}}</span></span><br/>
1790                <span><b>Valid until:</b> <span>{{response.validUntil}}</span></span>
1791            </p>
1792
1793        
1794    </div>
1795</script>
1795
1796
1797<script type="text/x-template" id="qrcode">
1798    <div id="inc-value-check-qr-code" class="inc-value-check-result-item" v-if="success.show">
1799            <h3>Download and save in wallet.</h3>
1800            <p></p>
1801            <div id="qr-code-outlet"></div>
1802            <a href="" id="qr-code-link" class="inc-download-link default-button"><span class="icon-download"></span>Download</a>
1803    </div>
1804</script>
1804
1805
1806<script type="text/x-template" id="booking">
1807    <div id="inc-value-check-info-booking" v-if="success.show" class="inc-value-check-result-item">
1808            {{response.code}}
1809            Code is valid. 
1810            <template v-if="response.master">
1811                You can redeem the item:  
1812                <a v-bind:href="response.variantTicketMaster.link">{{ response.variantTicketMaster.name }}</a>
1813                <button class="call-to-action" onclick="fetchProductVariants(openQuickbuy, response.master, true, '', true)"> Book now </button>
1814            </template>
1815            <template v-else>
1816                You can redeem the item now. 
1817            </template>
1818            <form id="applyVoucherForm" class="hidden" action="" method="post">
1819                <input type="text" name="gv_redeem_code" v-bind:value="response.code"/>
1820            </form>
1821    </div>
1822</script>
1822
1823
1824<script type="text/x-template" id="recharge-value-card">
1825  <div id="inc-value-check-recharge" class="inc-value-check-result-item" v-if="success.show && success.chargeLimits">
1826    <div class="inc-value-recharge-form" >
1827      <h3>Recharge prepaid card</h3>
1828      
1829        <p>Here you can easily recharge your value card</p>
1830      
1831      <form v-on:submit="validate" class="inc-form-inner ">
1832        <div class="inc-value-recharge-form-inner">
1833          <div class="form-field">
1834            <span class="currency-left">€</span>
1835            <input type="text" v-model="updateValue.value" :class="(updateValue.value ? 'not-empty' : '') + (updateValue.hasError ? ' invalid' : '')"
1836                   placeholder="Enter value" required/>
1837            <span class="currency-right"></span>
1838          </div>
1839          <button class="button call-to-action" type="submit">Recharge</button>
1840        </div>
1841        <span class="error" v-if="updateValue.hasMinError">
1842          The minimum amount is €{{success.chargeLimits.min}} 
1843        </span>
1844        <span class="error" v-if="updateValue.hasMaxError">
1845          The maximum amount is €{{success.chargeLimits.min}} 
1846        </span>
1847      </form>
1848    </div>
1849  </div>
1850  
1851</script>
1851
1852
1853<script type="text/x-template" id="check-form">
1854    <form v-on:submit="validate" class="inc-form-inner inc-value-check-form">
1855        <div class="inc-value-check-form-inner">
1856            <div class="form-field">
1857                <input type="text" v-model="voucher.value" :class="(voucher.value ? 'not-empty' : '') + (voucher.hasError ? ' invalid' : '')"
1858                       placeholder="Enter code." required/>
1859            </div>
1860            <button class="button call-to-action" type="submit">Verify Code</button>
1861        </div>
1862        <div ref="captcha"></div>
1863    </form>
1864</script>
1864
1865
1866<script>
1867    window.addEventListener('DOMContentLoaded', function() {
1868
1869        Vue.component("status",
1870            {
1871                template: "#status",
1872                props: ["status", "success"],
1873                methods: {
1874                    applyVoucher: function(){
1875                        $('#applyVoucherForm').submit();
1876                    }
1877                }
1878            });
1879        Vue.component("booking",
1880            {
1881                template: "#booking",
1882                props: ["status", "success"]
1883            });
1884
1885        Vue.component("qrcode",
1886            {
1887                template: "#qrcode",
1888                props: ["status", "success"]
1889            });
1890
1891        Vue.component("message",
1892            {
1893                template: "#message",
1894                props: ["status", "success"]
1895            });
1896
1897        Vue.component("recharge-value-card",
1898            {
1899                template: "#recharge-value-card",
1900                props: ["status", "success"],
1901                data: function () {
1902                    let getParams = new URLSearchParams(location.search);
1903                    let rechargeValue = '';
1904                    if(getParams.has('code')){
1905                        rechargeValue = getParams.get('code');
1906                    }
1907                    return {
1908                        updateValue:
1909                            {
1910                                value: rechargeValue,
1911                                hasError: false,
1912                                hasMinError: false,
1913                                hasMaxError: false
1914                            }
1915                    }
1916                },
1917                methods:
1918                    {
1919                        validate: function (e) {
1920                            if(e) e.preventDefault();
1921                            this._data.updateValue.hasError = false;
1922                            let value = parseFloat(this._data.updateValue.value);
1923                            if (!this._data.updateValue.value || this._data.updateValue.value.trim() == "") {
1924                                this._data.updateValue.hasError = true;
1925                                return;
1926                            }
1927                            else {
1928                                if(value < voucherValueCheck.success.chargeLimits.min) {
1929                                    this._data.updateValue.hasMinError = true;
1930                                    this._data.updateValue.hasError = true;
1931                                    return;
1932                                }
1933                                else if(value > voucherValueCheck.success.chargeLimits.max) {
1934                                    this._data.updateValue.hasMaxError = true;
1935                                    this._data.updateValue.hasError = true;
1936                                    return;
1937                                }
1938                                var _this = this;
1939                                    _this.submitRequest(null);
1940                            }
1941                        },
1942                        submitRequest() {
1943                            var _this = this;
1944                            fetch("/api/frontend/shoppingCart/addCardRecharge", {
1945                                  method: "POST",
1946                                  body: JSON.stringify({
1947                                      cardCode: voucherValueCheck.success.code,
1948                                      rechargeAmount: parseFloat(this.updateValue.value)
1949                                  })
1950                                })
1951                                .then(async response => {
1952                                    const data = await response.json();
1953                                  if(response.status == 200) {
1954                                      location.href= data; //link to shoppingcart
1955                                  }
1956                                })
1957                                .catch((err) => {
1958                                    console.error(err);
1959                                });
1960                        }
1961                    }
1962            });
1963        Vue.component("check-form",
1964            {
1965                template: "#check-form",
1966                props: [],
1967                data: function () {
1968                    let getParams = new URLSearchParams(location.search);
1969                    let code = '';
1970                    if(getParams.has('code')){
1971                        code = getParams.get('code');
1972                    }
1973                    return {
1974                      attempt: {
1975                            current: currentRequestCount,
1976                            tracked: 0,
1977                            max: maxRequestCount
1978                        },
1979                        voucher:
1980                            {
1981                                value: code,
1982                                hasError: false
1983                            },
1984                        success: false,
1985                        captcha: {
1986                          instance: null
1987                        }
1988                    }
1989                },
1990                mounted: function(){
1991                    if(this.voucher.value != '')
1992                        this.validate(null, true);
1993                },
1994                methods:
1995                    {
1996                        renderQRCode: function (token) {
1997                            setTimeout(function () {
1998                                let url = window.location.origin + "/download_passbook.php?token=" + token;
1999
2000                                // QRCode can't handle strings in the length range of 192 - 220
2001                                // https://stackoverflow.com/questions/30796584/qrcode-js-error-code-length-overflow-17161056/73544657#comment123108831_34890253
2002                                if (url.length >= 192) {
2003                                    url = url.padEnd(220);
2004                                }
2005
2006                                $('#qr-code-outlet').html('');
2007                                new QRCode(
2008                                    document.getElementById("qr-code-outlet"),
2009                                    url);
2010                                document.getElementById("qr-code-link").setAttribute("href", url);
2011                            }, 200)
2012                        },
2013                        setStatus: function (msg, state) {
2014                            this.$emit(
2015                                'set-status',
2016                                {
2017                                    msg: msg,
2018                                    status: state
2019                                }
2020                            );
2021                        },
2022                        setSuccessMessage: function (response) {
2023                            if (typeof response !== "undefined") {
2024                                this.$emit(
2025                                    'set-success-message',
2026                                    {
2027                                        initialValue: response.initialValue,
2028                                        currentValue: response.currentValue,
2029                                        orderId: response.orderId,
2030                                        code: response.code,
2031                                        chargeLimits: response.chargeLimits,
2032                                        show: true
2033                                    }
2034                                );
2035                            } else {
2036                                this.$emit(
2037                                    'set-success-message',
2038                                    false
2039                                );
2040                            }
2041                        },
2042                        requiresCaptcha: function ()
2043                        {
2044                            return this._data.captcha.instance || (this._data.attempt.tracked + this._data.attempt.current >= this._data.attempt.max);
2045                        },
2046                        validate: function (e) {
2047                            if(e) e.preventDefault();
2048                            this._data.voucher.hasError = false;
2049                            this.setStatus("", false);
2050                            this.setSuccessMessage();
2051                            if (!this._data.voucher.value || this._data.voucher.value.trim() == "") {
2052                                this._data.voucher.hasError = true;
2053                                this.setStatus("Please enter a code.", false);
2054                              }
2055                              else if(this.requiresCaptcha() && !this._data.captcha.instance.validate())
2056                              {
2057                                this.setStatus("", false);
2058                              }
2059                              else {
2060                                var _this = this;
2061                                  if (this.requiresCaptcha()) {
2062                                    this._data.captcha.instance.submit().then(function (captchaData) {
2063                                      _this.submitRequest(captchaData);
2064                                    });
2065                                }
2066                                else {
2067                                  _this.submitRequest(null);
2068                                }
2069                            }
2070                        },
2071                        submitRequest(captchaData) {
2072                            var _this = this;
2073                            const captchaParams = captchaData ? '?' + new URLSearchParams(captchaData).toString() : '';
2074
2075                            let voucherValue = _this._data.voucher.value.replaceAll("=", "%3D").replaceAll("&", "%26").replaceAll("?", "%3F").replaceAll("/", "%E2");
2076                            fetch("api/redeemapp/voucher/valueCheck/" + voucherValue + captchaParams)
2077                            .then(function (res) { return res.json(); })
2078                            .then(function (res) {
2079                                response = res;
2080                                try {
2081                                    if (parseInt(response.status) === -1) {
2082                                            _this.setStatus("Please check the captcha input.", false);
2083                                            // _this.increaseAttempt();
2084                                            _this.renderCaptcha();
2085                                    }
2086                                    else if (!response.status) {
2087                                        _this._data.voucher.hasError = true;
2088                                        _this.setStatus("Invalid code.", false);
2089                                        _this.increaseAttempt();
2090                                    } else {
2091                                        if(response.variantTicketMaster) {
2092                                            response.master = {
2093                                                VARIANT_PRODUCT_IDS: response.variantTicketMaster.variants,
2094                                                PRODUCTS_IMAGE_POPUP: response.variantTicketMaster.image,
2095                                                PRODUCTS_LINK: response.variantTicketMaster.link,
2096                                                PRODUCTS_ID: response.variantTicketMaster.id,
2097                                                PRODUCTS_NAME: response.variantTicketMaster.name,
2098                                                PRODUCTS_IMAGE_ALT_TEXT: response.variantTicketMaster.imageAltText
2099                                            };
2100                                            presetVariant = response.assignedVariantTicketId;
2101                                        }
2102                                        _this.setSuccessMessage(response);
2103                                        if(response.pkpassToken) _this.renderQRCode(response.pkpassToken);
2104                                        $('#applyVoucherForm input[name=gv_redeem_code]').val(response.code);
2105                                        productsId = response.variantTicketMaster ? response.variantTicketMaster.id : '';
2106
2107                                        
2108
2109                                    }
2110                                    if (typeof crossDomainIframeResize === "function") setTimeout(function(){crossDomainIframeResize(false);}, 0);
2111                                } catch (exception) {
2112                                    if (exception instanceof SyntaxError) {
2113                                        _this.setStatus("An internal error has occurred. Please try again.", false);
2114                                         _this.increaseAttempt();
2115                                    }
2116                                    else {
2117                                        console.error(exception);
2118                                    }
2119                                }
2120                            }).catch(function (err) {
2121                                 if (err.response && err.response.data.code == "ERR_VOUCHER_CANCELED")
2122                                  {
2123                                      _this.setStatus("This item has been cancelled and can no longer be redeemed.", false);
2124                                  }
2125                                  else
2126                                  {
2127                                _this.increaseAttempt();
2128                                  }
2129                            });
2130                      },
2131                      increaseAttempt: function () {
2132                        this._data.attempt.tracked++;
2133
2134                        if (this._data.captcha.instance) {
2135                          this._data.captcha.instance.refresh();
2136                        }
2137                        else if (this.requiresCaptcha()) {
2138                          this.renderCaptcha();
2139                        }
2140                      },
2141                      renderCaptcha: function () {
2142                        var _this = this;
2143                        getCaptcha().then(function () {
2144                          _this._data.captcha.instance = IncCaptcha.render(_this.$refs.captcha);
2145                          _this.$refs.captcha.classList.add('captcha-container');
2146                        });
2147                      }
2148                    },
2149                    mounted: function () {
2150                      if (this.requiresCaptcha()) {
2151                        this.renderCaptcha();
2152                        }
2153                    }
2154            });
2155
2156        Vue.config.ignoredElements = ['d'];
2157
2158        var voucherValueCheck = new Vue(
2159            {
2160                el: "#inc-value-check",
2161                data:
2162                    {
2163                        status:
2164                            {
2165                                state: "",
2166                                msg: ""
2167                            },
2168                        success:
2169                            {
2170                                initialValue: "",
2171                                currentValue: "",
2172                                orderId: "",
2173                                show: false,
2174                                code: "",
2175                                chargeLimits: {
2176                                    min: null,
2177                                    max: null
2178                                },
2179                            },
2180                        downloadUrl: ""
2181                    },
2182                methods:
2183                    {
2184                        setStatus: function (status) {
2185                            this.status.state = status.state;
2186                            this.status.msg = status.msg;
2187                        },
2188                        setSuccessMessage: function (response) {
2189                            if (response) {
2190                                this.success.show = true;
2191                                this.success.initialValue = response.initialValue;
2192                                this.success.currentValue = response.currentValue;
2193                                this.success.orderId = response.orderId;
2194                                this.success.code = response.code;
2195                                this.success.chargeLimits = response.chargeLimits;
2196                            } else {
2197                                this.success.show = false;
2198                            }
2199                        }
2200                    }
2201            }
2202        );
2203    });
2204</script>
2204
2205
2206
2207            </div>
2208        </div>
2209    </div>
2210
2211                    </section>
2212                                                </div>
2213
2214            <!--Footer -->
2215                            <footer>
2216                                                <div class="footer-main-bar">
2217                                    <div class="inner-footer-main-bar inc-content-container cc-clear-padding-top-bottom">
2218                                                                                                                                                                                                            <div class="footer-content-links footer-column">
2219                                                
2220
2221
2222<div class="infobox-more">
2223  <h3>Info</h3>
2224  <div class="infobox-content-left">
2225    <ul class="content-links"><li><a class="content_link" href="https://gutscheine.cafe-wien.at/en/withdrawal-form"> Withdrawal</a></li><li><a class="content_link" href="https://gutscheine.cafe-wien.at/en/postage-costs"> Postage</a></li><li><a class="content_link" href="https://gutscheine.cafe-wien.at/en/data-protection"> Privacy</a></li><li><a class="content_link" href="https://gutscheine.cafe-wien.at/en/general-terms-and-conditions"> General terms and conditions</a></li><li><a class="content_link" href="https://gutscheine.cafe-wien.at/en/imprint"> Imprint</a></li><li><a class="content_link" href="https://gutscheine.cafe-wien.at/en/contact"> Contact</a></li></ul>
2226      </div>
2227</div>
2228
2229                                            </div>
2230                                                                                <div class="footer-column footer-column-incert-logo">
2231                                            <!-- Incert Logo -->
2232                                            <div class="incert-logo" role="contentinfo" aria-label="author of the website">
2233    <span class="incert-logo-info ">eCommerce-System by</span>
2234        <a target="_blank" href="https://www.incert.at" class="incert-logo-link">
2235        <img class="regular-incert-logo" src="./images/incert-logo.png" alt="INCERT eTourismus GmbH" />
2236        <img class="hover-incert-logo" src="./images/incert-logo-green.png" alt="INCERT eTourismus GmbH hover" aria-hidden="true" />
2237    </a>
2238    </div>                                        </div>
2239                                    </div>
2240                                </div>
2241
2242                </footer>
2243                    </div>
2244
2245<script type="text/javascript" src="./templates/qwk/t1/javascript/localization/datepicker-en.js"></script>
vendor: 1 bytes, line 2245
2245
2246<script>
2247  let lightboxImages = [];
2248  let lightboxContent = [];
2249</script>
2249
2250<div id="inc-lightbox" class="inc-lightbox-overlay inc-lightbox-close">
2251
2252    <div class="inc-lightbox-inner">
2253        <button class="inc-lightbox-switch inc-prev" disabled></button>
2254        <button class="inc-lightbox-close"></button>
2255        <h3 class="inc-lightbox-header"></h3>
2256        <div class="inc-lightbox-content"></div>
2257
2258        <div class="inc-cart-info">
2259            <p class="inc-lightbox-message"></p>
2260            <div class="inc-lightbox-buttons">
2261                <button class="inc-lightbox-close">more vouchers</button>
2262                <div><a role="button" href="https://gutscheine.cafe-wien.at/en/shoppingcart">checkout</a></div>
2263            </div>
2264        </div>
2265
2266        <button class="inc-lightbox-switch inc-next" disabled></button>
2267    </div>
2268</div>
2269
2270<script type="text/html" id="inc-lightbox-reference">
2271    <div class="inc-lightbox-overlay inc-lightbox-close"></div>
2272    <div class="inc-lightbox-inner">
2273        <button class="inc-lightbox-close"></button>
2274        <div class="inc-cart-info">
2275            <p class="inc-lightbox-message">Message</p>
2276            <div class="inc-lightbox-buttons">
2277                <button class="inc-lightbox-close">more vouchers</button>
2278                <div><a role="button" href="https://gutscheine.cafe-wien.at/en/shoppingcart">checkout</a></div>
2279            </div>
2280        </div>
2281    </div>
2282</script>
2282
2283    
2284
2285
2286    
2286<script>var CURRENT_TEMPLATE = "qwk/t1";</script>
2286
2287    
2287<script>
2288        var $meta = $("<meta>").attr("name", "viewport").attr("content", "width=device-width");
2289        $("head").append($meta);
2290    </script>
2290
2291    
2292    
2292<script>
2293        //Systeme die in FB integriert sind und wenn man dort im Warenkorb auf "Bestellen" klickt,
2294        //dass man weitergeleitet wird in ein neues Fenster und nicht in FB
2295        if (window.parent.testFacebook && window.parent.testFacebook() == "true") {
2296            $().ready(function () {
2297                $("body").addClass("facebook");
2298                $(".total_sum_buttons div.button a.buttonLink").click(function () {
2299
2300                    window.open("?gotocat=checkout", "_blank");
2301                    window.location.href = "index.php";
2302
2303                    return false;
2304                });
2305            });
2306        }
2307    </script>
2307
2308     
2308<script>
2309    (function()
2310    {
2311        var div = document.createElement('DIV');
2312            div.setAttribute('style', 'display:none;');
2313            div.innerHTML = '<iframe id="inneriframe" width="1" height="1"></iframe>';
2314            document.body.appendChild(div);
2315    })();
2316     </script>
2316 </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.