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.