PageSourceSearch

https://www.biurowi.pl/skins/user/rwd_primary_20/js/gc__main__basket.js

js biurowi.pl collected 2026-09-30 02:27:26 UTC 38,011 bytes, 672 lines download raw bytes

1let gc__btn__translations = {
2    en: {
3        select_all: 'Select all consents',
4        select_needed: 'Select required consents'
5    },
6    pl_PL: {
7        select_all: 'Zaznacz wszystkie zgody',
8        select_needed: 'Zaznacz wymagane zgody'
9    },
10    de_DE: {
11        select_all: 'Alle Zustimmung auswählen',
12        select_needed: 'Erforderliche Zustimmungen auswählen'
13    },
14    de_AT:{
15        select_all: 'Alle Zustimmung auswählen',
16        select_needed: 'Erforderliche Zustimmungen auswählen'
17    },
18    cs_CZ: {
19        select_all: 'Vybrat všechny souhlasy',
20        select_needed: 'Vybrat požadované souhlasy'
21    }
22};
23
24
25
26let gc__abbadoned__cart__settings = {
27    gc__terms__text__part1: {
28        "pl_PL": "Wyrażam zgodę na otrzymywanie dopasowanych do moich potrzeb informacji marketingowo-handlowych dotyczących produktów i usług oferowanych przez ",
29        "en": "I consent to receive tailored marketing and commercial information regarding products and services offered by ",
30        "de_DE": "Ich stimme dem Erhalt maßgeschneiderter Marketing- und Handelsinformationen über Produkte und Dienstleistungen von ",
31        "de_AT": "Ich stimme dem Erhalt maßgeschneiderter Marketing- und Handelsinformationen über Produkte und Dienstleistungen von ",
32        "fr_FR": "Je consens à recevoir des informations marketing et commerciales personnalisées concernant les produits et services proposés par ",
33        "cs_CZ": "Souhlasím se zasíláním personalizovaných marketingových a obchodních informací o produktech a službách nabízených společností "
34    },
35    gc__terms__text__part2: {
36        "pl_PL": ", zarówno w wiadomościach email, w wiadomościach SMS, podczas rozmów telefonicznych, jak i w sieci Internet przy użyciu np. telefonu, tabletu lub komputera oraz automatycznych systemów wywołujących (bez udziału człowieka) na wskazany przeze mnie adres e-mail lub numer telefonu. Mam świadomość, że mogę wycofać udzieloną zgodę w dowolnym momencie, oraz że jej wycofanie nie wpływa na zgodność z prawem przetwarzania, którego dokonano na podstawie zgody przed jej wycofaniem. Obowiązek informacyjny: Informujemy, że wyrażana przez Ciebie zgoda ma charakter dobrowolny. O zasadach przetwarzania Twoich danych osobowych oraz przysługujących Ci prawach dowiesz się z Polityki Prywatności.",
37        "en": ", both in emails, SMS messages, phone calls, and on the Internet using devices such as phones, tablets, or computers, as well as automated calling systems (without human involvement) to the email address or phone number I provided. I understand that I can withdraw my consent at any time, and that such withdrawal does not affect the lawfulness of processing based on consent before its withdrawal. Information obligation: Please note that your consent is voluntary. You can learn about the principles of processing your personal data and your rights in the Privacy Policy.",
38        "de_DE": ", sowohl in E-Mails, SMS-Nachrichten, Telefongesprächen als auch im Internet über Geräte wie Telefone, Tablets oder Computer sowie automatische Anrufsysteme (ohne menschliches Eingreifen) an die von mir angegebene E-Mail-Adresse oder Telefonnummer. Ich bin mir bewusst, dass ich meine Einwilligung jederzeit widerrufen kann und dass der Widerruf die Rechtmäßigkeit der aufgrund der Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Informationspflicht: Wir weisen darauf hin, dass Ihre Einwilligung freiwillig ist. Über die Grundsätze der Verarbeitung Ihrer personenbezogenen Daten und Ihre Rechte können Sie sich in der Datenschutzerklärung informieren.",
39        "de_AT": ", sowohl in E-Mails, SMS-Nachrichten, Telefongesprächen als auch im Internet über Geräte wie Telefone, Tablets oder Computer sowie automatische Anrufsysteme (ohne menschliches Eingreifen) an die von mir angegebene E-Mail-Adresse oder Telefonnummer. Ich bin mir bewusst, dass ich meine Einwilligung jederzeit widerrufen kann und dass der Widerruf die Rechtmäßigkeit der aufgrund der Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Informationspflicht: Wir weisen darauf hin, dass Ihre Einwilligung freiwillig ist. Über die Grundsätze der Verarbeitung Ihrer personenbezogenen Daten und Ihre Rechte können Sie sich in der Datenschutzerklärung informieren.",
40        "fr_FR": ", à la fois dans les e-mails, les messages SMS, les appels téléphoniques et sur Internet à l'aide de périphériques tels que les téléphones, les tablettes ou les ordinateurs, ainsi que des systèmes d'appel automatisés (sans intervention humaine) à l'adresse e-mail ou au numéro de téléphone que j'ai fournis. Je comprends que je peux retirer mon consentement à tout moment et que ce retrait n'affecte pas la légalité du traitement effectué sur la base du consentement avant son retrait. Obligation d'information : Nous vous informons que votre consentement est volontaire. Vous pouvez en savoir plus sur les principes de traitement de vos données personnelles et vos droits dans la Politique de confidentialité.",
41        "cs_CZ": ", a to jak v e-mailových zprávách, SMS zprávách, během telefonických hovorů, tak i na internetu prostřednictvím například telefonu, tabletu nebo počítače a automatických volacích systémů (bez lidského zásahu) na mnou uvedenou e-mailovou adresu nebo telefonní číslo. Jsem si vědom/a, že svůj souhlas mohu kdykoliv odvolat a že odvolání souhlasu nemá vliv na zákonnost zpracování založeného na souhlasu před jeho odvoláním. Informační povinnost: Upozorňujeme, že váš souhlas je dobrovolný. O zásadách zpracování vašich osobních údajů a vašich právech se dozvíte v Zásadách ochrany osobních údajů."
42    },
43    gc__additional__message: {
44        "pl_PL": "Wyrażam zgodę na otrzymywanie informacji marketingowo-handlowych.",
45        "en": "I consent to receive marketing and commercial information.",
46        "de_DE": "Ich stimme zu, Marketing- und Handelsinformationen zu erhalten.",
47        "de_AT": "Ich stimme zu, Marketing- und Handelsinformationen zu erhalten.",
48        "fr_FR": "Je consens à recevoir des informations marketing et commerciales.",
49        "cs_CZ": "Souhlasím se zasíláním marketingových a obchodních informací."
50    },
51    gc__modal__header: {
52        "pl_PL": "Zgoda na otrzymywanie informacji marketingowo-handlowych",
53        "en": "Consent to receive marketing and commercial information",
54        "de_DE": "Zustimmung zum Erhalt von Marketing- und Handelsinformationen",
55        "de_AT": "Zustimmung zum Erhalt von Marketing- und Handelsinformationen",
56        "fr_FR": "Consentement à recevoir des informations marketing et commerciales",
57        "cs_CZ": "Souhlas se zasíláním marketingových a obchodních informací"
58    },
59    gc__checkbox__label: {
60        "pl_PL": "Chcę otrzymywać zniżki i rabaty oraz informacje o nowych produktach",
61        "en": "I want to receive discounts and promotions as well as information about new products",
62        "de_DE": "Ich möchte Rabatte und Angebote sowie Informationen über neue Produkte erhalten",
63        "de_AT": "Ich möchte Rabatte und Angebote sowie Informationen über neue Produkte erhalten",
64        "fr_FR": "Je souhaite recevoir des réductions et des promotions ainsi que des informations sur les nouveaux produits",
65        "cs_CZ": "Chci dostávat slevy a akce a informace o nových produktech"
66    },
67    gc__regulamin__link_text: {
68        "pl_PL": "Regulamin",
69        "en": "Regulations",
70        "de_DE": "Regeln",
71        "de_AT": "Regeln",
72        "fr_FR": "Règlement",
73        "cs_CZ": "Pravidla"
74    }
75};
76
77
78
79// Funkcja pomocnicza do obsługi wzajemnych powiązań produktów
80function gc__get__related__products(product_id) {
81    // 1. Sprawdzenie czy istnieje unikalna konfiguracja dla tego produktu
82    if (gc__new__related__products[product_id]) {
83        return gc__new__related__products[product_id];
84    }
85
86    // 2. Jeśli włączone wzajemne powiązania i nie ma unikalnej konfiguracji
87    if (gc__new__related__mutual__linking == 1) {
88        let mutual_products = [];
89
90        // Przeszukanie wszystkich konfiguracji
91        for (let key in gc__new__related__products) {
92            let related_array = gc__new__related__products[key];
93
94            // Jeśli obecny produkt jest w tablicy powiązanych
95            if (related_array.includes(parseInt(product_id))) {
96                // Dodaj główny produkt
97                if (!mutual_products.includes(parseInt(key))) {
98                    mutual_products.push(parseInt(key));
99                }
100                // Dodaj wszystkie produkty z tej konfiguracji
101                related_array.forEach(id => {
102                    if (id != product_id && !mutual_products.includes(id)) {
103                        mutual_products.push(id);
104                    }
105                });
106            }
107        }
108
109        return mutual_products.length > 0 ? mutual_products : null;
110    }
111
112    return null;
113}
114
115$(document).ready(function() {
116    const isMobile = $(window).width() < 980;
117
118    $('body.shop_basket .payment').each(function() {
119        $(this).addClass('gc__skeleton');
120    });
121
122    // Initialize features
123    initializeFeatures();
124
125    function initializeFeatures() {
126        handleBasketShortening();
127        handleCheckboxSelection();
128        handleProductQuantityChange();
129        handleComplementaryProducts();
130        handleAbandonedCart();
131        handleAdditionalProductInBasket();
132        handleEventListeners();
133        GC__Order_As_Company();
134    }
135
136    function handleBasketShortening() {
137        if (gc__shorten__basket == 1) {
138            $('body').addClass('gc__shorten__basket');
139            if ($('body').hasClass('shop_basket_step3')) {
140                $('#gc__loader').removeClass('gc__hide');
141                $('button[name="button2"]').click();
142            }
143            if ($('body').hasClass('shop_basket_address')) {
144                $('button[name="button2"] span').text(gc__button__text[Shop.lang.name]);
145            }
146        }
147    }
148
149    function handleCheckboxSelection() {
150        if ($('body').hasClass('shop_basket_address') && gc__select__checkboxes__needed === 1) {
151            var translations = gc__btn__translations[Shop.lang.name] || gc__btn__translations.en;
152            var $btnHolder = $('<div class="gc__select__checkboxes__holder"></div>');
153            var $btnAll = $('<button data-gtmconsent="all consent" class="btn btn-red gc__select__checkboxes__all">' + translations.select_all + '</button>');
154            var $btnNeeded = $('<button data-gtmconsent="all consent" class="btn gc__select__checkboxes__needed">' + translations.select_needed + '</button>');
155            
156            $btnHolder.append($btnAll).append($btnNeeded);
157            
158            if ($('inpost_paczkomaty > .inpost_paczkomaty_info').length) {
159                $('inpost_paczkomaty > .inpost_paczkomaty_info').before($btnHolder);
160            } else if ($('.gc__comments').length) {
161                $('.gc__comments').after($btnHolder);
162            }
163
164            function toggleCheckboxes(selector) {
165                $(selector).each(function() {
166                    var $checkbox = $(this);
167                    $checkbox.prop('checked', !$checkbox.prop('checked'));
168                });
169            }
170
171            $('.gc__select__checkboxes__all').on('click', function(e) {
172                e.preventDefault();
173                if ($('#inpost_paczkomat_terms').length) {
174                    $('#inpost_paczkomat_terms').prop('checked', !$('#inpost_paczkomat_terms').prop('checked'));
175                }
176                $('tr, div').find('input[type="checkbox"]').not('.gc__additional__comments input[type="checkbox"], .different_address input[type="checkbox"], .address-handler input[type="checkbox"], #gc__abbadoned__cart').each(function() {
177                    var $label = $('label[for="' + $(this).attr('id') + '"]');
178                    if ($label.text().indexOf('Chcę otrzymać fakturę') === -1) {
179                        $(this).prop('checked', !$(this).prop('checked'));
180                    }
181                });
182            });
183
184            $('.gc__select__checkboxes__needed').on('click', function(e) {
185                e.preventDefault();
186                if ($('#inpost_paczkomat_terms').length) {
187                    $('#inpost_paczkomat_terms').prop('checked', !$('#inpost_paczkomat_terms').prop('checked'));
188                }
189                $('tr.additional-fields').each(function() {
190                    if ($(this).find('em.color').length) {
191                        $(this).find('input[type="checkbox"]').not('.address-handler input[type="checkbox"], #gc__abbadoned__cart').each(function() {
192                            var $label = $('label[for="' + $(this).attr('id') + '"]');
193                            if ($label.text().indexOf('Chcę otrzymać fakturę') === -1) {
194                                $(this).prop('checked', !$(this).prop('checked'));
195                            }
196                        });
197                    }
198                });
199            });
200        }
201    }
202
203    function handleProductQuantityChange() {
204        $('.quantity input[type="number"], .quantity input[type="text"]').on('input change', function() {
205            $('#box_basketlist #cart-options .buttons').addClass('box loading');
206            setTimeout(function() {
207                $('.recount .btn[type="submit"]').click();
208            }, 1500);
209        });
210
211
212    }
213
214    function handleComplementaryProducts() {
215        if ($('body').hasClass('shop_basket') && gc__new__related__on__off == '1') {
216            $.getScript("https://dcsaascdn.net/js/front-api-1.5.0.min.js", function() {
217                $('.gc__basket__product:not(.gc__additional__product)').each(function() {
218                    let gc__parent__product__id = $(this).data('product-id');
219                    let gc__related__products__ids = gc__get__related__products(gc__parent__product__id);
220                    if (gc__related__products__ids && gc__related__products__ids.length > 0) {
221                        gc__related__products__ids = gc__related__products__ids.filter(function(gc__related__product__id) {
222                            return $('.gc__product__holder > .gc__basket__product[data-product-id="' + gc__related__product__id + '"]').length === 0;
223                        });
224
225                        if (gc__related__products__ids.length > 0) {
226                            let gc__complementary__basket__holder = $('<
226div class="gc__complementary__basket__holder"></div>');
227                            let gc__complementary__products__container = $('<div class="gc__complementary__product__holder' + (gc__default__complementary__expanded ? ' expanded' : '') + '"></div>');
228                            let gc__complementary__header = $('<h3 class="gc__complementary__header">' + gc__new__complementary__header[Shop.lang.name] + '<img src="/skins/user/' + gc__images__version + '/images/user/gc__arrow__down.svg" alt="' + gc__new__complementary__header[Shop.lang.name] + '" title="' + gc__new__complementary__header[Shop.lang.name] + '"></h3>');
229                            gc__complementary__basket__holder.append(gc__complementary__header).append(gc__complementary__products__container);
230                            $(this).append(gc__complementary__basket__holder);
231
232                            frontAPI.getProducts(function(gc__related__products) {
233                                let filteredProducts = gc__related__products.list.filter(function(gc__related__product) {
234                                    return $('.gc__product__holder > .gc__basket__product[data-product-id="' + gc__related__product.id + '"]').length === 0;
235                                });
236                            
237                                filteredProducts.forEach(function(gc__related__product) {
238                                    let gc__complementary__product__html = $(
239                                        '<div class="gc__complementary__product gc__basket__product" data-product-id="' + gc__related__product.id + '">' +
240                                        '<div class="img"><img src="/environment/cache/images/250_250_productGfx_' + gc__related__product.main_image_filename + '" alt="' + gc__related__product.name + '" title="' + gc__related__product.name + '"></div>' +
241                                        '<div class="gc__right__body">' +
242                                        '<div class="name"><a href="' + gc__related__product.url + '">' + gc__related__product.name + '</a></div>' +
243                                        '<div class="gc__sum__holder">' +
244                                        '<div class="sum"><em class="color">' + gc__related__product.price.gross.final + '</em></div>' +
245                                        '</div>' +
246                                        '<div class="actionSs"><span class="gc__add__to__basket__btn" data-product-id="' + gc__related__product.id + '">' + gc__additional__product__translation[2][Shop.lang.name] + '</span></div>' +
247                                        '</div></div>'
248                                    );
249                                    gc__complementary__products__container.append(gc__complementary__product__html);
250                                });
251                            
252                                if (gc__complementary__products__container.children().length > 0) {
253                                    let gc__loop = gc__complementary__products__container.children().length > 4;
254                                    gc__complementary__products__container.removeClass('loading').addClass('owl-carousel gc__product__carousel').owlCarousel({
255                                        loop: gc__loop,
256                                        margin: 10,
257                                        autoHeight: false,
258                                        responsiveClass: true,
259                                        responsive: {
260                                            0: { items: 1, nav: true },
261                                            380: { items: 2, nav: true },
262                                            800: { items: 3, nav: true },
263                                            1200: { items: 3, nav: true },
264                                        }
265                                    });
266                                } else {
267                                    gc__complementary__products__container.hide();
268                                }
269                            }, { ids: gc__related__products__ids });
270                        }
271                    }
272                });
273            });
274        }
275    }
276
277
278    function handleAbandonedCart() {
279        if (typeof gc__abbadoned__cart__on__off !== 'undefined' && 
280            gc__abbadoned__cart__on__off === 1 && 
281            $('body').hasClass('shop_basket_address')) {
282
283                const checkboxHtml = `
284                        <tr class="mail gc__abbadonned__tr">
285                            <td colspan="2">
286                                <span class="checkbox-wrap">
287                                    <input type="checkbox" name="gc__abbadoned__cart" id="gc__abbadoned__cart" class="checkbox" value="1" checked>
288                                    <label for="gc__abbadoned__cart"></label>
289                                </span>
290                                <label for="gc__abbadoned__cart">${gc__abbadoned__cart__settings.gc__checkbox__label[Shop.lang.name]}</label>
291                                <a href="#" id="gc__regulamin__link">${gc__abbadoned__cart__settings.gc__regulamin__link_text[Shop.lang.name]}</a> <!-- Poprawiona lokalizacja linku -->
292                            </td>
293                        </tr>
294                    `;
295                    $('#box_basketaddress .f-grid-6 table tbody tr.mail').first().after(checkboxHtml);
296            
297        }
298
299        const createAndShowModal = () => {
300            new Shop.Modal({
301                showMask: true,
302                position: 'center',
303                header: gc__abbadoned__cart__settings.gc__modal__header[Shop.lang.name],
304                content: `<p>${gc__abbadoned__cart__settings.gc__terms__text__part1[Shop.lang.name]} 
305                         ${gc__brand__info} 
306                         ${gc__abbadoned__cart__settings.gc__terms__text__part2[Shop.lang.name]}</p>`
307            }).createModal();
308        };
309
310        $(document)
311            .off('click', '#gc__regulamin__link')
312            .on('click', '#gc__regulamin__link', e => {
313                e.preventDefault();
314                createAndShowModal();
315            });
316
317// Flagi stanu
318let isAjaxProcessing = false;
319let isFormSubmitPending = false;
320
321console.log('Skrypt został załadowany. Inicjalizacja flag:', { 
322  isAjaxProcessing, 
323  isFormSubmitPending 
324});
325
326// Obsługa kliknięcia wiersza
327$('tr.additional-fields').on('click', function(event) {
328  console.log('Kliknięto wiersz dodatkowych pól');
329
330  if (!$('#gc__abbadoned__cart').is(':checked')) {
331    console.log('Przerwano - checkbox nie jest zaznaczony');
332    return;
333  }
334
335  const email = $('#input_mail').val().trim();
336  console.log('Pobrano email:', email || 'BRAK EMAILA');
337
338  if (!email) {
339    console.log('Przerwano - email jest wymagany');
340    return;
341  }
342
343  if (isAjaxProcessing) {
344    console.log('Przerwano - trwa AJAX. Status flag:', { 
345      isAjaxProcessing, 
346      isFormSubmitPending 
347    });
348    return;
349  }
350
351  isAjaxProcessing = true;
352  console.log('Rozpoczęcie zapisu. Ustawiono isAjaxProcessing =', isAjaxProcessing);
353
354  // Dynamiczny język i URL
355  const langPrefix = Shop.lang.name.substring(0, 2).toLowerCase();
356  const newsletterUrl = `/${langPrefix}/newsletter/sign`;
357
358  // Wysłanie do newslettera za pomocą Fetch API
359  fetch(newsletterUrl, {
360    method: 'POST',
361    headers: {
362      'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
363    },
364    body: `email=${encodeURIComponent(email)}`,
365    credentials: 'include'
366  })
367  .then(response => {
368    if (response.ok) {
369      console.log('Sukces zapisu do newslettera');
370      finalizeFormSubmit();
371    } else {
372      if (response.status === 500) {
373        console.log('Wykryto status 500 - wymuszamy wysłanie formularza');
374        finalizeFormSubmit();
375      } else {
376        console.log('Błąd zapisu - nie wysyłamy formularza. Status:', response.status);
377        isAjaxProcessing = false;
378      }
379    }
380  })
381  .catch(error => {
382    console.log('Błąd podczas wysyłania zapytania:', error);
383    isAjaxProcessing = false;
384  });
385});
386
387// Pozostała część kodu bez zmian
388$('form[name="basket_form"]').on('submit', function(e) {
389  console.log('Zdarzenie submit. Status flag:', { 
390    isAjaxProcessing, 
391    isFormSubmitPending 
392  });
393
394  if (!isAjaxProcessing) {
395    console.log('Brak AJAX - wysyłam formularz');
396    return true;
397  }
398
399  console.log('Aktywny AJAX - opóźniam wysyłkę');
400  isFormSubmitPending = true;
401  e.preventDefault();
402  return false;
403});
404
405function finalizeFormSubmit() {
406  isAjaxProcessing = false;
407  console.log('Finalizacja. isFormSubmitPending:', isFormSubmitPending);
408  
409  if (isFormSubmitPending) {
410    console.log('Wyzwalanie opóźnionego submita');
411    isFormSubmitPending = false;
412    $('form[name="basket_form"]').trigger('submit');
413  }
414}
415
416            
417    }
418
419    function handleAdditionalProductInBasket() {
420        $.getScript("https://dcsaascdn.net/js/front-api-1.5.0.min.js", function() {
421            if (gc__additional__product__in__basket__on == 1 && $('body').hasClass('shop_basket')) {
422                $.each(gc__additional__products__in__basket, function(gc__current__product, gc__text) {
423                    let gc__additional__product = frontAPI.getProduct({
424                        lang: gc__api__lang,
425                        id: gc__current__product
426                    });
427
428                    if (gc__additional__product['can_buy'] == 'false' || gc__additional__product['options_configuration']) {
429                        console.log(gc__current__product + " to ID felernego produktu || Brak możliwości zakupu dodatkowego produktu. Wywalamy produkt.");
430                    } else if ($(".gc__product__holder .gc__basket__product[data-product-id=" + gc__current__product + "]").length > 0) {
431                        console.log(gc__current__product + " to ID produktu istniejącego już w koszyku");
432                    } else {
433                        let gc__additional__product__price = gc__additional__product['price']['gross']['final'];
434                        let gc__additional__product__name = gc__additional__product['name'];
435                        let gc__additional__product__image;
436                        if (gc__additional__product__in__basket__custom__icon == '0') {
437                            gc__additional__product__image = '/environment/cache/images/150_150_productGfx_' + gc__additional__product['main_image_filename'];
438                        } else {
439                            gc__additional__product__image = gc__additional__product__in__basket__custom__icon;
440                        }
441                        let gc__additional__final__product__name = (gc__additional__products__in__basket[gc__current__product][Shop.lang.name][0] == '0') ? gc__additional__product__name : gc__additional__products__in__basket[gc__current__product][Shop.lang.name][0];
442                        let gc__additional__product__desc = (gc__additional__products__in__basket[gc__current__product][Shop.lang.name][1] == 0) ? gc__additional__product['description'].replace(/<\/?\w+[^>]*\/?>
442/g, '') : gc__additional__products__in__basket[gc__current__product][Shop.lang.name][1];
443
444                        let gc__additional__product__ready = $('<div class="gc__additional__product gc__basket__product" data-product-id="' + gc__current__product + '"><div class="img"><img src="' + gc__additional__product__image + '" alt="' + gc__additional__final__product__name + '" title="' + gc__additional__final__product__name + '"></div><div class="gc__right__body"><div class="name">' + gc__additional__final__product__name + '</div><div class="gc__sum__holder"><div class="gc__additional__product__desc">' + gc__additional__product__desc + '</div></div><div class="actions"><span class="gc__checkbox__additional__product"><div class="sum"><em class="color">' + gc__additional__product__price + '</em></div><div class="actionSs"><span class="gc__add__to__basket__btn" data-product-id="' + gc__current__product + '">' + gc__additional__product__translation[2][Shop.lang.name] + '</span></div></span></div></div>');
445
446                        if (typeof GlobalSoolutionSoobasket 
446!= 'undefined') {
447                            $('body').addClass('gc__sees__soobasket');
448                        } else {
449                            if (!$('.gc__additional__product__holder').length) {
450                                $('<div class="gc__additional__product__holder"></div>').insertAfter(gc__additional__product__place);
451                            }
452                            $('.gc__additional__product__holder').append(gc__additional__product__ready);
453                            if (!$('h3.gc__upsell').length) {
454                                $('.gc__additional__product__holder').prepend($('<h3 class="gc__upsell"></h3'));
455                                $('h3.gc__upsell').text(gc__additional__product__in__basket__header[Shop.lang.name]);
456                            }
457                        }
458                    }
459                });
460            }
461        });
462    }
463
464
465
466    function GC__Order_As_Company() {
467        // Sprawdź czy funkcja jest włączona
468        if (typeof gc__invoice__for__individual__enabled === 'undefined'
469            || gc__invoice__for__individual__enabled == 0) {
470            return;
471        }
472
473        if ($('body').hasClass('shop_basket_address')) {
474            // Znajdź kontener z radiobuttonami address_type
475            let $addressTypeCell = $('.address_type td.input');
476
477            if ($addressTypeCell.length > 0) {
478                // Sklonuj radio button "osoba prywatna" (#address_type1)
479                let $clonedRadioWrap = $addressTypeCell.find('#address_type1').closest('.radio-wrap').clone();
480                let $clonedLabel = $addressTypeCell.find('> label[for="address_type1"]').clone();
481
482                // Zmień ID, name i value dla sklonowanego radio
483                $clonedRadioWrap.find('input').attr({
484                    'id': 'gc__invoice_individual',
485                    'name': 'gc__invoice_individual',
486                    'value': '1'
487                }).prop('checked', false);
488
489                $clonedRadioWrap.find('label').attr('for', 'gc__invoice_individual');
490
491                // Zmień tekst labela na tłumaczenie "Faktura imienna"
492                $clonedLabel.attr('for', 'gc__invoice_individual')
493                           .text(gc__invoice__for__individual__label[Shop.lang.name]);
494
495                // Wstaw jako trzeci element (na końcu)
496                $addressTypeCell.append($clonedRadioWrap).append($clonedLabel);
497
498                // Event handler dla "Faktura imienna"
499                $('#gc__invoice_individual').on('change', function() {
500                    if ($(this).is(':checked')) {
501                        // Dodaj klasę aktywności do radio-wrap (wizualne zaznaczenie)
502                        $(this).closest('.radio-wrap').addClass('gc__active');
503                        // Usuń z pozostałych
504                        $('.address_type .radio-wrap').not($(this).closest('.radio-wrap')).removeClass('gc__active');
505
506                        // Zaznacz "osoba prywatna" (Shoper automatycznie ukryje coname/nip)
507                        $('#address_type1').prop('checked', true).trigger('change');
508
509                        // Dopisz mega widoczny tekst do uwag
510                        let $comment = $('#comment');
511                        let currentText = $comment.val();
512                        let invoiceText = '########## WYMAGANA FAKTURA IMIENNA ##########';
513
514                        if (currentText.indexOf(invoiceText) === -1) {
515                            $comment.val((currentText ? currentText + '\n\n' : '') + invoiceText);
516                        }
517                    }
518                });
519
520                // Event handler dla oryginalnych radiobuttonów (osoba prywatna / firma)
521                $('#address_type1, #address_type2').on('change', function() {
522                    // Usuń klasę aktywności z faktury imiennej
523                    $('#gc__invoice_individual').closest('.radio-wrap').removeClass('gc__active');
524
525                    let $comment = $('#comment');
526                    let currentText = $comment.val();
527                    let invoiceText = '########## WYMAGANA FAKTURA IMIENNA ##########';
528
529                    // Usuń tekst z uwag i odznacz "Faktura imienna"
530                    $comment.val(currentText.replace(invoiceText, '').replace(/\n\n\n+/g, '\n\n').trim());
531                    $('#gc__invoice_individual').prop('checked', false);
532                });
533            }
534        }
535    }
536
537    function handleEventListeners() {
538        $('body.shop_basket .productlist.table.zebra .name span.variant').on('click', function() {
539            $(this).toggleClass('gc__open');
540        });
541
542        $(document).on("click", ".gc__add__to__basket__btn", function() {
543            let gc__current__click = $(this);
544            let gc__product_id = gc__current__click.data("product-id") || gc__current__click.find('input').data("product_id");
545            let gc__additional__product = frontAPI.getProduct({
546                id: gc__product_id
547            });
548
549            let gc__stock_id = gc__additional__product.stockId;
550            gc__current__click.addClass('gc__loading');
551
552            frontAPI.addToBasket(function() {
553                setTimeout(function() {
554                    location.reload();
555                }, 300);
556            }, {
557                lang: gc__api__lang,
558                data: {
559                    stock_id: gc__stock_id
560                }
561            });
562        });
563
564        $(document).on("change", ".payment .radio-wrap input[type=radio]", function() {
565            $('.payment').removeClass('selected');
566            $(this).closest('.payment').toggleClass('selected');
567        });
568
569        
570        $(document).on("change", ".delivery .radio-wrap input[type=radio]", function() {
571            $('.delivery').removeClass('selected');
572            $(this).closest('.delivery').toggleClass('selected');
573        });
574
575        $(document).on('click', '.gc__complementary__header', function() {
576            $(this).next('.gc__complementary__product__holder').slideToggle();
577            $(this).find('img').toggleClass('gc__rotate');
578        });
579
580        setTimeout(function() {
581            if ($('body').hasClass('shop_basket')) {
582                if ($('#gc__do__not__wait').length > 0) {
583                    $('#gc__do__not__wait').insertAfter($('#box_basketlist table .gc__product__holder')).addClass('gc__do__not__wait__active');
584                }
585            }
586        }, 200);
587
588        $.each(gc__basket_logo, function(index, gc__output) {
589            var $label = $('#cart-options label:contains("' + gc__output + '")');
590            var imgSrc = '/skins/user/' + gc__images__version + '/images/user/' + gc__output.toUpperCase() + '.png';
591            if ($label.find(`img[src="${imgSrc}"]`).length == 0) {
592                $label.prepend($('<img alt="' + gc__output + '" class="gc__basket__logo" src="' + imgSrc + '">'));
593                if (!$label.parent().hasClass('gc__icon__holder')) {
594                    $label.children('.gc__basket__logo').wrap("<div class='gc__icon__holder'></div>");
595                }
596            }
597
598        });
599
600       
601        if ($('#p24-gateway-id, #online-payment-gateway-id').length > 0) {
602            let attempts = 0;
603            const maxAttempts = 10;
604        
605            var checkElementInterval = setInterval(function() {
606                attempts++;
607                var targetNode = $('.payment-container')[0];
608                if (targetNode) {
609                    if ($('label:contains(BLIK)').length > 0 || $('label:contains(PayU)').length > 0) {
610                        // Dodawanie logo i innych elementów
611                        $.each(gc__basket_logo, function(index, gc__output) {
612                            var $label = $('#cart-options label:contains("' + gc__output + '")');
613                            var imgSrc = '/skins/user/' + gc__images__version + '/images/user/' + gc__output.toUpperCase() + '.png';
614                            if ($label.find(`img[src="${imgSrc}"]`).length == 0) {
615                                $label.prepend($('<img alt="' + gc__output + '" class="gc__basket__logo" src="' + imgSrc + '">'));
616                                if (!$label.parent().hasClass('gc__icon__holder')) {
617                                    $label.children('.gc__basket__logo').wrap("<div class='gc__icon__holder'></div>");
618                                }
619                            }
620                        });
621        
622                        $('label:contains(BLIK)').each(function() {
623                            const $blikLabel = $(this);
624                            const imgSrc = '/skins/user/' + gc__images__version + '/images/user/BLIK.png';
625                            
626                            // Sprawdź czy logo już istnieje
627                            if ($blikLabel.find('img[src*="BLIK.png"]').length === 0) {
628                                $blikLabel.prepend(
629                                    $('<img alt="BLIK" class="gc__basket__logo" src="' + imgSrc + '">')
630                                      .wrap('<div class="gc__icon__holder"></div>')
631                                      .parent()
632                                );
633                            }
634                            
635                            // Dodaj klasę do kontenera
636                            $blikLabel.closest('.payment')
637                                .addClass('blik');
638                        });
639                        
640                        if (gc__blik__default__enabled === 1) {
641                            const $blikPayment = $('input[id^="blik-"]')
642                                .prop('checked', true)
643                                .closest('.payment');
644        
645                            $('.payment').removeClass('selected');
646                            $blikPayment
647                                .addClass('selected gc__payment__active');                            
648                        }
649                        
650                        // Przerwanie interwału po udanej modyfikacji
651                        clearInterval(checkElementInterval);
652                        return;
653                    }
654                }
655                // Przerwanie interwału po przekroczeniu maksymalnej liczby prób
656                if (attempts >= maxAttempts) {
657                    clearInterval(checkElementInterval);
658                    return;
659                }
660            }, 300);
661        }
662        
663      
664    }
665
666    setTimeout(function() {
667        $('.payment').removeClass('gc__skeleton');
668    }, 1400);
669
670});
671
672

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.