PageSourceSearch

https://navajowhite-capybara-732843.hostingersite.com/wp-content/p…/js/babe-scripts.js?ver=1.8.28

js navajowhite-capybara-732843.hostingersite.com collected 2026-10-03 04:44:28 UTC 110,563 bytes, 2,760 lines download raw bytes

1(function($){
2	"use strict";
3
4////////////////////////////////////
5
6$(document).ready(function(){
7    
8    /////////search form & widgets /////////
9
10    if ($('form#search_form').length > 0){
11
12        $('.widget-babe-search-filter-terms').on('change', 'input:checkbox', function(ev){
13            update_term_values_in_search_form(this);
14            babe_search_form_submit();
15        });
16
17        $('.search_advanced_field').on('change', 'input:checkbox', function(ev){
18            update_term_values_in_search_form(this);
19        });
20
21        $('.babe_search_results input[name="sr_sort_by"]').on('change', function(ev){
22            $('form#search_form input[name="search_results_sort_by"]').val($(this).val());
23            babe_search_form_submit();
24        });
25
26        $('.babe_search_results .input_select_sort').on('click', function(ev){
27            $('form#search_form input[name="search_results_sort_by"]').val($(this).children("input").val());
28            babe_search_form_submit();
29        });
30
31        $( document.body ).bind( 'babe_price_slider_change', function( event, min, max ) {
32            set_search_min_max_prices( min, max );
33            babe_search_form_submit();
34        });
35
36        $('.btn-search-filter-reset').on('click', function(ev){
37            $('.widget-babe-search-filter-terms input:checkbox:checked').each(function(ind, elm){
38                let term_taxonomy_id = $(elm).val();
39                let fieldName = $(elm).attr('name').replace('filter_', '').replace(/\[.+?]/g, '');
40                $('#search_form input[name="terms['+term_taxonomy_id+']"]').remove();
41                $('#search_form .add_input_field[data-tax] .input_select_input_value[name="add_ids_'+fieldName+'"]').val(0);
42            });
43            babe_search_form_submit();
44        });
45    }
46
47    $('.babe-price-range-slider').each(function(ind, elm){
48        $(elm).ionRangeSlider({
49            skin: $(elm).data('skin'),
50            type: $(elm).data('type'),
51            prefix: $(elm).data('prefix'),
52            min: $(elm).data('min'),
53            max: $(elm).data('max'),
54            from: $(elm).data('from'),
55            to: $(elm).data('to'),
56            onChange: function (data) {
57                set_search_min_max_prices( data.from, data.to );
58            }
59        });
60    });
61    
62    $('#search_form .submit button').on('click', function(ev){
63        ev.preventDefault();
64        //ev.stopPropagation();
65        babe_search_form_submit();
66    });
67    
68    $('#search_form_tabs .search_form_tab').on('click', function(ev){
69        if ( !$(this).hasClass('is-active')){
70            
71            $('#search_form input.search_form_selected_terms').remove();
72
73            let tab_slug = $(this).data('tab-slug');
74            $('form#search_form input[name="search_tab"]').val(tab_slug);
75            
76            $('#search_form_tabs .search_form_tab.is-active').removeClass('is-active');
77            $(this).addClass('is-active');
78            
79            $("#search_form div.is-active").removeClass('is-active');
80            
81            $(".daterangepicker .input_select_field.is-active").removeClass('is-active');
82            
83            $(".daterangepicker .input_select_field[data-active-"+tab_slug+"]").addClass('is-active');
84
85            remove_search_form_daterangepicker();
86            activate_search_form_daterangepicker( tab_slug );
87            
88            $("#search_form div[data-active-"+tab_slug+"]").each(function(ind, elm){
89                let title = $(elm).data("title-"+tab_slug);
90                if ($(elm).data("active-"+tab_slug) == 1){
91                    $(elm).addClass('is-active');
92                }
93                if ( $(elm).hasClass('search-date') ){
94                    $(elm).find('input').attr('placeholder',title);
95                } else if ( $(elm).hasClass('add_input_field') ){
96                    let selected_term = parseInt($(elm).find('input').first().val());
97                    if (selected_term == 0){
98                        $(elm).find('.add_ids_title_value').html(title);
99                    }
100                    $(elm).find('.term_item[data-id="0"]').html(title);
101                } else if ($(elm).hasClass('search-keyword-block')){
102                    $('#keyword').attr('placeholder',title);
103                } else if($(elm).hasClass('search_guests_field')){
104                    $(elm).find('.search_guests_title').html(title);
105                } else if($(elm).hasClass('advanced-taxonomy-block')){
106                    $(elm).find('.advanced-header').html(title);
107                }
108                
109            });
110        }
111    });
112
113    $('#search_form .search_advanced_title').on('click', function(){
114        $('#search_form .search_advanced_select_wrapper').toggleClass('is-active');
115        $('#search_form .search_advanced_title i.fas').toggleClass('fa-caret-down');
116        $('#search_form .search_advanced_title i.fas').toggleClass('fa-caret-up');
117    });
118    
119    $('#search_form .search_guests_title').on('click', function(){        
120        
121        var window_width = $(window).width();
122        var dropdown = $('#search_form .search_guests_select_wrapper');
123        var block_left = $(this).offset().left;
124        var dropdown_width = dropdown.outerWidth();
125        var css_left = dropdown_width+'px';
126        
127        if (block_left + dropdown_width + 20 >
127 window_width){
128            //css_left = '-'+css_left;
129            dropdown.css('right', '0');
130        } else {
131            dropdown.css('right', 'auto');
132        }
133        
134        $('#search_form .search_guests_select_wrapper').toggleClass('is-active');
135    });
136
137    $('#search_form .search_advanced_title').on('click', function(){
138
139        const window_width = $(window).width();
140        const dropdown = $('#search_form .search_advanced_select_wrapper');
141        const block_left = $(this).offset().left;
142        const dropdown_width = dropdown.outerWidth();
143
144        if (block_left + dropdown_width + 20 > window_width){
145            dropdown.css('right', '0');
146        } else {
147            dropdown.css('right', 'auto');
148        }
149    });
150    
151    $('#search_form .search_apply_btn').on('click', function(ev){
152        ev.preventDefault();
153        $('.close_by_apply_btn.is-active').removeClass('is-active');
154    });
155    
156    $('#search_form .btn-search-guests-change').on('click', function(ev){
157        let par = $(this).parent();
158        let cur_val = parseInt($(par).find('.select_guests_value').first().html());
159        let new_val = cur_val;
160        let total_guests = 0;
161        let general_guests = 0;
162        let age_guests = 0;
163        let guest_field_name = $(par).data('name');
164        
165        if ( $(this).hasClass('search_guests_plus') ){
166            new_val += 1;
167        }
168        
169        if ( $(this).hasClass('search_guests_minus') && cur_val > 0 ){
170            new_val -= 1;
171        }
172        
173        $(par).find('input.select_guests_input_value').attr('value', new_val);
174        $(par).find('.select_guests_value').first().html(new_val);
175        
176        $('#search_form .input_select_field_guests').each(function(ind, elm){
177            var cur_guest_field_name = $(elm).data('name');
178            if (cur_guest_field_name != 'guests[0]'){
179                age_guests += parseInt($(elm).find('.select_guests_value').first().html());
180            } else {
181                general_guests += parseInt($(elm).find('.select_guests_value').first().html());
182            }
183        });
184        
185        if (guest_field_name != 'guests[0]'){
186            total_guests = age_guests;
187            $('#search_form input.select_guests_input_value[name="guests[0]"]').attr('value', total_guests);
188            $('#search_form .input_select_field_guests[data-name="guests[0]"] .select_guests_value').html(total_guests);
189        } else {
190            total_guests = general_guests;
191            $('#search_form .input_select_field_guests:not([data-name="guests[0]"])').each(function(ind, elm){
192                if (ind == 0){
193                    $(elm).find('input.select_guests_input_value').attr('value', total_guests);
194                    $(elm).find('.select_guests_value').html(total_guests);
195                } else {
196                    $(elm).find('input.select_guests_input_value').attr('value', 0);
197                    $(elm).find('.select_guests_value').html('0');
198                }
199            });
200        }
201        
202        $('#search_form .search_guests_title_value').html(total_guests);
203        
204    });
205    
206    /////////////////////////
207    
208    function babe_search_form_submit(){
209        
210       $('#babe_search_result_refresh').css('display', 'block');
211       
212       $('.daterangepicker .drp-calendar.left .calendar-time .input_select_field').appendTo('#search_form .input-group');
213       $('.daterangepicker .drp-calendar.right .calendar-time .input_select_field').appendTo('#search_form .input-group');
214       
215       if ( $('#search_form_tabs').length > 0 ){
216           let tab_slug = $('#search_form input[name="search_tab"]').val();
217           $('#search_form div[data-inputfield="1"]:not([data-active-'+tab_slug+'])').remove();        
218       }
219       
220       $('#search_form input.input_select_input').removeAttr('name');
221       
222       $('#search_form .add_input_field[data-tax] .input_select_input_value').each(function(ind, elm){
223          let term_taxonomy_id = $(elm).val();
224          $('#search_form input[name="terms['+term_taxonomy_id+']"]').remove();
225          if( term_taxonomy_id != 0){
226            // append
227            $('#search_form').append('<input type="hidden" name="terms['+term_taxonomy_id+']" value="'+term_taxonomy_id+'">');
228          }        
229       });
230
231        let args = $('#search_form').serialize();
232        let action = $('#search_form').attr('action');
233        let action_args = action.split('?')[1];
234        let url;
235        if (action_args != undefined){
236             url = action + '&' + args;
237        } else {
238             url = action + '?' + args;
239        }
240          
241       document.location.href = url; 
242    }
243    
244    ///////////////////////////////
245    
246    $('.add_input_field .add_ids_title').on('click', function(event){
247        event.preventDefault();
248        search_add_input_toggle(this);
249    });
250    
251    $('.add_input_field .add_ids_list .term_item').on('click', function(event){
252        event.preventDefault();
253        event.stopPropagation();
254        let parent = $(this).closest('.add_ids_title');
255        search_add_input_toggle(parent);
256
257        let prev_value = $(parent).find('input.input_select_input_value').attr('value');
258        $('#search_form input[name="terms['+prev_value+']"]').remove();
259
260        $(parent).find('input.input_select_input_value').attr('value', $(this).data('id'));
261        $(parent).find('.term_item').removeClass('term_item_selected');
262        $(this).addClass('term_item_selected');
263        $(parent).find('.add_ids_title_value').html( $(this).html().replaceAll(/<\/?[^>]+(>.*|$)/gi, "") );
264    });
265    
266    function search_add_input_toggle(item){
267        $(item).parent().find('.add_ids_list').toggleClass('active');
268        $(item).parent().find('.add_ids_title i.fas').toggleClass('fa-chevron-down');
269        $(item).parent().find('.add_ids_title i.fas').toggleClass('fa-chevron-up');
270    }
271    
272    function search_add_input_close(item){
273        $(item).find('.add_ids_list').removeClass('active');
274        $(item).find('.add_ids_title i.fas').addClass('fa-chevron-down');
275        $(item).find('.add_ids_title i.fas').removeClass('fa-chevron-up');
276    }
277    
278    $(document).on('click', function(event){
279         let par = $(event.target).closest('.add_input_field');
280         if (par.length){
281            $(par).siblings().each(function(ind, elm){
282                search_add_input_close(this);
283            });
284         } else {
285            $(document).find('.add_input_field .add_ids_list.active').parents().eq(1).each(function(ind, elm){
286                search_add_input_close(this);
287            });
288         }
289         let par_guests = $(event.target).closest('.search_guests_field');
290         if (!par_guests.length){
291            $('#search_form .search_guests_select_wrapper').removeClass('is-active');
292         }
293        let par_advanced = $(event.target).closest('.search_advanced_field');
294        if (!par_advanced.length){
295            $('#search_form .search_advanced_select_wrapper').removeClass('is-active');
296        }
297
298    });
299    
300    ////////////////add_datepicker/////////////////
301    function add_datepicker(id) {
302      $( id ).datepicker({
303	    numberOfMonths: 1,
304        dateFormat: babe_lst.date_format
305      });
306    }
307    
308    ///////////////search datepickers//////////////
309    
310    $(".search_date").on('focus', function(){
311      $(this).blur();
312    });
313    
314    $('#date_to.search_date').on('click', function(){
315        if ( !$('#date_to.search_date').data('daterangepicker') ){
316            $('#date_from.search_date').trigger('click.daterangepicker');
317        }
318    });
319
320    activate_search_form_daterangepicker( get_search_form_active_tab_slug() );
321
322    ///////////////Datepicker booking form/////////////////////
323    
324    function is_stop_time(arr, hours){
325        var count = 0;
326        var stop_time = false;
327        var i;
328        for (i in arr) {
329           if (arr.hasOwnProperty(i)) {
330                count++;
331                var val = arr[i];
332                var h = parseInt(i);
333                if (h >= hours && val == 0){
334                    stop_time = true;
335                }
336           }
337        }
338        return stop_time;
339    }
340    
341    function get_obj_prop_length(a){
342        var count = 0;
343        var i;
344        for (i in a) {
345           if (a.hasOwnProperty(i)) {
346                count++;
347           }
348        }
349        return count;
350    }
351    
352    function get_obj_prop_max_value(a){
353        var tmp_value = 0;
354        var value = 0;
355        var i;
356        for (i in a) {
357           if (a.hasOwnProperty(i)) {
358               tmp_value = parseInt(a[i]);               
359               if (tmp_value > value){
360                  value = tmp_value;
361               }
362           }
363        }
364        return value;
365    }
366
367    var av_cal_keys = $.map(babe_lst.av_cal, function(item, key) {
368            return key;
369     });
370
371    var cal_first_click = true;
372
373    //str = JSON.stringify(obj, null, 4); // (Optional) beautiful indented output.
374    //alert(str);    
375          
376    $(".booking_date").on('focus', function(){
377      $(this).blur();
378    });     
379    
380    $('#booking_date_from').datepicker({
381        numberOfMonths: 1,
382        dateFormat: babe_lst.date_format,
383        minDate: babe_lst.min_av_cal_date,
384        maxDate: babe_lst.max_av_cal_date,
385       // defaultDate: babe_lst.date_from,
386        beforeShowDay: function(date){
387            let date_string = $.datepicker.formatDate('yy-mm-dd', date);
388            let av_guests;
389            let av_times_count;
390            let check = false;
391            let second_check = false;
392            if ($.inArray(date_string, av_cal_keys) > -1){
393                av_guests = get_obj_prop_max_value(babe_lst.av_cal[date_string]['times']);
394                av_times_count = get_obj_prop_length(babe_lst.av_cal[date_string]['times']);
395
396                if ( av_guests > 0 ){
397                    check = true;
398                }
399
400                for (let rti in babe_lst.av_cal[date_string]['rates']) {
401                    let rt = babe_lst.av_cal[date_string]['rates'][rti];
402                    if ( parseInt(rt['start_day']) > 0 ){
403                        second_check = true;
404                        break;
405                    }
406                }
407
408                check = check && second_check;
409            }
410            return [ check ]
411        },
412        onSelect: function(dateText, inst) {
413            update_booking_time_select(true, inst);
414        }
415    });    
416    
417    var date_to_before = '';
418    
419    ////////////// 
420    
421    $('#booking_date_to').datepicker({
422        numberOfMonths: 1,
423        dateFormat: babe_lst.date_format,
424        minDate: babe_lst.min_av_cal_date,
425        maxDate: babe_lst.max_av_cal_date,
426    //    defaultDate: babe_lst.date_to,
427        beforeShow: function() {
428                date_to_before = '';
429			},
430        beforeShowDay: function(date){
431            var date_string = $.datepicker.formatDate('yy-mm-dd', date);
432            var av_guests = 0;
433            var prev_av_guests = 0;
434            let check = false;
435            let second_check = false;
436            let from_date = $('#booking_date_from').datepicker('getDate') !== null ? $('#booking_date_from').datepicker('getDate') : '';
437
438            if ($.inArray(date_to_before, av_cal_keys) > -1){
439                prev_av_guests = get_obj_prop_max_value(babe_lst.av_cal[date_to_before]['times']);
440            }
441            
442            if ($.inArray(date_string, av_cal_keys) > -1){
443                av_guests = get_obj_prop_max_value(babe_lst.av_cal[date_string]['times']);
444                if ( av_guests > 0 || (babe_lst.basic_booking_period === 'night' && prev_av_guests > 0) ){
445                    check = true;
446                }
447            } else if(babe_lst.basic_booking_period === 'night' && prev_av_guests > 0){
448                check = true;
449            }
450
451            date_to_before = date_string;
452
453            if ( check && from_date instanceof Date){
454
455                let booking_date_from_clicked_string = $.datepicker.formatDate('yy-mm-dd', from_date);
456
457                if ( babe_lst.basic_booking_period === 'night' || babe_lst.basic_booking_period === 'day' ){
458
459                    for (let rti in babe_lst.av_cal[booking_date_from_clicked_string]['rates']) {
460                        let rt = babe_lst.av_cal[booking_date_from_clicked_string]['rates'][rti];
461                        if ( parseInt(rt['start_day']) === 0 ){
462                            continue;
463                        }
464
465                        let rate_max_booking_period = parseInt(rt['max_booking_period']);
466                        let rate_min_booking_period = parseInt(rt['min_booking_period']);
467
468                        if ( !rate_max_booking_period && !rate_min_booking_period ){
469                            second_check = true;
470                            break;
471                        }
472
473                        let date_check_min = new Date( from_date.getFullYear(), from_date.getMonth(), from_date.getDate() );
474                        let date_check_max = new Date( from_date.getFullYear(), from_date.getMonth(), from_date.getDate() );
475
476                        if ( rate_min_booking_period > 0 && rate_max_booking_period > 0 ){
477                            date_check_min.setDate(from_date.getDate() + rate_min_booking_period);
478                            date_check_max.setDate(from_date.getDate() + rate_max_booking_period);
479                            if ( date >= date_check_min && date <= date_check_max ){
480                                second_check = true;
481                                break;
482                            }
483                        } else if (rate_min_booking_period > 0){
484                            date_check_min.setDate(from_date.getDate() + rate_min_booking_period);
485                            if ( date >= date_check_min ){
486                                second_check = true;
487                                break;
488                            }
489                        } else if (rate_max_booking_period > 0){
490                            date_check_max.setDate(from_date.getDate() + rate_max_booking_period);
491                            if ( date <= date_check_max ){
492                                second_check = true;
493                                break;
494                            }
495                        }
496                    }
497
498                    check = check && second_check;
499                }
500            }
501            
502            return [ check ];
503        },
504        onSelect: function(dateText, inst) {
505            update_booking_time_select(false, inst);
506        }
507    });
508    
509    ////////////////////////////
510    var init_booking_calendars = true;
511    
512    if (babe_lst.date_from != null){
513        $('#booking_date_from').datepicker("setDate", babe_lst.date_from );
514        $('.ui-datepicker-current-day').click();
515        if (babe_lst.date_to != null){
516          setTimeout(function(){  
517           $('#booking_date_to').datepicker("setDate", babe_lst.date_to );
518           $('.ui-datepicker-current-day').click();
519          }, 700); 
520        }
521    }
522    
523    if (babe_lst.basic_booking_period == 'single_custom'){
524        get_times_guests();
525    }
526    
527    /////////////update_date_to_datepicker///////////////
528    
529    function update_date_to_datepicker(selectedYear, selectedMonth, selectedDay, date_from_updated){
530        var selected_date = new Date(selectedYear, selectedMonth, selectedDay),
531            start_date = new Date(selectedYear, selectedMonth, selectedDay),
532            end_date = new Date(selectedYear + 1, selectedMonth, selectedDay),
533            $i = 1;
534            var selected_date_string = $.datepicker.formatDate('yy-mm-dd', selected_date);
535
536        $( "#booking_date_to" ).datepicker('option', 'maxDate', end_date);
537            
538            var time_from = $('#booking_time_from_block .input_select_field_booking_time_from .input_select_input').length > 0 ? $('#booking_time_from_block .input_select_field_booking_time_from .input_select_input').val() : '00:00';
539            time_from = parseInt(time_from);
540            if ( isNaN(time_from) ){ time_from = 0; }
541            var stop_time = is_stop_time(babe_lst.av_cal[selected_date_string]['times'], time_from);
542            
543            if (babe_lst.basic_booking_period === 'day' && stop_time){
544                $( "#booking_date_to" ).datepicker('option', 'maxDate', selected_date);
545            } else {
546              
547            start_date.setDate(start_date.getDate() + 1);
548            for (var d = start_date; d <= end_date; d.setDate(d.getDate() + 1)) {
549                var cur_date_string = $.datepicker.formatDate('yy-mm-dd', d);
550                
551                var av_guests = 0;
552                var av_times_count = 0;                
553                if ($.inArray(cur_date_string, av_cal_keys) > -1){
554                    av_guests = get_obj_prop_max_value(babe_lst.av_cal[cur_date_string]['times']);
555                    av_times_count = get_obj_prop_length(babe_lst.av_cal[cur_date_string]['times']);  
556                }
557                
558                if (babe_lst.basic_booking_period == 'day' && av_times_count > 1){
559                    if (babe_lst.av_cal[cur_date_string]['times']['00:00'] == 0){
560                        d.setDate(d.getDate() - 1);
561                    }
562                    $( "#booking_date_to" ).datepicker('option', 'maxDate', d);
563                    break;
564                }                
565                
566                if (av_guests == 0){
567                    if (babe_lst.basic_booking_period != 'night'){
568                       d.setDate(d.getDate() - 1);
569                    }
570                    $( "#booking_date_to" ).datepicker('option', 'maxDate', d);
571                    break;
572                }
573                
574                if ( babe_lst.basic_booking_period === 'night' || babe_lst.basic_booking_period === 'day' ){
575
576                    let rt;
577                    let max_booking_period = 0;
578                    for (rt in babe_lst.av_cal[selected_date_string]['rates']) {
579                        let rate_max_booking_period = parseInt(babe_lst.av_cal[selected_date_string]['rates'][rt]['max_booking_period']);
580                        if ( rate_max_booking_period === 0 ){
581                            max_booking_period = 0;
582                            break;
583                        }
584                        if ( rate_max_booking_period > max_booking_period){
585                            max_booking_period = rate_max_booking_period;
586                        }
587                    }
588
589                    if ( max_booking_period === $i ){
590                        $( "#booking_date_to" ).datepicker('option', 'maxDate', d);
591                        break;
592                    }
593                }
594                
595                $i++;
596            } ///////////////////
597            
598            }
599
600        let rt;
601        let min_booking_period = 0;
602        for (rt in babe_lst.av_cal[selected_date_string]['rates']) {
603            let rate_min_booking_period = parseInt(babe_lst.av_cal[selected_date_string]['rates'][rt]['min_booking_period']);
604            if ( rate_min_booking_period > 0){
605                if ( min_booking_period === 0 ){
606                    min_booking_period = rate_min_booking_period;
607                } else if ( min_booking_period > rate_min_booking_period ) {
608                    min_booking_period = rate_min_booking_period;
609                }
610            } else {
611                min_booking_period = 0;
612                break;
613            }
614        }
615
616        if ( min_booking_period > 0 && (babe_lst.basic_booking_period === 'night' || babe_lst.basic_booking_period === 'day' ) ){
617            selected_date.setDate(selected_date.getDate() + min_booking_period );
618         } else if (babe_lst.basic_booking_period === 'night'){
619            selected_date.setDate(selected_date.getDate() + 1);
620         }
621            
622         $( "#booking_date_to" ).datepicker('option', 'minDate', selected_date);
623         
624         if (!date_from_updated && babe_lst.basic_booking_period === 'day' ){
625            if ( stop_time ){
626              $('#booking_date_to').datepicker("setDate", $( "#booking_date_from" ).val() );
627            }  
628            $('.ui-datepicker-current-day').click();
629         } else {
630            if (date_from_updated){
631              if (init_booking_calendars){
632                 init_booking_calendars = false;
633              } else {
634                 $('#booking_date_to').val('');
635              }
636            }
637         }
638         
639    }
640    
641    ////////////Main AV calendar/////////////////////
642    
643    $('#av-cal').on('click', '.cal-cell-active:not(.cal-cell-disabled), .cal-cell-disabled-first', function(){
644        $('#booking_form_total').html('');
645          var Y1 = parseInt($(this).data('year')),
646          m1 = parseInt($(this).data('month')) - 1,
647          d1 = parseInt($(this).data('day')),
648          selected_date = $(this).data('date'),
649          min_booking = parseInt($(this).data('min-booking'));
650          
651        if (
652        (!babe_lst.cal_first_click || cal_first_click)
653        && $(this).hasClass('cal-cell-start-day')
654        && ( babe_lst.basic_booking_period !== 'night' || (babe_lst.basic_booking_period === 'night' && !$(this).hasClass('cal-cell-disabled-first') ) )
655        ){
656            if (babe_lst.cal_first_click){
657                //// first click
658              if ($('#booking_form').length > 0 && $('#booking_date_from').val() !== selected_date){
659                 $('#booking_date_from').datepicker("setDate", selected_date );
660                 $('.ui-datepicker-current-day').click();
661              } else {
662                 av_cal_first_click_update(Y1, m1, d1);
663              }
664                
665            } else {
666                ///// or single click, select one date
667              $('#booking_date_from').val(selected_date);
668              if ($('#booking_form').length>0){
669                $('#booking_date_from').datepicker("setDate", selected_date );
670                $('.ui-datepicker-current-day').click();
671                
672                get_times_guests();
673              }
674            }
675        } else {
676        
677          if (
678        babe_lst.cal_first_click && !cal_first_click && !$(this).hasClass('cal-cell-disabled') && !$(this).hasClass('cal-cell-disabled-min') 
679        && ( babe_lst.basic_booking_period !== 'day' || (babe_lst.basic_booking_period === 'day' && (min_booking == 0 || min_booking > 0 && !$(this).hasClass('cal-cell-disabled-last') && !$(this).hasClass('cal-cell-selected') ) ) )
680        && ( babe_lst.basic_booking_period !== 'night' || (babe_lst.basic_booking_period === 'night' && !$(this).hasClass('cal-cell-disabled-last') ) )
681        ){
682            //// second click
683            if ( $('#booking_form').length > 0 && $('#booking_date_to').val() !== selected_date ){
684                  $('#booking_date_to').datepicker("setDate", selected_date );
685                  $('.ui-datepicker-current-day').click();
686                get_times_guests();
687            } else {
688                av_cal_second_click_update(Y1, m1, d1);
689            }
690          }
691        }    
692        
693    });
694    
695    /// reset selected first date
696    $('#av-cal').on('click', '.cal-cell-disabled', function(){
697        if (babe_lst.cal_first_click){
698               cal_first_click = true;
699               $('#booking_date_from').val('');
700               $('#booking_date_to').val('');
701               $('.cal-cell-active.cal-cell-disabled, .cal-cell-disabled-first.cal-cell-disabled').removeClass('cal-cell-disabled');
702               $('.cal-cell.cal-cell-selected').removeClass('cal-cell-selected');
703               $('.cal-cell-active.cal-cell-disabled-min').removeClass('cal-cell-disabled-min');
704        }
705    });
706    
707    ///////////av_cal_simple_update///////////////
708    
709    function av_cal_simple_update(Y1, m1, d1){
710        $('.cal-cell-active.cal-cell-disabled').removeClass('cal-cell-disabled');
711        $('.cal-cell.cal-cell-selected').removeClass('cal-cell-selected');
712        var mm = m1+1,
713        dd = (d1<10)?"0"+d1:d1;
714        mm = (mm<10)?"0"+mm:mm;
715        var selected_date_sql = Y1+'-'+mm+'-'+dd;
716        $('.cal-cell-active[data-date-sql="'+selected_date_sql+'"]').addClass('cal-cell-selected');
717    }
718    
719    ///////////av_cal_first_click_update///////////////
720    
721    function av_cal_first_click_update(Y1, m1, d1){
722
723        $('.cal-cell-active.cal-cell-disabled').removeClass('cal-cell-disabled');
724        $('.cal-cell.cal-cell-selected').removeClass('cal-cell-selected');
725        var mm = m1+1,
726        dd = (d1<10)?"0"+d1:d1;
727        mm = (mm<10)?"0"+mm:mm;
728        let selected_date_sql = Y1+'-'+mm+'-'+dd;
729        let current = $('.cal-cell-active[data-date-sql="'+selected_date_sql+'"]'),
730          count = 0,
731          stop_next_date = false;
732        let selected_date = new Date( Y1, m1, d1 );
733
734        let time_from = $('#booking_time_from_block .input_select_field_booking_time_from .input_select_input').length > 0 ? $('#booking_time_from_block .input_select_field_booking_time_from .input_select_input').val() : '00:00';
735        time_from = parseInt(time_from);
736        if ( isNaN(time_from) ){ time_from = 0; }
737        let stop_time = is_stop_time(babe_lst.av_cal[selected_date_sql]['times'], time_from);
738        
739        $(current).addClass('cal-cell-selected');
740        
741            $('#av-cal').find('.cal-cell').not('.cal-cell-invisible').each(function(el){
742                let Y = parseInt($(this).data('year')),
743                m = parseInt($(this).data('month')) - 1,
744                d = parseInt($(this).data('day'));
745                if (Y<Y1 || (Y==Y1 && m< m1) || (Y==Y1 && m==m1 && d<d1)){
746                    //// disable dates before current
747                    $(this).addClass('cal-cell-disabled');
748                    return;
749                }
750                let date = new Date(Y, m, d);
751
752                let check = false;
753                let second_check = false;
754
755                for (let rti in babe_lst.av_cal[selected_date_sql]['rates']) {
756                    let rt = babe_lst.av_cal[selected_date_sql]['rates'][rti];
757                    if ( parseInt(rt['start_day']) === 0 ){
758                        continue;
759                    }
760
761                    let rate_max_booking_period = parseInt(rt['max_booking_period']);
762                    let rate_min_booking_period = parseInt(rt['min_booking_period']);
763
764                    if ( !rate_max_booking_period && !rate_min_booking_period ){
765                        second_check = true;
766                        break;
767                    }
768
769                    let date_check_min = new Date( selected_date.getFullYear(), selected_date.getMonth(), selected_date.getDate() );
770                    let date_check_max = new Date( selected_date.getFullYear(), selected_date.getMonth(), selected_date.getDate() );
771
772                    if ( rate_min_booking_period > 0 && rate_max_booking_period > 0 ){
773                        date_check_min.setDate(selected_date.getDate() + rate_min_booking_period);
774                        date_check_max.setDate(selected_date.getDate() + rate_max_booking_period);
775                        if ( date >= date_check_min && date <= date_check_max ){
776                            second_check = true;
777                            break;
778                        }
779                    } else if (rate_min_booking_period > 0){
780                        date_check_min.setDate(selected_date.getDate() + rate_min_booking_period);
781                        if ( date >= date_check_min ){
782                            second_check = true;
783                            break;
784                        }
785                    } else if (rate_max_booking_period > 0){
786                        date_check_max.setDate(selected_date.getDate() + rate_max_booking_period);
787                        if ( date <= date_check_max ){
788                            second_check = true;
789                            break;
790                        }
791                    }
792                }
793
794                if (
795                    !check
796                    && ( $(this).data('date-sql') != selected_date_sql )
797                    && (
798                        stop_next_date
799                        || $(this).hasClass('cal-cell-disabled')
800                        || $(this).hasClass('cal-cell-disabled-last')
801                        || !second_check
802                        || ( babe_lst.basic_booking_period === 'day'
803                            && stop_time && count === 1)
804                    )
805                ){
806                    check = true;
807                    $(this).addClass('cal-cell-disabled');
808                }
809                if (
810                    !check
811                    && ( $(this).data('date-sql') != selected_date_sql )
812                    && $(this).hasClass('cal-cell-stop-date')
813                ){
814                    stop_next_date = true;
815                }
816                count++;
817            });
818            cal_first_click = false;
819    }
820    
821    ///////////av_cal_second_click_update///////////////
822    
823    function av_cal_second_click_update(Y1, m1, d1){
824
825        let check = false;
826        let from_date = $('#booking_date_from').datepicker('getDate');
827        let to_date = new Date(Y1, m1, d1);
828
829        $('#av-cal').find('.cal-cell-active, .cal-cell-disabled-first').each(function(el){
830            let Y = parseInt($(this).data('year')),
831                m = parseInt($(this).data('month')) - 1,
832                d = parseInt($(this).data('day'));
833
834            let date = new Date(Y, m, d);
835
836            if ( date < from_date || date > to_date ){
837                $(this).removeClass('cal-cell-selected');
838                return;
839            }
840
841            $(this).addClass('cal-cell-selected');
842        });
843        $('.cal-cell-active.cal-cell-disabled, .cal-cell-disabled-first.cal-cell-disabled').removeClass('cal-cell-disabled');
844        $('.cal-cell-active.cal-cell-disabled-min').removeClass('cal-cell-disabled-min');
845        cal_first_click = true;
846    }
847    
848    ///////////////////////////////////////
849    ///////////AV calendar navigation//////
850    
851    $('.cal-month-bar').on('click', '.cal-month-prev', function(){
852        var cur_block = $(this).parents().eq(1); //// cal-month-block
853        if ($(cur_block).prev('.cal-month-block').length){
854            $(cur_block).removeClass('cal-month-active');
855            $(cur_block).prev('.cal-month-block').addClass('cal-month-active');
856        }  
857    });
858    
859    $('.cal-month-bar').on('click', '.cal-month-next', function(){
860        var cur_block = $(this).parents().eq(1); //// cal-month-block
861        if ($(cur_block).next('.cal-month-block').length){
862            $(cur_block).removeClass('cal-month-active');
863            $(cur_block).next('.cal-month-block').addClass('cal-month-active');
864        }  
865    });
866    
867    function av_cal_set_month(Y, m){
868        var mm = m+1;
869        mm = (mm<10)?"0"+mm:mm;
870        $('.cal-month-block.cal-month-active').removeClass('cal-month-active');
871        $('.cal-month-block[data-yearmonth="'+Y+'-'+mm+'"]').addClass('cal-month-active');
872    }
873    
874    //////////////init booking form total price /////////
875    
876    booking_form_calculate();
877    
878    //////////////get_times_guests////////////
879    
880    function get_times_guests(){
881
882        $('#booking_form_total').html('');
883        let post_id = $('#booking_date_from').data('post-id'),
884            date_from = $('#booking_date_from').val(),
885            date_to = '';
886        if ( $('#booking_date_to').length > 0 ){
887            date_to = $('#booking_date_to').val();
888        }
889
890        let guests = babe_lst.guests;
891
892        $("#booking-guests-result .select_guests").each(function(){
893            let age_id = $(this).data('age-id');
894            guests[age_id] = $(this).val();
895        });
896
897        $('#booking-guests-result').html('<span class="spin_f"><i class="fas fa-spinner fa-spin fa-1x"></i></span>');
898        $('#booking-times').html('<span class="spin_f"><i class="fas fa-spinner fa-spin fa-1x"></i></span>');
899
900        $.ajax({
901            url : babe_lst.ajax_url,
902            type : 'POST',
903            data : {
904                action : 'get_times_guests',
905                post_id : post_id,
906                date_from : date_from,
907                date_to : date_to,
908                guests : guests,
909                // check
910                nonce : babe_lst.nonce
911            },
912            success : function( msg ) {
913                $('#booking-times').html('');
914                try {
915                    var response = JSON.parse( msg );
916                } catch ( e ) {
917                    return false;
918                }
919                $('#booking-times').html(response.time_lines);
920                if( $('#booking-guests-result').length > 0 ){
921                    $('#booking-guests-result').html(response.select_guests);
922                }
923                $('#booking_form .booking-services-block').html(response.services);
924                booking_form_calculate();
925            },
926            error : function( msg ) {
927                booking_form_calculate();
928            }
929        }).always(function(){
930
931        });
932    }
933    
934    ///////////on change any checkbox////////////////
935    
936    $('#booking_form').on('change', 'input:checkbox', function(el){
937        booking_form_calculate();
938    });
939
940    $('#booking_form').on('change', 'input:radio', function(el){
941        booking_form_calculate();
942    });
943
944    $('#booking_form').on('change', '.select_service_quantity', function(el){
945        booking_form_calculate();
946    });
947    
948    ///////////on change booking_time_from booking_time_to////////////////
949
950    $('#booking_form').on('click', '.input_select_field_booking_time_from .cloud_term_item.term_item_available', function(){
951
952        let selected_time = $(this).data('value');
953        let selected_time_int = parseInt(selected_time);
954
955        $('#booking_time_from_block').find('input').val( selected_time );
956        $('#booking_time_to_block').find('input').val('');
957        $('#booking_form_total').html('');
958
959        $('#booking_time_from_block .cloud_term_item').removeClass('term_item_selected').removeClass('term_item_inbetween').removeClass('term_item_selected_from');
960
961        $(this).addClass('term_item_selected').addClass('term_item_selected_from');
962
963        $('#booking_time_to_block .cloud_term_item').removeClass('term_item_available').removeClass('term_item_selected').removeClass('term_item_selected_from').removeClass('term_item_inbetween');
964
965        let from_date = $('#booking_date_from').datepicker('getDate') !== null ? $('#booking_date_from').datepicker('getDate') : '';
966        let cur_date_string = $.datepicker.formatDate('yy-mm-dd', from_date);
967        let found_locked_time = false;
968        let found_selected_time = false;
969
970        $('#booking_time_to_block').find('.cloud_term_item').each(function (id, el) {
971
972            let item_time = $(el).data('value');
973            let item_time_int = parseInt(item_time);
974            let check = false;
975
976            if ( !found_selected_time && item_time_int >= selected_time_int ){
977                found_selected_time = true;
978                if ( item_time_int === selected_time_int ){
979                    $(el).addClass('term_item_selected_from');
980                    return;
981                }
982            }
983
984            if ( !found_selected_time || found_locked_time ){
985                return;
986            }
987
988            for (let rti in babe_lst.av_cal[cur_date_string]['rates']) {
989                let rt = babe_lst.av_cal[cur_date_string]['rates'][rti];
990                if ( parseInt(rt['start_day']) === 0 ){
991                    continue;
992                }
993
994                let rate_max_booking_period = parseInt(rt['max_booking_period']);
995                let rate_min_booking_period = parseInt(rt['min_booking_period']);
996
997                if ( !rate_max_booking_period && !rate_min_booking_period ){
998                    check = true;
999                    break;
1000                }
1001
1002                if ( rate_min_booking_period > 0 && rate_max_booking_period > 0 ){
1003
1004                    if (
1005                        (item_time_int >= selected_time_int + rate_min_booking_period)
1006                        && (item_time_int <= selected_time_int + rate_max_booking_period)
1007                    ){
1008                        check = true;
1009                        break;
1010                    }
1011                } else if (rate_min_booking_period > 0){
1012                    if ( item_time_int >= selected_time_int + rate_min_booking_period ){
1013                        check = true;
1014                        break;
1015                    }
1016                } else if (rate_max_booking_period > 0){
1017                    if ( item_time_int <= selected_time_int + rate_max_booking_period ){
1018                        check = true;
1019                        break;
1020                    }
1021                }
1022            }
1023
1024            if ( check ){
1025                $(el).addClass('term_item_available');
1026            }
1027
1028            let av_guests = parseInt(babe_lst.av_cal[cur_date_string]['times'][item_time]);
1029            if ( av_guests === 0 ){
1030                found_locked_time = true;
1031            }
1032        });
1033    });
1034
1035    $('#booking_form').on('click', '.input_select_field_booking_time_to .cloud_term_item.term_item_available', function(){
1036
1037        $('#booking_time_to_block .cloud_term_item').removeClass('term_item_selected').removeClass('term_item_inbetween');
1038
1039        $(this).addClass('term_item_selected');
1040        $('#booking_time_to_block').find('input').val( $(this).data('value') );
1041
1042        let selected_time_from = $('#booking_time_from_block .term_item_selected_from').data('value');
1043        let selected_time_to = $(this).data('value');
1044        let selected_time_from_int = parseInt(selected_time_from);
1045        let selected_time_to_int = parseInt(selected_time_to);
1046
1047        $('#booking_time_to_block').find('.cloud_term_item').each(function (id, el) {
1048
1049            let item_time = $(el).data('value');
1050            let item_time_int = parseInt(item_time);
1051            let check = false;
1052
1053            if ( item_time_int > selected_time_from_int && item_time_int < selected_time_to_int ){
1054                $(el).addClass('term_item_inbetween');
1055            }
1056        });
1057
1058        booking_form_calculate();
1059    });
1060
1061    function init_input_cloud(){
1062
1063        let from_date = $('#booking_date_from').datepicker('getDate') !== null ? $('#booking_date_from').datepicker('getDate') : '';
1064        let cur_date_string = $.datepicker.formatDate('yy-mm-dd', from_date);
1065        let found_first_available = false;
1066
1067        $('#booking_time_from_block').find('.cloud_term_item').each(function (id, el) {
1068
1069            let item_time = $(el).data('value');
1070            let item_time_int = parseInt(item_time);
1071            let av_guests = parseInt(babe_lst.av_cal[cur_date_string]['times'][item_time]);
1072
1073            if ( !found_first_available ){
1074                $('#booking_time_to_block .term_item_available').each(function (idd, ell) {
1075                    if ( parseInt( $(ell).data('value') ) <= item_time_int ){
1076                        $(this).removeClass('term_item_available');
1077                    }
1078                });
1079            }
1080
1081            if ( av_guests === 0 ){
1082                $(this).removeClass('term_item_available');
1083            } else {
1084                found_first_available = true;
1085            }
1086        });
1087    }
1088
1089    $('#booking_form').on('change', '.input_select_field_booking_time_from .input_select_input_value', function(el){
1090        var date = $('#booking_date_from').datepicker("getDate");
1091        update_date_to_datepicker(date.getFullYear(), date.getMonth(), date.getDate(), false);
1092        update_booking_form_services();
1093        booking_form_calculate();
1094    });
1095    
1096    $('#booking_form').on('change', '.input_select_field_booking_time_to .input_select_input_value', function(el){
1097        update_booking_form_services();
1098        booking_form_calculate();
1099    });
1100    
1101    ///////////on change booking_time////////////////
1102    
1103    $('#booking_form').on('change', 'input:radio[name=booking_time]:checked', function(el){
1104        let max_select_guests = parseInt($(this).data('max-select-guests'));
1105        update_select_guests_block(max_select_guests);
1106        booking_form_calculate();
1107    });
1108
1109    function update_select_guests_block(max_select_guests){
1110        let options = '';
1111        $("#error_group").removeClass('show_error');
1112
1113        for (let i = 0; i <= max_select_guests; i++){
1114            var add_class = '';
1115            if (i == 0){
1116                add_class = ' term_item_selected';
1117            }
1118            options += '<li class="term_item' + add_class + '" data-id="' + i + '"  data-value="' + i + '">' + i + '</li>';
1119        }
1120        $('#booking_form').find('.select_guests_block .select_guests').val(0);
1121        $('#booking_form').find('.select_guests_block .input_select_list').html(options);
1122    }
1123
1124    $('#booking_form').on('change', 'select[name=booking_time]', function(el){
1125        let max_select_guests = parseInt($(this).find(":selected").data('max-select-guests'));
1126        update_select_guests_block(max_select_guests);
1127        booking_form_calculate();
1128    });
1129    
1130    ///////////change///select_guests/////////////////
1131    
1132    $('#booking_form').on('change', 'input.select_guests', function(el){
1133        el.preventDefault();
1134        el.stopPropagation();
1135        var cur_selected_guests = parseInt($(this).val());
1136        var par = $(this).parents().eq(2); //select_guests_block
1137        var max_select_guests = parseInt($(par).find('.input_select_list li').last().data('id'));
1138        var av_guests = max_select_guests - cur_selected_guests;
1139        $("#error_group").removeClass('show_error');
1140
1141        $(par).nextAll().each(function(ind, elm){
1142            var select_item = $(elm).find('.select_guests').first();
1143            var select_item_par = $(select_item).parent(); //input_select_wrapper
1144            var selected_value = parseInt($(select_item).val());
1145            selected_value = av_guests >= selected_value ? selected_value : av_guests;            
1146            var options = '';
1147            for (var i = 0; i <= av_guests; i++){
1148                var add_class = '';
1149                if (i == selected_value){
1150                    add_class = ' term_item_selected';
1151                }
1152                options += '<li class="term_item' + add_class + '" data-id="' + i + '" data-value="' + i + '">' + i + '</li>';
1153            }
1154            $(select_item).val(selected_value);
1155            $(select_item_par).find('.input_select_list').html(options);
1156            av_guests = av_guests - selected_value;
1157        });
1158
1159        update_booking_form_services();
1160        booking_form_calculate();        
1161    });
1162    
1163    //////////////////////////////////////////////////
1164    
1165    $('#booking_form').on('change', 'input:radio[name=booking_meeting_point]:checked', function(el){
1166        
1167        var point_id = $(this).val();
1168        $("#error_group").removeClass('show_error');
1169        
1170        $('#block_meeting_points_default .meeting_point_default.meeting_point_default_selected').removeClass('meeting_point_default_selected');
1171        $('#block_meeting_points_default .meeting_point_default[data-point-id='+point_id+']').addClass('meeting_point_default_selected');
1172        
1173        $('#meeting_points_result .meeting_point.meeting_point_selected').removeClass('meeting_point_selected');
1174        $('#meeting_points_result .meeting_point[data-point-id='+point_id+']').addClass('meeting_point_selected');
1175        
1176    });
1177    
1178    ///////////////booking_form_calculate//////////////////////
1179    
1180    function update_booking_time_select(first_time_select, inst){
1181        
1182        var sufx = first_time_select ? 'from' : 'to';
1183        var start_time = first_time_select ? '00:00' : $('#booking_time_from_block .input_select_field_booking_time_from .input_select_input').val();
1184        var time_selected = $('.booking-time-block input[name="booking_time_'+sufx+'"]').val();
1185        
1186        if (init_booking_calendars){
1187            time_selected = babe_lst['time_'+ sufx];
1188        }
1189        
1190        let post_id = $('#booking_date_from').data('post-id'),
1191            date_from;
1192
1193        if ( babe_lst.basic_booking_period === 'hour' ){
1194
1195            date_from = $('#booking_date_from').val();
1196
1197        } else {
1198
1199            date_from = $('#booking_date_'+sufx).val();
1200        }
1201
1202        if (!first_time_select && $('#booking_date_to').length > 0 && $('#booking_date_from').val() != $('#booking_date_to').val()){
1203           start_time = '00:00';
1204        }
1205        
1206        if ( date_from != '' && date_from != undefined && $('#booking_time_'+sufx+'_block').length > 0){
1207
1208            $('#booking_time_'+sufx+'_block').html('<span class="spin_f"><i class="fas fa-spinner fa-spin fa-1x"></i></span>');
1209
1210            $.ajax({
1211                url : babe_lst.ajax_url,
1212                type : 'POST',
1213                data : {
1214                    action : 'get_booking_times',
1215                    post_id : post_id,
1216                    date_from : date_from,
1217                    time_selected : time_selected,
1218                    start_time : start_time,
1219                    from_to : sufx,
1220                    // check
1221                    nonce : babe_lst.nonce
1222                },
1223                success : function( msg ) {
1224                    let response;
1225                    try {
1226                        response = JSON.parse( msg );
1227                    } catch ( e ) {
1228                        return false;
1229                    }
1230
1231                    if ( babe_lst.basic_booking_period === 'hour' ){
1232                        $('#booking_time_from_block').html(response.booking_time_from);
1233                        $('#booking_time_to_block').html(response.booking_time_to);
1234                    } else {
1235                        if ( sufx === 'from' ){
1236                            $('#booking_time_from_block').html(response.booking_time_from);
1237                        } else {
1238                            $('#booking_time_to_block').html(response.booking_time_to);
1239                        }
1240                    }
1241                },
1242                error: function() {
1243                    if ( babe_lst.basic_booking_period === 'hour' ){
1244                        $('#booking_time_from_block').html('');
1245                        $('#booking_time_to_block').html('');
1246                    } else {
1247                        $('#booking_time_'+sufx+'_block').html('');
1248                    }
1249                }
1250            }).always(function(){
1251                if ( $('#booking_time_'+sufx+'_block').html() == ''){
1252                    cal_first_click = true;
1253                    $('#booking_date_from').val('');
1254                    $('#booking_date_to').val('');
1255                } else {
1256                    after_update_booking_time_select(first_time_select, inst);
1257                    update_booking_form_services();
1258                    booking_form_calculate();
1259                }
1260
1261                init_input_cloud();
1262            });
1263
1264        } else {
1265            after_update_booking_time_select(first_time_select, inst);
1266        }
1267    }
1268    
1269    //////////////////////////////////////////
1270    
1271    function after_update_booking_time_select(first_time_select, inst){
1272        
1273        if (first_time_select){
1274            if ( !babe_lst.cal_first_click || $( "#booking_date_to" ).val() !== ''){
1275                get_times_guests();
1276            }
1277            if (babe_lst.cal_first_click && $('#av-cal').length > 0){
1278                av_cal_first_click_update(inst.selectedYear, inst.selectedMonth, inst.selectedDay);
1279            } else {
1280                av_cal_simple_update(inst.selectedYear, inst.selectedMonth, inst.selectedDay);
1281            }
1282            av_cal_set_month(inst.selectedYear, inst.selectedMonth);
1283
1284            update_date_to_datepicker(inst.selectedYear, inst.selectedMonth, inst.selectedDay, true);
1285        }
1286        
1287        if (!first_time_select && babe_lst.cal_first_click && $( "#booking_date_from" ).val() !== ''){
1288            if ($('#av-cal').length > 0){
1289               av_cal_second_click_update(inst.selectedYear, inst.selectedMonth, inst.selectedDay);
1290            }
1291            get_times_guests();
1292        }
1293        
1294    }
1295    
1296    ////////////booking_form_calculate//////////////////
1297    
1298    $('#booking_form').on('click', '.booking_form_calculate', function(el){
1299        el.preventDefault();
1300        el.stopPropagation();
1301        booking_form_calculate();        
1302    });
1303    
1304    ///////////////booking_form_calculate//////////////////////
1305    
1306    function booking_form_calculate(){
1307        let post_id = $('#booking_date_from').data('post-id'),
1308            date_from = $('#booking_date_from').val(),
1309            date_to = '',
1310            time_from = '',
1311            time_to = '';
1312        if ($('#booking_date_to').length > 0){
1313            date_to = $('#booking_date_to').val();
1314        } else {
1315            date_to = date_from;
1316        }
1317        if ($('.booking_time_line').length > 0){
1318            time_from = $('#booking_form input:radio[name=booking_time]:checked').val();
1319        } else if ($('.booking_time_line_select').length > 0){
1320            time_from = $('#booking_form select[name=booking_time]').val();
1321        }
1322        if ($('.input_select_field_booking_time_from').length > 0){
1323            time_from = $('.input_select_field_booking_time_from .input_select_input').val();
1324        }
1325        if ($('.input_select_field_booking_time_to').length > 0){
1326            time_to = $('.input_select_field_booking_time_to .input_select_input').val();
1327        }
1328        if (time_to == '' && $('#booking_time_to').length > 0){
1329            time_to = $('#booking_time_to').val();
1330        }
1331
1332        let guests = {};
1333            
1334        $("#booking-guests-result .select_guests").each(function(){
1335            let age_id = $(this).data('age-id');
1336            guests[age_id] = $(this).val();
1337        });
1338        
1339        if ( date_from != '' && date_from != undefined && (!babe_lst.cal_first_click || (babe_lst.cal_first_click && date_to != '' && date_to != undefined))){
1340            $('#booking_form_total').html('<span class="spin_f"><i class="fas fa-spinner fa-spin fa-2x"></i></span>');
1341        
1342        $.ajax({
1343		url : babe_lst.ajax_url,
1344		type : 'POST',
1345		data : {
1346			action : 'booking_calculate',
1347            post_id : post_id,
1348            data: $('#booking_form').serialize(),
1349            date_from : date_from,
1350            date_to : date_to,
1351            guests : guests,
1352            time_from: time_from,
1353            time_to: time_to,
1354            // check
1355	        nonce : babe_lst.nonce
1356		},
1357		success : function( msg ) {
1358		    //$('#booking_form_total').html('');
1359            $('#booking_form_total').html(msg);
1360		  }
1361        });
1362        }
1363    }
1364
1365    function update_booking_form_services(){
1366        let post_id = $('#booking_date_from').data('post-id'),
1367            date_from = $('#booking_date_from').val(),
1368            date_to = '',
1369            time_from = '',
1370            time_to = '';
1371        if ($('#booking_date_to').length > 0){
1372            date_to = $('#booking_date_to').val();
1373        }
1374        if ($('.booking_time_line').length > 0){
1375            time_from = $('#booking_form input:radio[name=booking_time]:checked').val();
1376        } else if ($('.booking_time_line_select').length > 0){
1377            time_from = $('#booking_form select[name=booking_time]').val();
1378        }
1379        if ($('.input_select_field_booking_time_from').length > 0){
1380            time_from = $('.input_select_field_booking_time_from .input_select_input').val();
1381        }
1382        if ($('.input_select_field_booking_time_to').length > 0){
1383            time_to = $('.input_select_field_booking_time_to .input_select_input').val();
1384        }
1385        if (time_to == '' && $('#booking_time_to').length > 0){
1386            time_to = $('#booking_time_to').val();
1387        }
1388
1389        let guests = {};
1390
1391        $("#booking-guests-result .select_guests").each(function(){
1392            let age_id = $(this).data('age-id');
1393            guests[age_id] = $(this).val();
1394        });
1395
1396        let data = $('#booking_form').serialize();
1397
1398        if ( date_from != '' && date_from != undefined && (!babe_lst.cal_first_click || (babe_lst.cal_first_click && date_to != '' && date_to != undefined))){
1399
1400            $.ajax({
1401                url : babe_lst.ajax_url,
1402                type : 'POST',
1403                data : {
1404                    action : 'get_services',
1405                    post_id : post_id,
1406                    data: data,
1407                    date_from : date_from,
1408                    date_to : date_to,
1409                    guests : guests,
1410                    time_from: time_from,
1411                    time_to: time_to,
1412                    // check
1413                    nonce : babe_lst.nonce
1414                },
1415                success : function( msg ) {
1416                    if ( msg != '' ){
1417                        $('#booking_form .booking-services-block').html(msg);
1418                        $( document.body ).trigger( 'babe_booking_form_services_updated', [ data ] );
1419                    }
1420                }
1421            });
1422        }
1423    }
1424    
1425    ////////////booking_form_submit//////////////////
1426    
1427    $('#booking_form').on('click', '.booking_form_submit', function(el){
1428        el.preventDefault();
1429        el.stopPropagation();
1430        $("#error_group").removeClass('show_error');
1431        var post_id = $('#booking_date_from').data('post-id'),
1432            date_from = $('#booking_date_from').val(),
1433            date_to = '',
1434            check_meeting = 1,
1435            time_check = true;
1436        if ($('#booking_date_to').length > 0){
1437            date_to = $('#booking_date_to').val();
1438        }
1439        if ($('.booking_meeting_point_line').length > 0){
1440            var meeting_point = $('#booking_form input:radio[name=booking_meeting_point]:checked').val();
1441            if (meeting_point == null || meeting_point === '' || meeting_point === undefined){
1442                check_meeting = 0;
1443            }
1444        }
1445
1446        if ( babe_lst.basic_booking_period === 'hour' ){
1447            time_check = $('.booking-time-block input[name="booking_time_from"]').val() !== '' && $('.booking-time-block input[name="booking_time_to"]').val() !== '';
1448        }
1449
1450        let guests = {},
1451        check_guests = 1,
1452        guests_min = 0, guests_max = 0,
1453        error_message = babe_lst.messages.fill_in_all_data;
1454        if ($('#booking-guests-result .select_guests').length > 0){
1455          check_guests = 0;
1456          $("#booking-guests-result .select_guests").each(function(){
1457              guests_min = Math.max( guests_min, parseInt($(this).data('guests-min')) );
1458              guests_max += parseInt($(this).data('guests-max'));
1459              let age_id = $(this).data('age-id');
1460            guests[age_id] = parseInt($(this).val());
1461            check_guests += guests[age_id];
1462          });
1463          if ( check_guests < guests_min ){
1464              error_message = babe_lst.messages.minimum_guests_is+guests_min;
1465              check_guests = 0;
1466          }
1467            if ( check_guests > guests_max ){
1468                error_message = babe_lst.messages.maximum_guests_is+guests_max;
1469                check_guests = 0;
1470            }
1471        }
1472        
1473        if ( date_from !== '' && date_from !== undefined && check_guests > 0 && check_meeting > 0 && (!babe_lst.cal_first_click || (babe_lst.cal_first_click && date_to !== '' && date_to !== undefined)) && time_check){
1474           $('#booking_form').submit();
1475        } else {
1476            $("#error_group label").text(error_message);
1477            $("#error_group").addClass('show_error');
1478        }
1479        
1480    });
1481
1482    $('#request_booking_form').on('submit', function(el){
1483        el.preventDefault();
1484        el.stopPropagation();
1485
1486        let post_id = $('#booking_obj_id').val(),
1487            user_name = $('#request_booking_name').val(),
1488            user_email = $('#request_booking_email').val(),
1489            user_message = $('#request_booking_message').val();
1490
1491        if ( post_id === '' || post_id === undefined || user_name === '' || user_name === undefined || user_email === '' || user_email === undefined || user_message === '' || user_message === undefined ){
1492            return false;
1493        }
1494
1495        $('#request_booking_form .request_booking_form_submit').append('<span class="spin_f"><i class="fas fa-spinner fa-spin fa-2x"></i></span>');
1496
1497        $.ajax({
1498            url : babe_lst.ajax_url,
1499            type : 'POST',
1500            data : {
1501                action : 'request_booking',
1502                post_id : post_id,
1503                user_name: user_name,
1504                user_email : user_email,
1505                user_message : user_message,
1506                date_from : $('#request_booking_date_from').val(),
1507                date_to : $('#request_booking_date_to').length > 0 ? $('#request_booking_date_to').val() : '',
1508                data: $('#request_booking_form').serialize(),
1509                // check
1510                nonce : babe_lst.nonce
1511            },
1512            success : function( msg ) {
1513                $('#request_booking_form .request_booking_form_submit').html(msg);
1514                $('#request_booking_name, #request_booking_email, #request_booking_message').val('');
1515                $('#request_booking_date_from, #request_booking_date_to').val('');
1516            }
1517        }).always( function(){
1518            $('#request_booking_form .request_booking_form_submit .spin_f').remove();
1519        });
1520    });
1521
1522    $('#request_booking_date_from').datepicker({
1523        numberOfMonths: 1,
1524        dateFormat: babe_lst.date_format,
1525        minDate: new Date(),
1526        maxDate: "+2y",
1527        onSelect: function(dateText, inst) {
1528            $( "#request_booking_date_to" ).datepicker('option', 'minDate', dateText);
1529        }
1530    });
1531
1532    $('#request_booking_date_to').datepicker({
1533        numberOfMonths: 1,
1534        dateFormat: babe_lst.date_format,
1535        minDate: new Date(),
1536        maxDate: "+2y"
1537    });
1538    
1539    ///////////select/////////////
1540    
1541    $('form, .babe_search_results_filters, .daterangepicker').on('click', '.input_select_field .input_select_title', function(event){
1542        event.preventDefault();
1543        input_select_toggle(this);
1544    });
1545    
1546    $("form, .babe_search_results_filters, .daterangepicker").on('focus', '.input_select_field input', function(){
1547      $(this).blur();
1548    });
1549    
1550    $('form, .babe_search_results_filters, .daterangepicker').on('click', '.input_select_field .input_select_list .term_item', function(event){
1551        event.preventDefault();
1552        event.stopPropagation();
1553        var element = $(this);
1554        var element_value = $(element).data('value');
1555        var element_id = $(element).data('id');
1556        var parent = $(element).parents().eq(1);
1557        var parent_title = parent.parent();
1558        input_select_toggle(parent_title);
1559        $(parent).find('.term_item').removeClass('term_item_selected');
1560        $(element).addClass('term_item_selected');
1561       // $(parent).find('input.input_select_input').attr('value', $(element).data('value'));
1562        $(parent).find('input.input_select_input').val($(element).data('value'));
1563        $(parent).find('input.input_select_input_value').attr('value', $(element).data('id'));
1564        $(parent).find('input.input_select_input_value').trigger('change');
1565    });
1566
1567    function input_select_toggle(item){
1568        $(item).parent().find('.input_select_list').toggleClass('active');
1569        $(item).parent().find('.input_select_title i').toggleClass('fa-chevron-down');
1570        $(item).parent().find('.input_select_title i').toggleClass('fa-chevron-up');
1571    }
1572    
1573    function add_input_close(item){
1574        $(item).find('.input_select_list').removeClass('active');
1575        $(item).find('.input_select_title i').addClass('fa-chevron-down');
1576        $(item).find('.input_select_title i').removeClass('fa-chevron-up');
1577    }
1578    
1579    $(document).on('click', function(event){
1580         var par = $(event.target).closest('.input_select_field');
1581         if (par.length){
1582            $(par).siblings().each(function(el){
1583                add_input_close(this);
1584            });
1585         } else {
1586            $(document).find('.input_select_field .input_select_list.active').parents().eq(2).each(function(el){
1587                add_input_close(this);
1588            });
1589         }
1590    });
1591    
1592    /////////// checkout_form_input_field /////////////
1593    
1594    $('.checkout_form_input_field').on('focus', 'input, textarea', function(event){
1595        var par = $(this).parent();
1596        $(par).addClass('checkout_form_input_field_focus'); 
1597    });
1598    
1599    $('.checkout_form_input_field').on('focusout', 'input, textarea', function(event){
1600        var par = $(this).parent();
1601        
1602        if ($(this).val() != ''){
1603            $(par).addClass('checkout_form_input_field_content');
1604        } else {
1605            $(par).removeClass('checkout_form_input_field_content');
1606        }
1607        $(par).removeClass('checkout_form_input_field_focus');
1608    });
1609    
1610    $('.checkout_form_input_field').on('click', '.checkout_form_input_label', function(event){
1611        $(this).parent().find('input, textarea').trigger('focus'); 
1612    });
1613
1614    $('#checkout_form .select2').select2();
1615
1616    $('#checkout_form #billing_address_country').on('change', function(e){
1617        $(this).trigger('select2:select');
1618    });
1619
1620    $('#checkout_form #billing_address_country').on('select2:select', function (e) {
1621        let country = $(this).val();
1622        let newOptions = '<option value>' + babe_lst.messages.select2select + '</option>';
1623        let prop_disabled = false;
1624
1625        $('#checkout_form .select2_state').val('');
1626
1627        if ( babe_lst.states.hasOwnProperty(country) && babe_lst.states[country].length !== 0 ){
1628            let select2_state_data = babe_lst.states[country];
1629            for(let id in select2_state_data) {
1630                newOptions += '<option value="'+ id +'">'+ select2_state_data[id] +'</option>';
1631            }
1632        } else {
1633            newOptions = '<option value>---</option>';
1634            prop_disabled = true;
1635        }
1636
1637        $('#checkout_form .select2_state').select2('destroy').html(newOptions).prop("disabled", prop_disabled).select2();
1638    });
1639
1640    $('#checkout_form .select2_state').select2();
1641
1642    /////////// my account nav selector /////////////
1643    
1644    $('.my_account_page_nav_selector, .my_account_page_nav_selector_i').on('click', function(event){
1645        event.preventDefault();
1646        my_account_nav_toggle(this);
1647    });
1648    
1649    $('.my_account_page_nav_selector').on('focus', function(){
1650      $(this).blur();
1651    });
1652    
1653    function my_account_nav_toggle(item){
1654        $(item).parent().find('.my_account_page_nav_list').toggleClass('my_account_page_nav_list_active');
1655        $(item).parent().find('.my_account_page_nav_selector_i').toggleClass('fa-chevron-down');
1656        $(item).parent().find('.my_account_page_nav_selector_i').toggleClass('fa-chevron-up');
1657    }
1658    
1659    ///////////collapse///////////
1660    
1661    $('.collapse-title').on('click', function(){
1662        var par = $(this).parent();
1663        $(this).toggleClass('block_active');
1664        $(par).find('.collapse-body').first().toggleClass('block_active');
1665    });
1666    
1667    ///////////accordion///////////
1668    
1669    $('.accordion-title').on('click', function(){
1670        var par = $(this).parents('.accordion-block').eq(0);
1671        var par_set = $(par).parent();
1672        
1673        if ($(par).hasClass('block_active')){
1674            $(par).removeClass('block_active');
1675        } else {
1676            $(par_set).find('.accordion-block.block_active').removeClass('block_active');
1677            $(par).addClass('block_active');
1678        }
1679    });
1680    
1681    ///////////tabs///////////
1682    
1683    $('.tabs_group .tab_title').on('click', function(){
1684        var tabs_group = $(this).parents().eq(1);
1685        var tab = this;
1686        var method = $(this).data('method');
1687
1688        if( method === 'location' ){
1689            babe_initMap();
1690        }
1691
1692        $(tabs_group).find('.tab_active').removeClass('tab_active');
1693        $(tab).addClass('tab_active');
1694        $(tabs_group).find('.tab_content[data-method="'+method+'"]').first().addClass('tab_active');
1695    });
1696    
1697    ////////////stars//////////////////////
1698    
1699    $('.comment-form-rating-stars .star').on('mouseover', '.fa-star, svg', function(){
1700        var par = $(this).parent();
1701        var cur_star = $(par).find('.fas, .far').first();
1702        var cur_star_svg = $(par).find('svg').first();
1703        $(cur_star_svg).attr('data-prefix', 'fas');
1704        
1705        $(cur_star).addClass('fas');
1706        $(cur_star).removeClass('far');
1707        
1708        $(par).prevAll().each(function(){
1709            var star = $(this).find('.fas, .far').first();
1710            $(star).addClass('fas');
1711            $(star).removeClass('far');
1712            
1713            var star_svg = $(this).find('svg').first();
1714            $(star_svg).attr('data-prefix', 'fas');
1715        });
1716        
1717        $(par).nextAll().each(function(){
1718            var star = $(this).find('.fas, .far').first();
1719            $(star).addClass('far');
1720            $(star).removeClass('fas');
1721            
1722            var star_svg = $(this).find('svg').first();
1723            $(star_svg).attr('data-prefix', 'far');
1724        });        
1725    });
1726    
1727    $('.comment-form-rating-stars .star').on('mouseout', 'svg', function(){
1728        var par = $(this).parents().eq(1);
1729        var rating_cr = $(par).data('rating-cr');
1730        var rating_val = parseInt($('#rating_'+rating_cr).val());
1731        
1732        $(par).find('.star').each(function(){
1733            var star = $(this).find('.fas, .far').first();
1734            var star_svg = $(this).find('svg').first();
1735            
1736            var star_val = parseInt($(this).data('rating-val'));
1737            
1738            if (star_val <= rating_val){
1739                $(star).addClass('fas');
1740                $(star).removeClass('far');
1741                $(star_svg).attr('data-prefix', 'fas');
1742            } else {
1743                $(star).addClass('far');
1744                $(star).removeClass('fas');
1745                $(star_svg).attr('data-prefix', 'far');
1746            }
1747            
1748        }); 
1749      });
1750    
1751      $('.comment-form-rating-stars .star').on('mousedown', 'svg', function(){    
1752        var rating_cr = $(this).parents().eq(1).data('rating-cr');
1753        var star_val = parseInt($(this).parent().data('rating-val'));
1754        $('#rating_'+rating_cr).val(star_val);     
1755      });
1756    
1757      $('.comment-form-rating-stars').on('mouseout', function(){
1758        var rating_cr = $(this).data('rating-cr');
1759        var rating_val = parseInt($('#rating_'+rating_cr).val());
1760        
1761        $(this).find('.star').each(function(){
1762            var star = $(this).find('.fas, .far').first();
1763            var star_svg = $(this).find('svg').first();
1764            
1765            var star_val = parseInt($(this).data('rating-val'));
1766            
1767            if (star_val <= rating_val){
1768                $(star).addClass('fas');
1769                $(star).removeClass('far');
1770                $(star_svg).attr('data-prefix', 'fas');
1771            } else {
1772                $(star).addClass('far');
1773                $(star).removeClass('fas');
1774                $(star_svg).attr('data-prefix', 'far');
1775            }
1776            
1777        }); 
1778      });
1779    
1780      $('.comment-form-rating-stars .star').on('click', '.fa-star', function(){    
1781        var rating_cr = $(this).parents().eq(1).data('rating-cr');
1782        var star_val = parseInt($(this).parent().data('rating-val'));
1783        $('#rating_'+rating_cr).val(star_val);      
1784      });
1785    
1786    ///////////////Coupon apply/////////
1787    
1788    $('#coupon_form_submit').click(function(){
1789        let coupon_num = $('#coupon_input_field').val();
1790         
1791         if (coupon_num){
1792            
1793            $('#coupon_form_submit_loader').html('<span class="spin_f"><i class="fas fa-spinner fa-spin fa-2x"></i></span>');      
1794        $.ajax({
1795		url : babe_lst.ajax_url,
1796		type : 'POST',
1797		data : {
1798			action : 'apply_coupon_to_order',
1799            order_id : getUrlParameter('order_id'),
1800            order_num : getUrlParameter('order_num'),
1801            order_hash : getUrlParameter('order_hash'),
1802            coupon_num: coupon_num,
1803            // check
1804	        nonce : babe_lst.nonce
1805		},
1806		success : function( msg ) {
1807            //////reload page
1808            window.location.reload(true);
1809		  },
1810        error : function(){
1811            $('#coupon_form_submit_loader').html('');
1812        }  
1813        });
1814         }
1815    });
1816
1817    $('#remove_coupon_form_submit').click(function(){
1818        let coupon_num = $(this).data('coupon-num');
1819        if (coupon_num){
1820            $('#coupon_form_submit_loader').html('<span class="spin_f"><i class="fas fa-spinner fa-spin fa-2x"></i></span>');
1821            $.ajax({
1822                url : babe_lst.ajax_url,
1823                type : 'POST',
1824                data : {
1825                    action : 'remove_coupon_from_order',
1826                    order_id : getUrlParameter('order_id'),
1827                    order_num : getUrlParameter('order_num'),
1828                    order_hash : getUrlParameter('order_hash'),
1829                    coupon_num: coupon_num,
1830                    // check
1831                    nonce : babe_lst.nonce
1832                },
1833                success : function( msg ) {
1834                    //////reload page
1835                    window.location.reload(true);
1836                },
1837                error : function(){
1838                    $('#coupon_form_submit_loader').html('');
1839                }
1840            });
1841        }
1842    });
1843    
1844    ////////////unitegallery///////////////
1845    
1846    if ($('#unitegallery').length > 0){
1847        $("#unitegallery").unitegallery( babe_lst.unitegallery_args );
1848    }    
1849    
1850    ///////////payment method to input///////////
1851    
1852    $('.payment_group .payment_method_title').on('click', function(){
1853        var tabs_group = $(this).parents().eq(1);
1854        var method = $(this).data('method');
1855        var order_id = getUrlParameter('order_id');
1856        $(tabs_group).find('input[name="payment[payment_method]"]').first().val(method);
1857
1858        $('#babe_search_result_refresh').css('display', 'block');
1859
1860        $.ajax({
1861            url : babe_lst.ajax_url,
1862            type : 'POST',
1863            data : {
1864                action : 'checkout_payment_method_changed',
1865                order_id : order_id,
1866                order_num : getUrlParameter('order_num'),
1867                order_hash : getUrlParameter('order_hash'),
1868                payment_method: method,
1869                // check
1870                nonce : babe_lst.nonce
1871            },
1872            success : function( msg ) {
1873                try {
1874                    var response = JSON.parse( msg );
1875                } catch ( e ) {
1876                    return false;
1877                }
1878                if ( response.order_items != '' && response.amount_group != '' ){
1879
1880                    $('#checkout_form_block').find('.coupon-form-block-applied').remove();
1881                    $('#checkout_form_block').find('.table_order_items_details').first().replaceWith(response.order_items);
1882                    $('#checkout_form_block').find('.amount_group').first().replaceWith(response.amount_group);
1883                    if ( response.amount_changed != 0 ){
1884                        $('html, body').animate({
1885                            scrollTop: $('#checkout_form_block').offset().top - 100
1886                        }, 500);
1887                    }
1888                    $( document.body ).trigger( 'babe_checkout_payment_method_changed', [ method, order_id ] );
1889                } else {
1890                    //////reload page
1891                    window.location.reload(true);
1892                }
1893            },
1894            error : function(){
1895            }
1896        }).always( function(){
1897            $('#babe_search_result_refresh').css('display', 'none');
1898        });
1899    });
1900
1901    $( document.body ).bind( 'babe_checkout_payment_gateway_submit', function( event, method ) {
1902        $('#babe_search_result_refresh').css('display', 'block');
1903    });
1904
1905    $('#checkout_form').on('submit', function() {
1906        var payment_method = $('#checkout_form input[name="payment[payment_method]"]').val();
1907        let form_checked = true;
1908        $('#checkout_form input[required]').each(function(ind, elm){
1909            if ( $(elm).val() == '' ){
1910                form_checked = false;
1911            }
1912        });
1913        if ( $('#order_terms_check').length > 0 && !$('#order_terms_check').is(':checked') ){
1914            form_checked = false;
1915        }
1916        if ( form_checked && (payment_method === 'cash' || payment_method === 'paypal') ){
1917            $( document.body ).trigger( 'babe_checkout_payment_gateway_submit', [ payment_method ] );
1918        }
1919    });
1920    
1921    ////////////validate////////////////
1922    
1923    $( "#checkout_form" ).validate({
1924        rules: {
1925            email_check: {
1926                required: true,
1927                email: true,
1928                equalTo: "#email",
1929            }
1930        }
1931    });
1932    
1933    //////////////////Google API///
1934
1935    if (  babe_lst.google_map_active == 1 ){
1936
1937        babe_initMap();
1938
1939        $( document.body ).bind( 'babe_google_map_meeting_points_to_init', function( event ){
1940            init_meeting_map('#google_map_meeting_points', '#block_meeting_points .address-autocomplete', '#block_meeting_points .find_points');
1941        });
1942
1943        //////////////////////////////
1944
1945        $( document.body ).bind( 'babe_google_map_with_direction_to_init', function( event ){
1946            init_address_map_with_direction('#google_map_address_with_direction', '#block_address_map_with_direction .address-autocomplete', '#travel_mode_panel');
1947        });
1948
1949        $('#booking_form').on('click', '.booking_meeting_point_line a[open-mode="modal"]', function( event ){
1950
1951            event.stopPropagation();
1952            event.preventDefault();
1953
1954            var gmap_div = $('#google_map_address_with_direction');
1955
1956            $(gmap_div).data('obj-id', $(this).data('obj-id'));
1957            $(gmap_div).data('lat', $(this).data('lat'));
1958            $(gmap_div).data('lng', $(this).data('lng'));
1959            $(gmap_div).data('address', $(this).data('address'));
1960
1961            $('#block_address_map_with_direction').remove('.address-autocomplete');
1962            $('#block_address_map_with_direction').append(babe_lst.travel_mode_html);
1963
1964            babe_overlay_open();
1965
1966            init_address_map_with_direction('#google_map_address_with_direction', '#block_address_map_with_direction .address-autocomplete', '#travel_mode_panel_modal');
1967        });
1968
1969        $('#route_to_button_ok').on('click', function( event ){
1970            babe_overlay_close();
1971        });
1972    }
1973
1974    //////////////////////////////////////////////
1975
1976    let listing_search_results_sort_by = '';
1977
1978    if( $('.babe_shortcode_babe_listing').length > 0 ){
1979
1980        listing_search_results_sort_by = $('.babe_shortcode_babe_listing').data('filter-sort-by');
1981
1982        $('.babe_shortcode_babe_listing_filters_button').on('click', function( event ){
1983            babe_overlay_open();
1984        });
1985
1986        $('#babe_shortcode_babe_listing_filters_button_apply').on('click', function( event ){
1987            babe_overlay_close();
1988        });
1989
1990        $('.babe_shortcode_babe_listing_filters_container').on('click', '.term_item_checkbox input', function( event ){
1991            update_babe_listing_filters();
1992        });
1993
1994        $('.babe_shortcode_babe_listing_filters_content').on(
1995            'click',
1996            '#babe_shortcode_babe_listing_filters_button_apply',
1997            function( event ){
1998                update_babe_listing_content( 1 );
1999                babe_overlay_close();
2000        });
2001
2002        $('.babe_shortcode_babe_listing').on(
2003            'click',
2004            '.babe_pager a',
2005            function( event ){
2006                event.preventDefault();
2007                let page = parseInt(getUrlParameterFromHref('paged', $(this).attr('href'), 1 ));
2008                update_babe_listing_content( page );
2009                babe_overlay_close();
2010            }
2011        );
2012
2013        $('.babe_shortcode_babe_listing').on('change', 'input[name="sr_sort_by"]', function(ev){
2014            listing_search_results_sort_by = $(this).val();
2015            update_babe_listing_content( 1 );
2016        });
2017
2018        $('.babe_shortcode_babe_listing').on('click', '.input_select_sort', function(ev){
2019            listing_search_results_sort_by = $(this).children("input").val();
2020            update_babe_listing_content( 1 );
2021        });
2022    }
2023
2024    function update_babe_listing_filters(){
2025
2026        let dynamic_filters = parseInt($('.babe_shortcode_babe_listing').data('dynamic'));
2027
2028        if( dynamic_filters !== 1 ){
2029            return;
2030        }
2031
2032        let term_ids = {};
2033
2034        $('.babe_shortcode_babe_listing_filters_container input:checkbox:checked').each(function(ind, elm){
2035            let term_taxonomy_id = $(elm).val();
2036            term_ids[ term_taxonomy_id ] = term_taxonomy_id;
2037        });
2038
2039        let args = $('.babe_shortcode_babe_listing').data('args');
2040
2041        $('#babe_search_result_refresh').css('display', 'block');
2042
2043        $.ajax({
2044            url : babe_lst.ajax_url,
2045            type : 'POST',
2046            data : {
2047                action : 'babe_listing_update_filters',
2048                term_ids : term_ids,
2049                args : args,
2050                // check
2051                nonce : babe_lst.nonce
2052            },
2053            success : function( msg ) {
2054                $('.babe_shortcode_babe_listing_filters_container').html(msg);
2055            },
2056            error : function( msg ) {
2057            }
2058        }).always(function(){
2059            $('#babe_search_result_refresh').css('display', 'none');
2060        });
2061    }
2062
2063    function update_babe_listing_content( page ){
2064        let term_ids = {};
2065
2066        $('.babe_shortcode_babe_listing_filters_container input:checkbox:checked').each(function(ind, elm){
2067            let term_taxonomy_id = $(elm).val();
2068            term_ids[ term_taxonomy_id ] = term_taxonomy_id;
2069        });
2070
2071        let args = $('.babe_shortcode_babe_listing').data('args');
2072
2073        $('#babe_search_result_refresh').css('display', 'block');
2074
2075        $.ajax({
2076            url : babe_lst.ajax_url,
2077            type : 'POST',
2078            data : {
2079                action : 'babe_listing_filtered',
2080                term_ids : term_ids,
2081                args : args,
2082                page : page,
2083                listing_search_results_sort_by : listing_search_results_sort_by,
2084                // check
2085                nonce : babe_lst.nonce
2086            },
2087            success : function( msg ) {
2088                try {
2089                    var response = JSON.parse( msg );
2090                } catch ( e ) {
2091                    return false;
2092                }
2093
2094                $('.babe_shortcode_babe_listing .babe_shortcode_block_content')
2095                    .html(response.listing_filtered_content);
2096                $('.babe_shortcode_babe_listing .babe_search_results_filters')
2097                    .html(response.sort_by_filter);
2098            },
2099            error : function( msg ) {
2100            }
2101        }).always(function(){
2102            $('#babe_search_result_refresh').css('display', 'none');
2103        });
2104    }
2105
2106    ///////////////////////
2107    ///////My account///////////////////////
2108    
2109    $('.my_account_my_bookings_table_td').on('click', '.my_bookings_table_a_expand', function(el){
2110       el.stopPropagation();
2111       el.preventDefault();
2112       var order_id = $(this).data('order-id');
2113       $('.my_bookings_table_td_expand[data-order-id="'+order_id+'"]').toggleClass('show_td_expand');
2114       
2115    });
2116    
2117    $( "#registration_form" ).validate({
2118        rules: {
2119            new_email: {
2120                required: true,
2121                email: true,
2122                equalTo: "#new_email_confirm",
2123            }
2124        }
2125    });
2126    
2127    $( "#edit_user_profile .edit_user_profile_submit" ).on('click', function(event){
2128        
2129        event.preventDefault();
2130        event.stopPropagation();
2131        
2132        $('#edit_user_profile .form-spinner').css('display', 'block');      
2133        $.ajax({
2134		url : babe_lst.ajax_url,
2135		type : 'POST',
2136		data : {
2137			action : 'check_free_username',
2138            username : $( "#edit_user_profile #username" ).val(),
2139            // check
2140	        nonce : babe_lst.nonce
2141		},
2142		success : function( msg ) {
2143            $('#edit_user_profile .form-spinner').css('display', 'none');
2144            if (msg != ''){
2145                $( "#edit_user_profile" ).submit();
2146            } else {
2147                $('.new-username-check-msg').css('display', 'block');
2148
2149                var $root = $('html, body');
2150                $root.animate({
2151                    scrollTop: $('#new-username-check').offset().top - 150
2152                    }, 500);
2153            }
2154		  },
2155        error : function(){
2156            $('#edit_user_profile .form-spinner').css('display', 'none');
2157            $( "#edit_user_profile" ).submit();
2158        }  
2159        });
2160        
2161    });
2162    
2163    $( "#edit_user_profile #username, #registration_form #new_username" ).on('focus', function(event){
2164        $('.new-username-check-msg').css('display', 'none');
2165    });
2166    
2167    $( "#edit_user_profile #email, #registration_form #new_email" ).on('focus', function(event){
2168        $('.new-email-check-msg').css('display', 'none');
2169    });
2170    
2171    $( "#registration_form #new-submit" ).on('click', function(event){
2172        
2173        event.preventDefault();
2174        event.stopPropagation();
2175        
2176        $('#registration_form .form-spinner').css('display', 'block');      
2177        $.ajax({
2178		url : babe_lst.ajax_url,
2179		type : 'POST',
2180		data : {
2181			action : 'check_free_username_email',
2182            username : $( "#registration_form #new_username" ).val(),
2183            email : $( "#registration_form #new_email" ).val(),
2184            // check
2185	        nonce : babe_lst.nonce
2186		},
2187		success : function( msg ) {
2188            $('#registration_form .form-spinner').css('display', 'none');
2189            try {
2190			var response = JSON.parse( msg );
2191		    } catch ( e ) {
2192			  return false;
2193		    }
2194            if (response.username == ''){
2195                $('.new-username-check-msg').css('display', 'block');             
2196            }
2197            if (response.email == ''){
2198                $('.new-email-check-msg').css('display', 'block');             
2199            }
2200            if (response.username != '' && response.email != ''){
2201                $( "#registration_form" ).submit();
2202            }
2203		  },
2204        error : function(){
2205            $('#registration_form .form-spinner').css('display', 'none');
2206            $( "#registration_form" ).submit();
2207        }  
2208        });
2209        
2210    });
2211    
2212    if ($('#user_registered_modal').length > 0){
2213        $('#user_registered_modal').modal('show');
2214    }
2215    
2216    ///////////////////////////////
2217
2218});
2219
2220    ////////////update_current_meeting_point/////////////
2221
2222    function update_current_meeting_point(point_id){
2223        $('#booking_form input:radio[name=booking_meeting_point]:checked').prop('checked', false);
2224        $('#booking_form input#booking_meeting_point_'+point_id).prop('checked', true);
2225
2226        $('#block_meeting_points_default .meeting_point_default.meeting_point_default_selected').removeClass('meeting_point_default_selected');
2227        $('#block_meeting_points_default .meeting_point_default[data-point-id='+point_id+']').addClass('meeting_point_default_selected');
2228
2229        $('#meeting_points_result .meeting_point.meeting_point_selected').removeClass('meeting_point_selected');
2230        $('#meeting_points_result .meeting_point[data-point-id='+point_id+']').addClass('meeting_point_selected');
2231    }
2232
2233///////////////
2234
2235    function update_term_values_in_search_form(elm){
2236        let term_taxonomy_id = $(elm).val();
2237        if($(elm).is(':checked')){
2238            // append
2239            $('form#search_form').append('<input type="hidden" name="terms['+term_taxonomy_id+']" value="'+term_taxonomy_id+'">');
2240        } else {
2241            // unchecked
2242            let fieldName = $(elm).attr('name').replace('filter_', '').replace(/\[.+?]/g, '');
2243            $('#search_form input[name="terms['+term_taxonomy_id+']"]').remove();
2244            $('#search_form .add_input_field[data-tax] .input_select_input_value[name="add_ids_'+fieldName+'"]').val(0);
2245        }
2246    }
2247
2248///////////////
2249
2250    function set_search_min_max_prices( min, max ) {
2251        if ($('form#search_form').length > 0) {
2252            if ($('form#search_form input[name="min_price"]').length > 0) {
2253                $('form#search_form input[name="min_price"]').val(min);
2254            } else {
2255                $('form#search_form').append('<input type="hidden" name="min_price" value="' + min + '">');
2256            }
2257            if ($('form#search_form input[name="max_price"]').length > 0) {
2258                $('form#search_form input[name="max_price"]').val(max);
2259            } else {
2260                $('form#search_form').append('<input type="hidden" name="max_price" value="' + max + '">');
2261            }
2262        }
2263    }
2264
2265
2266///////////////
2267
2268function babe_initMap(){
2269
2270    if ($('#block_address_map').length > 0 && babe_lst.google_map_active == 1){
2271       init_address_map('#google_map_address');
2272    }
2273    
2274    if ($('#block_meeting_points').length > 0 && babe_lst.google_map_active == 1){
2275       //$( document.body ).trigger( 'babe_google_map_meeting_points_to_init' );
2276       init_meeting_map('#google_map_meeting_points', '#block_meeting_points .address-autocomplete', '#block_meeting_points .find_points');
2277    }
2278    
2279    if ($('#block_address_map_with_direction').length > 0 && babe_lst.google_map_active == 1){
2280       //$( document.body ).trigger('babe_google_map_with_direction_to_init');
2281       init_address_map_with_direction('#google_map_address_with_direction', '#block_address_map_with_direction .address-autocomplete', '#travel_mode_panel');
2282    }
2283    
2284}
2285
2286////////////////
2287
2288function getUrlParameter(sParam) {
2289    var sPageURL = decodeURIComponent(window.location.search.substring(1)),
2290        sURLVariables = sPageURL.split('&'),
2291        sParameterName,
2292        i;
2293
2294    for (i = 0; i < sURLVariables.length; i++) {
2295        sParameterName = sURLVariables[i].split('=');
2296
2297        if (sParameterName[0] === sParam) {
2298            return sParameterName[1] === undefined ? true : sParameterName[1];
2299        }
2300    }
2301    
2302    return '';
2303}
2304
2305    function getUrlParameterFromHref(name, href, default_value) {
2306        name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
2307        var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
2308        var results = regex.exec(href);
2309        return results === null ? default_value : decodeURIComponent(results[1].replace(/\+/g, ' '));
2310    };
2311
2312//////////////make route/////////////////////
2313    
2314    async function make_route(map, origin, destination){
2315        var selectedMode = $('#travel_mode').val() || 'DRIVING';
2316
2317        // remember the last route so it can be recomputed when the travel mode changes
2318        map.__babeRouteOrigin = origin;
2319        map.__babeRouteDestination = destination;
2320
2321        // The new Routes API has no auto-replacing renderer, so we keep a
2322        // reference to the drawn polylines on the map and clear them ourselves.
2323        if (map.__babeRoutePolylines){
2324            map.__babeRoutePolylines.forEach(function(polyline){ polyline.setMap(null); });
2325        }
2326        map.__babeRoutePolylines = [];
2327
2328        try {
2329            const { Route } = await google.maps.importLibrary("routes");
2330            const { routes } = await Route.computeRoutes({
2331              origin: origin,
2332              destination: destination,
2333              travelMode: selectedMode,
2334              fields: ['path']
2335            });
2336            if (routes && routes[0]){
2337                var polylines = routes[0].createPolylines();
2338                polylines.forEach(function(polyline){ polyline.setMap(map); });
2339                map.__babeRoutePolylines = polylines;
2340            }
2341        } catch (e) {
2342            // route could not be computed; leave the map without a drawn route
2343            // window.alert('Directions request failed due to ' + e);
2344        }
2345    }
2346
2347    // Resolve a PlacePrediction into a Place (with the fields we use) and recenter the map on it.
2348    async function babe_resolve_place(placePrediction, map, zoom){
2349        var place = placePrediction.toPlace();
2350        await place.fetchFields({ fields: ['displayName', 'formattedAddress', 'location', 'viewport'] });
2351        if (place.viewport){
2352            map.fitBounds(place.viewport);
2353        } else {
2354            map.setCenter(place.location);
2355            if (zoom){ map.setZoom(zoom); }
2356        }
2357        return place;
2358    }
2359
2360    // Recompute the drawn route whenever the travel-mode select inside `panelSelector` changes.
2361    function babe_bind_travel_mode_recompute(map, panelSelector){
2362        $(panelSelector).find('select').off('change.babeRoute').on('change.babeRoute', function(){
2363            if (map.__babeRouteOrigin && map.__babeRouteDestination){
2364                make_route(map, map.__babeRouteOrigin, map.__babeRouteDestination);
2365            }
2366        });
2367    }
2368
2369    // Hide the legacy autocomplete <input> and return a PlaceAutocompleteElement that
2370    // reuses its (translated) placeholder. The caller decides where to place the element.
2371    async function babe_make_place_autocomplete(autocomplete_selector){
2372        const { PlaceAutocompleteElement } = await google.maps.importLibrary("places");
2373        $(autocomplete_selector).hide();
2374        var placeAutocomplete = new PlaceAutocompleteElement();
2375        placeAutocomplete.placeholder = $(autocomplete_selector).attr('placeholder') || '';
2376        return placeAutocomplete;
2377    }
2378
2379/////////////init_address_map////////////////
2380    
2381    async function init_address_map(map_div){
2382        
2383        var dom_obj = $(map_div)[0];
2384        var post_id = $(map_div).data('obj-id');
2385        var var_lat = parseFloat($(map_div).data('lat'));
2386        var var_lng = parseFloat($(map_div).data('lng'));
2387        var address = $(map_div).data('address');
2388
2389        const { Map } = await google.maps.importLibrary("maps");
2390        const { AdvancedMarkerElement, PinElement } = await google.maps.importLibrary("marker");
2391        
2392        var map = new Map(dom_obj, {
2393          center: {lat: var_lat, lng: var_lng},
2394        //  mapTypeControl: false,
2395        //  panControl: false,
2396        //  streetViewControl: false,
2397          zoom: parseInt(babe_lst.start_zoom),
2398            mapId: 'DEMO_MAP_ID',
2399        });
2400        
2401        var infowindow = new google.maps.InfoWindow();
2402
2403        const pin = new PinElement({
2404            glyphSrc: babe_lst.marker_icon,
2405        });
2406
2407        var marker = new AdvancedMarkerElement({
2408            map: map,
2409            position: {lat: var_lat, lng: var_lng},
2410            content: pin,
2411        });
2412
2413          infowindow.setContent('<div>' + address + '</div>');
2414          infowindow.open(map, marker);
2415    }
2416    
2417//////////init_address_map_with_direction////////////////
2418    
2419    async function init_address_map_with_direction(map_div, autocomplete_selector, travel_mode_panel_selector){
2420        
2421        var dom_obj = $(map_div)[0];
2422        var post_id = $(map_div).data('obj-id');
2423        var var_lat = parseFloat($(map_div).data('lat'));
2424        var var_lng = parseFloat($(map_div).data('lng'));
2425        var address = $(map_div).data('address');
2426        
2427        if (post_id != ''){
2428
2429            const { Map } = await google.maps.importLibrary("maps");
2430            const { AdvancedMarkerElement, PinElement } = await google.maps.importLibrary("marker");
2431
2432        var map = new Map(dom_obj, {
2433          center: {lat: var_lat, lng: var_lng},
2434          mapTypeControl: false,
2435          panControl: false,
2436          streetViewControl: false,
2437          zoom: parseInt(babe_lst.start_zoom),
2438            mapId: 'DEMO_MAP_ID_2',
2439        });
2440
2441        // legacy <input> replaced by the new PlaceAutocompleteElement web component
2442        var placeAutocomplete = await babe_make_place_autocomplete(autocomplete_selector);
2443        placeAutocomplete.style.width = '250px';
2444
2445        map.controls[google.maps.ControlPosition.TOP_LEFT].push(placeAutocomplete);
2446        map.controls[google.maps.ControlPosition.TOP_LEFT].push($(travel_mode_panel_selector)[0]);
2447
2448        var infowindow_from = new google.maps.InfoWindow();
2449        var infowindow_to = new google.maps.InfoWindow();
2450
2451            // each AdvancedMarkerElement needs its own PinElement: a DOM node can
2452            // only live in one marker, so a shared pin would leave one marker iconless
2453            const pin_from = new PinElement({
2454                glyphSrc: babe_lst.marker_icon,
2455            });
2456            const pin_to = new PinElement({
2457                glyphSrc: babe_lst.marker_icon,
2458            });
2459
2460            var marker_from = new AdvancedMarkerElement({
2461                map: map,
2462                content: pin_from,
2463            });
2464            var marker_to = new AdvancedMarkerElement({
2465                map: map,
2466                content: pin_to,
2467            });
2468        
2469        marker_from.position = {lat: var_lat, lng: var_lng};
2470        
2471        infowindow_from.setContent('<div>' + address + '</div>');
2472        infowindow_from.open(map, marker_from);
2473        
2474        google.maps.event.addListener(marker_from, 'click', function(){
2475           infowindow_from.open(map, marker_from);
2476        });
2477        
2478        google.maps.event.addListener(marker_to, 'click', function(){
2479           infowindow_to.open(map, marker_to);
2480        });
2481        
2482        var selected_lat, selected_lng;
2483
2484        placeAutocomplete.addEventListener('gmp-select', async function({ placePrediction }) {
2485          infowindow_to.close();
2486            marker_to.visible = false;
2487
2488          var place = await babe_resolve_place(placePrediction, map);
2489
2490          selected_lat = place.location.lat();
2491          selected_lng = place.location.lng();
2492
2493          marker_to.position = place.location;
2494            marker_to.visible = true;
2495
2496          infowindow_to.setContent('<div><strong>' + (place.displayName || '') + '</strong><br>' + (place.formattedAddress || '') + '</div>');
2497          infowindow_to.open(map, marker_to);
2498
2499          var destination = {lat: var_lat, lng: var_lng};
2500          var origin = {lat: selected_lat, lng: selected_lng};
2501          make_route(map, origin, destination);
2502
2503        });
2504
2505        // recompute the current route when the travel mode changes
2506        babe_bind_travel_mode_recompute(map, travel_mode_panel_selector);
2507
2508        }
2509
2510    }
2511
2512/////////////init_meeting_map////////////////
2513    
2514    async function init_meeting_map(map_div, autocomplete_selector, button_go){
2515        
2516        var dom_obj = $(map_div)[0];
2517        var post_id = $(map_div).data('obj-id');
2518        var var_lat = parseFloat($(map_div).data('lat'));
2519        var var_lng = parseFloat($(map_div).data('lng'));
2520        
2521        if (var_lat == '' || var_lat == undefined || var_lat == null || isNaN(var_lat)){
2522            var_lat = parseFloat(babe_lst.start_lat);
2523        }
2524        
2525        if (var_lng == '' || var_lng == undefined || var_lng == null || isNaN(var_lng)){
2526            var_lng = parseFloat(babe_lst.start_lng);
2527        }
2528
2529        const { Map } = await google.maps.importLibrary("maps");
2530        const { AdvancedMarkerElement, PinElement } = await google.maps.importLibrary("marker");
2531
2532        var map = new Map(dom_obj, {
2533          center: {lat: var_lat, lng: var_lng},
2534          mapTypeControl: false,
2535          panControl: false,
2536          streetViewControl: false,
2537          zoom: parseInt(babe_lst.start_zoom),
2538          mapId: 'DEMO_MAP_ID',
2539        });
2540
2541        // legacy <input> replaced by the new PlaceAutocompleteElement web component
2542        var placeAutocomplete = await babe_make_place_autocomplete(autocomplete_selector);
2543        $(autocomplete_selector).after(placeAutocomplete);
2544
2545        map.controls[google.maps.ControlPosition.TOP_LEFT].push($('#travel_mode_panel')[0]);
2546        //map.controls[google.maps.ControlPosition.TOP_LEFT].push($(button_go)[0]);
2547
2548        var infowindow = new google.maps.InfoWindow();
2549
2550        const pin = new PinElement({
2551            glyphSrc: babe_lst.marker_icon,
2552        });
2553
2554        var marker_args = {
2555          map: map,
2556          content: pin,
2557        };
2558        
2559        //var marker_from = new google.maps.Marker(marker_args);
2560        var marker_to = new AdvancedMarkerElement(marker_args);
2561        //marker_from.setPosition({lat: var_lat, lng: var_lng});
2562        
2563        var selected_lat, selected_lng;
2564
2565        placeAutocomplete.addEventListener('gmp-select', async function({ placePrediction }) {
2566          infowindow.close();
2567          marker_to.visible = false;
2568
2569          var place = await babe_resolve_place(placePrediction, map, 17);
2570
2571          selected_lat = place.location.lat();
2572          selected_lng = place.location.lng();
2573
2574          marker_to.position = place.location;
2575          marker_to.visible = true;
2576
2577          infowindow.setContent('<div><strong>' + (place.displayName || '') + '</strong><br>' + (place.formattedAddress || '') + '</div>');
2578          infowindow.open(map, marker_to);
2579        });
2580
2581        // Bound once here (not inside gmp-select) so the handlers don't accumulate on each
2582        // address pick; namespaced off/on keeps it idempotent if init runs again.
2583        $(button_go).off('click.babeMeeting').on('click.babeMeeting', function(el){
2584             el.stopPropagation();
2585             el.preventDefault();
2586             if (selected_lat == null || selected_lng == null){ return; } // no address chosen yet
2587             //// get_meeting_points
2588             $('#meeting_points_result').html('<span class="spin_f"><i class="fas fa-spinner fa-spin fa-2x"></i></span>');      
2589        $.ajax({
2590		url : babe_lst.ajax_url,
2591		type : 'POST',
2592		data : {
2593			action : 'get_meeting_points',
2594            post_id : post_id,
2595            lat: selected_lat,
2596            lng: selected_lng,
2597            // check
2598	        nonce : babe_lst.nonce
2599		},
2600		success : function( msg ) {
2601		  $('#meeting_points_result').html(msg);
2602            ///////////////    
2603		  }
2604        });
2605          });
2606          
2607        $('#meeting_points_result').off('click.babeMeeting', '.add_destination').on('click.babeMeeting', '.add_destination', function(el){
2608             el.stopPropagation();
2609             el.preventDefault();
2610             var llat = $(this).data('lat'),
2611                 llng = $(this).data('lng'),
2612                 address = $(this).data('address'),
2613                 point_id = $(this).data('point-id');
2614             var destination = {lat: parseFloat(llat), lng: parseFloat(llng)};
2615             var origin = {lat: selected_lat, lng: selected_lng};
2616             make_route(map, origin, destination);
2617             update_current_meeting_point(point_id);
2618        });
2619
2620        // recompute the current route when the travel mode changes
2621        babe_bind_travel_mode_recompute(map, '#travel_mode_panel');
2622
2623    }
2624
2625    /////////////////////////////////////////
2626
2627    function drp_base_opts(){
2628        return {
2629            minDate: moment().format(babe_lst.drp_date_format),
2630            autoApply: true,
2631            autoUpdateInput: false,
2632            dateFormat: babe_lst.drp_date_format,
2633            customClass: 'search-popup-date',
2634            locale: {
2635                "format": babe_lst.drp_date_format,
2636                "separator": " - ",
2637                "customRangeLabel": babe_lst.daterangepickerLocale.customRangeLabel,
2638                "weekLabel": babe_lst.daterangepickerLocale.weekLabel,
2639                "applyLabel": babe_lst.daterangepickerLocale.applyLabel,
2640                "cancelLabel": babe_lst.daterangepickerLocale.cancelLabel,
2641                "fromLabel": babe_lst.daterangepickerLocale.fromLabel,
2642                "toLabel": babe_lst.daterangepickerLocale.toLabel,
2643                "daysOfWeek": Object.keys(babe_lst.daterangepickerLocale.daysOfWeek).map(function (key) { return babe_lst.daterangepickerLocale.daysOfWeek[key]; }),
2644                "monthNames": Object.keys(babe_lst.daterangepickerLocale.monthNames).map(function (key) { return babe_lst.daterangepickerLocale.monthNames[key]; }),
2645                "firstDay": babe_lst.daterangepickerLocale.firstDay
2646            }
2647        };
2648    }
2649
2650    function init_search_form_daterangepicker( is_single ){
2651
2652        if ( !$('#date_from.search_date').length ){
2653            return;
2654        }
2655
2656        $('#date_from.search_date').daterangepicker($.extend( drp_base_opts(), {
2657            singleDatePicker: is_single,
2658            widthSingle: 500,
2659            timePickerIncrement: 60,
2660            timePickerSeconds: false,
2661            timePicker: false
2662        } ));
2663
2664        let dfVal = $('#date_from.search_date').val();
2665        let dtVal = $('#date_to.search_date').val();
2666        let dVal = dtVal ? dtVal : dfVal;
2667        if ( dVal ) {
2668            if( !is_single ){
2669                if( dfVal ){
2670                    $('#date_from.search_date').data('daterangepicker')
2671                        .setStartDate(moment(dfVal, babe_lst.drp_date_format));
2672                }
2673                if( dtVal ){
2674                    $('#date_from.search_date').data('daterangepicker')
2675                        .setEndDate(moment(dtVal, babe_lst.drp_date_format));
2676                }
2677            }
2678        } else {
2679            if ( babe_lst.date_from != null ){
2680                $('#date_from.search_date').data('daterangepicker').setStartDate(babe_lst.date_from);
2681            }
2682            if ( babe_lst.date_to != null ){
2683                $('#date_from.search_date').data('daterangepicker').setEndDate(babe_lst.date_to);
2684            }
2685        }
2686
2687        $('#date_from.search_date').on('apply.daterangepicker', function(ev, picker) {
2688            // var time_from = $('.babe-search-form').find("input[name='time_from']").val();
2689            // var time_to = $('.babe-search-form').find("input[name='time_to']").val();
2690            $(this).val(picker.startDate.format(babe_lst.drp_date_format));
2691            $('#date_to.search_date').val(picker.endDate.format(babe_lst.drp_date_format));
2692        });
2693    }
2694
2695    function remove_search_form_daterangepicker(){
2696        $('#date_from.search_date').data('daterangepicker').remove();
2697        if ( $('#date_to.search_date').data('daterangepicker') ){
2698            $('#date_to.search_date').data('daterangepicker').remove();
2699        }
2700    }
2701
2702    function activate_search_form_daterangepicker( tab_slug ){
2703        var date_to_active = $("#search_form .search_date_wrapper_date_to[data-active-"+tab_slug+"]").data("active-"+tab_slug) != undefined ? true : false;
2704        var is_single = !date_to_active;
2705        var single_calendar = !is_single && $("#search_form .search_date_wrapper_date_to").data("single-calendar-"+tab_slug) == 1;
2706        init_search_form_daterangepicker( single_calendar ? true : is_single );
2707        if ( single_calendar ) {
2708            $('#date_from.search_date').off('apply.daterangepicker')
2709                .on('apply.daterangepicker', function(ev, picker) {
2710                var selectedDate = picker.startDate.clone();
2711                $(this).val(selectedDate.format(babe_lst.drp_date_format));
2712                var dateToPicker = $('#date_to.search_date').data('daterangepicker');
2713                if ( dateToPicker ) {
2714                    dateToPicker.minDate = selectedDate.clone();
2715                    var dateToVal = $('#date_to.search_date').val();
2716                    if ( dateToVal && moment(dateToVal, babe_lst.drp_date_format).isBefore(selectedDate, 'day') ) {
2717                        $('#date_to.search_date').val('');
2718                    }
2719                }
2720            });
2721            init_date_to_single_daterangepicker();
2722        }
2723    }
2724
2725    function init_date_to_single_daterangepicker(){
2726        if ( !$('#date_to.search_date').length ){ return; }
2727
2728        $('#date_to.search_date').daterangepicker($.extend( drp_base_opts(), {
2729            linkedCalendars: false,
2730            singleDatePicker: true,
2731            widthSingle: 500,
2732        } ));
2733
2734        $('#date_to.search_date').off('show.daterangepicker').on('show.daterangepicker', function(ev, picker) {
2735            let dfVal = $('#date_from.search_date').val();
2736            let dtVal = $('#date_to.search_date').val();
2737            let dVal = dtVal ? dtVal : dfVal;
2738            if ( dVal ) {
2739                let minDateVal = dfVal ? dfVal : dtVal;
2740                let dfMoment = moment(dVal, babe_lst.drp_date_format);
2741                picker.minDate = moment(minDateVal, babe_lst.drp_date_format);
2742                picker.setStartDate(dfMoment);
2743            }
2744        });
2745        $('#date_to.search_date').off('apply.daterangepicker').on('apply.daterangepicker', function(ev, picker) {
2746            $(this).val(picker.endDate.format(babe_lst.drp_date_format));
2747        });
2748    }
2749
2750    function get_search_form_active_tab_slug(){
2751        var tab_slug = $('#search_form_tabs .search_form_tab.is-active').data('tab-slug');
2752        if (tab_slug == undefined){
2753            tab_slug = '0';
2754        }
2755        return tab_slug;
2756    }
2757    
2758////////////////////////
2759
2760})(jQuery);

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.