PageSourceSearch

https://www.markenfestival.com/_assets/6750ae6bf8f249939b67c631d6e0daa9/Scripts/eventbookingv2.js?1789472549

js markenfestival.com collected 2026-09-29 15:30:18 UTC 50,827 bytes, 1,061 lines download raw bytes

1function number_format (number, decimals, dec_point, thousands_sep) {
2    // Strip all characters but numerical ones.
3    number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
4    var n = !isFinite(+number) ? 0 : +number,
5        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
6        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
7        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
8        s = '',
9        toFixedFix = function (n, prec) {
10            var k = Math.pow(10, prec);
11            return '' + Math.round(n * k) / k;
12        };
13    // Fix for IE parseFloat(0.55).toFixed(0) = 0;
14    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
15    if (s[0].length > 3) {
16        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
17    }
18    if ((s[1] || '').length < prec) {
19        s[1] = s[1] || '';
20        s[1] += new Array(prec - s[1].length + 1).join('0');
21    }
22    return s.join(dec);
23}
24
25function formatNumbers(number){
26    if(number % 1 != 0){
27        return  number_format(number , 2 ,".","'");
28    }else{
29        return number_format ( number , 0 ,".","'" )
30    }
31
32}
33
34/**
35 * Liest Netto-/Brutto-Preis und Metadaten der gewählten Ticket-Variante (gleiche Logik wie beim change-Handler).
36 * @param {JQuery} $radio jQuery-Objekt des Variant-Radios
37 * @returns {object|null}
38 */
39function resolveVariantPricingFromRadio($radio) {
40    if (!$radio || !$radio.length) {
41        return null;
42    }
43    var currency, variantprice, variantpricetaxed, productid, variantid, multipleeventid, productname, variantname, formattedvariantprice, formattedpricetaxed;
44    if ($radio.parent().children('.altproduct').length) {
45        var currentcountry = $('#billingadress').is(':checked') ? $('#additionalcountry').val() : $('#country').val();
46        var country;
47        switch (currentcountry) {
48            case '1':
49                country = 'DE';
50                break;
51            case '3':
52                country = 'CH';
53                break;
54            case '119':
55                country = 'CH';
56                break;
57            default:
58                country = 'INT';
59        }
60        var found = false;
61        $radio.parent().children('.altproduct').each(function () {
62            if ($(this).data('region') == country) {
63                found = true;
64                currency = $(this).data("currency");
65                variantprice = $(this).children('.hiddenvariant').data('variant-price');
66                productid = $(this).data("productid");
67                multipleeventid = $(this).data("eventid");
68                variantid = $(this).children('.hiddenvariant').data("variantid");
69                productname = $(this).data("productname");
70                variantname = $(this).children('.hiddenvariant').data("variantname");
71                formattedvariantprice = $(this).children('.hiddenvariant').data("formatted-price");
72                formattedpricetaxed = $(this).children('.hiddenvariant').data("formatted-pricetaxed");
73                variantpricetaxed = $(this).children('.hiddenvariant').data("variant-pricetaxed");
74            }
75        });
76        if (!found) {
77            var $fallback = $radio.parent().children('.altproduct').first();
78            currency = $fallback.data("currency");
79            variantprice = $fallback.children('.hiddenvariant').data('variant-price');
80            productid = $fallback.data("productid");
81            multipleeventid = $fallback.data("eventid");
82            variantid = $fallback.children('.hiddenvariant').data("variantid");
83            productname = $fallback.data("productname");
84            variantname = $fallback.children('.hiddenvariant').data("variantname");
85            formattedvariantprice = $fallback.children('.hiddenvariant').data("formatted-price");
86            formattedpricetaxed = $fallback.children('.hiddenvariant').data("formatted-pricetaxed");
87            variantpricetaxed = $fallback.children('.hiddenvariant').data("variant-pricetaxed");
88        }
89    } else {
90        currency = $radio.data("currency");
91        variantprice = $radio.data("price");
92        productid = $radio.data("productid");
93        multipleeventid = $radio.data("eventid");
94        variantid = $radio.data("variantid");
95        productname = $radio.data("productname");
96        variantname = $radio.data("variantname");
97        formattedvariantprice = $radio.data("formatted-price");
98        formattedpricetaxed = $radio.data("formatted-pricetaxed");
99        variantpricetaxed = $radio.data("taxed-price");
100    }
101    var net = parseFloat(variantprice);
102    var taxed = parseFloat(variantpricetaxed);
103    if (!isFinite(net) || !isFinite(taxed)) {
104        return null;
105    }
106    return {
107        currency: currency,
108        priceNetto: net,
109        variantpricetaxed: taxed,
110        productid: productid,
111        variantid: variantid,
112        multipleeventid: multipleeventid,
113        productname: productname,
114        variantname: variantname,
115        formattedvariantprice: formattedvariantprice,
116        formattedpricetaxed: formattedpricetaxed
117    };
118}
119
120$(function() {
121
122    $(".esb-tooltip").each(function () {
123        tippy(this, {
124            content: $(this).data('tooltip'),
125            zIndex: 999999999
126        });
127    });
128
129});
130
131$(function() {
132    if($("#eventregistrationbox .femanager_error").length){
133        $("#registernowbutton").click();
134    }
135    if($("#eventregistrationbox .femanager_error").length){
136        $(".pricebutton-esb-partner").click();
137    }
138    if($("#eventregistrationbox .typo3-message .message-body").length){
139        var message = $("#eventregistrationbox .typo3-message .message-body").html();
140        $.fancybox.open('<div class="text-center"><h2 class="ce--title" style="margin-top: 15px;margin-bottom: 15px;">Ihre Registrierung war erfolgreich</h2></div>');
141
142    }
143
144
145
146
147    $('#billingadress').on('change', function() {
148        $('.billing-col').toggleClass('hidden');
149        if ($('#billingadress').is(':checked')) {
150            $('.billing-col input').each(function(){
151                $(this).prop('required',true);
152            })
153        }else{
154            $('.billing-col input').each(function(){
155                $(this).prop('required',false);
156            })
157        }
158    });
159
160    $('#country').on('change', function() {
161
162
163        $(".variantwrapper input[type=radio][name=variant]:checked").change();
164
165    });
166    $('#billingadress').on('change', function() {
167        $(".variantwrapper input[type=radio][name=variant]:checked").change();
168    });
169    $('#additionalcountry').on('change', function() {
170        $(".variantwrapper input[type=radio][name=variant]:checked").change();
171    });
172
173
174    $('.variantwrapper input[type=radio][name=variant]').on('change', function() {
175
176        if($('.form-fields-signup').hasClass('hidden')){
177            $('.form-fields-signup').removeClass('hidden');
178            if($('.form-fields-signup-dont-forget ').hasClass('hidden')){
179
180            }else{
181                $('.form-fields-signup-dont-forget ').addClass('hidden');
182            }
183        }
184
185        if($(this).parent().parent().parent().parent().parent().children('.card-footer').hasClass('partner-card-footer')){
186            $(this).parent().parent().parent().parent().parent().children('.card-footer').removeClass('partner-card-footer');
187        }
188        if($(this).parent().children('.altproduct').length){
189
190            if($('#billingadress').is(':checked')){
191
192                var currentcountry = $('#additionalcountry').val();
193            }else{
194                var currentcountry = $('#country').val();
195
196            }
197
198            var country;
199
200            switch(currentcountry) {
201                case '1':
202                    country = 'DE';
203                    break;
204                case '3':
205                    country = 'CH';
206                    break;
207                case '119':
208                    country = 'CH';
209                    break;
210                default:
211                    country = 'INT';
212                    break;
213            }
214            console.log(country);
215            var price;
216            var formattedprice;
217            var multipleeventid;
218            var multiplecurrency;
219            var productid;
220            var variantid;
221            var productname;
222            var variantname;
223            var variantprice;
224            var formattedvariantprice;
225            var formattedpricetaxed;
226            var variantpricetaxed;
227            var currency;
228
229            var found = false;
230            $( $(this).parent().children('.altproduct') ).each(function( index ) {
231                if($(this).data('region') == country){
232                    found = true;
233                    currency =  $(this).data("currency");
234                    price = $(this).children('.hiddenvariant').data('variant-price');
235                    formattedprice = $(this).children('.hiddenvariant').data("formatted-price");
236                    $(this).parent().parent().parent().parent().parent().children('.card-footer').children('strong').children('.number-price').text(formattedprice+ ' ' + currency)
237                    productid = $(this).data("productid");
238                    multipleeventid = $(this).data("eventid");
239
240                    multiplecurrency = $(this).data("productcurrency");
241                    variantid = $(this).children('.hiddenvariant').data("variantid");
242                    productname = $(this).data("productname");
243                    variantname = $(this).children('.hiddenvariant').data("variantname");
244                    variantprice =  $(this).children('.hiddenvariant').data('variant-price');
245                    formattedvariantprice =  $(this).children('.hiddenvariant').data("formatted-price");
246                    formattedpricetaxed = $(this).children('.hiddenvariant').data("formatted-pricetaxed");
247                    variantpricetaxed = $(this).children('.hiddenvariant').data("variant-pricetaxed");
248                }
249            });
250            if (!found) {
251                var $fallback = $(this).parent().children('.altproduct').first();
252                currency = $fallback.data("currency");
253                price = $fallback.children('.hiddenvariant').data('variant-price');
254                formattedprice = $fallback.children('.hiddenvariant').data("formatted-price");
255                $fallback.parent().parent().parent().parent().parent().children('.card-footer').children('strong').children('.number-price').text(formattedprice + ' ' + currency);
256                productid = $fallback.data("productid");
257                multipleeventid = $fallback.data("eventid");
258                multiplecurrency = $fallback.data("productcurrency");
259                variantid = $fallback.children('.hiddenvariant').data("variantid");
260                productname = $fallback.data("productname");
261                variantname = $fallback.children('.hiddenvariant').data("variantname");
262                variantprice = $fallback.children('.hiddenvariant').data('variant-price');
263                formattedvariantprice = $fallback.children('.hiddenvariant').data("formatted-price");
264                formattedpricetaxed = $fallback.children('.hiddenvariant').data("formatted-pricetaxed");
265                variantpricetaxed = $fallback.children('.hiddenvariant').data("variant-pricetaxed");
266            }
267
268
269        }else{
270
271            currency =  $(this).data("currency");
272            price = $(this).data('price');
273            formattedprice = $(this).data('formatted-price');
274            $(this).parent().parent().parent().parent().parent().children('.card-footer').children('strong').children('.number-price').text(formattedprice+ ' ' + currency)
275            productid = $(this).data("productid");
276            multipleeventid = $(this).data("eventid");
277
278            multiplecurrency = $(this).data("productcurrency");
279            variantid = $(this).data("variantid");
280            productname = $(this).data("productname");
281            variantname = $(this).data("variantname");
282            variantprice =  $(this).data("price");
283            formattedvariantprice =  $(this).data("formatted-price");
284            formattedpricetaxed = $(this).data("formatted-pricetaxed");
285            variantpricetaxed = $(this).data("taxed-price");
286
287        }
288
289        $('#productid').val(productid);
290        $('#eventid').val(multipleeventid);
291
292
293
294        $('input[name="tx_eventbooking_eventsignup[newEventSubscription][currenci]"]').val(currency);
295        $('#productattributid').val(variantid);
296        $('.bestell-uebersicht ul li.ticket').html(productname + "<br>" + variantname + " " + formattedvariantprice + " " + currency);
297        $('.finalprice').html(formattedvariantprice+" "+currency + " zzgl. MwSt.");
298        $('.finalpriceinklmwst').html("Gesamt: "+formattedpricetaxed+" "+currency + " inkl. MwSt.");
299        var scriptTag = $('script[data-academy-update="updateCurrency"]');
300        var oldSrc = scriptTag.attr('src');
301        var newSrc = oldSrc.replace(/currency=[A-Z]{3}/, 'currency=' + currency);
302        scriptTag.attr('src', newSrc);
303        $('#billableprice').html(variantpricetaxed);
304        $('#pricepaid').val(variantpricetaxed);
305
306    });
307    $('.ticket-card .btn').on('click', function() {
308        if($(this).parent('.ticket-card').hasClass('block-expand')){
309
310        }else{
311            $('.variantwrapper').each(function() {
312                if($(this).hasClass('hidden')){
313
314                }else{
315
316                }
317            });
318            if($(this).parent('.ticket-card ').children('.form-group').children('.variantwrapper').length){
319
320            }
321        }
322
323
324    });
325    if($('#gutschein').val()){
326        $('#checkgutschein').trigger(click);
327    }
328    if(($('#productid').val()) && ($('#productattributid').val())){
329        $('input[name=variant]').trigger('change');
330    }
331    $('#checkgutschein').on( 'click', function() {
332
333        var code = $('#gutschein').val();
334        var settings = {
335            "async": true,
336            "crossDomain": true,
337            "url": "https://crm.esb-online.com/api/v1.0/cms/voucher",
338            "method": "POST",
339            "headers": {
340                "X-Authorization": "ESB-PROD-CMS-30520aff3baf019a2fd2227779801e8e42c252e1eba9673f13e628446625fba03aefc87685d3c5dc",
341                "Content-Type": "application/x-www-form-urlencoded",
342                "Accept": "application/json",
343                "Cache-Control": "no-cache"
344
345            },
346            "data": {
347                "voucher": code
348            }
349        }
350
351        $.ajax(settings).done(function (response) {
352            const responseEventId = (response && response.product_data_info && typeof response.product_data_info.productable_id !== 'undefined')
353                ? response.product_data_info.productable_id
354                : '';
355            let relatedEventIdsRaw = $('#gutschein').attr('data-events');
356            let relatedEventIds = relatedEventIdsRaw ? relatedEventIdsRaw.split(',').map(id =>
356 id.trim()).filter(Boolean) : [];
357            if (
358                response['message'] == 'Code valid'
359                && responseEventId !== ''
360                && relatedEventIds.includes(responseEventId.toString())
361                && relatedEventIds.length > 0
362                && response['product_data_info'] != null
363                || response['message'] == 'Code valid'
364                && relatedEventIds.length === 0
365                && response['product_data_info'] != null
366            ){
367                if($('.voucher-notice').hasClass('failure')){
368                    $('.voucher-notice').removeClass('failure')
369                }
370                $('.voucher-notice').addClass('success');
371                var responsemessage = "Dein Gutscheincode für das Ticket | "+response['product_data_info']['product_name']+" | "+response['product_data_info']['attribute_name']+" | wurde erfolgreich eingelöst! Du erhälst das Ticket zum Preis von "+formatNumbers(response['price_netto_discount'])+" "+response['currency']+". Die Auswahl der Ticketoptionen wurde gemäss deines Gutscheins eingeschränkt.";
372
373                if(formatNumbers(response['price_netto_discount']) == '0') {
374                    $('.payment .options input').each(function(){
375                        if($(this).val() == "Partner"){
376                            $(this).prop('checked', true);
377                        }else{
378                            $(this).prop('checked', false);
379                        }
380                    });
381                    $(".payment .options .checkcontainer.payment-option").css("display", "none");
382                    $('.checkcontainer.gender-container.online-payment-container.payment-option').after("<div class=\"payment-partner-notice\">Als ESB Partner ist dieses Event für Dich kostenlos.</div>");
383                } else {
384                    $('.payment .options input').each(function(){
385                        $(this).prop('checked', false);
386                    });
387                    $(".payment .options .checkcontainer.payment-option").css("display", "block");
388                    $(".payment-partner-notice").remove();
389                }
390
391                var voucher = $('#gutschein').val();
392                var pid = response['product_data_info']['pid'];
393                var paid = response['product_data_info']['paid'];
394                var multipleeventid = $(".checkcontainer input").data("eventid");
395                var ticketfound = 0;
396                $('.tx-eventbooking .header input:radio[name=variant]').each(function () {
397                    if(($(this).data('productid') == pid) && ($(this).data('variantid') == paid)){
398                        $(this).prop('checked', true);
399                        $(this).trigger('change');
400                        if($(this).parent().parent().parent().hasClass('hidden')){
401                            $(this).parent().parent().parent().toggleClass('hidden');
402                        }
403                        $('.finalprice').html(formatNumbers(response['price_netto_discount'])+" "+response['currency'] + " zzgl. MwSt.");
404                        var discount = response['price_netto_discount'];
405                        var discountaxed = response['price_taxed_discount'];
406                        $('#billableprice').html(discountaxed);
407                        $('#pricepaid').val(discountaxed);
408
409
410                        ticketfound = 1;
411                        $(this).prop('disabled', true);
412                        $(this).prop('required', false);
413                    }else{
414                        $(this).prop('checked', false);
415                        $(this).prop('disabled', true);
416                        $(this).prop('required', false);
417                    }
418                });
419                if(ticketfound == 1){
420                    $( ".ticket-card" ).each(function() {
421                        $( this ).addClass( "block-expand" );
422                    });
423                    $('.ticket').html("");
424                    $('li.voucher').html("Gutschein: " + response['product_name'] + "<br>Reduzierter Preis: " + formatNumbers(response['price_netto_discount'])+ " " + response['product_data_info']['currency']);
425                    $('.finalpriceinklmwst').html("Gesamt: "+formatNumbers(response['price_taxed_discount'])+" CHF inkl. MwSt.")
426                    if($('.form-fields-signup').hasClass('hidden')){
427                        $('.form-fields-signup').removeClass('hidden');
428                        if($('.form-fields-signup-dont-forget ').hasClass('hidden')){
429
430                        }else{
431                            $('.form-fields-signup-dont-forget ').addClass('hidden');
432                        }
433                    }
434                }else{
435
436                    var notregisteredvariantvalid = 1;
437
438                    if(notregisteredvariantvalid >= 1){
439                        $('.finalprice').html(formatNumbers(response['price_netto_discount'])+" "+response['currency'] + " zzgl. MwSt.");
440                        $('.finalpriceinklmwst').html("Gesamt: "+formatNumbers(response['price_taxed_discount'])+" "+response['currency'] + " inkl. MwSt.");
441                        var discount = response['price_netto_discount'];
442                        var discountaxed = response['price_taxed_discount'];
443                        $("#currenci").val(response['currency'])
444                        $('#productid').val(pid);
445                        $('#eventid').val(multipleeventid);
446                        $('#productattributid').val(paid);
447
448
449
450                        $('#billableprice').html(discountaxed.toFixed(2));
451                        $('#pricepaid').val(discountaxed.toFixed(2));
452                        var responsemessage = "Dein Gutscheincode für das Ticket | "+response['product_data_info']['product_name']+" | "+response['product_data_info']['attribute_name']+" | wurde erfolgreich eingelöst! Du erhälst das Ticket zum Preis von "+formatNumbers(response['price_netto_discount'])+" "+response['currency']+". Die Auswahl der Ticketoptionen wurde gemäss deines Gutscheins eingeschränkt.";
453
454                        if($('.form-fields-signup').hasClass('hidden')){
455                            $('.form-fields-signup').removeClass('hidden');
456
457                            if($('.form-fields-signup-dont-forget ').hasClass('hidden')){
458
459                            }else{
460                                $('.form-fields-signup-dont-forget ').addClass('hidden');
461                            }
462                        }
463                        $('li.ticket').html("");
464                        $('li.voucher').html("Gutschein: " + response['product_name'] + "<br>Reduzierter Preis: " + formatNumbers(response['price_netto_discount'])+ " " + response['product_data_info']['currency']);
465                        $( ".ticket-card" ).each(function() {
466                            $( this ).addClass( "block-expand" );
467                        });
468                        activateStep2();
469                        $('.step-1').removeClass("current-step");
470                        $('.step-2').addClass("current-step");
471                        $('.bread-step-1').removeClass('active');
472                        $('.bread-step-1').addClass('completed');
473
474                    }else{
475                        $('.voucher-notice').addClass('failure');
476                        var responsemessage = "Es konnte kein passendes Ticket zu deinem Gutschein gefunden werden, bitte kontaktiere uns unter [email protected]";
477
478                    }
479
480
481                }
482
483            } else if (
484                response['message'] == 'Code valid'
485                && response['product_data_info'] == null
486                && response['discount'] != null
487                && isFinite(Number(response['discount']))
488            ) {
489                var responsemessage;
490                var $vRadio = $('.tx-eventbooking .header input:radio[name=variant]:checked');
491                if (!$vRadio.length) {
492                    $vRadio = $('.tx-eventbooking .header input:radio[name=variant]').first();
493                    $vRadio.prop('checked', true);
494                }
495                var pricing = resolveVariantPricingFromRadio($vRadio);
496                var pageEventId = pricing ? pricing.multipleeventid : null;
497                var eventOkForUnbound = (relatedEventIds.length === 0)
498                    || (pageEventId != null && pageEventId !== '' && relatedEventIds.includes(String(pageEventId)));
499
500                if (!pricing || !eventOkForUnbound) {
501                    if ($('.voucher-notice').hasClass('success')) {
502                        $('.voucher-notice').removeClass('success');
503                    }
504                    $('.voucher-notice').addClass('failure');
505                    responsemessage = "Der Gutscheincode scheint ungültig zu sein, bitte überprüfe deine Eingabe oder kontaktiere uns unter [email protected]";
506                } else {
507                    var rawDiscount = Number(response['discount']);
508                    var discountRate = rawDiscount > 1 ? rawDiscount / 100 : rawDiscount;
509                    if (!isFinite(discountRate)) {
510                        discountRate = 0;
511                    }
512                    discountRate = Math.min(1, Math.max(0, discountRate));
513                    var factor = 1 - discountRate;
514                    var priceNettoDiscount = pricing.priceNetto * factor;
515                    var priceTaxedDiscount = pricing.variantpricetaxed * factor;
516
517                    if ($('.voucher-notice').hasClass('failure')) {
518                        $('.voucher-notice').removeClass('failure');
519                    }
520                    $('.voucher-notice').addClass('success');
521
522                    if (formatNumbers(priceNettoDiscount) == '0') {
523                        $('.payment .options input').each(function () {
524                            if ($(this).val() == "Partner") {
525                                $(this).prop('checked', true);
526                            } else {
527                                $(this).prop('checked', false);
528                            }
529                        });
530                        $(".payment .options .checkcontainer.payment-option").css("display", "none");
531                        $('.checkcontainer.gender-container.online-payment-container.payment-option').after("<div class=\"payment-partner-notice\">Als ESB Partner ist dieses Event für Dich kostenlos.</div>");
532                    } else {
533                        $('.payment .options input').each(function () {
534                            $(this).prop('checked', false);
535                        });
536                        $(".payment .options .checkcontainer.payment-option").css("display", "block");
537                        $(".payment-partner-notice").remove();
538                    }
539
540                    var displayCurrency = pricing.currency || '';
541                    $('input[name="tx_eventbooking_eventsignup[newEventSubscription][currenci]"]').val(displayCurrency);
542                    $("#currenci").val(displayCurrency);
543                    $('#productid').val(pricing.productid);
544                    $('#eventid').val(pricing.multipleeventid);
545                    $('#productattributid').val(pricing.variantid);
546
547                    $('.finalprice').html(formatNumbers(priceNettoDiscount) + " " + displayCurrency + " zzgl. MwSt.");
548                    $('.finalpriceinklmwst').html("Gesamt: " + formatNumbers(priceTaxedDiscount) + " " + displayCurrency + " inkl. MwSt.");
549                    $('#billableprice').html(priceTaxedDiscount.toFixed(2));
550                    $('#pricepaid').val(priceTaxedDiscount.toFixed(2));
551
552                    var scriptTagVoucher = $('script[data-academy-update="updateCurrency"]');
553                    if (scriptTagVoucher.length && displayCurrency) {
554                        var oldSrcV = scriptTagVoucher.attr('src');
555                        if (oldSrcV && oldSrcV.indexOf('currency=') !== -1) {
556                            scriptTagVoucher.attr('src', oldSrcV.replace(/currency=[A-Z]{3}/, 'currency=' + displayCurrency));
557                        }
558                    }
559
560                    $('.bestell-uebersicht ul li.ticket').html(pricing.productname + "<br>" + pricing.variantname + " " + formatNumbers(priceNettoDiscount) + " " + displayCurrency);
561                    $('li.voucher').html("Gutschein: " + response['product_name'] + "<br>Reduzierter Preis: " + formatNumbers(priceNettoDiscount) + " " + displayCurrency);
562
563                    $(".ticket-card").each(function () {
564                        $(this).addClass("block-expand");
565                    });
566
567                    if ($('.form-fields-signup').hasClass('hidden')) {
568                        $('.form-fields-signup').removeClass('hidden');
569                        if ($('.form-fields-signup-dont-forget ').hasClass('hidden')) {
570
571                        } else {
572                            $('.form-fields-signup-dont-forget ').addClass('hidden');
573                        }
574                    }
575
576                    var pctOff = Math.round(discountRate * 1000) / 10;
577                    responsemessage = "Dein Gutscheincode (" + response['product_name'] + ") wurde eingelöst! Du erhältst " + pctOff + "% Rabatt auf den gewählten Ticketpreis (reduziert auf " + formatNumbers(priceNettoDiscount) + " " + displayCurrency + " zzgl. MwSt.).";
578                }
579            } else {
580                if($('.voucher-notice').hasClass('success')){
581                    $('.voucher-notice').removeClass('success')
582                }
583                $('.voucher-notice').addClass('failure');
584                var responsemessage = "Der Gutscheincode scheint ungültig zu sein, bitte überprüfe deine Eingabe oder kontaktiere uns unter [email protected]";
585            }
586
587            $('.voucher-notice').text(responsemessage);
588        });
589    });
590    $('#finalsubmit').on('click', function(e) {
591        // Only prepare the form here. Do NOT call .submit() manually:
592        // #finalsubmit is already a submit button, so a second submit would
593        // run the AJAX/PayPal flow twice and render duplicate PayPal buttons.
594        var $paymentInputs = $("input[name='tx_eventbooking_eventsignup[newEventSubscription][paymentmethod]']");
595        var $visibleInputs = $paymentInputs.filter(function() {
596            var $container = $(this).closest('.checkcontainer');
597            return $container.length === 0 || ($container.is(":visible") && $container.css('display') !== 'none');
598        });
599        if ($visibleInputs.length === 0) {
600            var $partnerInput = $paymentInputs.filter("[value='Partner']");
601            if ($partnerInput.length) {
602                $partnerInput.prop("checked", true).trigger('change');
603            }
604        }
605    });
606
607
608
609
610    $('#eventsignupform').submit(function(e){
611        if(($('#eventsignupform').hasClass('crmapproved') && $('#eventsignupform').hasClass('paymentbilling')) || ($('#eventsignupform').hasClass('crmapproved') && $('#eventsignupform').hasClass('paymentonline') && $('#eventsignupform').hasClass('paymentcompleted'))){
612
613        }else{
614            e.preventDefault();
615            if(document.querySelector('input[name="tx_eventbooking_eventsignup[newEventSubscription][paymentmethod]"]:checked').value != null){
616                $('.crm-errors ul').removeClass();
617
618                $.ajax({
619                    url: 'index.php?eID=getsignupinfo',
620                    type: "POST",
621                    data : $("#eventsignupform").serialize(),
622                    dataType: 'json',
623
624                    success: function(data) {
625
626                        if(data['errors']){
627                            $('.crm-errors ul').html('');
628                            if($(".crm-errors ul").hasClass('activewarnings')){
629                                $(".crm-errors ul").removeClass('activewarnings');
630                            }
631                            $('.crm-errors ul').addClass('activeerrors');
632                            $.each(data['errors'] , function(index, val) {
633
634                                $('.crm-errors ul').append('<li>Feld: '+val+'</li>');
635
636                            });
637
638                        }else{
639                            if(data['status'] >= 422){
640                                $('.crm-errors ul').html('');
641                                if($(".crm-errors ul").hasClass('activeerrors')){
642                                    $(".crm-errors ul").removeClass('activeerrors');
643                                }
644                                $('.crm-errors ul').addClass('activewarnings');
645                                $('.crm-errors ul').html('<li>'+data['message']+'</li>');
646                            }else if(data['status'] == 200){
647                                $('.crm-errors ul').html('');
648                                $('#eventsignupform').addClass('crmapproved');
649
650                                if(data[0]['payment'] == "Online"){
651                                    $('#eventsignupform').addClass('paymentonline');
652                                    if($('#paypal-button-container').hasClass('hidden')){
653                                        $('#paypal-button-container').removeClass('hidden');
654                                        $('.submit-wrapper').addClass('hidden');
655                                    }
656
657                                    // Prevent duplicate PayPal buttons on repeated submit/AJAX success
658                                    if ($('#paypal-button-container').data('paypal-rendered')) {
659                                        return;
660                                    }
661                                    $('#paypal-button-container').data('paypal-rendered', true);
662
663                                    paypal.Buttons({
664                                        createOrder: function(data, actions) {
665                                            var amount = parseFloat($('#billableprice').text());
666                                            if (!isFinite(amount) || amount <= 0) {
667                                                throw new Error('Ungueltiger Betrag fuer PayPal');
668                                            }
669
670                                            return actions.order.create({
671                                                application_context: {
672                                                    shipping_preference: 'NO_SHIPPING'
673                                                },
674                                                purchase_units: [{
675                                                    description: 'ESB Event Registrierung',
676                                                    amount: {
677                                                        currency_code: $('#currenci').val(),
678                                                        value: amount.toFixed(2)
679                                                    }
680                                                }],
681                                            });
682                                        },
683                                        onApprove: function(data, actions) {
684
685                                            return actions.order.capture().then(function(details) {
686                                                var captureId = '';
687                                                if (details && details.purchase_units && details.purchase_units[0] && details.purchase_units[0].payments && details.purchase_units[0].payments.captures && details.purchase_units[0].payments.captures[0]) {
688                                                    captureId = details.purchase_units[0].payments.captures[0].id;
689                                                }
690
691                                                if (!captureId) {
692                                                    throw new Error('Keine Capture-ID von PayPal erhalten');
693                                                }
694
695                                                $('#transcode').val(captureId);
696                                                $('#paypal-order-id').val(data.orderID || '');
697                                                $('#paypal-capture-id').val(captureId);
698                                                $('#payment-verified').val('1');
699
700                                                $('#eventsignupform').addClass('paymentcompleted');
701                                                $('#eventsignupform').submit();
702                                                // This function shows a transaction success message to your buyer.
703
704                                            });
705                                        },
706                                        onError: function (err) {
707                                            console.log(err);
708                                            return false;
709                                        }
710                                    }).render('#paypal-button-container');
711                                }else{
712                                    $('#eventsignupform').addClass('paymentbilling');
713                                    $('#eventsignupform').submit();
714                                }
715
716                            }
717                        }
718
719
720
721                    },
722                    error: function(error) {
723
724                    }
725                });
726            }
727
728
729        }
730
731
732    });
733    $(".payment input").change( function() {
734        if($("#eventsignupform").hasClass('crmapproved') && $("#eventsignupform").hasClass('paymentonline')){
735            $("#eventsignupform").removeClass('crmapproved');
736            $("#eventsignupform").removeClass('paymentonline');
737            $("#eventsignupform").removeClass('paymentcompleted');
738            $('#transcode').val('');
739            $('#paypal-order-id').val('');
740            $('#paypal-capture-id').val('');
741            $('#payment-verified').val('0');
742
743            if($('.submit-wrapper').hasClass('hidden')){
744                $('.submit-wrapper').removeClass('hidden');
745                $('#paypal-button-container').addClass('hidden');
746            }
747
748        }
749    });
750
751    $( "input[name='variant']" ).change(function() {
752
753        if(($("#billableprice").html() == 0) || ($("#billableprice").html() == 0.00)){
754
755            $('.payment .options input').each(function(){
756                if($(this).val() == "Partner"){
757                    $(this).prop('checked', true);
758                }else{
759                    $(this).prop('checked', false);
760                }
761            });
762            if(($("#eventsignupform .payment").hasClass('hidden') || $(".payment .options .checkcontainer.payment-option").css("display") == 'none')){
763
764            }else{
765                $(".payment .options .checkcontainer.payment-option").css("display", "none");
766
767                $('.checkcontainer.gender-container.online-payment-container.payment-option').after("<div class=\"payment-partner-notice\">Als ESB Partner ist dieses Event für Dich kostenlos.</div>");
768
769
770            }
771        }else{
772            $('.payment .options input').each(function(){
773                if($(this).val() == "Partner"){
774                    $(this).prop('checked', false);
775                }
776            });
777
778            if($("#eventsignupform .payment").hasClass('hidden')){
779                $("#eventsignupform .payment").removeClass('hidden');
780            }
781        }
782    });
783
784
785    var getUrlParameter = function getUrlParameter(sParam) {
786        var sPageURL = window.location.search.substring(1),
787            sURLVariables = sPageURL.split('&'),
788            sParameterName,
789            i;
790
791        for (i = 0; i < sURLVariables.length; i++) {
792            sParameterName = sURLVariables[i].split('=');
793
794            if (sParameterName[0] === sParam) {
795                return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
796            }
797        }
798        return false;
799    };
800    var layerpush = getUrlParameter('ticketordersuccess');
801
802    if(layerpush == 1){
803
804
805
806        window.dataLayer = window.dataLayer || [];
807        window.dataLayer.push({
808            event: 'purchase',
809            ecommerce: {
810                currency: getUrlParameter('currency'),
811                value: getUrlParameter('value'), // order total (+ taxes)
812                transaction_id: getUrlParameter('transaction_id'), // maybe invoice number?
813                items: [{
814                    item_name: getUrlParameter('item_name'), // dynamic
815                    item_id: getUrlParameter('item_id'), // dynamic
816                    price: getUrlParameter('price'), // dynamic
817                    item_category: 'Event Ticket', // please set dynamic values
818                    quantity: '1' // dynamic
819                }]
820            }
821        });
822
823
824    }
825
826
827
828    $('input[name="tx_eventbooking_eventsignup[newEventSubscription][paymentmethod]"]').change(function() {
829        if($("#paypal-button-container").children("div").length){
830            $("#paypal-button-container").children("div").remove();
831        }
832        $('#paypal-button-container').removeData('paypal-rendered');
833        $('#transcode').val('');
834        $('#paypal-order-id').val('');
835        $('#paypal-capture-id').val('');
836        $('#payment-verified').val('0');
837
838    });
839
840    function activateStep2(){
841        $('.payment .options input').each(function(){
842            if($(this).val() == "Partner"){
843                $(this).prop('checked', false);
844            }
845        });
846        if($('input[name="tx_eventbooking_eventsignup[newEventSubscription][paymentmethod]"]').prop('checked', true)){
847            $('input[name="tx_eventbooking_eventsignup[newEventSubscription][paymentmethod]"]').prop('checked', false);
848        }
849
850        $('.step-1').removeClass("current-step");
851        $('.step-2').addClass("current-step");
852        $('.bread-step-1').removeClass('active');
853        $('.bread-step-1').addClass('completed');
854        $('.bread-step-1 a').append($('.bread-step-0').find('img').clone());
855        $('.bread-step-2').addClass('active');
856    }
857    function activateStep3(){
858        $('.payment .options input').each(function(){
859            if($(this).val() == "Partner"){
860                $(this).prop('checked', false);
861            }
862        });
863        if($('input[name="tx_eventbooking_eventsignup[newEventSubscription][paymentmethod]"]').prop('checked', true)){
864            $('input[name="tx_eventbooking_eventsignup[newEventSubscription][paymentmethod]"]').prop('checked', false);
865        }
866        if($('.bread-step-2').hasClass('completed')){
867            $('.bread-step-2').removeClass('completed');
868            $('.bread-step-2').children("a").children("img").remove();
869        }
870        $('.step-2').removeClass("current-step");
871        $('.step-3').addClass("current-step");
872        $('.bread-step-2').removeClass('active');
873        $('.bread-step-2').addClass('completed');
874        $('.bread-step-2 a').append("<img src=\"fileadmin/user_upload/Check.svg\">");
875        $('.bread-step-3').addClass('active');
876        $('.weiterbutton').hide();
877
878    }
879
880
881
882
883    $('.weiterbutton').on('click', function() {
884
885        //Step forward
886        if($('.step-1').hasClass("current-step")){
887            if($('#productattributid').val() != ""){
888                activateStep2();
889            }
890
891        }else if($('.step-2').hasClass("current-step")){
892            if($('#eventsignupform').hasClass('crmapproved')){
893
894            }else{
895                $.ajax({
896                    url: 'index.php?eID=getsignupinfo',
897                    type: "POST",
898                    data : $("#eventsignupform").serialize(),
899                    dataType: 'json',
900
901                    success: function(data) {
902
903                        if(data['errors']){
904                            $('.crm-errors ul').html('');
905                            if($(".crm-errors ul").hasClass('activewarnings')){
906                                $(".crm-errors ul").removeClass('activewarnings');
907                            }
908                            $('.crm-errors ul').addClass('activeerrors');
909                            $.each(data['errors'] , function(index, val) {
910
911                                $('.crm-errors ul').append('<li>Feld: '+val+'</li>');
912
913                            });
914
915                        }else{
916                            if(data['status'] >= 422){
917                                $('.crm-errors ul').html('');
918                                if($(".crm-errors ul").hasClass('activeerrors')){
919                                    $(".crm-errors ul").removeClass('activeerrors');
920                                }
921                                $('.crm-errors ul').addClass('activewarnings');
922                                $('.crm-errors ul').html('<li>'+data['message']+'</li>');
923                            }else if(data['status'] == 200){
924                                $('.crm-errors ul').html('');
925
926                                if(($('#termscondition').is(':checked')) && ($('#dataprivacy').is(':checked'))){
927                                    if(($('#billingadress').prop('checked') == false) ||
928                                        ($('input[name="tx_eventbooking_eventsignup[newEventSubscription][additionalcompany]"]').val() != '' && $('input[name="tx_eventbooking_eventsignup[newEventSubscription][additionalfirstname]"]').val() != '' && $('input[name="tx_eventbooking_eventsignup[newEventSubscription][additionallastname]"]').val() != '' && $('input[name="tx_eventbooking_eventsignup[newEventSubscription][additionalstreet]"]').val() != '' && $('input[name="tx_eventbooking_eventsignup[newEventSubscription][additionalpostcode]"]').val() != '' && $('input[name="tx_eventbooking_eventsignup[newEventSubscription][additionalcity]"]').val() != '' && $('input[name="tx_eventbooking_eventsignup[newEventSubscription][additionalcountry]"]').val() != '')){
929
930
931
932                                        if($('#coronastatus').length){
933                                            if(($('#datacorona').is(':checked')) && ($("#coronastatus :selected").val() >= 1)){
934                                                $('#eventsignupform').addClass('crmapproved');
935                                                activateStep3();
936                                            }else{
937                                                $('.crm-errors ul').addClass('activewarnings');
938                                                $('.crm-errors ul').html('<li>Bitte akzeptieren Sie die Coronabedingten Zutrittregeln und wählen Sie einen 3G Nachweis.</li>');
939                                            }
940                                        }else{
941                                            if($("#managementstrecke").length){
942                                                if($("#managementstrecke").val() && $("#managementday").val() && $("#managementmonth").val() && $("#managementyear").val()){
943                                                    $('#eventsignupform').addClass('crmapproved');
944                                                    activateStep3();
945                                                }else{
946                                                    $('.crm-errors ul').addClass('activewarnings');
947                                                    $('.crm-errors ul').html('<li>Bitte überprüfen Sie die ausgewählte Strecke und das Geburtsdatum</li>');
948
949                                                }
950                                            }else{
951                                                $('#eventsignupform').addClass('crmapproved');
952                                                activateStep3();
953                                            }
954
955                                        }
956
957                                    }else{
958                                        $('.crm-errors ul').addClass('activewarnings');
959                                        $('.crm-errors ul').html('<li>
959Bitte vervollständigen Sie die Rechnungsadresse.</li>');
960                                    }
961
962                                }else{
963                                    $('.crm-errors ul').addClass('activewarnings');
964                                    $('.crm-errors ul').html('<li>Bitte akzeptieren Sie die AGB und Datenschutzbestimmungen</li>');
965                                }
966
967
968                            }else{
969                                $('#eventsignupform').addClass('paymentbilling');
970
971                            }
972
973                        }
974                    }
975
976
977
978                });
979            }
980        }
981
982    });
983
984    $('.bread-step-1').on('click', function() {
985        if($("#gutschein").val() != ""){
986            $("#gutschein").val("");
987            $('.voucher-notice').removeClass('success');
988            $('.voucher-notice').removeClass('failure');
989            $('.voucher-notice').text("");
990        }
991
992        $('.tx-eventbooking .header input:radio[name=variant]').each(function () {
993            $(this).prop('disabled', false);
994        });
995        $('input[name="tx_eventbooking_eventsignup[newEventSubscription][paymentmethod]"]:checked').prop('checked', false);
996        if($(this).hasClass("completed")){
997            $( "#crouton li" ).each(function( index ) {
998                if($(this).hasClass("active")){
999                    $(this).removeClass("active");
1000                }
1001            });
1002            $( "#eventsignupform .container" ).each(function( index ) {
1003                if($(this).hasClass("current-step")){
1004                    $(this).removeClass("current-step");
1005                }
1006            });
1007            if($(".weiterbutton").is(":hidden")){
1008                $(".weiterbutton").show();
1009            }
1010            $(this).removeClass("completed");
1011            $(this).children("a").children("img").remove();
1012            $(this).addClass("active");
1013            $(".container.step-1").addClass("current-step");
1014            if($("#eventsignupform").hasClass("crmapproved")){
1015                $("#eventsignupform").removeClass("crmapproved");
1016            }
1017        }
1018    });
1019    $('.bread-step-2').on('click', function() {
1020        $('input[name="tx_eventbooking_eventsignup[newEventSubscription][paymentmethod]"]:checked').prop('checked', false);
1021        if($(this).hasClass("completed")){
1022            $( "#crouton li" ).each(function( index ) {
1023                if($(this).hasClass("active")){
1024                    $(this).removeClass("active");
1025                }
1026            });
1027            $( "#eventsignupform .container" ).each(function( index ) {
1028                if($(this).hasClass("current-step")){
1029                    $(this).removeClass("current-step");
1030                }
1031            });
1032            if($(".weiterbutton").is(":hidden")){
1033                $(".weiterbutton").show();
1034            }
1035            $(this).removeClass("completed");
1036            $(this).children("a").children("img").remove();
1037            $(this).addClass("active");
1038            $(".container.step-2").addClass("current-step");
1039            if($("#eventsignupform").hasClass("crmapproved")){
1040                $("#eventsignupform").removeClass("crmapproved");
1041            }
1042            if($('#productattributid').val() != ""){
1043                if($('.bread-step-1').hasClass('completed')){
1044
1045                }else{
1046                    $('.bread-step-1').removeClass('active');
1047                    $('.bread-step-1').addClass('completed');
1048                    $('.bread-step-1 a').append($('.bread-step-0').find('img').clone());
1049                }
1050
1051
1052            }
1053        }
1054        if(($('#productattributid').val() != "") && ($('.bread-step-1').hasClass("active"))){
1055            $('.weiterbutton').trigger('click');
1056        }
1057    });
1058    $('.step-2 input').on("invalid", function(e) {
1059        e.preventDefault();
1060    });
1061});

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.