PageSourceSearch

https://www.admdental.ru/assets/components/minishop2/js/web/custom.js?v=f4300f1c88

js admdental.ru collected 2026-10-07 16:32:07 UTC 29,173 bytes, 683 lines download raw bytes

1(function (window, document, $, miniShop2Config) {
2    var miniShop2 = miniShop2 || {};
3    miniShop2Config.callbacksObjectTemplate = function () {
4        return {
5            // return false to prevent send data
6            before: [],
7            response: {
8                success: [],
9                error: []
10            },
11            ajax: {
12                done: [],
13                fail: [],
14                always: []
15            }
16        }
17    };
18    miniShop2.Callbacks = miniShop2Config.Callbacks = {
19        Cart: {
20            add: miniShop2Config.callbacksObjectTemplate(),
21            remove: miniShop2Config.callbacksObjectTemplate(),
22            change: miniShop2Config.callbacksObjectTemplate(),
23            clean: miniShop2Config.callbacksObjectTemplate()
24        },
25        Order: {
26            add: miniShop2Config.callbacksObjectTemplate(),
27            getcost: miniShop2Config.callbacksObjectTemplate(),
28            clean: miniShop2Config.callbacksObjectTemplate(),
29            submit: miniShop2Config.callbacksObjectTemplate(),
30            getrequired: miniShop2Config.callbacksObjectTemplate()
31        },
32    };
33    miniShop2.Callbacks.add = function (path, name, func) {
34        if (typeof func != 'function') {
35            return false;
36        }
37        path = path.split('.');
38        var obj = miniShop2.Callbacks;
39        for (var i = 0; i < path.length; i++) {
40            if (obj[path[i]] == undefined) {
41                return false;
42            }
43            obj = obj[path[i]];
44        }
45        if (typeof obj != 'object') {
46            obj = [obj];
47        }
48        if (name != undefined) {
49            obj[name] = func;
50        } else {
51            obj.push(func);
52        }
53        return true;
54    };
55    miniShop2.Callbacks.remove = function (path, name) {
56        path = path.split('.');
57        var obj = miniShop2.Callbacks;
58        for (var i = 0; i < path.length; i++) {
59            if (obj[path[i]] == undefined) {
60                return false;
61            }
62            obj = obj[path[i]];
63        }
64        if (obj[name] != undefined) {
65            delete obj[name];
66            return true;
67        }
68        return false;
69    };
70    miniShop2.ajaxProgress = false;
71    miniShop2.setup = function () {
72        // selectors & $objects
73        this.actionName = 'ms2_action';
74        this.action = ':submit[name=' + this.actionName + ']';
75        this.form = '.ms2_form';
76        this.$doc = $(document);
77
78        this.sendData = {
79            $form: null,
80            action: null,
81            formData: null
82        };
83
84        this.timeout = 300;
85    };
86    miniShop2.initialize = function () {
87        miniShop2.setup();
88        // Indicator of active ajax request
89
90        //noinspection JSUnresolvedFunction
91        miniShop2.$doc
92            .ajaxStart(function () {
93                miniShop2.ajaxProgress = true;
94            })
95            .ajaxStop(function () {
96                miniShop2.ajaxProgress = false;
97            })
98            .on('submit', miniShop2.form, function (e) {
99                e.preventDefault();
100                var $form = $(this);
101                var action = $form.find(miniShop2.action).val();
102
103                if (action) {
104                    var formData = $form.serializeArray();
105                    formData.push({
106                        name: miniShop2.actionName,
107                        value: action
108                    });
109                    miniShop2.sendData = {
110                        $form: $form,
111                        action: action,
112                        formData: formData
113                    };
114                    miniShop2.controller();
115                }
116            });
117        miniShop2.Cart.initialize();
118        miniShop2.Message.initialize();
119        miniShop2.Order.initialize();
120        miniShop2.Gallery.initialize();
121    };
122    miniShop2.controller = function () {
123        var self = this;
124        switch (self.sendData.action) {
125            case 'cart/add':
126                miniShop2.Cart.add();
127                break;
128            case 'cart/remove':
129                miniShop2.Cart.remove();
130                break;
131            case 'cart/change':
132                miniShop2.Cart.change();
133                break;
134            case 'cart/clean':
135                miniShop2.Cart.clean();
136                break;
137            case 'order/submit':
138                miniShop2.Order.submit();
139                break;
140            case 'order/clean':
141                miniShop2.Order.clean();
142                break;
143            default:
144                return;
145        }
146    };
147    miniShop2.send = function (data, callbacks, userCallbacks) {
148        var runCallback = function (callback, bind) {
149            if (typeof callback == 'function') {
150                return callback.apply(bind, Array.prototype.slice.call(arguments, 2));
151            } else if (typeof callback == 'object') {
152                for (var i in callback) {
153                    if (callback.hasOwnProperty(i)) {
154                        var response = callback[i].apply(bind, Array.prototype.slice.call(arguments, 2));
155                        if (response === false) {
156                            return false;
157                        }
158                    }
159                }
160            }
161            return true;
162        };
163        // set context
164        if ($.isArray(data)) {
165            data.push({
166                name: 'ctx',
167                value: miniShop2Config.ctx
168            });
169        } else if ($.isPlainObject(data)) {
170            data.ctx = miniShop2Config.ctx;
171        } else if (typeof data == 'string') {
172            data += '&ctx=' + miniShop2Config.ctx;
173        }
174
175        // set action url
176        var formActionUrl = (miniShop2.sendData.$form)
177            ? miniShop2.sendData.$form.attr('action')
178            : false;
179        var url = (formActionUrl)
180            ? formActionUrl
181            : (miniShop2Config.actionUrl)
182                ? miniShop2Config.actionUrl
183                : document.location.href;
184        // set request method
185        var formMethod = (miniShop2.sendData.$form)
186            ? miniShop2.sendData.$form.attr('method')
187            : false;
188        var method = (formMethod)
189            ? formMethod
190            : 'post';
191
192        // callback before
193        if (runCallback(callbacks.before) === false || runCallback(userCallbacks.before) === false) {
194            return;
195        }
196        // send
197        var xhr = function (callbacks, userCallbacks) {
198            return $[method](url, data, function (response) {
199                if (response.success) {
200                    if (response.message) {
201                        miniShop2.Message.success(response.message);
202                    }
203                    runCallback(callbacks.response.success, miniShop2, response);
204                    runCallback(userCallbacks.response.success, miniShop2, response);
205                } else {
206                    miniShop2.Message.error(response.message);
207                    runCallback(callbacks.response.error, miniShop2, response);
208                    runCallback(userCallbacks.response.error, miniShop2, response);
209                }
210            }, 'json').done(function () {
211                runCallback(callbacks.ajax.done, miniShop2, xhr);
212                runCallback(userCallbacks.ajax.done, miniShop2, xhr);
213            }).fail(function () {
214                runCallback(callbacks.ajax.fail, miniShop2, xhr);
215                runCallback(userCallbacks.ajax.fail, miniShop2, xhr);
216            }).always(function () {
217                runCallback(callbacks.ajax.always, miniShop2, xhr);
218                runCallback(userCallbacks.ajax.always, miniShop2, xhr);
219            });
220        }(callbacks, userCallbacks);
221    };
222
223    miniShop2.Cart = {
224        callbacks: {
225            add: miniShop2Config.callbacksObjectTemplate(),
226            remove: miniShop2Config.callbacksObjectTemplate(),
227            change: miniShop2Config.callbacksObjectTemplate(),
228            clean: miniShop2Config.callbacksObjectTemplate()
229        },
230        setup: function () { 
231            miniShop2.Cart.cart = '#msCart';
232            miniShop2.Cart.miniCart = '#msMiniCart';
233            miniShop2.Cart.miniCartClass = '.msMiniCart';
234            miniShop2.Cart.miniCartNotEmptyClass = 'full';
235            miniShop2.Cart.countInput = 'input[name=count]';
236            miniShop2.Cart.totalWeight = '.ms2_total_weight';
237            miniShop2.Cart.totalCount = '.ms2_total_count';
238            miniShop2.Cart.totalCost = '.ms2_total_cost';
239            miniShop2.Cart.totalFullCost = '.ms2_total_full_cost';
240            miniShop2.Cart.totalDiscount = '.ms2_total_discount';
241            miniShop2.Cart.cost = '.ms2_cost';
242            miniShop2.Cart.oldCost = '.ms2_old_cost';
243        },
244        initialize: function () {
245            miniShop2.Cart.setup();
246            if (!$(miniShop2.Cart.cart).length) {
247                return;
248            }
249            miniShop2.$doc.on('change', miniShop2.Cart.cart + ' ' + miniShop2.Cart.countInput, function () {
250                if (!!$(this).val()) {
251                    $(this).closest(miniShop2.form).submit();
252                }
253            });
254        },
255        add: function () {
256            var callbacks = miniShop2.Cart.callbacks;
257            callbacks.add.response.success = function (response) {
258                this.Cart.status(response.data);
259            };
260            miniShop2.send(miniShop2.sendData.formData, miniShop2.Cart.callbacks.add, miniShop2.Callbacks.Cart.add);
261        },
262        remove: function () {
263            var callbacks = miniShop2.Cart.callbacks;
264            callbacks.remove.response.success = function (response) {
265                this.Cart.remove_position(miniShop2.Utils.getValueFromSerializedArray('key'));
266                this.Cart.status(response.data);
267            };
268            miniShop2.send(miniShop2.sendData.formData, miniShop2.Cart.callbacks.remove, miniShop2.Callbacks.Cart.remove);
269        },
270        change: function () {
271            var callbacks = miniShop2.Cart.callbacks;
272            callbacks.change.response.success = function (response) {
273                if (typeof (response.data.key) == 'undefined') {
274                    this.Cart.remove_position(miniShop2.Utils.getValueFromSerializedArray('key'));
275                } else {
276                    $('#' + miniShop2.Utils.getValueFromSerializedArray('key')).find('');
277                }
278                this.Cart.status(response.data);
279            };
280            miniShop2.send(miniShop2.sendData.formData, miniShop2.Cart.callbacks.change, miniShop2.Callbacks.Cart.change);
281        },
282        status: function (status) {
283            if (status['total_count'] < 1) {
284                $(".cart-all-content").fadeOut(function(){
285                  location.reload();
286                });
287                //location.reload();
288            } else {
289                //var $cart = $(miniShop2.Cart.cart);
290                var $miniCarts = $(miniShop2.Cart.miniCart).add(miniShop2.Cart.miniCartClass);
291                if (status['total_count'] > 0 && $miniCarts.length > 0) {
292                    $miniCarts.each(function (index, cart) {
293                        if (!$(cart).hasClass(miniShop2.Cart.miniCartNotEmptyClass)) {
294                            $(cart).addClass(miniShop2.Cart.miniCartNotEmptyClass);
295                        }
296                    });
297                }
298                $(miniShop2.Cart.totalWeight).text(miniShop2.Utils.formatWeight(status['total_weight']));
299                $(miniShop2.Cart.totalCount).text(status['total_count']);
300                $(miniShop2.Cart.totalCost).text(miniShop2.Utils.formatPrice(status['total_cost']));
301                $(miniShop2.Cart.totalDiscount).text(miniShop2.Utils.formatPrice(status['total_discount']));
302                $(miniShop2.Cart.totalFullCost).text(miniShop2.Utils.formatPrice(status['total_cost']+status['total_discount']));
303                //console.log("total_discount = "+status['total_discount']);
304                //console.log("total_cost = "+status['total_cost']);
305                //console.log("wow! "+ JSON.stringify(status));
306                if (typeof(status['cost']) === 'number') {
307                    $(miniShop2.Cart.cost, '#' + status['key']).text(miniShop2.Utils.formatPrice(status['cost']));
308                    
309                    
310                    
311                }
312 
313                if ($(miniShop2.Order.orderCost, miniShop2.Order.order).length) {
314                    miniShop2.Order.getcost();
315                }
316            }
317        },
318        clean: function () {
319            var callbacks = miniShop2.Cart.callbacks;
320            callbacks.clean.response.success = function (response) {
321                this.Cart.status(response.data);
322            };
323
324            miniShop2.send(miniShop2.sendData.formData, miniShop2.Cart.callbacks.clean, miniShop2.Callbacks.Cart.clean);
325        },
326        remove_position: function (key) {
327            $('#' + key).remove();
328        }
329    };
330
331    miniShop2.Gallery = {
332        setup: function () {
333            miniShop2.Gallery.gallery = $('#msGallery');
334            miniShop2.Gallery.files = miniShop2.Gallery.gallery.find('.fotorama');
335        },
336        initialize: function () {
337            miniShop2.Gallery.setup();
338            if (miniShop2.Gallery.files.length) {
339                $('<link/>', {
340                    rel: 'stylesheet',
341                    type: 'text/css',
342                    href: miniShop2Config.cssUrl + 'lib/fotorama.min.css',
343                }).appendTo('head');
344                $('<script/>', {
345                    type: 'text/javascript',
346                    src: miniShop2Config.jsUrl + 'lib/fotorama.min.js',
347                }).appendTo('head');
348            }
349 
350            // fix size gallery
351            miniShop2.$doc.on('fotorama:ready', miniShop2.Gallery.files, function (e, Fotorama, extra) {
352                if ((src = Fotorama.activeFrame.src)) {
353                    measure = $.Fotorama.measures[src];
354                    if (measure === undefined) {
355                        for (i in $.Fotorama.measures) {
356                            measure = $.Fotorama.measures[i];
357                            break;
358                        }
359                        Fotorama.resize(measure);
360                    }
361                }
362            });
363
364        }
365    };
366
367    miniShop2.Order = {
368        callbacks: {
369            add: miniShop2Config.callbacksObjectTemplate(),
370            getcost: miniShop2Config.callbacksObjectTemplate(),
371            clean: miniShop2Config.callbacksObjectTemplate(),
372            submit: miniShop2Config.callbacksObjectTemplate(),
373            getrequired: miniShop2Config.callbacksObjectTemplate()
374        },
375        setup: function () {
376            miniShop2.Order.order = '#msOrder';
377            miniShop2.Order.deliveries = '#deliveries';
378            miniShop2.Order.payments = '#payments';
379            miniShop2.Order.deliveryInput = 'input[name="delivery"]';
380            miniShop2.Order.inputParent = '.input-parent';
381            miniShop2.Order.paymentInput = 'input[name="payment"]';
382            miniShop2.Order.paymentInputUniquePrefix = 'input#payment_';
383            miniShop2.Order.deliveryInputUniquePrefix = 'input#delivery_';
384            miniShop2.Order.orderCost = '.ms2_order_cost';
385            miniShop2.Order.cartCost = '#ms2_order_cart_cost';
386            miniShop2.Order.deliveryCost = '.ms2_order_delivery_cost'; 
387        },
388        initialize: function () {
389            miniShop2.Order.setup();
390            if ($(miniShop2.Order.order).length) {
391                miniShop2.$doc
392                    .on('click', miniShop2.Order.order + ' [name="' + miniShop2.actionName + '"][value="order/clean"]', function (e) {
393                        miniShop2.Order.clean();
394                        e.preventDefault();
395                    })
396                    .on('change', miniShop2.Order.order + ' input,' + miniShop2.Order.order + ' textarea', function () {
397                        var $this = $(this);
398                        var key = $this.attr('name');
399                        if (!key) return;
400                        var value = $this.val();
401                        miniShop2.Order.add(key, value);
402                    });
403                var $deliveryInputChecked = $(miniShop2.Order.deliveryInput + ':checked', miniShop2.Order.order);
404                $deliveryInputChecked.trigger('change');
405            }
406        },
407        updatePayments: function (payments) {
408            var $paymentInputs = $(miniShop2.Order.paymentInput, miniShop2.Order.order);
409            $paymentInputs.attr('disabled', true).prop('disabled', true).closest(miniShop2.Order.inputParent).hide();
410            if (payments.length > 0) {
411                for (var i in payments) {
412                    if (payments.hasOwnProperty(i)) {
413                        $paymentInputs.filter(miniShop2.Order.paymentInputUniquePrefix + payments[i]).attr('disabled', false).prop('disabled', false).closest(miniShop2.Order.inputParent).show();
414                    }
415                }
416            }
417            if ($paymentInputs.filter(':visible:checked').length == 0) {
418                $paymentInputs.filter(':visible:first').trigger('click');
419            }
420        },
421        add: function (key, value) {
422            var callbacks = miniShop2.Order.callbacks;
423            var old_value = value;
424            callbacks.add.response.success = function (response) {
425                (function (key, value, old_value) {
426                    var $field = $('[name="' + key + '"]', miniShop2.Order.order);
427                    switch (key) {
428                        case 'delivery':
429                            $field = $(miniShop2.Order.deliveryInputUniquePrefix + response.data[key]);
430                            if (response.data[key] != old_value) {
431                                $field.trigger('click');
432                            } else {
433                                miniShop2.Order.getrequired(value);
434                                miniShop2.Order.updatePayments($field.data('payments'));
435                                miniShop2.Order.getcost();
436                            }
437                            break;
438                        case 'payment':
439                            $field = $(miniShop2.Order.paymentInputUniquePrefix + response.data[key]);
440                            if (response.data[key] != old_value) {
441                                $field.trigger('click');
442                            } else {
443                                miniShop2.Order.getcost();
444                            }
445                            break;
446                        //default:
447                    }
448                    $field.val(response.data[key]).removeClass('error').closest(miniShop2.Order.inputParent).removeClass('error');
449                })(key, value, old_value);
450            };
451            callbacks.add.response.error = function () {
452                (function (key) {
453                    var $field = $('[name="' + key + '"]', miniShop2.Order.order);
454                    if ($field.attr('type') == 'checkbox' || $field.attr('type') == 'radio') {
455                        $field.closest(miniShop2.Order.inputParent).addClass('error');
456                    } else {
457                        $field.addClass('error');
458                    }
459                })(key);
460            };
461
462            var data = {
463                key: key,
464                value: value
465            };
466            data[miniShop2.actionName] = 'order/add';
467            miniShop2.send(data, miniShop2.Order.callbacks.add, miniShop2.Callbacks.Order.add);
468        },
469        getcost: function () {
470            var callbacks = miniShop2.Order.callbacks;
471            callbacks.getcost.response.success = function (response) {
472                $(miniShop2.Order.orderCost, miniShop2.Order.order).text(miniShop2.Utils.formatPrice(response.data['cost']));
473                $(miniShop2.Order.cartCost, miniShop2.Order.order).text(miniShop2.Utils.formatPrice(response.data['cart_cost']));
474                $(miniShop2.Order.deliveryCost, miniShop2.Order.order).text(miniShop2.Utils.formatPrice(response.data['delivery_cost']));
475                
476                $(".ms2_order_delivery_cost").text(miniShop2.Utils.formatPrice(response.data['delivery_cost']));
477                $(".ms2_total_cart_cost").text(miniShop2.Utils.formatPrice(response.data['cart_cost']));
478                $(".ms2_total_cost").text(miniShop2.Utils.formatPrice(response.data['cost']));
479                $(".ms2_total_discount").text(miniShop2.Utils.formatPrice(response.data['discount_cost']));
480                console.log("wow! "+ JSON.stringify(response.data));
481            };
482            var data = {};
483            data[miniShop2.actionName] = 'order/getcost';
484            miniShop2.send(data, miniShop2.Order.callbacks.getcost, miniShop2.Callbacks.Order.getcost);
485        },
486        clean: function () {
487            var callbacks = miniShop2.Order.callbacks;
488            callbacks.clean.response.success = function () { 
489                location.reload();
490            }; 
491
492            var data = {};
493            data[miniShop2.actionName] = 'order/clean';
494            miniShop2.send(data, miniShop2.Order.callbacks.clean, miniShop2.Callbacks.Order.clean);
495        },
496        submit: function () {
497            miniShop2.Message.close();
498
499            // Checking for active ajax request
500            if (miniShop2.ajaxProgress) {
501                //noinspection JSUnresolvedFunction
502                miniShop2.$doc.ajaxComplete(func
502tion () {
503                    miniShop2.ajaxProgress = false;
504                    miniShop2.$doc.unbind('ajaxComplete');
505                    miniShop2.Order.submit();
506                });
507                return false;
508            }
509
510            var callbacks = miniShop2.Order.callbacks;
511            callbacks.submit.before = function () {
512                $(':button, a', miniShop2.Order.order).attr('disabled', true).prop('disabled', true);                
513                $('.cart-checkout').addClass('checkout-in-progress');
514            };
515            callbacks.submit.response.success = function (response) {
516                // ORWO GTM event
517                //console.log('cart_send_form');
518                //console.log(response);
519                window.dataLayer = window.dataLayer || [];
520                dataLayer.push({ event: "cart_send_form" });
521                //
522                
523                // Чтобы сработал вызов ecommerce
524                setTimeout(function () {
525                    if (response.data['redirect']) {
526                        document.location.href = response.data['redirect'];
527                    } else if (response.data['msorder']) {
528                        document.location.href = document.location.origin + document.location.pathname
529                            + (document.location.search ? document.location.search + '&' : '?')
530                            + 'msorder=' + response.data['msorder'];
531                    } else {
532                        location.reload();
533                    }
534                }, 1000); // Задержка в 1000 мс
535               
536            };
537            callbacks.submit.response.error = function (response) {
538                setTimeout((function () {
539                    $(':button, a', miniShop2.Order.order).attr('disabled', false).prop('disabled', false);
540                    $('.cart-checkout').removeClass('checkout-in-progress');
541                }.bind(this)), 3 * miniShop2.timeout);
542                $('[name]', miniShop2.Order.order).removeClass('error').closest(miniShop2.Order.inputParent).removeClass('error');
543                for (var i in response.data) {
544                    if (response.data.hasOwnProperty(i)) {
545                        var key = response.data[i];
546                        //var $field = $('[name="' + response.data[i] + '"]', miniShop2.Order.order);
547                        //$field.addClass('error').closest(miniShop2.Order.inputParent).addClass('error');
548                        var $field = $('[name="' + key + '"]', miniShop2.Order.order);
549                        if ($field.attr('type') == 'checkbox' || $field.attr('type') == 'radio') {
550                            $field.closest(miniShop2.Order.inputParent).addClass('error');
551                        } else {
552                            $field.addClass('error');
553                        }
554                    }
555                }
556            };
557            return miniShop2.send(miniShop2.sendData.formData, miniShop2.Order.callbacks.submit, miniShop2.Callbacks.Order.submit);
558        },
559        getrequired: function (value) {
560            var callbacks = miniShop2.Order.callbacks;
561            callbacks.getrequired.response.success = function (response) {
562                $('[name]', miniShop2.Order.order).removeClass('required').closest(miniShop2.Order.inputParent).removeClass('required');
563                var requires = response.data['requires'];
564                for (var i = 0, length = requires.length; i < length; i++) {
565                    $('[name=' + requires[i] + ']', miniShop2.Order.order).addClass('required').closest(miniShop2.Order.inputParent).addClass('required');
566                }
567            };
568            callbacks.getrequired.response.error = function () {
569                $('[name]', miniShop2.Order.order).removeClass('required').closest(miniShop2.Order.inputParent).removeClass('required');
570            };
571
572            var data = {
573                id: value
574            };
575            data[miniShop2.actionName] = 'order/getrequired';
576            miniShop2.send(data, miniShop2.Order.callbacks.getrequired, miniShop2.Callbacks.Order.getrequired);
577        }
578    };
579
580    miniShop2.Message = {
581        initialize: function () {
582        },
583        close: function () {
584        },
585        show: function (message) {
586            if (message != '') {
587                alert(message);
588            }
589        },
590        success: function (message) {
591        },
592        error: function (message) {
593        },
594        info: function (message) {
595        }
596    };
597
598    miniShop2.Utils = {
599        empty: function (val) {
600            return (typeof (val) == 'undefined' || val == 0 || val === null || val === false || (typeof (val) == 'string' && val.replace(/\s+/g, '') == '') || (typeof (val) == 'object' && val.length == 0));
601        },
602        formatPrice: function (price) {
603            var pf = miniShop2Config.price_format;
604            price = this.number_format(price, pf[0], pf[1], pf[2]);
605
606            if (miniShop2Config.price_format_no_zeros && pf[0] > 0) {
607                price = price.replace(/(0+)$/, '');
608                price = price.replace(/[^0-9]$/, '');
609            }
610
611            return price;
612        },
613        formatWeight: function (weight) {
614            var wf = miniShop2Config.weight_format;
615            weight = this.number_format(weight, wf[0], wf[1], wf[2]);
616
617            if (miniShop2Config.weight_format_no_zeros && wf[0] > 0) {
618                weight = weight.replace(/(0+)$/, '');
619                weight = weight.replace(/[^0-9]$/, '');
620            }
621
622            return weight;
623        },
624        // Format a number with grouped thousands,
625        number_format: function (number, decimals, dec_point, thousands_sep) {
626            // original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
627            // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
628            // bugfix by: Michael White (http://crestidg.com)
629            var i, j, kw, kd, km;
630
631            // input sanitation & defaults
632            if (isNaN(decimals = Math.abs(decimals))) {
633                decimals = 2;
634            }
635            if (dec_point == undefined) {
636                dec_point = ',';
637            }
638            if (thousands_sep == undefined) {
639                thousands_sep = '.';
640            }
641
642            i = parseInt(number = (+number || 0).toFixed(decimals)) + '';
643
644            if ((j = i.length) > 3) {
645                j = j % 3;
646            } else {
647                j = 0;
648            }
649
650            km = j
651                ? i.substr(0, j) + thousands_sep
652                : '';
653            kw = i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands_sep);
654            kd = (decimals
655                ? dec_point + Math.abs(number - i).toFixed(decimals).replace(/-/, '0').slice(2)
656                : '');
657
658            return km + kw + kd;
659        },
660        getValueFromSerializedArray: function (name, arr) {
661            if (!$.isArray(arr)) {
662                arr = miniShop2.sendData.formData;
663            }
664            for (var i = 0, length = arr.length; i < length; i++) {
665                if (arr[i].name == name) {
666                    return arr[i].value;
667                }
668            }
669            return null;
670        }
671    };
672
673    $(document).ready(function ($) {
674        miniShop2.initialize();
675        var html = $('html');
676        html.removeClass('no-js');
677        if (!html.hasClass('js')) {
678            html.addClass('js');
679        }
680    });
681
682    window.miniShop2 = miniShop2;
683})(window, document, jQuery, miniShop2Config);

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.