PageSourceSearch

https://www.reinoanimal.com.mx/wp-content/plugins/bus-ticket-booki…/wbtm_plugin_global.js?ver=1790976368

js reinoanimal.com.mx collected 2026-10-02 21:27:57 UTC 46,665 bytes, 1,050 lines download raw bytes

1//======================================================Price Format==============//
2function wbtm_price_format(price) {
3    if (typeof price === 'string') {
4        price = Number(price);
5    }
6    price = price.toFixed(wbtm_num_of_decimal);
7    let total_part = price.toString().split(".");
8    total_part[0] = total_part[0].replace(/\B(?=(\d{3})+(?!\d))/g, wbtm_currency_thousands_separator);
9    price = total_part.join(wbtm_currency_decimal);
10    let price_text = '';
11    if (wbtm_currency_position === 'right') {
12        price_text = price + wbtm_currency_symbol;
13    } else if (wbtm_currency_position === 'right_space') {
14        price_text = price + ' ' + wbtm_currency_symbol;
15    } else if (wbtm_currency_position === 'left') {
16        price_text = wbtm_currency_symbol + price;
17    } else {
18        price_text = wbtm_currency_symbol + ' ' + price;
19    }
20    return price_text;
21}
22//=======================================================Loader==============//
23function wbtm_loader(target) {
24    if (target.find('div[class*="wbtm_loader"]').length < 1) {
25        target.addClass('pRelative').append('<div class="wbtm_loader"><span class="fas fa-spinner fa-pulse"></span></div>');
26    }
27}
28function wbtm_loader_xs(target) {
29    if (target.find('div[class*="wbtm_loader"]').length < 1) {
30        target.addClass('pRelative').append('<div class="wbtm_loader_xs"><span class="fas fa-spinner fa-pulse"></span></div>');
31    }
32}
33function wbtm_loaderBody() {
34    let body = jQuery('body');
35    if (body.find('div[class*="wbtm_loader"]').length < 1) {
36        body.addClass('noScroll').append('<div class="wbtm_loader pFixed"><span class="fas fa-spinner fa-pulse"></span></div>');
37    }
38}
39function wbtm_loaderBody_xs() {
40    let body = jQuery('body');
41    if (body.find('div[class*="wbtm_loader"]').length < 1) {
42        body.addClass('noScroll').append('<div class="wbtm_loader_xs pFixed"><span class="fas fa-spinner fa-pulse"></span></div>');
43    }
44}
45function wbtm_loader_circle(target) {
46    if (target.find('div[class*="wbtm_loader"]').length < 1) {
47        target.addClass('pRelative').append('<div class="wbtm_loader border_spin_loader"><span class="circle"></span></div>');
48    }
49}
50function wbtm_loader_xs_circle(target) {
51    if (target.find('div[class*="wbtm_loader"]').length < 1) {
52        target.addClass('pRelative').append('<div class="wbtm_loader_xs border_spin_loader"><span class="circle"></span></div>');
53    }
54}
55function wbtm_loaderRemove(target = jQuery('body')) {
56    target.removeClass('noScroll');
57    target.removeClass('pRelative').find('div[class*="wbtm_loader"]').remove();
58}
59function wbtm_placeholderLoader(target) {
60    target.addClass('wbtm_placeholderLoader');
61}
62function wbtm_placeholderLoaderRemove(target) {
63    target.each(function () {
64        target.removeClass('wbtm_placeholderLoader');
65    })
66}
67//======================================================Page Scroll==============//
68function wbtm_pageScrollTo(target) {
69    jQuery('html, body').animate({
70        scrollTop: target.offset().top -= 150
71    }, 1000);
72}
73//====================================================Load Date picker==============//
74function wbtm_load_date_picker(parent = jQuery('.wbtm_style')) {
75    // Unified Date Picker Initialization
76    parent.find(".date_type, .date_type_without_year").each(function () {
77        // Reset existing datepicker instances
78        jQuery(this).removeClass('hasDatepicker').attr('id', '').removeData('datepicker').unbind();
79    }).promise().done(function () {
80        // Apply new datepicker settings
81        parent.find(".date_type, .date_type_without_year").datepicker({
82            dateFormat: wbtm_date_format, // Ensure this includes the year, e.g., 'yy-mm-dd'
83            autoSize: true,
84            changeMonth: true,
85            changeYear: true,
86            onSelect: function (dateString, data) {
87                // Construct full date (YYYY-MM-DD)
88                const year = data.selectedYear || new Date().getFullYear();
89                const month = ('0' + (parseInt(data.selectedMonth) + 1)).slice(-2);
90                const day = ('0' + parseInt(data.selectedDay)).slice(-2);
91                const fullDate = `${year}-${month}-${day}`;
92                jQuery(this)
93                    .closest('label')
94                    .find('input[type="hidden"]')
95                    .val(fullDate)
96                    .trigger('change');
97            },
98        });
99    });
100}
101//========================================================Alert==============//
102function wbtm_alert($this, attr = 'alert') {
103    alert($this.data(attr));
104}
105//=====================================================Load initial=================//
106(function ($) {
107    "use strict";
108    $(document).ready(function () {
109        wbtm_load_date_picker();
110        $('.wbtm_select2').select2({});
111    });
112}(jQuery));
113//====================================================================Load Bg Image=================//
114function wbtm_loadBgImage() {
115    jQuery('body').find('.wbtm_style [data-bg-image]').each(function () {
116    // jQuery('body').find('.wbtm_style [data-bg-image]:visible').each(function () {
117        let target = jQuery(this);
118        let width = target.outerWidth();
119        let height = target.outerHeight();
120        if (target.css('background-image') === 'none' || width === 0 || height === 0) {
121            let bg_url = target.data('bg-image');
122            if (!bg_url || bg_url.width === 0 || bg_url.width === 'undefined') {
123                bg_url = wbtm_empty_image_url;
124            }
125            wbtm_resize_bg_image_area(target, bg_url);
126            target.css('background-image', 'url("' + bg_url + '")').promise().done(function () {
127                wbtm_loaderRemove(jQuery(this));
128            });
129        }
130    });
131    return true;
132}
133function wbtm_resize_bg_image_area(target, bg_url) {
134    let tmpImg = new Image();
135    tmpImg.src = bg_url;
136    jQuery(tmpImg).one('load', function () {
137        let imgWidth = tmpImg.width;
138        let imgHeight = tmpImg.height;
139        let height = target.outerWidth() * imgHeight / imgWidth;
140        target.css({"min-height": height});
141    });
142}
143(function ($) {
144    let bg_image_load = false;
145    $(document).ready(function () {
146        $('body').find('.wbtm_style [data-bg-image]').each(function () {
147            wbtm_loader($(this));
148        });
149        $(window).on('load', function () {
150            load_initial();
151        });
152        if (!bg_image_load) {
153            load_initial();
154            $(document).scroll(function () {
155                load_initial();
156            });
157        }
158    });
159    $(document).on('click', '.wbtm_style [data-href]', function () {
160        let href = $(this).data('href');
161        if (href) {
162            window.location.href = href;
163        }
164    });
165    $(window).on('load , resize', function () {
166        $('body').find('.wbtm_style [data-bg-image]:visible').each(function () {
167            let target = $(this);
168            let bg_url = target.data('bg-image');
169            if (!bg_url || bg_url.width === 0 || bg_url.width === 'undefined') {
170                bg_url = wbtm_empty_image_url;
171            }
172            wbtm_resize_bg_image_area(target, bg_url);
173        });
174    });
175    function load_initial() {
176        if (!bg_image_load) {
177            if (wbtm_loadBgImage()) {
178                bg_image_load = true;
179                wbtm_placeholderLoaderRemove($('.wbtm_style.wbtm_placeholderLoader'))
180            }
181        }
182    }
183}(jQuery));
184//=============================================================================Change icon and text=================//
185function wbtm_content_icon_change(currentTarget) {
186    let openIcon = currentTarget.data('open-icon');
187    let closeIcon = currentTarget.data('close-icon');
188    if (openIcon || closeIcon) {
189        currentTarget.find('[data-icon]').toggleClass(closeIcon).toggleClass(openIcon);
190    }
191}
192function wbtm_content_text_change(currentTarget) {
193    let openText = currentTarget.data('open-text');
194    openText = openText ? openText.toString() : '';
195    let closeText = currentTarget.data('close-text');
196    closeText = closeText ? closeText : '';
197    if (openText || closeText) {
198        let text = currentTarget.find('[data-text]').html();
199        text = text ? text.toString() : ''
200        if (text !== openText) {
201            currentTarget.find('[data-text]').html(openText);
202        } else {
203            currentTarget.find('[data-text]').html(closeText);
204        }
205    }
206}
207function wbtm_content_class_change(currentTarget) {
208    let clsName = currentTarget.data('add-class');
209    if (clsName) {
210        if (currentTarget.find('[data-class]').length > 0) {
211            currentTarget.find('[data-class]').toggleClass(clsName);
212        } else {
213            currentTarget.toggleClass(clsName);
214        }
215    }
216}
217function wbtm_content_input_value_change(currentTarget) {
218    currentTarget.find('[data-value]').each(function () {
219        let value = jQuery(this).val();
220        if (value) {
221            jQuery(this).val('');
222        } else {
223            jQuery(this).val(jQuery(this).data('value'));
224        }
225        jQuery(this).trigger('change');
226    });
227}
228function wbtm_all_content_change($this) {
229    wbtm_loadBgImage();
230    wbtm_content_class_change($this);
231    wbtm_content_icon_change($this);
232    wbtm_content_text_change($this);
233    wbtm_content_input_value_change($this);
234}
235(function ($) {
236    "use strict";
237    $(document).on('click', '.wbtm_load_more_text_area [data-read]', function (e) {
238        e.stopPropagation();
239        let parent = $(this).closest('.wbtm_load_more_text_area');
240        let open_text = parent.find('[data-read-open]').html();
241        let close_text = parent.find('[data-read-close]').html();
242        parent.find('[data-read-close]').html(open_text);
243        parent.find('[data-read-open]').html(close_text);
244        wbtm_content_text_change($(this));
245    });
246    $(document).on('click', ' .wbtm_style [data-all-change]', function () {
247        wbtm_all_content_change($(this));
248    });
249    $(document).on('click', ' .wbtm_style [data-icon-change]', function () {
250        wbtm_content_icon_change($(this));
251    });
252    $(document).on('click', ' .wbtm_style [data-text-change]', function () {
253        wbtm_content_text_change($(this));
254    });
255    $(document).on('click', ' .wbtm_style [data-class-change]', function () {
256        wbtm_content_class_change($(this));
257    });
258    $(document).on('click', ' .wbtm_style [data-value-change]', function () {
259        wbtm_content_input_value_change($(this));
260    });
261    $(document).on('keyup change', '.wbtm_style [data-input-text]', function () {
262        let input_value = $(this).val();
263        let input_id = $(this).data('input-text');
264        $(" .wbtm_style [data-input-change='" + input_id + "']").each(function () {
265            $(this).html(input_value);
266        });
267    });
268    $(document).on('keyup change', '.wbtm_style [data-target-same-input]', function () {
269        let input_value = $(this).val();
270        let input_id = $(this).data('target-same-input');
271        $(" .wbtm_style [data-same-input='" + input_id + "']").each(function () {
272            $(this).val(input_value);
273        });
274    });
275}(jQuery));
276//==============================================================================Qty inc dec================//
277(function ($) {
278    "use strict";
279    $(document).on("click", "div.wbtm_style .decQty ,div.wbtm_style .incQty", function () {
280        let current = $(this);
281        let target = current.closest('.qtyIncDec').find('input');
282        let currentValue = parseInt(target.val());
283        let value = current.hasClass('incQty') ? (currentValue + 1) : ((currentValue - 1) > 0 ? (currentValue - 1) : 0);
284        let min = parseInt(target.attr('min'));
285        let max = parseInt(target.attr('max'));
286        target.parents('.qtyIncDec').find('.incQty , .decQty').removeClass('mpDisabled');
287        if (value < min || isNaN(value) || value === 0) {
288            value = min;
289            target.parents('.qtyIncDec').find('.decQty').addClass('mpDisabled');
290        }
291        if (value > max) {
292            value = max;
293            target.parents('.qtyIncDec').find('.incQty').addClass('mpDisabled');
294        }
295        target.val(value).trigger('change').trigger('input');
296    });
297}(jQuery));
298//==============================================================================Input use as select================//
299(function ($) {
300    "use strict";
301    $(document).on("click", "div.wbtm_style .wbtm_input_select .wbtm_input_select_list li", function (e) {
302        e.preventDefault();
303        let current = $(this);
304        let parent = $(this).closest('.wbtm_input_select');
305        let value = current.data('value');
306        let text = current.html();
307        parent.find('.wbtm_input_select_list').slideUp(250);
308        if (parent.find('input[type="hidden"]').length > 0) {
309            parent.find('input.formControl').val(text);
310            parent.find('input[type="hidden"]').val(value).trigger('mp_change');
311        } else {
312            parent.find('input.formControl').val(value).trigger('mp_change');
313        }
314    });
315    $(document).on({
316        keyup: function () {
317            let input = $(this).val().toLowerCase();
318            $(this).closest('.wbtm_input_select').find('.wbtm_input_select_list li').each(function () {
319                let input_length = input.length;
320                $(this).toggle($(this).attr('data-value').toLowerCase().substring(0, input_length) === input);
321            });
322            $(this).closest('.wbtm_input_select').find('.wbtm_input_select_list').slideDown(200);
323        },
324        click: function () {
325            $('body').find('.wbtm_input_select .wbtm_input_select_list').slideUp(250);
326            let input = $(this).val().toLowerCase();
327            $(this).closest('.wbtm_input_select').find('.wbtm_input_select_list li').each(function () {
328                let data = $(this).attr('data-value').toLowerCase();
329                if (!input || input === data) {
330                    $(this).slideDown('fast');
331                }
332            });
333            $(this).closest('.wbtm_input_select').find('.wbtm_input_select_list').slideDown(250);
334        }
335    }, 'div.wbtm_style .wbtm_input_select input.formControl');
336}(jQuery));
337//============================================================================Sticky================//
338function wbtm_sticky_management() {
339    if (jQuery('.wbtm_style .wbtm_sticky_area').length > 0) {
340        window.onscroll = function () {
341            jQuery('.wbtm_style .wbtm_sticky_area').each(function () {
342                let body_width = jQuery('body').outerWidth();
343                let scroll_top = jQuery(window).scrollTop();
344                let current = jQuery(this);
345                let target_scroll = current.find('.wbtm_sticky_on_scroll');
346                let content_top = current.parent().offset().top;
347                let parent = current.closest('.mp_sticky_section');
348                let depend_height = parent.find('.wbtm_sticky_depend_area').innerHeight();
349                let content_height = depend_height - Math.max(scroll_top - content_top, 0) - (target_scroll.offset().top - current.offset().top) - 100;
350                if (body_width > 800 && scroll_top + 100 >= content_top) {
351                    target_scroll.css('max-height', content_height);
352                    if (!current.hasClass('wbtm_sticky')) {
353                        current.addClass('wbtm_sticky').css('top', 100);
354                    }
355                } else {
356                    target_scroll.css('max-height', content_height + 100);
357                    current.removeClass('wbtm_sticky');
358                }
359            });
360        };
361    }
362}
363(function ($) {
364    "use strict";
365    $(document).ready(function () {
366        wbtm_sticky_management();
367    });
368}(jQuery));
369//============================================================================Tabs================//
370(function ($) {
371    "use strict";
372    function active_next_tab(parent, targetTab) {
373        parent.height(parent.height());
374        let tabsContent = parent.find('.tabsContentNext:first');
375        let target_tabContent = tabsContent.children('[data-tabs-next="' + targetTab + '"]');
376        let index = target_tabContent.index() + 1;
377        let num_of_tab = parent.find('.tabListsNext:first').children('[data-tabs-target-next]').length;
378        let i = 1;
379        for (i; i <= num_of_tab; i++) {
380            let target_tab = parent.find('.tabListsNext:first').children('[data-tabs-target-next]:nth-child(' + i + ')');
381            if (i <= index) {
382                target_tab.addClass('active');
383            } else {
384                target_tab.removeClass('active');
385            }
386            if (i === index - 1) {
387                wbtm_all_content_change(target_tab);
388            }
389        }
390        if (index < 2 && num_of_tab > index) {
391            parent.find('.nextTab_next').slideDown('fast');
392            parent.find('.nextTab_prev').slideUp('fast');
393        } else if (num_of_tab === index) {
394            parent.find('.nextTab_next').slideUp('fast');
395            parent.find('.nextTab_prev').slideDown('fast');
396        } else {
397            parent.find('.nextTab_next').slideDown('fast');
398            parent.find('.nextTab_prev').slideDown('fast');
399        }
400        target_tabContent.slideDown(350);
401        tabsContent.children('[data-tabs-next].active').slideUp(350).removeClass('active').promise().done(function () {
402            target_tabContent.addClass('active').promise().done(function () {
403                wbtm_pageScrollTo(tabsContent);
404                parent.height('auto').promise().done(function () {
405                    wbtm_loadBgImage();
406                    wbtm_sticky_management();
407                    wbtm_loaderRemove(parent);
408                });
409            });
410        });
411    }
412    $(document).on('click', '.wbtm_style .wbtm_tab_next .nextTab_prev_link', function () {
413        let parent = $(this).closest('.wbtm_tab_next');
414        if (parent.find('[data-tabs-target-next].active').length > 1) {
415            parent.find('.nextTab_prev').trigger('click');
416        }
417    });
418    $(document).on('click', '.wbtm_style .wbtm_tab_next .nextTab_next', function () {
419        let parent = $(this).closest('.wbtm_tab_next');
420        let target = parent.find('.tabListsNext:first');
421        let num_of_tab = target.children('[data-tabs-target-next].active').length + 1;
422        let targetTab = target.children('[data-tabs-target-next]:nth-child(' + num_of_tab + ')').data('tabs-target-next');
423        active_next_tab(parent, targetTab);
424    });
425    $(document).on('click', '.wbtm_style .wbtm_tab_next .nextTab_prev', function () {
426        let parent = $(this).closest('.wbtm_tab_next');
427        let target = parent.find('.tabListsNext:first');
428        let num_of_tab = target.children('[data-tabs-target-next].active').length - 1;
429        let targetTab = target.children('[data-tabs-target-next]:nth-child(' + num_of_tab + ')').data('tabs-target-next');
430        active_next_tab(parent, targetTab);
431    });
432    $(document).ready(function () {
433        $('.wbtm_style .wbtm_tabs').each(function () {
434            let tabLists = $(this).find('.tabLists:first');
435            let activeTab = tabLists.find('[data-tabs-target].active');
436            let targetTab = activeTab.length > 0 ? activeTab : tabLists.find('[data-tabs-target]').first();
437            targetTab.trigger('click');
438        });
439        $('.wbtm_style .wbtm_tab_next').each(function () {
440            let parent = $(this);
441            if (parent.find('[data-tabs-target-next].active').length < 1) {
442                wbtm_loader(parent);
443                let tabLists = parent.find('.tabListsNext:first');
444                let targetTab = tabLists.find('[data-tabs-target-next]').first().data('tabs-target-next')
445                active_next_tab(parent, targetTab);
446            }
447        });
448    });
449    $(document).on('click', '.wbtm_style [data-tabs-target]', function () {
450        if (!$(this).hasClass('active')) {
451            let tabsTarget = $(this).data('tabs-target');
452            let parent = $(this).closest('.wbtm_tabs');
453            parent.height(parent.height());
454            let tabLists = $(this).closest('.tabLists');
455            let tabsContent = parent.find('.tabsContent:first');
456            tabLists.find('[data-tabs-target].active').each(function () {
457                $(this).removeClass('active').promise().done(function () {
458                    wbtm_all_content_change($(this))
459                });
460            });
461            $(this).addClass('active').promise().done(function () {
462                wbtm_all_content_change($(this))
463            });
464            tabsContent.children('[data-tabs="' + tabsTarget + '"]').slideDown(350);
465            tabsContent.children('[data-tabs].active').slideUp(350).removeClass('active').promise().done(function () {
466                tabsContent.children('[data-tabs="' + tabsTarget + '"]').addClass('active').promise().done(function () {
467                    //wbtm_loaderRemove(tabsContent);
468                    wbtm_loadBgImage();
469                    parent.height('auto');
470                });
471            });
472        }
473    });
474}(jQuery));
475//======================================================================Collapse=================//
476(function ($) {
477    "use strict";
478    $(document).on('click', '.wbtm_style [data-collapse-target]', function () {
479        let currentTarget = $(this);
480        let target_id = currentTarget.data('collapse-target');
481        let close_id = currentTarget.data('close-target');
482        let target = $('.wbtm_style [data-collapse="' + target_id + '"]');
483        if (target_close(close_id, target_id) && collapse_close_inside(currentTarget) && target_collapse(target, currentTarget)) {
484            wbtm_all_content_change(currentTarget);
485        }
486    });
487    $(document).on('change', '.wbtm_style select[data-collapse-target]', function () {
488        let currentTarget = $(this);
489        let value = currentTarget.val();
490        currentTarget.find('option').each(function () {
491            if ($(this).attr('data-option-target-multi')) {
492                let target_ids = $(this).data('option-target-multi');
493                target_ids = target_ids.toString().split(" ");
494                target_ids.forEach(function (target_id) {
495                    let target = $('[data-collapse="' + target_id + '"]');
496                    target.slideUp(350).removeClass('mActive');
497                });
498            } else {
499                let target_id = $(this).data('option-target');
500                let target = $('[data-collapse="' + target_id + '"]');
501                target.slideUp('fast').removeClass('mActive');
502            }
503        }).promise().done(function () {
504            currentTarget.find('option').each(function () {
505                let current_value = $(this).val();
506                if (current_value === value) {
507                    if ($(this).attr('data-option-target-multi')) {
508                        let target_ids = $(this).data('option-target-multi');
509                        target_ids = target_ids.toString().split(" ");
510                        target_ids.forEach(function (target_id) {
511                            let target = $('[data-collapse="' + target_id + '"]');
512                            target.slideDown(350).removeClass('mActive');
513                        });
514                    } else {
515                        let target_id = $(this).data('option-target');
516                        let target = $('[data-collapse="' + target_id + '"]');
517                        target.slideDown(350).removeClass('mActive');
518                    }
519                }
520            });
521        });
522    });
523    function target_close(close_id, target_id) {
524        $('body').find('[data-close="' + close_id + '"]:not([data-collapse="' + target_id + '"])').slide
524Up(250);
525        return true;
526    }
527    function target_collapse(target, $this) {
528        if ($this.is('[type="radio"]')) {
529            target.slideDown(250);
530        } else {
531            target.each(function () {
532                $(this).slideToggle(250).toggleClass('mActive');
533            });
534        }
535        return true;
536    }
537    function collapse_close_inside(currentTarget) {
538        let parent_target_close = currentTarget.data('collapse-close-inside');
539        if (parent_target_close) {
540            $(parent_target_close).find('[data-collapse]').each(function () {
541                if ($(this).hasClass('mActive')) {
542                    let collapse_id = $(this).data('collapse');
543                    let target_collapse = $('[data-collapse-target="' + collapse_id + '"]');
544                    if (collapse_id !== currentTarget.data('collapse-target')) {
545                        $(this).slideUp(250).removeClass('mActive');
546                        let clsName = target_collapse.data('add-class');
547                        if (clsName) {
548                            target_collapse.removeClass(clsName);
549                        }
550                        wbtm_content_text_change(target_collapse);
551                        wbtm_content_icon_change(target_collapse);
552                    }
553                }
554            })
555        }
556        return true;
557    }
558}(jQuery));
559//=====================================================================Group Check box==========//
560(function ($) {
561    "use strict";
562    $(document).on('click', '.wbtm_style .groupCheckBox .customCheckboxLabel', function () {
563        let parent = $(this).closest('.groupCheckBox');
564        let value = '';
565        let separator = ',';
566        parent.find(' input[type="checkbox"]').each(function () {
567            if ($(this).is(":checked")) {
568                let currentValue = $(this).attr('data-checked');
569                value = value + (value ? separator : '') + currentValue;
570            }
571        }).promise().done(function () {
572            parent.find('input[type="hidden"]').val(value);
573        });
574    });
575    // radio
576    $(document).on('click', '.wbtm_style [data-radio]', function () {
577        let target = $(this).closest('label');
578        let value = $(this).attr('data-radio');
579        target.find('.customRadio').removeClass('active');
580        $(this).addClass('active');
581        target.find('input').val(value).trigger('change');
582    });
583    $(document).on('click', '.wbtm_style .groupRadioBox [data-group-radio]', function () {
584        let parent = $(this).closest('.groupRadioBox');
585        let $this = $(this);
586        let value = $this.data('group-radio');
587        parent.find('[data-group-radio]').each(function () {
588            $(this).removeClass('active');
589        }).promise().done(function () {
590            $this.addClass('active');
591            parent.find('input[type="text"]').val(value);
592        });
593    });
594    //Group radio like checkbox
595    $(document).on('click', '.wbtm_style .groupRadioCheck [data-radio-check]', function () {
596        //e.stopPropagation();
597        let parent = $(this).closest('.groupRadioCheck');
598        let $this = $(this);
599        if (!$this.hasClass('mpActive')) {
600            let value = $this.data('radio-check');
601            parent.find('.mpActive[data-radio-check]').each(function () {
602                $(this).removeClass('mpActive');
603                wbtm_all_content_change($(this));
604            }).promise().done(function () {
605                $this.addClass('mpActive');
606                wbtm_all_content_change($this);
607                parent.find('input[type="hidden"]').val(value).trigger('change');
608            });
609        }
610    });
611}(jQuery));
612//=======================================================validation ==============//
613function wbtm_check_required(input) {
614    if (input.val() !== '') {
615        input.removeClass('mpRequired');
616        return true;
617    } else {
618        input.addClass('mpRequired');
619        return false;
620    }
621}
622(function ($) {
623    "use strict";
624    $(document).on('keyup change', '.wbtm_style .wbtm_number_validation', function () {
625        let n = $(this).val();
626        $(this).val(n.replace(/\D/g, ''));
627        return true;
628    });
629    $(document).on('keyup change', '.wbtm_style .wbtm_price_validation', function () {
630        let n = $(this).val();
631        $(this).val(n.replace(/[^\d.]/g, ''));
632        return true;
633    });
634    $(document).on('keyup change', '.wbtm_style .wbtm_id_validation', function () {
635        let n = $(this).val();
636        $(this).val(n.replace(/[^\d_a-zA-Z]/g, ''));
637        return true;
638    });
639    $(document).on('keyup change', '.wbtm_style .wbtm_name_validation', function () {
640        let n = $(this).val();
641        $(this).val(n.replace(/[@%'":;&_]/g, ''));
642        return true;
643    });
644    $(document).on('keyup change', '.wbtm_style [required]', function () {
645        wbtm_check_required($(this));
646    });
647}(jQuery));
648//==========================================================pagination==========//
649function wbtm_pagination_page_management(parent, pagination_page, total_item) {
650    let per_page_item = parseInt(parent.find('input[name="pagination_per_page"]').val());
651    let total_active_page = Math.floor(total_item / per_page_item) + ((total_item % per_page_item) > 0 ? 1 : 0);
652    let page_limit_start = (pagination_page > 2) ? (pagination_page - 2) : 0;
653    let page_limit_end = (pagination_page > 2) ? (pagination_page + 2) : 4;
654    let limit_dif = total_active_page - pagination_page;
655    if (total_active_page > 5 && limit_dif < 3) {
656        page_limit_start = page_limit_start - ((limit_dif > 1) ? 1 : 2);
657    }
658    let total_page = parent.find('[data-pagination]').length;
659    for (let i = 0; i < total_page; i++) {
660        if (i < total_active_page && i >= page_limit_start && i <= page_limit_end) {
661            parent.find('[data-pagination="' + i + '"]').slideDown(200);
662        } else {
663            parent.find('[data-pagination="' + i + '"]').slideUp(200);
664        }
665    }
666    if (pagination_page > 0) {
667        parent.find('.page_prev').removeAttr('disabled');
668    } else {
669        parent.find('.page_prev').prop('disabled', true);
670    }
671    if (pagination_page > 2 && total_active_page > 5) {
672        parent.find('.ellipse_left').slideDown(200);
673    } else {
674        parent.find('.ellipse_left').slideUp(200);
675    }
676    if (pagination_page < total_active_page - 3 && total_active_page > 5) {
677        parent.find('.ellipse_right').slideDown(200);
678    } else {
679        parent.find('.ellipse_right').slideUp(200);
680    }
681    if (pagination_page < total_active_page - 1) {
682        parent.find('.page_next').removeAttr('disabled');
683    } else {
684        parent.find('.page_next').prop('disabled', true);
685    }
686    return true;
687}
688(function ($) {
689    "use strict";
690    $(document).on('click', '.wbtm_style .pagination_area .page_prev', function (e) {
691        e.preventDefault();
692        let parent = $(this).closest('.pagination_area');
693        let page_no = parseInt(parent.find('.active_pagination').data('pagination')) - 1;
694        parent.find('[data-pagination="' + page_no + '"]').trigger('click');
695    });
696    $(document).on('click', '.wbtm_style .pagination_area .page_next', function (e) {
697        e.preventDefault();
698        let parent = $(this).closest('.pagination_area');
699        let page_no = parseInt(parent.find('.active_pagination').data('pagination')) + 1;
700        parent.find('[data-pagination="' + page_no + '"]').trigger('click');
701    });
702    // Handle page number clicks
703    $(document).on('click', '.wbtm_style .pagination_area [data-pagination]', function (e) {
704        e.preventDefault();
705        if (!$(this).hasClass('active_pagination')) {
706            let parent = $(this).closest('.pagination_area');
707            let main_parent = parent.closest('.wbtm_pagination_main_area');
708            let page_no = parseInt($(this).data('pagination'));
709            let per_page_item = parseInt(parent.find('input[name="pagination_per_page"]').val());
710            let total_item = parseInt(parent.find('input[name="mp_total_item"]').val());
711            let pagination_style = parent.find('input[name="pagination_style"]').val();
712            
713            // Only handle if this is not Load More style
714            if (pagination_style !== 'load_more') {
715                // Hide all items first
716                main_parent.find('.wbtm_pagination_item').hide();
717                
718                // Show items for current page
719                let start_item = page_no * per_page_item;
720                let end_item = start_item + per_page_item;
721                let count = 0;
722                
723                main_parent.find('.wbtm_pagination_item').each(function() {
724                    if (count >= start_item && count < end_item) {
725                        $(this).fadeIn(250);
726                    }
727                    count++;
728                });
729                
730                // Update active states
731                parent.find('.active_pagination').removeClass('active_pagination');
732                $(this).addClass('active_pagination');
733                
734                // Update pagination UI
735                wbtm_pagination_page_management(parent, page_no, total_item);
736                
737                // Scroll to first item if needed
738                load_more_scroll(main_parent, page_no);
739                
740                // Load background images
741                if (typeof wbtm_loadBgImage === 'function') {
742                    wbtm_loadBgImage();
743                }
744            }
745        }
746    });
747    //*************** Pagination Load More ***************//
748    $(document).on('click', '.wbtm_style .pagination_load_more', function () {
749        let pagination_page = parseInt($(this).attr('data-load-more')) + 1;
750        let main_parent = $(this).closest('div.wbtm_pagination_main_area');
751        let pagination_area = $(this).closest('.pagination_area');
752        let per_page_item = parseInt(pagination_area.find('input[name="pagination_per_page"]').val());
753        let count = 0;
754        let end_item = (pagination_page + 1) * per_page_item;
755        
756        $(this).attr('data-load-more', pagination_page);
757        
758        main_parent.find('.wbtm_pagination_item').each(function () {
759            if (count < end_item) {
760                $(this).slideDown(250);
761            }
762            count++;
763        });
764        
765        // Check if all items are visible and disable button if so
766        setTimeout(function() {
767            lode_more_init(main_parent);
768            if (typeof wbtm_loadBgImage === 'function') {
769                wbtm_loadBgImage();
770            }
771        }, 300);
772    });
773    function lode_more_init(main_parent) {
774        if (main_parent.find('.wbtm_pagination_item:hidden').length === 0) {
775            main_parent.find('[data-load-more]').attr('disabled', 'disabled');
776        } else {
777            main_parent.find('[data-load-more]').removeAttr('disabled');
778        }
779    }
780    function load_more_scroll(parent, pagination_page) {
781        let per_page_item = parseInt(parent.find('input[name="pagination_per_page"]').val());
782        let start_item = pagination_page > 0 ? pagination_page * per_page_item : 0;
783        let target = parent.find('.wbtm_pagination_item:nth-child(' + (start_item + 1) + ')');
784        wbtm_pageScrollTo(target);
785    }
786}(jQuery));
787//==============================================================Modal / Popup==========//
788(function ($) {
789    "use strict";
790    $(document).on('click', '.wbtm_style [data-target-popup]', function () {
791        let target = $(this).attr('data-active-popup', '').data('target-popup');
792        $('body').addClass('noScroll').find('[data-popup="' + target + '"]').addClass('in').promise().done(function () {
793            wbtm_loadBgImage();
794            return true;
795        });
796    });
797    $(document).on('click', 'div.wbtm_popup  .popupClose', function () {
798        $(this).closest('[data-popup]').removeClass('in');
799        $('body').removeClass('noScroll').find('[data-active-popup]').removeAttr('data-active-popup');
800        return true;
801    });
802}(jQuery));
803//==============================================================Slider=================//
804(function ($) {
805    "use strict";
806    //=================initial call============//
807    $('.wbtm_style .superSlider').each(function () {
808        sliderItemActive($(this), 1);
809    });
810    //==============Slider===================//
811    $(document).on('click', '.wbtm_style .superSlider [data-slide-target]', function () {
812        if (!$(this).hasClass('activeSlide')) {
813            let activeItem = $(this).data('slide-target');
814            let parent = $(this).closest('.superSlider');
815            sliderItemActive(parent, activeItem);
816            parent.find('[data-slide-target]').removeClass('activeSlide');
817            $(this).addClass('activeSlide');
818        }
819    });
820    $(document).on('click', '.wbtm_style .superSlider .iconIndicator', function () {
821        let parent = $(this).closest('.superSlider');
822        let activeItem = parseInt(parent.find('.sliderAllItem').first().find('.sliderItem.activeSlide').data('slide-index'));
823        if ($(this).hasClass('nextItem')) {
824            ++activeItem;
825        } else {
826            --activeItem;
827        }
828        sliderItemActive(parent, activeItem);
829    });
830    function sliderItemActive(parent, activeItem) {
831        let itemLength = parent.find('.sliderAllItem').first().find('[data-slide-index]').length;
832        let currentItem = getSliderItem(parent, activeItem);
833        let activeCurrent = parseInt(parent.find('.sliderAllItem').first().find('.sliderItem.activeSlide').data('slide-index'));
834        let i = 1;
835        for (i; i <= itemLength; i++) {
836            let target = parent.find('.sliderAllItem').first().find('[data-slide-index="' + i + '"]').first();
837            if (i < currentItem && currentItem !== 1) {
838                sliderClassControl(target, currentItem, activeCurrent, 'prevSlider', 'nextSlider');
839            }
840            if (i === currentItem) {
841                parent.find('.sliderAllItem').first().find('[data-slide-index="' + currentItem + '"]').removeClass('prevSlider nextSlider').addClass('activeSlide');
842            }
843            if (i > currentItem && currentItem !== itemLength) {
844                sliderClassControl(target, currentItem, activeCurrent, 'nextSlider', 'prevSlider');
845            }
846            if (i === itemLength && itemLength > 1) {
847                if (currentItem === 1) {
848                    target = parent.find('.sliderAllItem').first().find('[data-slide-index="' + itemLength + '"]');
849                    sliderClassControl(target, currentItem, activeCurrent, 'prevSlider', 'nextSlider');
850                }
851                if (currentItem === itemLength) {
852                    target = parent.find('.sliderAllItem').first().find('[data-slide-index="1"]');
853                    sliderClassControl(target, currentItem, activeCurrent, 'nextSlider', 'prevSlider');
854                }
855            }
856        }
857    }
858    function sliderClassControl(target, currentItem, activeCurrent, add_class, remove_class) {
859        if (target.hasClass('activeSlide')) {
860            if (currentItem > activeCurrent) {
861                target.removeClass('activeSlide').addClass(add_class);
862            } else {
863                target.removeClass('activeSlide').removeClass(remove_class).addClass(add_class);
864            }
865        } else if (target.hasClass(remove_class)) {
866            target.removeClass(remove_class).delay(600).addClass(add_class);
867        } else {
868            if (!target.hasClass(add_class)) {
869                target.addClass(add_class);
870            }
871        }
872    }
873    function getSliderItem(parent, activeItem) {
874        let itemLength = parent.find('.sliderAllItem').first().find('[data-slide-index]').length;
875        activeItem = activeItem < 1 ? itemLength : activeItem;
876        activeItem = activeItem > itemLength ? 1 : activeItem;
877        return activeItem;
878    }
879    //popup
880    $(document).on('click', '.wbtm_style .superSlider [data-target-popup]', function () {
881        let target = $(this).data('target-popup');
882        let activeItem = $(this).data('slide-index');
883        $('body').addClass('noScroll').find('[data-popup="' + target + '"]').addClass('in').promise().done(function () {
884            sliderItemActive($(this), activeItem);
885            wbtm_loadBgImage();
886        });
887    });
888    $(document).on('click', '.wbtm_style .superSlider .popupClose', function () {
889        $(this).closest('[data-popup]').removeClass('in');
890        $('body').removeClass('noScroll');
891    });
892}(jQuery));
893//======================================================================Outer Close==========//
894(function ($) {
895    "use strict";
896    $(document).click(function (e) {
897        let target = $(e.target);
898        let popup = target.closest('[data-popup]');
899        if (popup.length > 0) {
900            let hLength = target.closest('.popupHeader').length;
901            let bLength = target.closest('.popupBody').length;
902            let fLength = target.closest('.popupFooter').length;
903            if (hLength === 0 && bLength === 0 && fLength === 0) {
904                popup.find('.popupClose').trigger('click');
905            }
906        }
907        let wbtm_input_select_list = target.closest('.wbtm_input_select');
908        if (wbtm_input_select_list.length === 0) {
909            $('body').find('.wbtm_input_select_list').slideUp(250);
910        }
911    });
912}(jQuery));
913
914// --- Pagination Fix: Always re-initialize pagination after rendering ---
915function wbtm_init_pagination_fix() {
916    jQuery('.wbtm_pagination_main_area').each(function() {
917        var main_parent = jQuery(this);
918        var parent = main_parent.find('.pagination_area');
919        
920        if (parent.length > 0) {
921            var page = parseInt(parent.find('.active_pagination').data('pagination')) || 0;
922            var total = parseInt(parent.find('input[name="mp_total_item"]').val()) || 0;
923            var per_page = parseInt(parent.find('input[name="pagination_per_page"]').val()) || 9;
924            var pagination_style = parent.find('input[name="pagination_style"]').val() || 'load_more';
925            
926            // Initialize pagination display based on style
927            if (total > per_page) {
928                var count = 0;
929                main_parent.find('.wbtm_pagination_item').each(function() {
930                    if (pagination_style === 'load_more') {
931                        // For Load More: Hide items beyond first page initially
932                        if (count >= per_page) {
933                            jQuery(this).hide();
934                        }
935                    } else {
936                        // For page numbers: Hide items beyond first page initially
937                        if (count >= per_page) {
938                            jQuery(this).hide();
939                        }
940                    }
941                    count++;
942                });
943                
944                // Initialize Load More button if style is load_more
945                if (pagination_style === 'load_more') {
946                    lode_more_init(main_parent);
947                }
948            }
949            
950            // Only run page management for numbered pagination
951            if (pagination_style !== 'load_more') {
952                wbtm_pagination_page_management(parent, page, total);
953            }
954        }
955    });
956}
957
958// Run on page load
959jQuery(document).ready(function() {
960    wbtm_init_pagination_fix();
961    
962    // Add delay to ensure all elements are loaded
963    setTimeout(function() {
964        wbtm_force_pagination_style_fix();
965    }, 500);
966});
967
968// Also run on window load as backup
969jQuery(window).on('load', function() {
970    setTimeout(function() {
971        wbtm_force_pagination_style_fix();
972    }, 1000);
973});
974
975// Force fix pagination style display
976function wbtm_force_pagination_style_fix() {
977    jQuery('.wbtm_pagination_main_area').each(function() {
978        var main_parent = jQuery(this);
979        var pagination_areas = main_parent.find('.pagination_area');
980        
981        pagination_areas.each(function(index) {
982            var pagination_area = jQuery(this);
983            var style = pagination_area.find('input[name="pagination_style"]').val() || 'load_more';
984            
985            if (style === 'load_more') {
986                // Hide page numbers, show load more
987                pagination_area.find('.buttonGroup').hide();
988                pagination_area.find('.pagination_load_more').show();
989                
990                // Re-bind Load More event
991                pagination_area.find('.pagination_load_more').off('click').on('click', function(e) {
992                    e.preventDefault();
993                    wbtm_handle_load_more(jQuery(this));
994                });
995            } else {
996                // Hide load more, show page numbers  
997                pagination_area.find('.pagination_load_more').hide();
998                pagination_area.find('.buttonGroup').show();
999            }
1000            
1001            // Add style class for CSS targeting
1002            pagination_area.addClass('wbtm-style-' + style);
1003        });
1004        
1005        // If there are multiple pagination areas, hide all but the first
1006        if (pagination_areas.length > 1) {
1007            pagination_areas.not(':first').hide();
1008        }
1009    });
1010}
1011
1012// Handle Load More functionality
1013function wbtm_handle_load_more(button) {
1014    let pagination_page = parseInt(button.attr('data-load-more')) + 1;
1015    let main_parent = button.closest('.wbtm_pagination_main_area');
1016    let pagination_area = button.closest('.pagination_area');
1017    let per_page_item = parseInt(pagination_area.find('input[name="pagination_per_page"]').val()) || 3;
1018    let total_items = parseInt(pagination_area.find('input[name="mp_total_item"]').val()) || 0;
1019    
1020    button.attr('data-load-more', pagination_page);
1021    
1022    // Calculate which items to show
1023    let start_item = 0;
1024    let end_item = (pagination_page + 1) * per_page_item;
1025    let count = 0;
1026    
1027    main_parent.find('.wbtm_pagination_item').each(function() {
1028        if (count < end_item) {
1029            jQuery(this).slideDown(250);
1030        }
1031        count++;
1032    });
1033    
1034    // Check if we should disable the button
1035    setTimeout(function() {
1036        let hidden_items = main_parent.find('.wbtm_pagination_item:hidden');
1037        if (hidden_items.length === 0) {
1038            button.attr('disabled', 'disabled');
1039        }
1040    }, 300);
1041}
1042
1043// Run after AJAX loads passenger list (you may need to adjust selector/event for your use case)
1044jQuery(document).ajaxComplete(function(event, xhr, settings) {
1045    // Only re-init if passenger list or pagination is updated
1046    if (xhr.responseText && xhr.responseText.indexOf('pagination_area') !== -1) {
1047        wbtm_init_pagination_fix();
1048    }
1049});
1050// --- End Pagination Fix ---

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.