PageSourceSearch

https://gutscheine.cafe-wien.at/warenkorb?info_message=Der-Mindest…stellwert-von-1-EUR-ist-noch-nicht-erreicht

html cafe-wien.at collected 2026-10-02 07:18:55 UTC 93,214 bytes, 2,151 lines download raw bytes

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