1/** 2 * RENDER CHOSEN JS ON LOAD 3 */ 4jQuery(window).load(function() { 5 jQuery(".chosen-select").chosen(); 6}); 7 8/** 9 * GF AJAX RENDER CHOSEN 10 */ 11jQuery(document).bind('gform_post_render', function(){ 12 jQuery(".chosen-select").chosen(); 13}); 14 15/*jQuery('.appointment_status_change_span').on('click',function(){ 16 jQuery(this).hide(); 17 jQuery(this).parent().find('.user_appointment_status_set').removeClass('user_appointment_status_set_hide'); 18});*/ 19jQuery('.user_appointment_status_set').on('click', function(e){ 20 e.preventDefault(); 21 var appID = jQuery(this).attr('app-id'); 22 var title = jQuery(this).attr('title'); 23 var action = 'ga_user_set_appointment_pending'; 24 var message = ''; 25 //var message = '<textarea name="ga_cancel_message" placeholder="' + optional_text + '"></textarea><div class="hr"></div>'; 26 var btn_title = jQuery(this).attr('button-text'); 27 28 var modal_output = '<div id="ga_model" class="ga_modal_bg"><div class="ga_dialog"><div class="ga_dialog_wrapper"><div class="ga_modal_wrapper"><div class="ga_modal_container"><span title="Close" class="ga_close ga_remove cancel_user_app_pending"></span><h3 class="modal-title">'+title+'</h3><div class="hr"></div><form id="ga_user_set_appointment_pending" action="" method="post" class="clearfix"><div class="ajax-response"></div><input type="hidden" name="app-id" value="'+appID+'"><input type="hidden" name="action" value="'+action+'">'+message+'<div class="ga_modal_footer"><button type="submit" class="ga-button">'+btn_title+'</button></div></form><div class="modal_overlay"></div></div></div></div></div></div>'; 29 30 jQuery('#ga_appointment_modal').hide().html(modal_output).fadeIn(100, function() { 31 jQuery('html, body').addClass('ga_modal_open'); 32 }); 33 34}); 35 36jQuery( document ).ready(function() { 37 /** 38 * Select Service Event - AJAX 39 */ 40 jQuery('body').on('change', '.appointment_service_id', function() { 41 // Remove value to gform input 42 jQuery(".appointment_booking_date, .appointment_booking_time").val( '' ); 43 jQuery("#ga_selected_bookings").fadeOut(300, function() { jQuery(this).html('').removeAttr("style"); }); 44 45 // Add spinner to calendar 46 jQuery('.ga_monthly_schedule_wrapper').addClass('ga_spinner'); 47 48 jQuery('.appointment_provider_id').each(function() { 49 //jQuery(this).hide(); 50 jQuery(this).html('<option value="">Please wait...</option>'); 51 52 if( jQuery(this).hasClass('chosen-select') ) { 53 jQuery(this).trigger("chosen:updated"); 54 } 55 56 }); 57 58 // service id 59 var service_id = jQuery(this).val(); 60 var form_id = jQuery(this).attr('form_id'); 61 62 // wp ajax 63 var data = { 64 'action': 'ga_calendar_select_service', 65 'service_id': service_id, 66 'form_id': form_id, 67 }; 68 69 jQuery.post(ga_calendar_services_obj.ajax_url, data, function(response) { 70 if ( typeof response !== 'undefined' ) { 71 72 if( response.success == true ) { 73 74 jQuery('.appointment_provider_id').each(function() { 75 76 jQuery(this).html( response.data['providers'] ); 77 78 if( jQuery(this).hasClass('chosen-select') ) { 79 jQuery(this).trigger("chosen:updated"); 80 } 81 82 }); 83 84 85 jQuery('#gappointments_calendar').find('.ga_monthly_schedule_wrapper').html( response.data['calendar'] ); 86 87 // Remove spinner from calendar 88 jQuery('.ga_monthly_schedule_wrapper').removeClass('ga_spinner'); 89 90 gform_appointment_cost_filter(); 91 } 92 93 } 94 95 //console.log(response); 96 //ga_ajax_response(response); 97 }); 98 // wp ajax 99 }); 100 101 /** 102 * Select Provider Event - AJAX 103 */ 104 jQuery('body').on('change', '.appointment_provider_id', function() { 105 // Remove value to gform input 106 jQuery(".appointment_booking_date, .appointment_booking_time").val( '' ); 107 jQuery("#ga_selected_bookings").fadeOut(300, function() { jQuery(this).html('').removeAttr("style"); }); 108 109 // Add spinner to calendar 110 jQuery('.ga_monthly_schedule_wrapper').addClass('ga_spinner'); 111 112 // service id 113 var provider_id = jQuery(this).val(); 114 var service_id = jQuery('.appointment_service_id').val(); 115 var form_id = jQuery(this).attr('form_id'); 116 117 //alert( service_id ); 118 119 // wp ajax 120 var data = { 121 'action': 'ga_calendar_select_provider', 122 'service_id': service_id, 123 'provider_id': provider_id, 124 'form_id': form_id, 125 }; 126 127 jQuery.post(ga_calendar_providers_obj.ajax_url, data, function(response) { 128 ga_ajax_response(response); 129 130 131 // Remove spinner from calendar 132 jQuery('.ga_monthly_schedule_wrapper').removeClass('ga_spinner'); 133
134 gform_appointment_cost_filter(); 135 }); 136 }); 137 138 /** 139 * Calendar Previous Month Event - AJAX 140 */ 141 jQuery('body').on('click', '#ga_calendar_prev_month', function() { 142 // Remove value to gform input 143 jQuery(".appointment_booking_date, .appointment_booking_time").val( '' ); 144 145 // Add spinner to calendar 146 jQuery('.ga_monthly_schedule_wrapper').addClass('ga_spinner'); 147 148 var current_month = jQuery(this).attr('date-go'); 149 var service_id = jQuery(this).attr('service_id'); 150 var provider_id = jQuery(this).attr('provider_id'); 151 var form_id = jQuery('#ga_appointments_calendar').attr('form_id'); 152 153 var data = { 154 'action': 'ga_calendar_prev_month', 155 'current_month': current_month, 156 'service_id': service_id, 157 'provider_id': provider_id, 158 'form_id': form_id, 159 }; 160 161 jQuery.post(ga_calendar_prev_month_obj.ajax_url, data, function(response) { 162 ga_ajax_response(response); 163 164 // Remove spinner from calendar 165 jQuery('.ga_monthly_schedule_wrapper').removeClass('ga_spinner'); 166 }); 167 }); 168 169 /** 170 * Calendar Next Month Event - AJAX 171 */ 172 jQuery('body').on('click', '#ga_calendar_next_month', function() { 173 // Remove value to gform input 174 jQuery(".appointment_booking_date, .appointment_booking_time").val( '' ); 175 176 // Add spinner to calendar 177 jQuery('.ga_monthly_schedule_wrapper').addClass('ga_spinner'); 178 179 var current_month = jQuery(this).attr('date-go'); 180 var service_id = jQuery(this).attr('service_id'); 181 var provider_id = jQuery(this).attr('provider_id'); 182 var form_id = jQuery('#ga_appointments_calendar').attr('form_id'); 183 184 var data = { 185 'action': 'ga_calendar_next_month', 186 'current_month': current_month, 187 'service_id': service_id, 188 'provider_id': provider_id, 189 'form_id': form_id, 190 }; 191 192 jQuery.post(ga_calendar_next_month_obj.ajax_url, data, function(response) { 193 ga_ajax_response(response); 194 195 // Remove spinner from calendar 196 jQuery('.ga_monthly_schedule_wrapper').removeClass('ga_spinner'); 197 }); 198 }); 199 200 /** 201 * Time Slots Event - AJAX 202 */ 203 jQuery('body').on('click', '#service-working-days td.day_available', function(e) { 204 e.preventDefault(); 205 var dateGo = jQuery(this).attr('date-go'); 206 207 // Remove value to gform input 208 jQuery(".appointment_booking_date, .appointment_booking_time").val( '' ); 209 210 if ( jQuery(this).hasClass("selected") ) { 211 var $_this = jQuery(this); 212 jQuery("#gappointments_calendar_slots").slideUp(0, function() { 213 jQuery(this).html(''); 214 }); 215 216 // Remove selected class 217 jQuery($_this).removeClass('selected'); 218 gform_appointment_cost_filter(); 219 return; 220 } 221 222 // Removing all available siblings 223 jQuery('#service-working-days td').each(function() { 224 jQuery(this).removeClass('selected'); 225 }); 226 227 // Adding selected class 228 jQuery(this).addClass('selected'); 229 230 // Add value to gform input 231 jQuery(".appointment_booking_date").val( jQuery(this).attr('date-go') ); 232 233 // Disable time slots if date slots class found 234 if ( jQuery(this).hasClass("ga_date_slots") ) { 235 jQuery(".appointment_booking_time").val( jQuery(this).attr('date-go') ); 236 237 238 // Multiple Dates Selection 239 if( jQuery(this).attr('multi-select') == 'enabled' ) { 240 var valid = true; 241 var inputs = jQuery("#ga_selected_bookings .ga_selected_booking"); 242 var total = jQuery(this).attr('select-total'); 243 var capacity = jQuery(this).attr('capacity'); 244 var no_double = jQuery(this).attr('no_double'); 245 var slot_cost = jQuery(this).attr('service_cost'); 246 var date = jQuery(".appointment_booking_date").val(); 247 var input_date = date; 248 var input_time = jQuery(".appointment_booking_time").val(); 249 var input_value = input_date + ' ' + input_time; 250 251 var d = 0; // Doubles counter 252 jQuery(inputs).each(function() { 253 var dateField = jQuery(this).find( '.ga_selected_booking_date' ).val(); 254 var timeField = jQuery(this).find( '.ga_selected_booking_time' ).val(); 255 var dateTime = dateField + ' ' + timeField;
256 if( inputs.length >= total ) { 257 valid = false; 258 return; 259 } 260 261 // Prevent Double Selections 262 if( no_double == 'yes' ) { 263 if( dateTime == input_value ) { 264 valid = false; 265 } 266 } else { 267 // Doubles Count 268 if( dateTime == input_value ) { 269 d++; 270 } 271 272 if( d >= capacity ) { 273 valid = false; 274 } 275 276 } 277 278 }); 279 280 if(valid) { 281 var human_date = jQuery(this).attr('lang_slot'); 282 var name_date = jQuery(".appointment_booking_date").attr('name').replace("[date]", "[bookings][date][]"); 283 var name_time = jQuery(".appointment_booking_date").attr('name').replace("[date]", "[bookings][time][]"); 284 var input_html = '<div class="ga_selected_booking"><div class="ga_delete_booking"><i class="fa fa-times-circle"></i></div><input type="hidden" class="ga_hidden_input ga_selected_booking_date" name="' + name_date + '" value="' + input_date + '" slot_cost="' + slot_cost + '"><input type="hidden" class="ga_hidden_input ga_selected_booking_time" name="' + name_time + '" value="' + input_time + '" slot_cost="' + slot_cost + '">' + human_date + '</div></div>'; 285 jQuery(input_html).hide().appendTo("#ga_selected_bookings").fadeIn(700); 286 } 287 } 288 // Multiple Dates Selection 289 290 gform_appointment_cost_filter(); 291 292 return; 293 } 294 295 jQuery("#gappointments_calendar_slots").each( function() { 296 jQuery( this ).remove(); 297 }); 298 299 jQuery(this).parent('tr').after('<tr id="gappointments_calendar_slots"><td colspan="7" class="calendar_slots"><div class="calendar_time_slots"><div class="app_hours_loading"><div class="ajax-spinner-bars"> <div class="bar-1"></div><div class="bar-2"></div><div class="bar-3"></div><div class="bar-4"></div><div class="bar-5"></div><div class="bar-6"></div><div class="bar-7"></div><div class="bar-8"></div><div class="bar-9"></div><div class="bar-10"></div><div class="bar-11"></div><div class="bar-12"></div><div class="bar-13"></div><div class="bar-14"></div><div class="bar-15"></div><div class="bar-16"></div></div></div></div></td></tr>'); 300 301 setTimeout( function() { 302 var timeSlots = jQuery( '#' + dateGo ).html(); 303 jQuery('#gappointments_calendar_slots .calendar_time_slots').html(timeSlots); 304 }, 500 ); 305 306 }); 307 308 /** 309 * Ajax Response 310 */ 311 function ga_ajax_response(response) { 312 jQuery('#gappointments_calendar').find('.ga_monthly_schedule_wrapper').html(response); 313 } 314 315 /** 316 * Close Modal Button 317 */ 318 jQuery('body').on('click', '#ga_model .ga_modal_wrapper .ga_remove, form#ga_cancel_appointment .ga_btn_close, form#ga_reschedule_appointment .ga_btn_close', function(e) { 319 e.preventDefault(); 320 321 jQuery(this).parents('#ga_model').fadeIn(100, function() { 322 jQuery(this).remove(); 323 jQuery('html, body').removeClass('ga_modal_open'); 324 }); 325 326 }); 327 /* 328 * Close modal for status change 329 * */ 330 jQuery('body').on('click', '#ga_user_set_appointment_pending .ga_btn_close', function(e){ 331 e.preventDefault(); 332 jQuery(this).parents('#ga_model').fadeIn(100, function() { 333 jQuery(this).remove(); 334 jQuery('html, body').removeClass('ga_modal_open'); 335 }); 336 var select =jQuery('#sel-'+jQuery(this).attr('app-id')); 337 select.addClass('user_appointment_status_set_hide'); 338 select.unbind(); 339 var span = jQuery(select).parent().find('span'); 340 span.removeClass('appointment_status_change_span'); 341 span.html(jQuery(this).attr('pending-string')); 342 span.removeClass('appointment-status-green'); 343 span.addClass('appointment-status-yellow'); 344 span.show(); 345 jQuery('#sel-'+jQuery('.ga_btn_close').attr('app-id')).remove(); 346 select.remove(); 347 }); 348 349 /** 350 * Cancel/Confirm Appointment Modal 351 */ 352 jQuery('body').on('click', '.appointment-status .appointment-action', function(e) { 353 e.preventDefault(); 354 var appID = jQuery(this).attr('app-id'); 355 var title = jQuery(this).attr('title'); 356 var optional_text = jQuery(this).attr('optional_text'); 357 var action = 'ga_cancel_appointment'; 358 var message = '<textarea name="ga_cancel_message" placeholder="' + optional_text + '"></textarea><div class="hr"></div>'; 359 var btn_title = jQuery(this).text(); 360 361 if( jQuery(this).hasClass('provider-cancel') ) { 362 var action = 'ga_provider_cancel_appointment'; 363 } 364 365 if( jQuery(this).hasClass('provider-confirm') ) { 366 var title = jQuery(this).attr('title'); 367 var action = 'ga_provider_confirm'; 368 var message = ''; 369 var btn_title = jQuery(this).text(); 370 } 371 372 var modal_output = '<div id="ga_model" class="ga_modal_bg"><div class="ga_dialog"><div class="ga_dialog_wrapper"><div class="ga_modal_wrapper"><div class="ga_modal_container"><span title="Close" class="ga_close ga_remove"></span>
372<h3 class="modal-title">'+title+'</h3><div class="hr"></div><form id="ga_cancel_appointment" action="" method="post" class="clearfix"><div class="ajax-response"></div><input type="hidden" name="app-id" value="'+appID+'"><input type="hidden" name="action" value="'+action+'">'+message+'<div class="ga_modal_footer"><button type="submit" class="ga-button">'+btn_title+'</button></div></form><div class="modal_overlay"></div></div></div></div></div></div>'; 373 374 jQuery('#ga_appointment_modal').hide().html(modal_output).fadeIn(100, function() { 375 jQuery('html, body').addClass('ga_modal_open'); 376 }); 377 378 window.appointmentID = jQuery(this).parent('.appointment-status'); 379 380 }); 381 382 /** 383 * Reschedule Appointment Modal 384 */ 385 jQuery('body').on('click', '.appointment-status .reschedule-appointment-action', function(e) { 386 e.preventDefault(); 387 var appID = jQuery(this).attr('app-id'); 388 var title = jQuery(this).attr('title'); 389 var action = 'ga_reschedule_appointment'; 390 var message = ''; 391 var btn_title = jQuery(this).text(); 392 393 // wp ajax 394 var data = { 395 'action': 'ga_get_calendar', 396 'app_id': appID, 397 }; 398 399 jQuery.post(ga_get_calendar_obj.ajax_url, data, function(response) { 400 if ( typeof response !== 'undefined' ) { 401 message = response; 402 } 403 }).fail(function() { 404 message = '<div>Error</div>'; 405 action = false; 406 }).done(function(){ 407 408 var modal_output = '<div id="ga_model" class="ga_modal_bg"><div class="ga_dialog"><div class="ga_dialog_wrapper"><div class="ga_modal_wrapper"><div class="ga_modal_container"><span title="Close" class="ga_close ga_remove"></span><h3 class="modal-title">'+title+'</h3><div class="hr"></div><form id="ga_reschedule_appointment" action="" method="post" class="clearfix"><div class="ajax-response"></div><input type="hidden" name="app-id" value="'+appID+'"><input type="hidden" name="action" value="'+action+'">'+message+'<div class="ga_modal_footer"><button type="submit" class="ga-button">'+btn_title+'</button></div></form><div class="modal_overlay"></div></div></div></div></div></div>'; 409 jQuery('#ga_appointment_modal').hide().html(modal_output).fadeIn(100, function() { 410 jQuery('html, body').addClass('ga_modal_open'); 411 }); 412 }); 413 414 415 window.appointmentID = jQuery(this).parent('.appointment-status'); 416 }); 417 418 /** 419 * Cancel/Confirm Appointment - Ajax 420 */ 421 jQuery(document).on("submit", "form#ga_cancel_appointment", function(e) { 422 e.preventDefault(); 423 var modal_wrapper = jQuery(this); 424 var action = modal_wrapper.find('input[name=action]').val(); 425 426 modal_wrapper.parent('.ga_modal_container').find('.modal_overlay').show(); 427 428 var data = jQuery("form#ga_cancel_appointment").serialize(); 429 430 jQuery.post(ga_update_appointment_status_obj.ajax_url, data, function(response) { 431 if ( typeof response !== 'undefined' ) { 432 433 modal_wrapper.parent('.ga_modal_container').find('.modal_overlay').hide(); 434 435 if( response.success == false ) { 436 jQuery("form#ga_cancel_appointment").html(response.data['message']); 437 } 438 439 if( response.success == true ) { 440 jQuery("form#ga_cancel_appointment").html(response.data['message']); 441 jQuery( window.appointmentID ).html(response.data['app_status']); 442 } 443 444 } 445 }).fail(function() { 446 jQuery("form#ga_cancel_appointment .ajax-response").html('<div class="ga_alert ga_alert_danger">Error sending form!</div>'); 447 modal_wrapper.parent('.ga_modal_container').find('.modal_overlay').hide(); 448 }); 449 }); 450 451 /** 452 * User set appointment status to pending - Ajax 453 */ 454 jQuery(document).on("submit", "form#ga_user_set_appointment_pending", function(e) { 455 e.preventDefault(); 456 var modal_wrapper = jQuery(this); 457 var action = modal_wrapper.find('input[name=action]').val(); 458 459 modal_wrapper.parent('.ga_modal_container').find('.modal_overlay').show(); 460 461 var data = jQuery("form#ga_user_set_appointment_pending").serialize(); 462 463 jQuery.post(ga_user_set_appointment_pending_obj.ajax_url, data, function(response) { 464 if ( typeof response !== 'undefined' ) { 465 466 modal_wrapper.parent('.ga_modal_container').find('.modal_overlay').hide(); 467 468 if( response.success == false ) { 469 jQuery("form#ga_user_set_appointment_pending").html(response.data['message']); 470 } 471 472 if( response.success == true ) { 473 console.log('nustatytas'); 474 jQuery("form#ga_user_set_appointment_pending").html(response.data['message']); 475 jQuery( window.appointmentID ).html(response.data['app_status']); 476 477 jQuery('.cancel_user_app_pending').unbind(); 478 jQuery('.cancel_user_app_pending').on('click', function(){ 479 var select =jQuery('#sel-'+jQuery('.ga_btn_close').attr('app-id')); 480 select.addClass('user_appointment_status_set_hide'); 481 select.unbind(); 482 483 var span = jQuery(select).parent().find('span'); 484 span.removeClass('appointment_status_change_span'); 485 span.html(jQuery('.ga_btn_close').attr('pending-string')); 486 span.removeClass('appointment-status-green'); 487 span.addClass('appointment-status-yellow'); 488 span.show(); 489 jQuery('#sel-'+jQuery('.ga_btn_close').attr('app-id')).remove(); 490 }) 491 } 492 493 } 494 }).fail(function() { 495 jQuery("form#ga_user_set_appointment_pending .ajax-response").html('<div class="ga_alert ga_alert_danger">Error sending form!</div>'); 496 modal_wrapper.parent('.ga_modal_container').find('.modal_overlay').hide(); 497 }); 498 }); 499 500 /** 501 * Reschedule Appointment - Ajax 502 */ 503 jQuery(document).on("submit", "form#ga_reschedule_appointment", function(e) { 504 e.preventDefault(); 505 var modal_wrapper = jQuery(this); 506 var action = modal_wrapper.find('input[name=action]').val(); 507 508 modal_wrapper.parent('.ga_modal_container').find('.modal_overlay').show(); 509 510 var data = jQuery("form#ga_reschedule_appointment").serialize(); 511 512 jQuery.post(ga_update_appointment_status_obj.ajax_url, data, function(response) { 513 if ( typeof response !== 'undefined' ) { 514 515 modal_wrapper.parent('.ga_modal_container').find('.modal_overlay').hide(); 516 517 if( response.success == false ) { 518 jQuery("form#ga_reschedule_appointment").html(response.data['message']); 519 } 520 521 if( response.success == true ) { 522 jQuery("form#ga_reschedule_appointment").html(response.data['message']); 523 jQuery( window.appointmentID ).html(response.data['app_status']); 524 } 525 526 } 527 }).fail(function() { 528 jQuery("form#ga_reschedule_appointment .ajax-response").html('<div class="ga_alert ga_alert_danger">Error sending form!</div>'); 529 modal_wrapper.parent('.ga_modal_container').find('.modal_overlay').hide(); 530 }); 531 }); 532 533 534 535 /** 536 * Init Service Cost 537 */ 538 jQuery('body').on('click', '#gappointments_calendar_slots label.time_slot', function() { 539 var time_slot = jQuery(this).attr('time_slot'); 540 jQuery(".appointment_booking_time").val( time_slot ); 541 542 // Removing all available siblings 543 jQuery('#gappointments_calendar_slots label.time_slot').each(function() { 544 jQuery(this).removeClass('time_selected'); 545 }); 546 547 // Adding selected class 548 jQuery(this).addClass('time_selected'); 549 550 // Multiple Selection 551 if( jQuery(this).attr('multi-select') == 'enabled' ) {
552 var valid = true; 553 var inputs = jQuery("#ga_selected_bookings .ga_selected_booking"); 554 var max = jQuery(this).attr('select-max'); 555 var total = jQuery(this).attr('select-total'); 556 var time_format = jQuery(this).attr('time_format'); 557 var remove_am_pm = jQuery(this).attr('remove_am_pm'); 558 var capacity = jQuery(this).attr('capacity'); 559 var no_double = jQuery(this).attr('no_double'); 560 var slot_cost = jQuery(this).attr('slot_cost'); 561 var date = jQuery(".appointment_booking_date").val(); 562 var input_date = date; 563 var input_time = jQuery(".appointment_booking_time").val(); 564 var input_value = input_date + ' ' + input_time; 565 566 var x = 0; 567 var d = 0; // Doubles counter 568 jQuery(inputs).each(function() { 569 var dateField = jQuery(this).find( '.ga_selected_booking_date' ).val(); 570 var timeField = jQuery(this).find( '.ga_selected_booking_time' ).val(); 571 var dateTime = dateField + ' ' + timeField; 572 573 //console.log( dateTime ); 574 //console.log( input_value ); 575 576 // Total max selection is reached 577 if( inputs.length >= total ) { 578 valid = false; 579 return; 580 } 581 582 // Same date is found 583 if( jQuery(this).val().match(date) ) { 584 x++; 585 } 586 587 // Prevent Double Selections 588 if( no_double == 'yes' ) { 589 if( dateTime == input_value || x >= max ) { 590 valid = false; 591 } 592 } else { 593 // Doubles Count 594 if( dateTime == input_value ) { 595 d++; 596 } 597 598 if( d >= capacity ) { 599 valid = false; 600 } 601 } 602 }); 603 604 //console.log( valid ); 605 606 if(valid) { 607 var human_date = jQuery(this).attr('lang_slot'); 608 var name_date = jQuery(".appointment_booking_date").attr('name').replace("[date]", "[bookings][date][]"); 609 var name_time = jQuery(".appointment_booking_date").attr('name').replace("[date]", "[bookings][time][]"); 610 var input_html = '<div class="ga_selected_booking"><div class="ga_delete_booking"><i class="fa fa-times-circle"></i></div><input type="hidden" class="ga_hidden_input ga_selected_booking_date" name="' + name_date + '" value="' + input_date + '" slot_cost="' + slot_cost + '"><input type="hidden" class="ga_hidden_input ga_selected_booking_time" name="' + name_time + '" value="' + input_time + '" slot_cost="' + slot_cost + '">' + human_date + '</div></div>'; 611 jQuery(input_html).hide().appendTo("#ga_selected_bookings").fadeIn(700); 612 } 613 } 614 // Multiple Selection 615 616 gform_appointment_cost_filter(); 617 }); 618 619 620 621 /** 622 * Remove a Selected Booking 623 */ 624 jQuery('body').on('click', '#ga_selected_bookings .ga_selected_booking .ga_delete_booking', function() { 625 jQuery(this).parent('.ga_selected_booking').fadeOut(150, function() { 626 jQuery(this).remove(); 627 gform_appointment_cost_filter(); 628 629 if( !jQuery( '#ga_selected_bookings .ga_selected_booking .ga_delete_booking' ).lenght ) 630 jQuery( '.appointment_booking_time' ).val( '' ); 631 }); 632 }); 633 634 /** 635 * Calculate appointment cost 636 */ 637 function gform_appointment_cost_filter() { 638 var $costFields = jQuery( '.ginput_appointment_cost_input' ); 639 var total = 0; 640 var service_cost = jQuery("#service-working-days td.day_available").attr('service_cost'); 641 642 // Date Slot Selected 643 var dateSelected = jQuery("#service-working-days td.ga_date_slots.selected"); 644 645 // Time Slot Selected 646 var slotSelected = jQuery('#gappointments_calendar_slots label.time_selected'); 647 648 // Mulitple Bookings 649 var bookings = jQuery("#ga_selected_bookings .ga_selected_booking input.ga_selected_booking_date"); 650 651 if( bookings && bookings.length ) { 652 jQuery("#ga_selected_bookings .ga_selected_booking input.ga_selected_booking_date").each(function() { 653 total += Math.max( 0, parseFloat( jQuery(this).attr('slot_cost') ) ); 654 }); 655 } else if( dateSelected && dateSelected.length && jQuery.isNumeric(service_cost) ) { 656 total = service_cost; 657 } else if( slotSelected && slotSelected.length ) { 658 total = slotSelected.attr('slot_cost'); 659 } 660 661 // Add appointment total to cost inputs 662 $costFields.each( function() { 663 jQuery( this ).val( total ).change(); 664 }); 665
666 // Trigger gf total 667 if( typeof gformInitPriceFields == 'function' ) { 668 gformInitPriceFields(); // will trigger "gform_product_total" filter 669 } 670 } 671 672}); // end doc ready 673 674 675 676 677/** 678 * Trigger appointment cost & add cost to total 679 */ 680( function( $ ) { 681 /** 682 * Init Service Cost On AJAX Form Trigger 683 */ 684 jQuery(document).bind('gform_post_render', function() { 685 var $costFields = $( '.ginput_appointment_cost_input' ).change(); 686 $costFields.each( function() { 687 $( this ).change(); 688 }); 689 }); 690 691} )( 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.