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.