PageSourceSearch

https://www.pinglighting.com/modules/ets_abandonedcart/views/js/abancart.js

js pinglighting.com collected 2026-10-06 18:27:04 UTC 44,866 bytes, 995 lines download raw bytes

1/**
2 * 2007-2021 ETS-Soft
3 *
4 * NOTICE OF LICENSE
5 *
6 * This file is not open source! Each license that you purchased is only available for 1 wesite only.
7 * If you want to use this file on more websites (or projects), you need to purchase additional licenses.
8 * You are not allowed to redistribute, resell, lease, license, sub-license or offer our resources to any third party.
9 *
10 * DISCLAIMER
11 *
12 * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
13 * versions in the future. If you wish to customize PrestaShop for your
14 * needs please contact us for extra customization service at an affordable price
15 *
16 *  @author ETS-Soft <[email protected]>
17 *  @copyright  2007-2021 ETS-Soft
18 *  @license    Valid for 1 website (or project) for each purchase of license
19 *  International Registered Trademark & Property of ETS-Soft
20 */
21var ets_abancart_has_browser = parseInt(ets_abancart_has_browser) || 0;
22if (ets_abancart_has_browser) {
23    document.addEventListener('DOMContentLoaded', function () {
24        if (!("Notification" in window)) {
25            //alert("This browser does not support desktop notification 1");
26        } else if (Notification.permission !== "granted") {
27            Notification.requestPermission();
28        }
29    });
30}
31var ets_abancart_campaigns = ets_abancart_campaigns || [],
32    ETS_ABANCART_LINK_AJAX = ETS_ABANCART_LINK_AJAX || '',
33    ETS_ABANCART_LINK_SHOPPING_CART = ETS_ABANCART_LINK_SHOPPING_CART || '',
34    ETS_ABANCART_TEXT_COLOR = ETS_ABANCART_TEXT_COLOR || '#ffffff',
35    ETS_ABANCART_BACKGROUND_COLOR = ETS_ABANCART_BACKGROUND_COLOR || '#ff0000',
36    ets_abancart_timeout = false,
37    ets_abancart_delay = 0,
38    ets_abancart_disable_keydown = false,
39    copied_translate = copied_translate || 'Copied',
40    ets_abancart_close_title = ets_abancart_close_title || 'Close'
41;
42
43if (typeof ETS_ABANCART_LIFE_TIME == "undefined") ETS_ABANCART_LIFE_TIME = -1;
44
45/*----------LEAVE WEBSITE----------*/
46
47//document.documentElement.addEventListener('mouseleave', ets_abancart_mouseleave);
48document.documentElement.addEventListener('mouseenter', ets_abancart_mouseenter);
49document.documentElement.addEventListener('keydown', ets_abancart_keydown);
50
51function ets_abancart_leavewebsite() {
52    var _overload = $('.ets_abancart_leave_website_overload:not(.disabled)');
53    if (ETS_ABANCART_LINK_AJAX && _overload.length > 0 && _overload.find('.ets_abancart_wrapper').length && !_overload.hasClass('active') && !_overload.hasClass('loading')) {
54
55        _overload.addClass('loading');
56        $.ajax({
57            type: 'POST',
58            dataType: 'JSON',
59            url: ETS_ABANCART_LINK_AJAX,
60            data: 'leave&ajax=1',
61            success: function (json) {
62                _overload.removeClass('loading');
63                if (json) {
64                    if (json.errors) {
65                        _overload
66                            .removeClass('active')
67                            .addClass('disabled');
68                        ets_abancart_mouseenter();
69                    } else {
70                        var _wrapper = _overload.find('.ets_abancart_wrapper').clone(true),
71                            _html = _wrapper.length ? _wrapper.html() : '';
72                        $.each(json, function (p, item) {
73                            var pattern = p.replace(/([\[\]])/g, '\\$1'),
74                                regExp = new RegExp(pattern, 'g');
75                            _html = _html.replace(regExp, item);
76                        });
77                        _overload.find('.ets_abancart_wrapper').addClass('form-original').after(
78                            _wrapper
79                                .html(_html)
80                                .addClass('active')
81                        );
82                        _overload.addClass('active');
83                        _overload.find('.ets_abancart_wrapper.form-original').remove();
84                        ets_ab_fn.countdown();
85                        ets_ab_fn.countdown2();
86                        if($('.ets_ac_datepicker').length){
87                            $('.ets_ac_datepicker').removeClass('hasDatepicker');
88                            $('.ets_ac_datepicker').datepicker({dateFormat:'yy-mm-dd'});
89                        }
90                        if($('.ets_ac_datetimepicker').length){
91                            $('.ets_ac_datetimepicker').removeClass('hasDatepicker');
92                            $('.ets_ac_datetimepicker').datetimepicker({
93                                prevText: '',
94                                nextText: '',
95                                dateFormat: 'yy-mm-dd',
96                                currentText: 'Now',
97                                closeText: 'Done',
98                                ampm: false,
99                                amNames: ['AM', 'A'],
100                                pmNames: ['PM', 'P'],
101                                timeFormat: 'hh:mm:ss tt',
102                                formatTime :'hh:mm:ss tt',
103                                timeSuffix: '',
104                                timeOnlyTitle: 'Choose Time',
105                                timeText: 'Time',
106                                hourText: 'Hour',
107                                minuteText: 'Minute',
108                            });
109                        }
110
111                        if(json.background_color){
112                            $('.ets_abancart_leave_website_overload  .ets_abancart_container').css('background-color', json.background_color);
113                        }
114                        if(json.popup_width){
115                            $('.ets_abancart_leave_website_overload  .ets_abancart_container').css('width', json.popup_width+'px');
116                        }
117                        if(json.popup_height){
118                            $('.ets_abancart_leave_website_overload  .ets_abancart_container').css('height', json.popup_height+'px');
119                        }
120                        if(json.border_radius){
121                            $('.ets_abancart_leave_website_overload  .ets_abancart_container').css({'border-radius': json.border_radius+'px', 'overflow': 'hidden'});
122                        }
123                        if(json.border_width){
124                            $('.ets_abancart_leave_website_overload  .ets_abancart_container').css({'border-width': json.border_width+'px', 'border-style': 'solid'});
125                        }
126                        if(json.border_color){
127                            $('.ets_abancart_leave_website_overload  .ets_abancart_container').css('border-color', json.border_color);
128                        }
129                        if(json.padding){
130                            $('.ets_abancart_leave_website_overload  .ets_abancart_container').css('border-color', json.padding+'px');
131                        }
132                        if(json.close_btn_color){
133                            $('.ets_abancart_leave_website_overload  .ets_abancart_container .ets_abancart_close').find('style').remove();
134                            $('.ets_abancart_leave_website_overload  .ets_abancart_container .ets_abancart_close').append('<style rel="stylesheet">.ets_abancart_leave_website_overload  .ets_abancart_container .ets_abancart_close:after,.ets_abancart_leave_website_overload  .ets_abancart_container .ets_abancart_close:before{background-color: '+json.close_btn_color+';}</style>');
135                        }
136                        if(json.font_size){
137                            $('.ets_abancart_leave_website_overload  .ets_abancart_wrapper div,.ets_abancart_leave_website_overload  .ets_abancart_wrapper p,.ets_abancart_leave_website_overload  .ets_abancart_wrapper a').css('font-size', json.font_size+'px');
138                        }
139                        if(json.vertical_align){
140                            $('.ets_abancart_leave_website_overload  .ets_abancart_wrapper p,.ets_abancart_leave_website_overload  .ets_abancart_wrapper a,.ets_abancart_leave_website_overload  .ets_abancart_wrapper div:not(.ets_abancart_product_list_table)').css('text-align', 'inherit');
141                            $('.ets_abancart_leave_website_overload  .ets_abancart_wrapper').css('text-align', json.vertical_align);
142                        }
143                        if(json.overlay_bg){
144                            var color = json.overlay_bg;
145                            if( json.overlay_bg_opacity){
146                                var colorRgb = etsAcHexToRgb(json.overlay_bg);
147                                if(colorRgb){
148                                    color = 'rgba('+colorRgb.r+','+colorRgb.g+','+colorRgb.b+','+json.overlay_bg_opacity+')';
149                                }
150                            }
151                            $('.ets_abancart_leave_website_overload').css('background-color', color);
152                        }
153                        etsAcCheckHasCaptcha(_overload.find('.ets_abancart_wrapper'));
154                        etsAcOnLoadRecaptcha();
155
156                    }
157                }
158            },
159            error: function () {
160                _overload.removeClass('loading');
161            }
162        });
163    }
164}
165
166function etsAcCheckHasCaptcha(el) {
167    if(el.find('input[name="captcha_type"]').length){
168        if(el.find('input[name="captcha_type"]').first().val() == 'v2'){
169            el.prepend('
vendor: 75 bytes, line 169
169<script src="https://www.google.com/recaptcha/api.js" async defer></script>
169');
170        }
171        else if(el.find('input[name="captcha_type"]').first().val() == 'v3'){
172            var captchaKey = el.find('input[name="captcha_site_key"]').first().val();
173            el.prepend('
vendor: 97 bytes, line 173
173<script src="https://www.google.com/recaptcha/api.js?render='+captchaKey+'" async defer></script>
173');
174        }
175    }
176}
177function isIE() {
178    ua = navigator.userAgent;
179    /* MSIE used to detect old browsers and Trident used to newer ones*/
180    var is_ie = ua.indexOf("MSIE ") > -1 || ua.indexOf("Trident/") > -1;
181
182    return is_ie;
183}
184
185function ets_abancart_mouseleave(event) {
186    var y, _ie = isIE();
187    if (_ie) {
188        y = event.clientY || event.screenY || event.pageY;
189    } else {
190        y = event.clientY;
191    }
192    if ((y > -5 && !_ie) || (_ie && y > 5)) {
193        return;
194    }
195    ets_abancart_timeout = setTimeout(ets_abancart_leavewebsite, 0);
196}
197
198function ets_abancart_mouseenter() {
199    if (ets_abancart_timeout) {
200        clearTimeout(ets_abancart_timeout);
201        ets_abancart_timeout = null;
202    }
203}
204
205function ets_abancart_keydown(e) {
206    if (ets_abancart_disable_keydown || !e.metaKey || e.keyCode !== 76) {
207        return;
208    }
209    ets_abancart_disable_keydown = true;
210    ets_abancart_timeout = setTimeout(ets_abancart_leavewebsite, ets_abancart_delay);
211}
212
213//display a success/error/notice message
214function showSuccessMessage(msg) {
215    $.growl.notice({title: "", message: msg});
216}
217
218function showErrorMessage(msg) {
219    $.growl.error({title: "", message: msg});
220}
221
222/*----------END LEAVE WEBSITE----------*/
223
224var ets_ab_fn = {
225    init: function () {
226        /*---init favicon---*/
227        if (typeof ETSFavico !== "undefined") {
228            window.favicon = new ETSFavico({
229                animation: 'popFade',
230                bgColor: ETS_ABANCART_BACKGROUND_COLOR,
231                textColor: ETS_ABANCART_TEXT_COLOR,
232            });
233            ets_ab_fn.loadAjax(true);
234        }
235        /*---end init favicon---*/
236
237        /*---init save cart---*/
238        if (ets_abancart_campaigns) {
239            $.each(ets_abancart_campaigns, function (i, item) {
240                if (item.has_closed === null || (parseInt(item.has_closed) !== 1 && parseFloat(item.redisplay) >= 0)) {
241                    setTimeout(function () {
242                        ets_ab_fn.request(parseInt(item.id_ets_abancart_reminder));
243                    }, parseInt((parseFloat(item.redisplay) >= 0 ? parseFloat(item.redisplay) * 1000 : (parseFloat(item.lifetime) > 0 ? parseFloat(item.lifetime) * 1000 : 0))));
244                }
245            });
246        }
247        this.saveCart();
248
249    },
250    request: function (id) {
251        if (ETS_ABANCART_LINK_AJAX && parseInt(id) > 0) {
252            $.ajax({
253                type: 'post',
254                url: ETS_ABANCART_LINK_AJAX,
255                dataType: 'json',
256                data: 'init&id_ets_abancart_reminder=' + id,
257                success: function (json) {
258
259                    if (json) {
260                        switch (json.type) {
261                            case 'popup':
262                                ets_ab_fn.popup(json, id);
263                                break;
264                            case 'bar':
265                                ets_ab_fn.bar(json, id);
266                                break;
267                            case 'browser':
268                                ets_ab_fn.browser(json, id);
269                                break;
270                        }
271                    }
272                },
273            });
274        }
275    },
276    views: function (id, json, group_class) {
277        if (id && json) {
278            // FIRST:
279            var overloadEl = '.ets_abancart_' + json.type + '_overload';
280            if ($('.ets_abancart_' + json.type + '_overload').length <= 0) {
281                $('body').prepend('<div class="ets_abancart_' + json.type + '_overload ' + group_class + ' ets_abancart_overload" data-id="' + id + '" data-type="' + json.type + '" ' + (json.type !== 'popup' ? 'style="background-color: ' + json.background_color + '; color: ' + json.text_color + '"' : '') + '><div class="ets_table"><div class="ets_tablecell"><div class="ets_abancart_container"><div class="ets_abancart_close" title="' + ets_abancart_close_title + '"></div><div class="ets_abancart_wrapper"></div></div></div></div></div>');
282            }
283            // NEXT:
284            var _container = $('body .ets_abancart_' + json.type + '_overload');
285            _container
286                .attr({'data-id': id, 'data-type': json.type})
287                .addClass('active')
288                .find('.ets_abancart_wrapper')
289                .html('<div class="ets-ac-popup-body" style="'+(json.type === 'popup' && json.popup_body_bg ? 'background-color: '+json.popup_body_bg+';' : '')+'">'+json.html+'</div>')
290                .prepend((json.type === 'popup' ? '<h4 class="ets_abancart_title" style="'+(json.header_bg ? 'background-color: '+json.header_bg+';' : '')+(json.header_text_color ? 'color: '+json.header_text_color+';' : '')+(json.header_height ? 'height: '+json.header_height+'px;' : '') + (json.header_font_size ? 'font-size: '+json.header_font_size+'px;' : '')+'">' + json.title + '</h4>' : ''))
291            ;
292            /*---HIGHLIGHT BAR---*/
293            if (json.type !== 'popup') {
294                _container.attr('style', 'background-color: ' + json.background_color + '; color: ' + json.text_color);
295            }
296            var selectorContainer = _container.find('.ets_abancart_container');
297            if(json.type == 'bar'){
298                selectorContainer = _container;
299            }
300            selectorContainer.css('margin', '0 auto');
301            if(json.popup_width)
302                selectorContainer.css('width', json.popup_width+'px');
303            if(json.popup_height)
304                selectorContainer.css('height', json.popup_height+'px');
305            if(json.border_radius)
306                selectorContainer.css('border-radius', json.border_radius+'px');
307            if(json.border_width) {
308                selectorContainer.css('border-width', json.border_width + 'px');
309                selectorContainer.css('border-style', 'solid');
310            }
311            if(json.border_color)
312                selectorContainer.css('border-color', json.border_color);
313            if(json.close_btn_color) {
314                _container.find('.ets_abancart_close').find('style').remove();
315                _container.find('.ets_abancart_close').append('<style>'+overloadEl+' .ets_abancart_close:before,'+overloadEl+' .ets_abancart_close:after{background-color: '+json.close_btn_color+';}</style>');
316            }
317            if(json.vertical_align){
318                $(overloadEl+' .ets-ac-popup-body p, '+overloadEl+' .ets-ac-popup-body a,'+overloadEl+' .ets-ac-popup-body div:not(.ets_abancart_product_list_table)').css('text-align', 'inherit');
319                $(overloadEl+' .ets-ac-popup-body').css('text-align', json.vertical_align);
320            }
321            if(json.font_size){
322                $(''+overloadEl+' .ets-ac-popup-body,'+overloadEl+' .ets-ac-popup-body p, '+overloadEl+' .ets-ac-popup-body a,'+overloadEl+' .ets-ac-popup-body div').css('font-size', json.font_size+'px');
323            }
324            if(json.padding){
325                if(json.popup_width){
326                    if(json.type == 'bar'){
327                        selectorContainer.css('padding', json.padding+'px');
328                    }
329                    else
330                        $(''+overloadEl+' .ets-ac-popup-body').css('padding', json.padding+'px');
331                }
332
333            }
334            if(json.overlay_bg){
335                var color = json.overlay_bg;
336                if(json.overlay_bg_opacity){
337                    var rgbColor = etsAcHexToRgb(json.overlay_bg);
338                    color = 'rgba('+rgbColor.r+','+rgbColor.g+','+rgbColor.b+','+json.overlay_bg_opacity+')';
339                }
340                $('.ets_abancart_popup_overload').css('background-color', color);
341            }
342
343            ets_ab_fn.countdown();
344            ets_ab_fn.countdown2();
345            if($('.ets_ac_datepicker').length){
346                $('.ets_ac_datepicker').removeClass('hasDatepicker');
347                $('.ets_ac_datepicker').datepicker({dateFormat:'yy-mm-dd'});
348            }
349            if($('.ets_ac_datetimepicker').length){
350                $('.ets_ac_datetimepicker').removeClass('hasDatepicker');
351                $('.ets_ac_datetimepicker').datetimepicker({
352                    prevText: '',
353                    nextText: '',
354                    dateFormat: 'yy-mm-dd',
355                    currentText: 'Now',
356                    closeText: 'Done',
357                    ampm: false,
358                    amNames: ['AM', 'A'],
359                    pmNames: ['PM', 'P'],
360                    timeFormat: 'hh:mm:ss tt',
361                    formatTime :'hh:mm:ss tt',
362                    timeSuffix: '',
363                    timeOnlyTitle: 'Choose Time',
364                    timeText: 'Time',
365                    hourText: 'Hour',
366                    minuteText: 'Minute',
367                });
368            }
369            etsAcOnLoadRecaptcha();
370        }
371
372    },
373    popup: function (json, id) {
374        ets_ab_fn.views(id, json, 'ets_abancart_popup');
375    },
376    bar: function (json, id) {
377        ets_ab_fn.views(id, json, '');
378    },
379    browser: function (json, id) {
380
381        if (json && id) {
382            var notification;
383            if (!("Notification" in window)) {
384                //alert("This browser does not support desktop notification 1");
385            } else if (Notification.permission === "granted") {
386                ets_ab_fn.setNotification(notification, json, id);
387            } else if (Notification.permission !== "denied" && ets_abancart_has_browser) {
388                Notification.requestPermission().then(function (permission) {
389                    if (permission === "granted") {
390                        ets_ab_fn.setNotification(notification, json, id);
391                    }
392                });
393            }
394        }
395    },
396    setNotification: function (notification, json, id) {
397
398        // New notification.
399        notification = new Notification(json.title, {icon: json.icon, body: json.html});
400
401        // Event click.
402        notification.onclick = function () {
403            if (typeof json.code !== "undefined" && json.code) {
404                $.ajax({
405                    type: 'post',
406                    url: ETS_ABANCART_LINK_AJAX,
407                    dataType: 'json',
408                    data: 'add_cart_rule&discount_code=' + json.code,
409                    success: function (json) {
410                        if (json) {
411                            if (json.errors) {
412                                showErrorMessage(json.errors)
413                            } else {
414                                window.location.href = json.link_checkout;
415                            }
416                        }
417                    },
418                });
419            }
420        };
421
422        // Event close.
423        notification.onclose = function () {
424            if (id) {
425                $.ajax({
426                    type: 'post',
427                    url: ETS_ABANCART_LINK_AJAX,
428                    dataType: 'json',
429                    data: 'type=browser&has_closed=1&id=' + id,
430                });
431            }
432        };
433    },
434    close: function (type, json) {
435        $('body .ets_abancart_' + type + '_overload.active').remove();
436        if (json.again && parseFloat(json.redisplay) > 0) {
437            setTimeout(function () {
438                ets_ab_fn.request(json.id_ets_abancart_reminder);
439            }, parseFloat(json.redisplay) > 0 ? parseFloat(json.redisplay) * 60 * 1000 : 0);
440        }
441    },
442    countdown: function () {
443        var clock = $('.ets_abancart_count_down_clock');
444        var style = clock.attr('data-style') || '';
445        if (clock.length > 0) {
446            clock.countdown(parseInt(clock.data('date')) * 1000).on('update.countdown', function (event) {
447                $(this).html(event.strftime(''
448                    + '<span class="ets_abancart_countdown weeks" style="'+style+'"><span>%-w</span> week%!w </span>'
449                    + '<span class="ets_abancart_countdown days" style="'+style+'"><span>%-d</span> day%!d </span>'
450                    + '<span class="ets_abancart_countdown hours" style="'+style+'"><span>%H</span> hr </span>'
451                    + '<span class="ets_abancart_countdown minutes" style="'+style+'"><span>%M</span> min </span>'
452                    + '<span class="ets_abancart_countdown seconds" style="'+style+'"><span>%S</span> sec </span>'));
453            });
454        }
455    },
456    countdown2: function () {
457        var clock = $('.ets_ac_evt_countdown2');
458        var style = clock.attr('data-style') || '';
459        if (clock.length > 0) {
460            clock.countdown(parseInt(clock.data('date')) * 1000).on('update.countdown', function (event) {
461                $(this).html(event.strftime(''
462                    + '<span class="ets_ac_countdown2 weeks" style="'+style+'"><span>%-w</span> week%!w </span>'
463                    + '<span class="ets_ac_countdown2 days" style="'+style+'"><span>%-d</span> day%!d </span>'
464                    + '<span class="ets_ac_countdown2 hours" style="'+style+'"><span>%H</span> hr </span>'
465                    + '<span class="ets_ac_countdown2 minutes" style="'+style+'"><span>%M</span> min </span>'
466                    + '<span class="ets_ac_countdown2 seconds" style="'+style+'"><span>%S</span> sec </span>'));
467            });
468        }
469    },
470    saveCart: function () {
471        if ((ETS_ABANCART_LIFE_TIME >= 0 || $('#ets_abancart_cart_save.active').length > 0) && ETS_ABANCART_LINK_SHOPPING_CART) {
472            setTimeout(function () {
473                $.ajax({
474                    type: 'POST',
475                    dataType: 'json',
476                    url: ETS_ABANCART_LINK_SHOPPING_CART,
477                    data: 'init',
478                    success: function (json) {
479                        $('#ets_abancart_cart_save.active').removeClass('active');
480                        if (json) {
481                            if ($('body .ets_abancart_shopping_cart_overload').length <= 0) {
482                                $('body').prepend('<div class="ets_abancart_shopping_cart_overload ets_abancart_overload"><div class="ets_abancart_wrapper"></div></div>');
483                            }
484                            if (json.html)
485                                $('body .ets_abancart_shopping_cart_overload').addClass('active').find('.ets_abancart_wrapper').html(json.html);
486                        }
487                    },
488                    error: function () {
489                        $('#ets_abancart_cart_save.active').removeClass('active');
490                    }
491                });
492            }, $('#ets_abancart_cart_save.active').length > 0 ? 0 : ETS_ABANCART_LIFE_TIME * 1000);
493        }
494    },
495    exitPopupSaveCart: function (notReDisplay) {
496
497        var notReDisplay = notReDisplay || true;
498
499        $('.ets_abancart_shopping_cart_overload.active').removeClass('active');
500        if (notReDisplay && ETS_ABANCART_LINK_SHOPPING_CART) {
501            $('#save_cart_form .bootstrap').remove();
502            $.ajax({
503                type: 'post',
504                url: ETS_ABANCART_LINK_SHOPPING_CART,
505                dataType: 'json',
506                data: 'ajax=1&offCart',
507                success: function () {
508
509                },
510                error: function () {
511
512                }
513            });
514        }
515    },
516    exitPopupCart: function () {
517        $('.ets_abancart_display_shopping_cart_overload.active').removeClass('active');
518    },
519    loadAjax: function (initialized) {
520        if (typeof ETS_ABANCART_BROWSER_TAB_ENABLED === "undefined" || !ETS_ABANCART_BROWSER_TAB_ENABLED)
521            return;
522        if (initialized) {
523            favicon.badge(parseInt(ETS_ABANCART_PRODUCT_TOTAL));
524        } else if (ETS_ABANCART_LINK_AJAX && typeof favicon !== "undefined") {
525            $.ajax({
526                type: 'POST',
527                dataType: 'JSON',
528                url: ETS_ABANCART_LINK_AJAX,
529                data: 'favicon&ajax=1',
530                success: function (json) {
531                    if (json) {
532                        favicon.badge(parseInt(json.product_total));
533                    }
534                }
535            });
536        }
537    },
538    exitPopupLeave: function () {
539        $('.ets_abancart_leave_website_overload.active').removeClass('active');
540        $('.ets_abancart_leave_website_overload .ets_abancart_wrapper.active').remove();
541    },
542    copyToClipboard: function (el) {
543        var $temp = $("<input>");
544        $("body").append($temp);
545        $temp.val(el.text().trim()).select();
546        document.execCommand("copy");
547        $temp.remove();
548        showSuccessMessage(copied_translate);
549        setTimeout(function () {
550            el.removeClass('copy');
551        }, 300);
552    },
553};
554
555$(document).ready(function () {
556
557    if($('.ets_ac_datepicker').length){
558        $('.ets_ac_datepicker').datepicker({dateFormat:'yy-mm-dd'});
559    }
560    if($('.ets_ac_datetimepicker').length){
561        $('.ets_ac_datetimepicker').datetimepicker({
562            prevText: '',
563            nextText: '',
564            dateFormat: 'yy-mm-dd',
565            currentText: 'Now',
566            closeText: 'Done',
567            ampm: false,
568            amNames: ['AM', 'A'],
569            pmNames: ['PM', 'P'],
570            timeFormat: 'hh:mm:ss tt',
571            formatTime :'hh:mm:ss tt',
572            timeSuffix: '',
573            timeOnlyTitle: 'Choose Time',
574            timeText: 'Time',
575            hourText: 'Hour',
576            minuteText: 'Minute',
577        });
578    }
579    if ($('.ets_speed_dynamic_hook').length > 0) {
580        $(document).on("hooksLoaded", function () {
581            ets_ab_fn.init();
582        });
583    } else
584        ets_ab_fn.init();
585    /*---favicon---*/
586    $(document).ajaxComplete(function (event, xhr, settings) {
587        if (typeof settings.data !== "undefined" && (settings.data.toString().match(/(qty=\d+)/i) && settings.data.toString().match(/(add=\d+)/i) || settings.url.match(/(id_product=\d+)/i) && settings.url.match(/(update=\d+)/i) || settings.url.match(/(id_product=\d+)/i) && settings.url.match(/(delete=\d+)/i))) {
588            ets_ab_fn.loadAjax(false);
589        }
590    });
591    /*---end favicon---*/
592
593    $(document).on('click', '.ets_abancart_box .ets_abancart_box_discount', function (ev) {
594        ev.preventDefault();
595        ets_ab_fn.copyToClipboard($(this));
596    });
597
598    $(document).on('click', '.ets_abancart_leave_website_overload .ets_abancart_close', function (ev) {
599        ev.preventDefault();
600        ets_ab_fn.exitPopupLeave();
601    });
602
603
604    $(document).on('click', '.ets_abancart_shopping_cart_overload .ets_abancart_create_account', function (ev) {
605        ev.preventDefault();
606        if ($('#id_customer').length > 0 && parseInt($('#id_customer').val()) <= 0) {
607            $('.ets_abancart_form_login').fadeOut();
608            $('.ets_abancart_form_create').fadeIn();
609        }
610    });
611
612    $(document).on('click', '.ets_abancart_view_shopping_cart', function (ev) {
613        ev.preventDefault();
614        var btn = $(this);
615        if (!btn.hasClass('active') && btn.attr('href') != '') {
616            btn.addClass('active');
617            $.ajax({
618                type: 'POST',
619                url: btn.attr('href'),
620                dataType: 'json',
621                data: 'ajax=1',
622                success: function (json) {
623                    btn.removeClass('active');
624                    if (json) {
625                        if ($('body .ets_abancart_display_shopping_cart_overload').length <= 0) {
626                            $('body').prepend('<div class="ets_abancart_display_shopping_cart_overload ets_abancart_popup ets_abancart_overload"><div class="ets_table"><div class="ets_tablecell"><div class="ets_abancart_container"><div class="ets_abancart_close" title="' + ets_abancart_close_title + '"></div><div class="ets_abancart_wrapper"></div></div></div></div></div>');
627                        }
628                        $('body .ets_abancart_display_shopping_cart_overload').addClass('active').find('.ets_abancart_wrapper').html(json.html);
629                    }
630                },
631                error: function () {
632                    btn.removeClass('active');
633                }
634            });
635        }
636    });
637
638    $(document).on('click', '.ets_abancart_display_shopping_cart_overload .ets_abancart_close, .ets_abancart_display_shopping_cart_overload .ets_abancart_cancel', function (ev) {
639        ev.preventDefault();
640        ets_ab_fn.exitPopupCart();
641    });
642
643    $(document).on('click', '.ets_abancart_load_this_cart', function (ev) {
644        ev.preventDefault();
645        var btn = $(this);
646        if (!btn.hasClass('active') && btn.attr('href') != '') {
647            btn.addClass('active');
648            $.ajax({
649                type: 'POST',
650                url: btn.attr('href'),
651                dataType: 'json',
652                data: 'ajax=1',
653                success: function (json) {
654                    btn.removeClass('active');
655                    if (json) {
656                        if (json.errors)
657                            $('body .ets_abancart_display_shopping_cart_overload').prepend(json.errors);
658                        else
659                            window.location.href = json.link_checkout;
660                    }
661                },
662                error: function () {
663                    btn.removeClass('active');
664                }
665            });
666        }
667    });
668
669    $(document).on('click', '.ets_abancart_shopping_cart_overload .ets_abancart_close', function (ev) {
670        ev.preventDefault();
671        ets_ab_fn.exitPopupSaveCart();
672    });
673
674    $(document).on('click', '.ets_abancart_shopping_cart_overload button[id=submit_cart]', function (ev) {
675        ev.preventDefault();
676
677        var btn = $(this), form = $('#save_cart_form');
678        btn.parents('form#save_cart_form').find('input.cart_name').removeClass('error');
679        if (!btn.hasClass('active') && form.attr('action')) {
680            btn.addClass('active');
681            var formData = new FormData(form.get(0));
682            formData.append('ajax', 1);
683            $('#save_cart_form .bootstrap').remove();
684            $.ajax({
685                type: 'post',
686                url: form.attr('action'),
687                dataType: 'json',
688                data: formData,
689                processData: false,
690                contentType: false,
691                success: function (json) {
692                    btn.removeClass('active');
693                    if (json) {
694                        if (json.not_logged && parseInt($('#id_customer').val()) <= 0) {
695                            $('.ets_abancart_form_login').fadeIn();
696                            $('.ets_abancart_form_save_cart').fadeOut();
697                        } else if (json.errors) {
698                            form.prepend(json.errors);
699                            btn.parents('form#save_cart_form').find('input#cart_name').addClass('error').focus();
700                        } else {
701                            if (json.msg)
702                                showSuccessMessage(json.msg);
703                            $('#ets_abancart_cart_save').remove();
704                            ets_ab_fn.exitPopupSaveCart(false);
705                        }
706                    }
707                },
708                error: function () {
709                    btn.removeClass('active');
710                }
711            });
712        }
713    });
714    $(document).on('change','input#cart_name',function(e){
715        if ( $(this).val() != '' ){
716            $(this).removeClass('error');
717        } else {
718            $(this).addClass('error');
719        }
720    });
721    $(document).on('click', '.ets_abancart_shopping_cart_overload button[name=submitLogin]', function (ev) {
722        ev.preventDefault();
723        var btn = $(this), form = $('#login_form');
724        if (!btn.hasClass('active') && form.attr('action')) {
725            btn.addClass('active');
726            var formData = new FormData(form.get(0));
727            formData.append('cart_name', $('#cart_name').val());
728            formData.append('ajax', 1);
729            $('#login_form .bootstrap').remove();
730            $.ajax({
731                type: 'post',
732                url: form.attr('action'),
733                dataType: 'json',
734                data: formData,
735                processData: false,
736                contentType: false,
737                success: function (json) {
738                    btn.removeClass('active');
739                    if (json) {
740                        if (json.errors)
741                            form.prepend(json.errors);
742                        else
743                            window.location.reload();
744                    }
745                },
746                error: function () {
747                    btn.removeClass('active');
748                }
749            });
750        }
751    });
752
753    $(document).on('click', '.ets_abancart_shopping_cart_overload button[name=submitCreate]', function (ev) {
754        ev.preventDefault();
755        var btn = $(this), form = $('#create_form');
756        if (!btn.hasClass('active') && form.attr('action')) {
757            btn.addClass('active');
758            var formData = new FormData(form.get(0));
759            formData.append('cart_name', $('#cart_name').val());
760            formData.append('ajax', 1);
761            $('#login_form .bootstrap').remove();
762            $.ajax({
763                type: 'post',
764                url: form.attr('action'),
765                dataType: 'json',
766                data: formData,
767                processData: false,
768                contentType: false,
769                success: function (json) {
770                    btn.removeClass('active');
771                    if (json) {
772                        if (json.errors)
773                            form.prepend(json.errors);
774                        else
775                            window.location.reload();
776                    }
777                },
778                error: function () {
779                    btn.removeClass('active');
780                    window.location.reload();
781                }
782            });
783        }
784    });
785
786    $(document).on('click', '#ets_abancart_cart_save', function (ev) {
787        ev.preventDefault();
788        if (!$(this).hasClass('active')) {
789            $(this).addClass('active');
790            ets_ab_fn.saveCart();
791        }
792
793    });
794
795    $(document).on('click', '.ets_abancart_close, .ets_abancart_no_thanks', function (ev) {
796        ev.preventDefault();
797        var btn = $(this),
798            overload = btn.parents('.ets_abancart_overload'),
799            id = overload.attr('data-id'),
800            type = overload.attr('data-type');
801        $('body .ets_abancart_' + type + '_overload.active').remove();
802        if (!btn.hasClass('active') && ETS_ABANCART_LINK_AJAX && id) {
803            $.ajax({
804                type: 'post',
805                url: ETS_ABANCART_LINK_AJAX,
806                dataType: 'json',
807                data: 'type=' + type + '&has_closed=1&id=' + id + (btn.hasClass('ets_abancart_no_thanks') ? '&no_again=1' : ''),
808                success: function (json) {
809                    if (json) {
810                        ets_ab_fn.close(type, json);
811                    }
812                }
813            });
814        }
815    });
816
817    $(document).on('click', '.ets_abancart_leave_website_overload .ets_abancart_no_thanks', function (ev) {
818        ev.preventDefault();
819        var btn = $(this),
820            overload = btn.parents('.ets_abancart_overload');
821        overload.remove();
822        if (!btn.hasClass('active') && ETS_ABANCART_LINK_AJAX) {
823            btn.addClass('active');
824            $.ajax({
825                type: 'post',
826                url: ETS_ABANCART_LINK_AJAX,
827                dataType: 'json',
828                data: 'offLeave',
829                success: function (json) {
830                    btn.removeClass('active');
831                    if (json) {
832
833                    }
834                },
835                error: function () {
836                    btn.removeClass('active');
837                }
838            });
839        }
840    });
841
842    $(document).on('click', '.ets_abancart_overload .ets_abancart_add_discount', function (ev) {
843        ev.preventDefault();
844        var btn = $(this),
845            overload = btn.parents('.ets_abancart_overload'),
846            discount_code = btn.data('code');
847        if (!btn.hasClass('active') && ETS_ABANCART_LINK_AJAX) {
848            $.ajax({
849                type: 'post',
850                url: ETS_ABANCART_LINK_AJAX,
851                dataType: 'json',
852                data: 'add_cart_rule&discount_code=' + discount_code,
853                success: function (json) {
854                    if (json) {
855                        if (json.errors) {
856                            //overload.prepend(json.errors);
857                            showErrorMessage(json.errors);
858                        } else
859                            window.location.href = json.link_checkout;
860                    }
861                }
862            });
863        }
864    });
865
866    $(document).keyup(function (e) {
867        if (e.keyCode === 27) {
868            ets_ab_fn.exitPopupCart();
869            ets_ab_fn.exitPopupSaveCart();
870        }
871    });
872
873    $(document).mouseup(function (e) {
874
875        var displayShoppingCart = $('.ets_abancart_display_shopping_cart_overload.active .ets_abancart_container'),
876            displayCartSave = $('.ets_abancart_shopping_cart_overload.active .ets_abancart_shopping_cart');
877
878        if (displayShoppingCart.length > 0 && !displayShoppingCart.is(e.target) && displayShoppingCart.has(e.target).length === 0) {
879            ets_ab_fn.exitPopupCart();
880        }
881        if (displayCartSave.length > 0 && !displayCartSave.is(e.target) && displayCartSave.has(e.target).length === 0) {
882            ets_ab_fn.exitPopupSaveCart();
883        }
884    });
885
886    $(document).on('click', '.ets_abancart_delete_cart, .ets_abancart_delete', function (ev) {
887        var btn = $(this);
888        if (!confirm(btn.data('confirm'))) {
889            ev.preventDefault();
890        }
891    });
892
893    $(document).on('click', '.js-ets-ac-btn-submit-lead-form', function (e) {
894        var $this = $(this);
895        if($this.hasClass('loading')){
896            return false;
897        }
898        if($this.closest('form').find('.ets_ac_captchav2').length && typeof grecaptcha !== 'undefined'){
899            if(!grecaptcha.getResponse()){
900                $this.closest('.ets-ac-lead-form-field-shortcode').find('.form-errors').html('<div class="alert alert-danger"><ul>'+ETS_AC_TRANS.captchv2_invalid+'</ul></div>');
901                return false;
902            }
903        }
904        var formData = new FormData();
905        var inputDatas = $this.closest('form').serializeArray();
906
907        $.each(inputDatas,function (i, el) {
908            if($this.closest('form').find('[name="'+el.name+'"]').attr('type') == 'file'){
909                var fileItem = $this.closest('form').find('[name='+el.name+']')[0].files;
910                if(fileItem.length){
911                    formData.append(el.name, fileItem[0]);
912                }
913            }
914            else{
915                formData.append(el.name, el.value);
916            }
917        });
918        $this.closest('form').find('input[type=file]').each(function () {
919            var fileItem = $(this)[0].files;
920            if(fileItem.length){
921                formData.append($(this).attr('name'), fileItem[0]);
922            }
923        });
924
925        formData.append('submitEtsAcLeadForm', 1);
926        $.ajax({
927            url: ETS_AC_LINK_SUBMIT_LEAD_FORM+(ETS_AC_LINK_SUBMIT_LEAD_FORM.indexOf('?') !== -1 ? '&ajax=1' : '?ajax=1'),
928            type: 'POST',
929            dataType: 'json',
930            data: formData,
931            processData: false,
932            contentType: false,
933            dataType: 'json',
934            beforeSend: function () {
935                $this.addClass('loading');
936                $this.prop('disabled', true);
937            },
938            success: function(res){
939                if(res.success){
940                    if(res.display_thankyou_page){
941                        $this.closest('.ets_abancart_wrapper').html(res.thankyou);
942                        if($('.ets_abancart_popup_overload .ets_abancart_close').length){
943                            $('.ets_abancart_popup_overload .ets_abancart_close').addClass('thankyou-page');
944                        }
945                    }
946                    else{
947                        $this.closest('.ets-ac-lead-form-field-shortcode').html('<div class="alert alert-success">'+res.message+'</div>');
948                    }
949                }
950                else{
951                    var msg = '';
952                    $.each(res.message, function (i, el) {
953                        msg += '<li>'+el+'</li>';
954                    });
955                    $this.closest('.ets-ac-lead-form-field-shortcode').find('.form-errors').html('<div class="alert alert-danger"><ul>'+msg+'</ul></div>');
956                }
957            },
958            complete: function () {
959                $this.removeClass('loading');
960                $this.prop('disabled', false);
961            }
962        });
963        return false;
964    });
965
966    $(document).on('click', '.ets-ac-btn-submit-lead-form ', function () {
967        var $this = $(this);
968        if($this.closest('form').find('.ets_ac_captchav2').length && typeof grecaptcha !== 'undefined'){
969            if(!grecaptcha.getResponse()){
970                $this.closest('form').find('.ets_ac_captchav2').parent().find('.form-error-item').remove();
971                $this.closest('form').find('.ets_ac_captchav2').after('<p class="form-error-item">'+ETS_AC_TRANS.captchv2_invalid+'</p>');
972                return false;
973            }
974        }
975    });
976    $(document).mouseleave(function () {
977        setTimeout(ets_abancart_leavewebsite, 0)
978    });
979
980});
981
982function etsAcHexToRgb(hex) {
983    // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
984    var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
985    hex = hex.replace(shorthandRegex, function(m, r, g, b) {
986        return r + r + g + g + b + b;
987    });
988
989    var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
990    return result ? {
991        r: parseInt(result[1], 16),
992        g: parseInt(result[2], 16),
993        b: parseInt(result[3], 16)
994    } : null;
995}

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.