PageSourceSearch

https://trubensl.com/modules/ets_cfultimate/views/js/scripts.js

js trubensl.com collected 2026-10-08 09:17:26 UTC 30,365 bytes, 834 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 */
21(function ($) {
22
23    'use strict';
24    var wpcfu = {
25        "apiSettings": {
26            "root": "http:\/\/web.prestahero.com\/chung\/wp494\/wp-json\/contact-form-7\/v1",
27            "namespace": "contact-form-7\/v1"
28        }, "recaptcha": {"messages": {"empty": "Please verify that you are not a robot."}}
29    };
30    if (typeof wpcfu === 'undefined' || wpcfu === null) {
31        return;
32    }
33
34    wpcfu = $.extend({
35        cached: 0,
36        inputs: []
37    }, wpcfu);
38
39    $(function () {
40        wpcfu.supportHtml5 = (function () {
41            var features = {};
42            var input = document.createElement('input');
43
44            features.placeholder = 'placeholder' in input;
45
46            var inputTypes = ['email', 'url', 'tel', 'number', 'range', 'date'];
47
48            $.each(inputTypes, function (index, value) {
49                input.setAttribute('type', value);
50                features[value] = input.type !== 'text';
51            });
52            return features;
53        })();
54
55        $('div.wpcfu > form').each(function () {
56            var $form = $(this);
57            wpcfu.initForm($form);
58
59            if (wpcfu.cached) {
60                wpcfu.refill($form);
61            }
62        });
63    });
64
65    wpcfu.getId = function (form) {
66        return parseInt($('input[name="_wpcfu"]', form).val(), 10);
67    };
68
69    wpcfu.initForm = function (form) {
70        var $form = $(form);
71        $form.submit(function (event) {
72            if (typeof window.FormData !== 'function') {
73                return;
74            }
75            wpcfu.submit($form);
76            event.preventDefault();
77        });
78        if ($form.find('.ajax-loader').length <= 0)
79            $form.find('.wpcfu-submit').after('<span class="ajax-loader"></span>');
80        wpcfu.toggleSubmit($form);
81
82        $form.on('click', '.wpcfu-acceptance', function () {
83            wpcfu.toggleSubmit($form);
84        });
85
86        // Exclusive Checkbox
87        $('.wpcfu-exclusive-checkbox', $form).on('click', 'input:checkbox', function () {
88            var name = $(this).attr('name');
89            $form.find('input:checkbox[name="' + name + '"]').not(this).prop('checked', false);
90        });
91
92        // Free Text Option for Checkboxes and Radio Buttons
93        $('.wpcfu-list-item.has-free-text', $form).each(function () {
94            var $freetext = $(':input.wpcfu-free-text', this);
95            var $wrap = $(this).closest('.wpcfu-form-control');
96            if ($(':checkbox, :radio', this).is(':checked')) {
97                $freetext.prop('disabled', false);
98            } else {
99                $freetext.prop('disabled', true);
100            }
101            $wrap.on('change', ':checkbox, :radio', function () {
102                var $cb = $('.has-free-text', $wrap).find(':checkbox, :radio');
103                if ($cb.is(':checked')) {
104                    $freetext.prop('disabled', false).focus();
105                } else {
106                    $freetext.prop('disabled', true);
107                }
108            });
109        });
110
111        // Placeholder Fallback
112        if (!wpcfu.supportHtml5.placeholder) {
113            $('[placeholder]', $form).each(function () {
114                $(this).val($(this).attr('placeholder'));
115                $(this).addClass('placeheld');
116
117                $(this).focus(function () {
118                    if ($(this).hasClass('placeheld')) {
119                        $(this).val('').removeClass('placeheld');
120                    }
121                });
122
123                $(this).blur(function () {
124                    if ('' === $(this).val()) {
125                        $(this).val($(this).attr('placeholder'));
126                        $(this).addClass('placeheld');
127                    }
128                });
129            });
130        }
131
132        if (wpcfu.jqueryUi && !wpcfu.supportHtml5.date) {
133            $form.find('input.wpcfu-date[type="date"]').each(function () {
134                $(this).datepicker({
135                    dateFormat: 'yy-mm-dd',
136                    minDate: new Date($(this).attr('min')),
137                    maxDate: new Date($(this).attr('max'))
138                });
139            });
140        }
141
142        if (wpcfu.jqueryUi && !wpcfu.supportHtml5.number) {
143            $form.find('input.wpcfu-number[type="number"]').each(function () {
144                $(this).spinner({
145                    min: $(this).attr('min'),
146                    max: $(this).attr('max'),
147                    step: $(this).attr('step')
148                });
149            });
150        }
151
152        // Character Count
153        $('.wpcfu-character-count', $form).each(function () {
154            var $count = $(this);
155            var name = $count.attr('data-target-name');
156            var down = $count.hasClass('down');
157            var starting = parseInt($count.attr('data-starting-value'), 10);
158            var maximum = parseInt($count.attr('data-maximum-value'), 10);
159            var minimum = parseInt($count.attr('data-minimum-value'), 10);
160
161            var updateCount = function (target) {
162                var $target = $(target);
163                var length = $target.val().length;
164                var count = down ? starting - length : length;
165                $count.attr('data-current-value', count);
166                $count.text(count);
167
168                if (maximum && maximum < length) {
169                    $count.addClass('too-long');
170                } else {
171                    $count.removeClass('too-long');
172                }
173
174                if (minimum && length < minimum) {
175                    $count.addClass('too-short');
176                } else {
177                    $count.removeClass('too-short');
178                }
179            };
180
181            $(':input[name="' + name + '"]', $form).each(function () {
182                updateCount(this);
183
184                $(this).keyup(function () {
185                    updateCount(this);
186                });
187            });
188        });
189
190        // URL Input Correction
191        $form.on('change', '.wpcfu-validates-as-url', function () {
192            var val = $.trim($(this).val());
193
194            if (val
195                && !val.match(/^[a-z][a-z0-9.+-]*:/i)
196                && -1 !== val.indexOf('.')) {
197                val = val.replace(/^\/+/, '');
198                val = 'http://' + val;
199            }
200
201            $(this).val(val);
202        });
203    };
204
205    wpcfu.grecaptchaReset = function() {
206
207    }
208
209    wpcfu.submit = function (form) {
210        if (typeof tinyMCE !== 'undefined' && tinyMCE.editors.length > 0 && $('.autoload_rte_cfu').length) {
211            tinyMCE.triggerSave();
212        }
213        if (typeof window.FormData !== 'function') {
214            return;
215        }
216        var $form = $(form);
217        if ($form.hasClass('is-active'))
218            return false;
219        $('.ajax-loader', $form).addClass('is-active');
220        $form.addClass('is-active');
221        $('[placeholder].placeheld', $form).each(function (i, n) {
222            $(n).val('');
223        });
224
225        wpcfu.clearResponse($form);
226
227        var formData = new FormData($form.get(0));
228
229        var detail = {
230            id: $form.closest('div.wpcfu').attr('id'),
231            status: 'init',
232            inputs: [],
233            formData: formData
234        };
235
236        $.each($form.serializeArray(), function (i, field) {
237            if ('_wpcfu' == field.name) {
238                detail.contactFormId = field.value;
239            } else if ('_ets_cfu_version' == field.name) {
240                detail.pluginVersion = field.value;
241            } else if ('_ets_cfu_locale' == field.name) {
242                detail.contactFormLocale = field.value;
243            } else if ('_ets_cfu_unit_tag' == field.name) {
244                detail.unitTag = field.value;
245            } else if ('_ets_cfu_container_post' == field.name) {
246                detail.containerPostId = field.value;
247            } else if (field.name.match(/^_ets_cfu_\w+_free_text_/)) {
248                var owner = field.name.replace(/^_ets_cfu_\w+_free_text_/, '');
249                detail.inputs.push({
250                    name: owner + '-free-text',
251                    value: field.value
252                });
253            } else if (field.name.match(/^_/)) {
254                // do nothing
255            } else {
256                detail.inputs.push(field);
257            }
258        });
259        wpcfu.triggerEvent($form.closest('div.wpcfu'), 'beforesubmit', detail);
260        var ajaxSuccess = function (data, status, xhr, $form) {
261            detail.id = $(data.into).attr('id');
262            detail.status = data.status;
263            detail.apiResponse = data;
264            var $message = $('.wpcfu-response-output', $form);
265
266            $message.removeClass('alert-warning');
267            $message.removeClass('alert-success');
268            if (data.status && typeof grecaptcha !== "undefined" && $form.find(':input[name=g-recaptcha-response]').length > 0) {
269                if (!ets_cfu_recaptcha_v3) { 
270                    grecaptcha.reset();
271                }
272            }
273            switch (data.status) {
274                case 'validation_failed':
275                    $.each(data.invalidFields, function (i, n) {
276                        $(n.into, $form).each(function () {
277                            wpcfu.notValidTip(this, n.message);
278                            $('.wpcfu-form-control', this).addClass('wpcfu-not-valid');
279                            $('[aria-invalid]', this).attr('aria-invalid', 'true');
280                        });
281                    });
282                    $message.addClass('alert alert-warning');
283                    $form.addClass('invalid');
284                    wpcfu.triggerEvent(data.into, 'invalid', detail);
285                    break;
286                case 'acceptance_missing':
287                    $message.addClass('alert alert-warning');
288                    $form.addClass('unaccepted');
289                    wpcfu.triggerEvent(data.into, 'unaccepted', detail);
290                    break;
291                case 'spam':
292                    $message.addClass('alert alert-warning');
293                    $form.addClass('spam');
294                    $('[name="g-recaptcha-response"]', $form).each(function () {
295                        if ('' === $(this).val()) {
296                            var $recaptcha = $(this).closest('.wpcfu-form-control-wrap');
297                            wpcfu.notValidTip($recaptcha, wpcfu.recaptcha.messages.empty);
298                        }
299                    });
300                    wpcfu.triggerEvent(data.into, 'spam', detail);
301                    break;
302                case 'aborted':
303                    $message.addClass('alert alert-warning');
304                    $form.addClass('aborted');
305
306                    wpcfu.triggerEvent(data.into, 'aborted', detail);
307                    break;
308                case 'mail_sent':
309                    $message.addClass('alert alert-success');
310                    $form.addClass('sent');
311                    wpcfu.triggerEvent(data.into, 'mailsent', detail);
312                    break;
313                case 'mail_failed':
314                    $message.addClass('alert alert-warning');
315                    $form.addClass('failed');
316                    wpcfu.triggerEvent(data.into, 'mailfailed', detail);
317                    break;
318                case 'mail_redirect':
319                    $message.hide().remove();
320                    window.location.href = data.message;
321                    break;
322                case 'load_thank_page':
323                    $message.hide().remove();
324                    window.location.href = data.message;
325                    break;
326                default:
327                    var customStatusClass = 'custom-'
328                        + data.status.replace(/[^0-9a-z]+/i, '-');
329                    $message.addClass('wpcfu-' + customStatusClass);
330                    $form.addClass(customStatusClass);
331            }
332
333            wpcfu.refill($form, data);
334
335            wpcfu.triggerEvent(data.into, 'submit', detail);
336
337            if ('mail_sent' == data.status) {
338                $form.each(function () {
339                    this.reset();
340                });
341            }
342
343            $form.find('[placeholder].placeheld').each(function (i, n) {
344                $(n).val($(n).attr('placeholder'));
345            });
346
347            $message.html('').append(data.message).slideDown('fast');
348            $message.attr('role', 'alert');
349
350            $('.screen-reader-response', $form.closest('.wpcfu')).each(function () {
351                var $response = $(this);
352                $response.html('').attr('role', '').append(data.message);
353
354                if (data.invalidFields) {
355                    var $invalids = $('<ul></ul>');
356
357                    $.each(data.invalidFields, function (i, n) {
358                        if (n.idref) {
359                            var $li = $('<li></li>').append($('<a></a>').attr('href', '#' + n.idref).append(n.message));
360                        } else {
361                            var $li = $('<li></li>').append(n.message);
362                        }
363
364                        $invalids.append($li);
365                    });
366
367                    $response.append($invalids);
368                }
369
370                $response.attr('role', 'alert').focus();
371            });
372        };
373        $.ajax({
374            type: 'POST',
375            url: $form.attr('action'),
376            data: formData,
377            dataType: 'json',
378            processData: false,
379            contentType: false
380        }).done(function (data, status, xhr) {
381            ajaxSuccess(data, status, xhr, $form);
382            $('.ajax-loader', $form).removeClass('is-active');
383            $form.removeClass('is-active');
384            if ($form.find('.pa-captcha-refesh').length)
385                refeshImage($form.find('.pa-captcha-refesh'));
386        }).fail(function (xhr, status, error) {
387            $form.find('.wpcfu-response-output').removeClass('alert-warning');
388            $form.find('.wpcfu-response-output').removeClass('alert-success');
389            $form.find('.wpcfu-response-output').html('There was a technical error when submitting the form. Please contact webmaster for more information');
390            $form.find('.wpcfu-response-output').addClass('alert alert-warning');
391            $form.find('.wpcfu-response-output').addClass('invalid').show();
392            $form.find('.ajax-loader').removeClass('is-active');
393            $form.removeClass('is-active');
394            if ($form.find('.pa-captcha-refesh'))
395                refeshImage($form.find('.pa-captcha-refesh'));
396        });
397    };
398    wpcfu.triggerEvent = function (target, name, detail) {
399        var $target = $(target);
400
401        /* DOM event */
402        var event = new CustomEvent('wpcfu' + name, {
403            bubbles: true,
404            detail: detail
405        });
406        /* jQuery event */
407        $target.trigger('wpcfu:' + name, detail);
408        $target.trigger(name + '.wpcfu', detail); // deprecated
409    };
410
411    wpcfu.toggleSubmit = function (form, state) {
412        var $form = $(form);
413        var $submit = $('input:submit', $form);
414
415        if (typeof state !== 'undefined') {
416            $submit.prop('disabled', !state);
417            return;
418        }
419
420        if ($form.hasClass('wpcfu-acceptance-as-validation')) {
421            return;
422        }
423        $submit.prop('disabled', false);
424
425        $('.wpcfu-acceptance', $form).each(function () {
426            var $span = $(this);
427            var $input = $('input:checkbox', $span);
428
429            if (!$span.hasClass('optional')) {
430                if ($span.hasClass('invert') && $input.is(':checked')
431                    || !$span.hasClass('invert') && !$input.is(':checked')) {
432                    $submit.prop('disabled', true);
433                    return false;
434                }
435            }
436        });
437    };
438
439    wpcfu.notValidTip = function (target, message) {
440        var $target = $(target);
441        console.log(target);
442        $('.wpcfu-not-valid-tip', $target).remove();
443        $('<span role="alert" class="wpcfu-not-valid-tip"></span>')
444            .text(message).appendTo($target);
445
446        if ($target.is('.use-floating-validation-tip *')) {
447            var fadeOut = function (target) {
448                $(target).not(':hidden').animate({
449                    opacity: 0
450                }, 'fast', function () {
451                    $(this).css({'z-index': -100});
452                });
453            };
454
455            $target.on('mouseover', '.wpcfu-not-valid-tip', function () {
456                fadeOut(this);
457            });
458
459            $target.on('focus', ':input', function () {
460                fadeOut($('.wpcfu-not-valid-tip', $target));
461            });
462        }
463    };
464
465    wpcfu.refill = function (form, data) {
466        var $form = $(form);
467
468        var refillCaptcha = function ($form, items) {
469            $.each(items, function (i, n) {
470                $form.find(':input[name="' + i + '"]').val('');
471                $form.find('img.wpcfu-captcha-' + i).attr('src', n);
472                var match = /([0-9]+)\.(png|gif|jpeg)$/.exec(n);
473                $form.find('input:hidden[name="_ets_cfu_captcha_challenge_' + i + '"]').attr('value', match[1]);
474            });
475        };
476
477        var refillQuiz = function ($form, items) {
478            $.each(items, function (i, n) {
479                $form.find(':input[name="' + i + '"]').val('');
480                $form.find(':input[name="' + i + '"]').siblings('span.wpcfu-quiz-label').text(n[0]);
481                $form.find('input:hidden[name="_ets_cfu_quiz_answer_' + i + '"]').attr('value', n[1]);
482            });
483        };
484
485        if (typeof data === 'undefined') {
486            $.ajax({
487                type: 'GET',
488                url: wpcfu.apiSettings.getRoute(
489                    '/contact-forms/' + wpcfu.getId($form) + '/refill'),
490                beforeSend: function (xhr) {
491                    var nonce = $form.find(':input[name="_wpnonce"]').val();
492
493                    if (nonce) {
494                        xhr.setRequestHeader('X-WP-Nonce', nonce);
495                    }
496                },
497                dataType: 'json'
498            }).done(function (data, status, xhr) {
499                if (data.captcha) {
500                    refillCaptcha($form, data.captcha);
501                }
502
503                if (data.quiz) {
504                    refillQuiz($form, data.quiz);
505                }
506            });
507
508        } else {
509            if (data.captcha) {
510                refillCaptcha($form, data.captcha);
511            }
512
513            if (data.quiz) {
514                refillQuiz($form, data.quiz);
515            }
516        }
517    };
518
519    wpcfu.clearResponse = function (form) {
520        var $form = $(form);
521        $form.removeClass('invalid spam sent failed');
522        $form.siblings('.screen-reader-response').html('').attr('role', '');
523
524        $('.wpcfu-not-valid-tip', $form).remove();
525        $('[aria-invalid]', $form).attr('aria-invalid', 'false');
526        $('.wpcfu-form-control', $form).removeClass('wpcfu-not-valid');
527
528        $('.wpcfu-response-output', $form)
529            .hide().empty().removeAttr('role')
530            .removeClass('wpcfu-mail-sent-ok wpcfu-mail-sent-ng wpcfu-validation-errors wpcfu-spam-blocked');
531    };
532
533    wpcfu.apiSettings.getRoute = function (path) {
534        var url = wpcfu.apiSettings.root;
535
536        url = url.replace(
537            wpcfu.apiSettings.namespace,
538            wpcfu.apiSettings.namespace + path);
539
540        return url;
541    };
542
543})(jQuery);
544
545/*
546 * Polyfill for Internet Explorer
547 * See https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent
548 */
549(function () {
550    if (typeof window.CustomEvent === "function") return false;
551
552    function CustomEvent(event, params) {
553        params = params || {bubbles: false, cancelable: false, detail: undefined};
554        var evt = document.createEvent('CustomEvent');
555        evt.initCustomEvent(event,
556            params.bubbles, params.cancelable, params.detail);
557        return evt;
558    }
559
560    CustomEvent.prototype = window.Event.prototype;
561
562    window.CustomEvent = CustomEvent;
563})();
564
565$(document).ready(function () {
566    $('.wpcfu input[type="url"]').each(function () {
567        if ($(this).val()) {
568            $(this).val($(this).val().replace('default:current_url', window.location.href));
569        }
570    });
571    $(document).on('click', '.wpcfu .ets_cfu_show_hide', function () {
572        if ($(this).find('i.fa-eye-slash').length > 0) {
573            $(this).find('i').removeClass('fa-eye-slash').addClass('fa-eye');
574            $(this).prev('input').attr('type', 'text');
575        } else {
576            $(this).find('i').removeClass('fa-eye').addClass('fa-eye-slash');
577            $(this).prev('input').attr('type', 'password');
578        }
579    });
580    $(document).on('click', '.ctf_click_open_contactform7', function () {
581        var id = $(this).attr('data-id');
582        $('#ctf-popup-wapper-' + id).addClass('show');
583        if (!$(this).hasClass('addlogded')) {
584            ajaxAddLoger($('#ctf-popup-wapper-' + id).find('.wpcfu').attr('data-id'));
585            $(this).addClass('addlogded');
586        }
587    });
588    $(document).on('click', '.wpcfu.hook', function () {
589        var id = $(this).attr('data-id');
590        $('#ctf-popup-wapper-' + id).addClass('show');
591        if (!$(this).hasClass('addlogded')) {
592            ajaxAddLoger(id);
593            $(this).addClass('addlogded');
594        }
595    });
596    $(document).on('click', '.ctf_close_popup', function () {
597        $(this).closest('.ctf-popup-wapper').removeClass('show');
598    });
599    $(document).mouseup(function (e) {
600        var container = $('.ctf-popup-content');
601        var datepicker = $('.ui-datepicker');
602        if (!container.is(e.target) && container.has(e.target).length === 0 && !datepicker.is(e.target) && datepicker.has(e.target).length === 0) {
603            $('.ctf-popup-wapper').removeClass('show');
604        }
605    });
606    $(document).keyup(function (e) {
607        if (e.keyCode == 27) { // escape key maps to keycode `27`
608            $('.ctf-popup-wapper').removeClass('show');
609        }
610    });
611    if ($(".wpcfu .datetimepicker").length > 0) {
612        $(".wpcfu .datetimepicker").datetimepicker({
613            timepicker: true,
614            format: 'Y-m-d h:i'
615        });
616    }
617    if ($(".wpcfu .datepicker").length > 0) {
618        $(".wpcfu .datepicker").datetimepicker({
619            timepicker: false,
620            format: 'Y-m-d'
621        });
622    }
623    $('.pa-captcha-refesh').click(function () {
624        refeshImage($(this));
625        return false;
626    });
627    if ($('input[type="range"]').length) {
628        $('input[type="range"]').each(function () {
629            if ($(this).prev('.rang-value').length > 0)
630                $(this).prev('.rang-value').html($(this).val());
631        });
632    }
633    $('input[type="range"]').change(function () {
634        if ($(this).prev('.rang-value').length > 0)
635            $(this).prev('.rang-value').html($(this).val());
636    });
637
638
639    //Init MCE
640    if (typeof tinyMCE !== 'undefined' && $('.autoload_rte_cfu').length > 0) {
641        tinyMCE.init({
642            selector: '.autoload_rte_cfu',
643            plugins: "align link image media code emoticons",
644            browser_spellcheck: true,
645            toolbar1: "emoticons,bold,italic,underline,link,align,bulli,numlist,table,image",
646            convert_urls: false,
647            /*setup: function (ed) {
648                var allowedKeys = [8, 37, 38, 39, 40, 46]; // backspace, delete and cursor keys
649                $flag = true;
650                ed.on('keydown', function (e) {
651                    if (allowedKeys.indexOf(e.keyCode) != -1) return true;
652                    var dataContent = getDataContent($(this));
653                    return excuteType(dataContent);
654                });
655                ed.on('keyup', function (e) {
656                    var dataContent = getDataContent($(this));
657                    return excuteType(dataContent);
658                });
659            }*/
660        });
661    }
662});
663
664function getDataContent(object) {
665    var idEl = object[0].id,
666        body = tinyMCE.get(idEl).getBody(),
667        text = body.innerText || body.textContent;
668    var re = /\n$/g;
669    var OK = re.exec(text);
670    if (OK){
671        text = text.replace(/\n$/g,'');
672    }
673    return {
674        idEl : idEl,
675        chars: text.replace(/[\t\n]+/g,' ').length,
676        words: text.split(/[\w\u2019\'-]+/).length
677    };
678};
679
680function excuteType(objectData){
681    var elMax = $('#'+objectData['idEl']).next('.number_max'),
682        elIndex = elMax.find('.index_type').first();
683
684    if (parseInt(objectData['chars'])>= parseInt($('#'+objectData['idEl']).attr('maxlength'))){
685        elIndex.html(parseInt($('#'+objectData['idEl']).attr('maxlength')));
686        return false;
687    }
688    elIndex.html(parseInt(objectData['chars']));
689    return true;
690}
691
692
693function refeshImage($this) {
694    if ($this.prev('.pa-captcha-img-data').length) {
695        originalCapcha = $this.prev('.pa-captcha-img-data').attr('src');
696        originalCode = $this.attr('data-rand');
697        newCode = Math.random();
698        $this.prev('.pa-captcha-img-data').attr('src', originalCapcha.replace(originalCode, newCode));
699        $this.attr('data-rand', newCode);
700        $('input[type="captcha"]').val('');
701    }
702}
703
704function ajaxAddLoger(id_contact) {
705    $.ajax({
706        type: 'POST',
707        headers: {"cache-control": "no-cache"},
708        url: link_contact_ets,
709        dataType: "json",
710        data: 'action=etsCfuAddLogger&id_contact=' + id_contact,
711        success: function (jsonData) {
712
713        }
714    });
715}
716/*hiep*/
717function ets_cfu_loading_captcha() {
718    var img = $('.pa-captcha-img-data:not(.loaded)').first();
719    if (img.length > 0) {
720        img.load(function () {
721            if (!img.hasClass('loaded')) {
722                ets_cfu_refresh_captcha(img);
723            }
724            if (img[0].complete && img.hasClass('loaded')) {
725                ets_cfu_loading_captcha();
726            }
727        }).filter(function () {
728            return this.complete;
729        }).load();
730    }
731}
732
733function ets_cfu_refresh_captcha(img) {
734    if (img.length && !img.hasClass('loaded')) {
735        var org_link = img.attr('src'),
736            org_code = img.attr('data-rand'),
737            rand = Math.random();
738        img.attr({'src': org_link.replace(org_code, rand), 'data-rand' : rand});
739        if (!img.hasClass('loaded')) {
740            img.addClass('loaded');
741        }
742        img.next( ".pa-captcha-refesh" ).attr('data-rand', rand);
743    }
744}
745
746document.addEventListener("DOMContentLoaded", function (event) {
747    if ($('.pa-captcha-img-data').length > 1) {
748        ets_cfu_loading_captcha();
749    }
750});
751/*end hiep*/
752
753/* Quang */
754var ets_cfu_update = {
755    init : function () {
756        this.check_maxlength_number();
757        this.caculate_maxleng();
758        this.hidden_referrence();
759    },
760    check_maxlength_number : function () {
761        var input_number = $('.ets_cfu_form-control-wrap input[type="number"]');
762        if( input_number.length > 0 ){
763            input_number.on("keyup", function (e) {
764                var $field = $(this),
765                    val=this.value; // retrieve the index
766                if (val.length > Number($field.attr("maxlength"))) {
767                    val=val.slice(0, $field.attr('maxlength'));
768                    $field.val(val);
769                }
770            });
771        }
772    },
773    caculate_maxleng :function () {
774        $(document).on('keyup','input[maxlength], textarea[maxlength]',function () {
775            var leng = $(this).val().length;
776            if ( leng > $(this).attr('maxlength') ){
777                return;
778            }
779            var el_numbermax = $(this).next('.number_max');
780            el_numbermax.find('.index_type').first().html(leng);
781        });
782    },
783    hidden_referrence : function(){
784        if ($('.ets_cfu_input_referrence').length>0 && typeof hidden_referrence !=="undefined" && hidden_referrence){
785            $('.ets_cfu_input_referrence').hide();
786        }
787    },
788
789};
790
791$(document).ready(function () {
792    ets_cfu_update.init();
793});
794
795$( document ).on( 'click', '.ets_cfu_form-control-wrap .number_plus,.ets_cfu_form-control-wrap .number_minus', function() {
796    var $qty        = $( this ).closest( '.ets_cfu_form-control-wrap' ).find( '.ets_cfu-number').first(),
797        currentVal  = parseFloat( $qty.val() ),
798        max         = parseFloat( $qty.attr( 'max' ) ),
799        min         = parseFloat( $qty.attr( 'min' ) ),
800        step        = $qty.attr( 'step' );
801
802    // Format values
803    if ( ! currentVal || currentVal === '' || currentVal === 'NaN' ) currentVal = 0;
804    if ( max === '' || max === 'NaN' ) max = '';
805    if ( min === '' || min === 'NaN' ) min = 0;
806    if ( step === 'any' || step === '' || step === undefined || parseFloat( step ) === 'NaN' ) step = 1;
807
808    // Change the value
809    if ( $( this ).is( '.ets_cfu_form-control-wrap .number_plus' ) ) {
810        if ( max && ( currentVal >= max ) ) {
811            $qty.val( max );
812        } else {
813            $qty.val( ( currentVal + parseFloat( step )) );
814        }
815    } else {
816        if ( min && ( currentVal <= min ) ) {
817            $qty.val( min );
818        } else if ( currentVal > 0 ) {
819            $qty.val( ( currentVal - parseFloat( step )) );
820        }
821    }
822
823    // Trigger change event
824    $qty.trigger( 'change' );
825});
826
827$(".access_numer input").keypress(function (event) {
828    var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
829    if((keyCode>=65 && keyCode<=90) || (keyCode>=97 && keyCode<=122))
830        return false;
831    else return true;
832});
833
834/* End Quang */

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.