PageSourceSearch

https://book.visitmaribor.si/shop/js/cart.js?v=1

js visitmaribor.si collected 2026-09-24 09:23:13 UTC 24,904 bytes, 698 lines download raw bytes

1(function ($) {
2    toastr.options = {
3        "closeButton": true,
4        "debug": false,
5        "newestOnTop": false,
6        "progressBar": true,
7        "positionClass": "toast-top-right",
8        "preventDuplicates": true,
9        "onclick": null,
10        "showDuration": "300",
11        "hideDuration": "2000",
12        "timeOut": "8000",
13        "extendedTimeOut": "2000",
14        "showEasing": "swing",
15        "hideEasing": "linear",
16        "showMethod": "fadeIn",
17        "hideMethod": "fadeOut"
18    };
19
20    $('.add-to-cart').submit(function (e) {
21        e.preventDefault();
22
23        if (!validate_form_required()) {
24            return;
25        }
26
27        var form = $(this);
28        var url = form.attr('action');
29        var submitBtn = form.find(':submit');
30        var submitBtnDefaultText = submitBtn.html();
31
32        var g_price = $('.reserve-experience__price').data('price');
33        var g_discount = $('.reserve-experience__price').data('discount');
34        var g_sku = form.data('sku');
35        var g_name = $('.col-12 h1').text();
36        var g_category = form.data('category');
37        var g_variants = '';
38        var g_quantity = form.find('input[name="quantity"]').val();
39        var total_price = g_price * g_quantity;
40        total_price = total_price.toFixed(2);
41
42        /*console.log(g_price);
43        console.log(g_discount);
44        console.log(g_sku);
45        console.log(g_name);
46        console.log(g_category);
47        console.log(g_quantity);*/
48
49        if($('.variations-container').length){
50            // Get the parent element that contains all the select elements
51            const $parentElement = $('.variations-container');
52
53            // Get all the select elements inside the parent element
54            const $selectElements = $parentElement.find('select');
55
56            // Loop through each select element and get its selected value
57            const selectedTexts = [];
58            $selectElements.each(function() {
59                const $selectedOption = $(this).find(':selected');
60                if ($selectedOption.length > 0) {
61                    selectedTexts.push($selectedOption.text());
62                }
63            });
64            if(selectedTexts.length > 0) {
65                g_variants = selectedTexts.join('/');
66                //console.log(g_variants);
67            }
68        }
69
70        submitBtn.attr('disabled', true);
71        submitBtn.html("<i class='fa fa-spinner fa-spin'></i>");
72
73        var serialized = form.serialize();
74
75        $('.btn-change-quantity-simple').attr('disabled', true);
76        $('select').attr('disabled', true);
77
78        $.ajax({
79            type: "POST",
80            url: url,
81            dataType: 'JSON',
82            data: serialized,
83            success: function (data) {
84                $('select').attr('disabled', false);
85                submitBtn.attr('disabled', false);
86                submitBtn.html(submitBtnDefaultText);
87                $('.btn-change-quantity-simple').attr('disabled', false);
88
89                if (data.status) {
90                    toastr.success(data.message);
91                    $('.cart-items-count').html(data.data.cart_number_of_items);
92
93                    //Dodaj v košarico GTAG event
94                    gtag("event", "add_to_cart", {
95                        currency: "EUR",
96                        value: total_price,
97                        items: [
98                            {
99                                item_id: g_sku,
100                                item_name: g_name,
101                                discount: g_discount,
102                                item_category: g_category,
103                                item_variant: g_variants,
104                                price: g_price,
105                                quantity: g_quantity
106                            }
107                        ]
108                    });
109
110
111                } else {
112                    toastr.error(data.message);
113                }
114            }, error: function (xhr, status, error) {
115                $('select').attr('disabled', false);
116                $('.btn-change-quantity-simple').attr('disabled', false);
117                submitBtn.attr('disabled', false);
118                submitBtn.html(submitBtnDefaultText);
119            }
120        });
121
122        e.preventDefault();
123    });
124
125    $('.remove-from-cart').submit(function (e) {
126        e.preventDefault();
127
128        var form = $(this);
129        var url = form.attr('action');
130        var submitBtn = form.find(':submit');
131        var submitBtnDefaultText = submitBtn.html();
132
133        submitBtn.attr('disabled', true);
134        submitBtn.html("<i class='fa fa-spinner fa-spin'></i>");
135
136        var serialized = form.serialize();
137
138        $('.btn-change-quantity').attr('disabled', true);
139        $('select').attr('disabled', true);
140
141        var cart_item_el = form.closest('.cart-item');
142
143        var total_price = cart_item_el.find('.g-price').data('price');
144        var g_sku = cart_item_el.data('sku');
145        var g_name = cart_item_el.find('.item-name').text();
146        var g_quantity = cart_item_el.find('.cart-item-quantity').data('quantity');
147        var g_price = total_price / g_quantity;
148        g_price = g_price.toFixed(2);
149
150        $.ajax({
151            type: "POST",
152            url: url,
153            dataType: 'JSON',
154            data: serialized,
155            success: function (data) {
156                $('select').attr('disabled', false);
157                submitBtn.attr('disabled', false);
158                submitBtn.html(submitBtnDefaultText);
159
160                $('.btn-change-quantity').attr('disabled', false);
161
162                if (data.status) {
163                    $('#cart-total-price').html(data.data.total_price);
164                    $('#price-without-vat').html(data.data.cart_vat_rates.price_without_vat);
165                    $('#total-vat-amount').html(data.data.cart_vat_rates.total_vat_amount);
166                    $('#cart_item_' + data.data.cart_item).remove();
167                    $('#hr_' + data.data.cart_item).remove();
168
169                    if (data.data.cart_price) {
170                        $('.cart-price').replaceWith(data.data.cart_price);
171                    }
172
173                    $('.cart-items-count').html(data.data.cart_number_of_items);
174
175                    if (data.data.items_left == 0) {
176                        $('#submit-order').remove();
177                        $('#no-items-in-cart').removeClass('d-none');
178                    }
179
180                    //Odstrani iz košarice GTAG event
181                    gtag("event", "remove_from_cart", {
182                        currency: "EUR",
183                        value: total_price,
184                        items: [
185                            {
186                                item_id: g_sku,
187                                item_name: g_name,
188                                price: g_price,
189                                quantity: g_quantity
190                            }
191                        ]
192                    });
193
194                    toastr.success(data.message);
195                } else {
196                    toastr.error(data.message);
197                }
198            }, error: function (xhr, status, error) {
199                $('select').attr('disabled', false);
200                $('.btn-change-quantity').attr('disabled', false);
201                submitBtn.attr('disabled', false);
202                submitBtn.html(submitBtnDefaultText);
203            }
204        });
205
206        e.preventDefault();
207    });
208
209    function validate_form_required() {
210        var is_valid = true;
211
212        $('input,textarea,select').filter('[required]:visible').each(function (index, field) {
213            field = $(field);
214
215            var label = $("label[for='" + field.attr('id') + "']");
216
217            label.removeClass('form-field-error-color');
218            field.removeClass('form-field-error-border');
219
220            if (!field.val() || field.val() == -1) {
221                is_valid = false;
222                label.addClass('form-field-error-color');
223                field.addClass('form-field-error-border');
224            }
225        });
226
227        return is_valid;
228    }
229
230    $('select').change(function () {
231        var label = $("label[for='" + $(this).attr('id') + "']");
232
233        label.removeClass('form-field-error-color');
234        $(this).removeClass('form-field-error-border');
235    });
236
237    $('.btn-change-quantity').click(function () {
238        var op = $(this).attr("data-op");
239
240        if (["m", "p"].indexOf(op) === -1) {
241            return;
242        }
243
244        var cart_item_id = $(this).attr("data-cart-item-id");
245        if (!cart_item_id) {
246            return;
247        }
248
249        var quantity_selector = $('#quantity_' + cart_item_id);
250
251        var quantity = parseInt(quantity_selector.attr("data-quantity"));
252        if (!quantity || quantity <= 0) {
253            return;
254        }
255
256        if (quantity === 1 && op === "m") {
257            console.log('call remove from cart');
258            return $('#remove_' + cart_item_id).submit();
259        }
260
261        $('.btn-change-quantity').attr('disabled', true);
262        $('#add_to_cart_btn').attr('disabled', true);
263
264        var quantity_backup = quantity_selector.html();
265        quantity_selector.html("<i class='fa fa-spinner fa-spin'></i>");
266        $('select').attr('disabled', true);
267
268        $.ajax({
269            type: "POST",
270            url: base_url + '/cart/update',
271            headers: {
272                "X-CSRF-TOKEN": $('meta[name=csrf-token]').attr('content')
273            },
274            dataType: 'JSON',
275            data: {
276                locale: $('html').attr('lang'),
277                cart_item: cart_item_id,
278                increase_quantity: op === "p" ? 1 : 0
279            },
280            success: function (data) {
281                $('select').attr('disabled', false);
282                $('#add_to_cart_btn').attr('disabled', false);
283
284                $('.cart-items-count').html(data.data.cart_number_of_items);
285
286                if (data.status) {
287                    quantity_selector.html(data.data.quantity);
288                    quantity_selector.attr('data-quantity', data.data.quantity);
289                    $('#price_' + cart_item_id).html(data.data.price);
290                    $('#availability_' + cart_item_id).html(data.data.is_available);
291                    $('#cart-total-price').html(data.data.total_price);
292                    $('#price-without-vat').html(data.data.cart_vat_rates.price_without_vat);
293                    $('#total-vat-amount').html(data.data.cart_vat_rates.total_vat_amount);
294                    if (data.data.cart_price) {
295                        $('.cart-price').replaceWith(data.data.cart_price);
296                    }
297
298                    toastr.success(data.message);
299                } else {
300                    quantity_selector.html(quantity_backup);
301                    toastr.error(data.message);
302                }
303
304                $('.btn-change-quantity').attr('disabled', false);
305            }, error: function (xhr, status, error) {
306                $('select').attr('disabled', false);
307                $('.btn-change-quantity').attr('disabled', false);
308                $('#add_to_cart_btn').attr('disabled', false);
309                quantity_selector.html(quantity_backup);
310            }
311        });
312    });
313
314    function all_attributes_selected(product) {
315        var all_selected = true;
316        var selector = null;
317
318        if (product) {
319            selector = $('select[data-product=' + product + ']');
320        } else {
321            selector = $('select');
322        }
323
324        selector.filter('[required]:visible').each(function (index, field) {
325            field = $(field);
326
327            if (!field.val() || field.val() == -1) {
328                all_selected = false;
329            }
330        });
331
332        return all_selected;
333    }
334
335    function get_price(product) {
336        var selected_attributes = [];
337        var selector = null;
338
339        if (product) {
340            selector = $('select[data-product=' + product + ']');
341        } else {
342            selector = $('select');
343        }
344
345        selector.filter('[required]:visible').each(function (index, field) {
346            field = $(field);
347
348            var id = field.attr('id').split('_');
349            selected_attributes.push({
350                product_id: id[1],
351                attribute_id: id[2],
352                option_id: field.val()
353            });
354        });
355
356        var quantity_selector = $('#quantity');
357        selector.attr('disabled', true);
358        $('#add_to_cart_btn').attr('disabled', true);
359
360        $.ajax({
361            type: "POST",
362            url: base_url + '/cart/price',
363            headers: {
364                "X-CSRF-TOKEN": $('meta[name=csrf-token]').attr('content')
365            },
366            dataType: 'JSON',
367            data: {
368                locale: $('html').attr('lang'),
369                product: product,
370                selected: selected_attributes,
371                quantity: isNaN(parseInt(quantity_selector.val())) ? 1 : parseInt(quantity_selector.val()),
372                is_bundle_check: quantity_selector.attr('data-bundle')
373            },
374            success: function (data) {
375                $('#add_to_cart_btn').attr('disabled', false);
376                selector.attr('disabled', false);
377                $('#stock_availability_' + data.data.product_id).empty().html(data.data.availability);
378
379                if (data.status) {
380                    if (data.data.price && data.data.price.length > 0) {
381                        $('#price-container').empty().html(data.data.price);
382                    }
383                    if (data.message && data.message.length > 0) {
384                        toastr.error(data.message);
385                    }
386                } else {
387                    $('#stock_availability_' + data.data.product_id).empty().html(data.data.availability);
388                    toastr.error(data.message);
389                }
390            }, error: function (xhr, status, error) {
391                $('#add_to_cart_btn').attr('disabled', false);
392                selector.attr('disabled', false);
393            }
394        });
395    }
396
397    $('.btn-change-quantity-simple').click(function () {
398        var op = $(this).attr("data-op");
399
400        if (["m", "p"].indexOf(op) === -1) {
401            return;
402        }
403
404        var quantity = parseInt($('#quantity').val());
405        if (!quantity || quantity < 1 || (op === "m" && quantity === 1)) {
406            return;
407        }
408
409        var new_quantity = op === "m" ? quantity - 1 : quantity + 1;
410
411        $('#quantity').val(new_quantity);
412        $('#quantity_display').html(new_quantity);
413
414        var product = $('#quantity').attr('data-product');
415
416        if (!all_attributes_selected(null)) {
417            return;
418        }
419
420        var num_of_selects = $('select').filter('[required]:visible').length;
421
422        if (num_of_selects === 0) {
423            get_price(product);
424        } else {
425            $('.variations-select').trigger("change");
426        }
427    });
428
429    $('.add-to-cart-quick').click(function () {
430        var product = $(this).attr("data-product");
431
432        var backupBtn = $(this);
433        var backupBtnHtml = $(this).html();
434        $(backupBtn).html("<i class='fa fa-spinner fa-spin'></i>").attr('disabled', true);
435
436        var g_data_container = $(this).closest('.shop-product-detail');
437        var g_price = g_data_container.find('.g-price').data('price');
438        var g_sku = g_data_container.data('sku');
439        var g_name = g_data_container.find('.details-link').text();
440        var g_quantity = 1;
441
442        $.ajax({
443            type: "POST",
444            url: base_url + '/cart/add',
445            headers: {
446                "X-CSRF-TOKEN": $('meta[name=csrf-token]').attr('content')
447            },
448            dataType: 'JSON',
449            data: {
450                _token: $('meta[name=csrf-token]').attr('content'),
451                locale: $('html').attr('lang'),
452                product: product,
453                quantity: 1
454            },
455            success: function (data) {
456                $(backupBtn).html(backupBtnHtml).attr('disabled', false);
457
458                if (data.status) {
459                    toastr.success(data.message);
460                    $('.cart-items-count').html(data.data.cart_number_of_items);
461                    //Dodaj v košarico GTAG event
462                    gtag("event", "add_to_cart", {
463                        currency: "EUR",
464                        value: g_price,
465                        items: [
466                            {
467                                item_id: g_sku,
468                                item_name: g_name,
469                                price: g_price,
470                                quantity: g_quantity
471                            }
472                        ]
473                    });
474                } else {
475                    toastr.error(data.message);
476                }
477            }, error: function (xhr, status, error) {
478                $(backupBtn).html(backupBtnHtml).attr('disabled', false);
479            }
480        });
481    });
482
483    $('.variations-select').change(function () {
484        var product = $(this).attr('data-product');
485
486        if (!all_attributes_selected(product)) {
487            return;
488        }
489
490        get_price(product);
491    });
492
493    $('#use_same_data_for_shipping').change(function () {
494        var shipping_form = $('#shipping-form');
495
496        if (!this.checked) {
497            shipping_form.show(500);
498        } else {
499            shipping_form.hide(500);
500        }
501    });
502
503    $('.select-shipping').change(function () {
504        var country_id = null;
505
506        if ($('#use_same_data_for_shipping').is(":checked")) {
507            country_id = $('select[name="country"]').val();
508        } else {
509            if ($(this).attr('name') == 'country_shipping') {
510                country_id = $('select[name="country_shipping"]').val();
511            }
512        }
513
514        if (!country_id || country_id == -1) {
515            return;
516        }
517
518        $.ajax({
519            type: "POST",
520            url: base_url + '/cart/shipping',
521            headers: {
522                "X-CSRF-TOKEN": $('meta[name=csrf-token]').attr('content')
523            },
524            dataType: 'JSON',
525            data: {
526                locale: $('html').attr('lang'),
527                country: country_id
528            },
529            success: function (data) {
530                if (data.status) {
531                    $('#shipping-price').html(data.data.shipping_price);
532                    $('#pay-price').html(data.data.pay_price);
533                    $('#price-without-vat').html(data.data.cart_vat_rates.price_without_vat);
534                    $('#total-vat-amount').html(data.data.cart_vat_rates.total_vat_amount);
535                    if (data.data.cart_price) {
536                        $('.cart-price').replaceWith(data.data.cart_price);
537                    }
538                } else {
539                    toastr.error(data.message);
540                }
541            }, error: function (xhr, status, error) {
542
543            }
544        });
545    });
546
547    $('input,textarea,select').blur(function () {
548        $(this).removeClass('form-field-error-color').removeClass('form-field-error-border');
549    });
550
551    function payment_price(shipping_type, payment_type) {
552        $.ajax({
553            type: "POST",
554            url: base_url + '/cart/payment-price',
555            headers: {
556                "X-CSRF-TOKEN": $('meta[name=csrf-token]').attr('content')
557            },
558            dataType: 'JSON',
559            data: {
560                locale: $('html').attr('lang'),
561                shipping_type: shipping_type,
562                payment_type: payment_type
563            },
564            success: function (data) {
565                if (data.status) {
566                    $('#shipping-price').html(data.data.shipping_price);
567                    $('#pay-price').html(data.data.pay_price);
568                    $('#price-without-vat').html(data.data.cart_vat_rates.price_without_vat);
569                    $('#total-vat-amount').html(data.data.cart_vat_rates.total_vat_amount);
570
571                    if (data.data.payment_price) {
572                        $('#payment-price-container').show();
573                        $('#payment-price').html(data.data.payment_price);
574                    } else {
575                        $('#payment-price-container').hide();
576                    }
577
578                    if (data.data.cart_price) {
579                        $('.cart-price').replaceWith(data.data.cart_price);
580                    }
581                } else {
582                    toastr.error(data.message);
583                }
584            }, error: function (xhr, status, error) {
585
586            }
587        });
588    }
589
590    $('.payment-type').change(function () {
591        var shipping_type = $('input[name=shipping_type]:checked').val();
592        var payment_type = $('input[name=payment_type]:checked').val();
593
594        $('.payments .payment_info').hide();
595        $('.payments .' + payment_type).fadeIn();
596
597        console.log('payment type change', shipping_type, payment_type);
598
599        if (!shipping_type) {
600            return;
601        }
602
603        return payment_price(shipping_type, payment_type);
604    });
605
606    $('.redeem-coupon').click(function () {
607        var input = $('input[name=coupon]');
608        var code = input.val();
609
610        if (!code) {
611            return;
612        }
613
614        var backupBtn = $(this);
615        var backupBtnHtml = $(this).html();
616        $(backupBtn).html("<i class='fa fa-spinner fa-spin'></i>").attr('disabled', true);
617
618        $.ajax({
619            type: "POST",
620            url: base_url + '/cart/coupon-add',
621            headers: {
622                "X-CSRF-TOKEN": $('meta[name=csrf-token]').attr('content')
623            },
624            dataType: 'JSON',
625            data: {
626                locale: $('html').attr('lang'),
627                code: code,
628                shipping_type: $('input[name=shipping_type]:checked').val(),
629                payment_type: $('input[name=payment_type]:checked').val(),
630            },
631            success: function (data) {
632                $(backupBtn).html(backupBtnHtml).attr('disabled', false);
633
634                if (data.status) {
635                    toastr.success(data.message);
636                    input.val('');
637                    $('#coupons-container').append(data.data.tpl);
638                    $('.cart-price').replaceWith(data.data.cart_price);
639                } else {
640                    toastr.error(data.message);
641                }
642            }, error: function (xhr, status, error) {
643                $(backupBtn).html(backupBtnHtml).attr('disabled', false);
644            }
645        });
646    });
647
648    $('#coupons-container').on('click', '.remove-coupon', function () {
649        var btn = $(this);
650        var code = btn.attr('data-coupon');
651
652        if (!code) {
653            return;
654        }
655
656        var backupBtnHtml = $(this).html();
657        $(btn).html("<i class='fa fa-spinner fa-spin'></i>").attr('disabled', true);
658
659        $.ajax({
660            type: "POST",
661            url: base_url + '/cart/coupon-remove',
662            headers: {
663                "X-CSRF-TOKEN": $('meta[name=csrf-token]').attr('content')
664            },
665            dataType: 'JSON',
666            data: {
667                locale: $('html').attr('lang'),
668                code: code,
669                shipping_type: $('input[name=shipping_type]:checked').val(),
670                payment_type: $('input[name=payment_type]:checked').val(),
671            },
672            success: function (data) {
673                $(btn).html(backupBtnHtml).attr('disabled', false);
674
675                if (data.status) {
676
677                    $('#' + code).remove();
678                    $('.cart-price').replaceWith(data.data.cart_price);
679
680                } else {
681                    toastr.error(data.message);
682                }
683            }, error: function (xhr, status, error) {
684                $(btn).html(backupBtnHtml).attr('disabled', false);
685            }
686        });
687    });
688
689
690})(jQuery);
691
692function radio_selected(id, name) {
693    $('input[name=' + name + ']').each(function () {
694        $(this).prop('checked', false);
695    });
696
697    $('#' + id).prop('checked', true).trigger('change');
698}

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.