{"version":3,"sources":["../../lib/assets/javascripts/os-time.js","../../lib/assets/javascripts/os-shared.js","../../lib/assets/javascripts/os-notifications.js","../../lib/assets/javascripts/os-actions.js","../../lib/assets/javascripts/main_front.js"],"names":["latepoint_is_timeframe_in_periods","timeframe_start","timeframe_end","periods_arr","is_inside","arguments","length","undefined","i","period_start","period_end","buffer_before","buffer_after","period_info","split","parseFloat","latepoint_is_period_inside_another","latepoint_is_period_overlapping","period_one_start","period_one_end","period_two_start","period_two_end","latepoint_minutes_to_hours_preferably","time","army_clock","latepoint_is_army_clock","hours","Math","floor","minutes","latepoint_minutes_to_hours","latepoint_am_or_pm","latepoint_hours_and_minutes_to_minutes","hours_and_minutes","ampm","hours_and_minutes_arr","parseInt","latepoint_get_time_system","latepoint_helper","time_system","latepoint_minutes_to_hours_and_minutes","format","sprintf","latepoint_mask_timefield","$elem","jQuery","inputmask","mask","placeholder","latepoint_mask_phone","latepoint_is_phone_masking_enabled","latepoint_get_phone_format","phone_format","enable_phone_masking","latepoint_show_booking_end_time","show_booking_end_time","latepoint_init_form_masks","latepoint_get_paypal_payment_amount","$booking_form_element","payment_portion","payment_amount","find","val","data","latepoint_add_notification","message","message_type","wrapper","append","remove","latepoint_generate_form_message_html","messages","status","message_html","Array","isArray","forEach","latepoint_clear_form_messages","$form","latepoint_show_data_in_lightbox","extra_classes","lightbox_css_classes","addClass","latepoint_init_payment_method_actions","payment_method","_jQuery","callbacks_list","is_last_step","trigger","removeClass","when","apply","_toConsumableArray","map","callback","action","done","show","latepoint_show_next_btn","clear_step_services","latepoint_update_summary_field","clear_sub_step_attendies","clear_sub_step_duration","clear_step_service_extras","clear_step_locations","clear_step_agents","clear_step_datepicker","latepoint_hide_next_btn","latepoint_show_prev_btn","latepoint_hide_prev_btn","latepoint_show_capacity_selector","$item","closest","max_capacity","min_capacity","text","current_value","max","Number","latepoint_show_durations","latepoint_apply_coupon","$coupon_input","form_params","serialize","route_action","route_name","params","layout","return_format","ajax","type","dataType","url","ajaxurl","success","latepoint_show_message_inside_element","latepoint_reload_step","latepoint_remove_coupon","fadeOut","step_name","index","className","match","join","nextAll","submit","latepoint_get_payment_sub_step","current_sub_step","prev","offset","payment_sub_steps","push","selected_payment_method","indexOf","sub_step","latepoint_reset_password_from_booking_init","hide","on","html","field_name","value","$summary_holder","String","trim","hasClass","slideDown","fadeIn","slideUp","latepoint_password_changed_show_login","response","latepoint_hide_message_inside_element","prepend","latepoint_add_action","priority","sort","a","b","document","ready","$","e","$this","this","confirm","setTimeout","location","reload","window","replace","before","after","func_name","includes","func_arr","alert","preventDefault","form_data","record_id","documentElement","body","animate","scrollTop","top","form_values_to_update","each","name","latepoint_init_step","latepoint_init_step_selectable_items","latepoint_init_step_category_items","latepoint_init_step_datepicker","latepoint_init_step_contact","latepoint_init_step_agents","latepoint_init_step_services","latepoint_init_step_payment","latepoint_init_step_verify","latepoint_init_step_confirmation","day_timeslots","$day","service_duration","interval","work_start_minutes","work_end_minutes","total_work_minutes","bookable_minutes","available_capacities_of_bookable_minute","attr","toString","bookable_minutes_with_capacity","work_minutes","$timeslots","prev_minutes","current_minutes","timeslot_class","timeslot_available_capacity","time_pick_style","off_label","off_width","tick_html","capacity_label","capacity_label_html","capacity_internal_label_html","timeslot_label","spaces_message","end_minutes","end_minutes_ampm","many_spaces_message","single_space_message","msg_not_available","$scrollable_wrapper","stop","scrollHeight","os_init_timeslots","selected_timeslot_time","timeshift_minutes","start_date","Date","setDate","getDate","toISOString","os_init_monthly_calendar_navigation","next_month_route_name","next","latepoint_calendar_set_month_label","$btn","$calendar_element","last","calendar_year","calendar_month","latepoint_calendar_show_or_hide_prev_next_buttons","latepoint_format_minutes_to_time","formatted_time","latepoint_format_price","toFixed","which","focus","$payment_step","portion","$category_wrapper","$main_parent","parent","off","latepoint_selectable_item_clicked","latepoint_selectable_item_quantity_keyup","latepoint_calculate_total_price","$booking_form","calculate_price_route","price","is_free","latepoint_update_quantity_for_selectable_items","ids","get","event","new_value","max_quantity","stopPropagation","stopImmediatePropagation","target","summary_value","latepoint_trigger_next_btn","currency_symbol_before","currency_symbol_after","min","new_value_formatted","add_value","latepoint_init_step_locations","agent_id","account_nonse","password","password_confirmation","param","latepoint_init_customer_dashboard","$select_box","timezone_name","latepoint_init_customer_dashboard_login","$login_form_wrapper","FB","login","authResponse","token","accessToken","latepoint_step_content_change_start","latepoint_step_content_change_end","scope","google","googleUser","$login_form_wrappers","accounts","id","initialize","client_id","social_login_google_client_id","latepoint_process_google_login","renderButton","theme","size","get_customer_name","$wrapper","customer_name","first_name","last_name","latepoint_init_facebook_login","latepoint_init_google_login","latepoint_validate_fields","email","new_content","replaceWith","credential","social_login_google_route","$booking_form_elements","latepoint_change_step_desc","$step_progress","prevAll","side_panel_desc","top_header_desc","latepoint_progress_prev","latepoint_progress_next","latepoint_next_step_description","latepoint_prev_step_description","$fields","is_valid","latepoint_submit_booking_form","is_pre_last_step","css","show_next_btn","show_prev_btn","send_to_step","latepoint_init_booking_form","_jQuery2","current_step","is_final_submit","direction","fail","error","URLSearchParams","search","has","delete","history","replaceState","hash","is_timezone_selected","tzid","Intl","DateTimeFormat","resolvedOptions","timeZone","change","_jQuery3","$next_btn","$current_step","new_sub_step","$services_step","parents","$current_active_step","$back_btn","$new_current_step","new_current_step_name","start_from_booking_intent_key","start_from_booking_intent_route","booking_intent_key","lightbox_class","cancel_booking_prompt","$booking_box","route","$tabs_wrapper","booking_button_route","restrictions","show_service_categories","show_locations","show_services","show_agents","selected_location","selected_agent","selected_service","selected_duration","selected_total_attendies","selected_service_category","selected_start_date","selected_start_time","calendar_start_date","isEmptyObject","step"],"mappings":"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","sourcesContent":["function latepoint_is_timeframe_in_periods(timeframe_start, timeframe_end, periods_arr) {\n var is_inside = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n for (var i = 0; i < periods_arr.length; i++) {\n\n var period_start = 0;\n var period_end = 0;\n var buffer_before = 0;\n var buffer_after = 0;\n\n var period_info = periods_arr[i].split(':');\n if (period_info.length == 2) {\n period_start = period_info[0];\n period_end = period_info[1];\n } else {\n buffer_before = period_info[2];\n buffer_after = period_info[3];\n period_start = parseFloat(period_info[0]) - parseFloat(buffer_before);\n period_end = parseFloat(period_info[1]) + parseFloat(buffer_after);\n }\n if (is_inside) {\n if (latepoint_is_period_inside_another(timeframe_start, timeframe_end, period_start, period_end)) {\n return true;\n }\n } else {\n if (latepoint_is_period_overlapping(timeframe_start, timeframe_end, period_start, period_end)) {\n return true;\n }\n }\n };\n return false;\n}\n\nfunction latepoint_is_period_overlapping(period_one_start, period_one_end, period_two_start, period_two_end) {\n // https://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap/\n return period_one_start < period_two_end && period_two_start < period_one_end;\n}\nfunction latepoint_is_period_inside_another(period_one_start, period_one_end, period_two_start, period_two_end) {\n return period_one_start >= period_two_start && period_one_end <= period_two_end;\n}\n\n\n// Converts time in minutes to hours if possible, if minutes also exists - shows minutes too\nfunction latepoint_minutes_to_hours_preferably(time) {\n var army_clock = latepoint_is_army_clock();\n\n var hours = Math.floor(time / 60);\n if (!army_clock && hours > 12) hours = hours - 12;\n\n var minutes = time % 60;\n if(minutes > 0) hours = hours + ':' + minutes;\n return hours;\n}\n\n\nfunction latepoint_minutes_to_hours(time) {\n var army_clock = latepoint_is_army_clock();\n\n var hours = Math.floor(time / 60);\n if (!army_clock && hours > 12) hours = hours - 12;\n return hours;\n}\n\n\nfunction latepoint_am_or_pm(minutes) {\n if(latepoint_is_army_clock()) return '';\n return (minutes < 720 || minutes == 1440) ? 'am' : 'pm';\n}\n\nfunction latepoint_hours_and_minutes_to_minutes(hours_and_minutes, ampm) {\n var hours_and_minutes_arr = hours_and_minutes.split(':');\n var hours = hours_and_minutes_arr[0];\n var minutes = hours_and_minutes_arr[1];\n if(ampm == \"pm\" && hours<12) hours = parseInt(hours)+12;\n if(ampm == \"am\" && hours==12) hours = 0;\n minutes = parseInt(minutes) + (hours * 60);\n return minutes;\n}\n\nfunction latepoint_get_time_system(){\n return latepoint_helper.time_system;\n}\n\nfunction latepoint_is_army_clock(){\n return (latepoint_get_time_system() == '24');\n}\n\nfunction latepoint_minutes_to_hours_and_minutes(minutes) {\n var army_clock = latepoint_is_army_clock();\n var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '%02d:%02d';\n\n var hours = Math.floor(minutes / 60);\n if(!army_clock && (hours > 12)) hours = hours - 12;\n if(!army_clock && hours == 0) hours = 12;\n var minutes = minutes % 60;\n return sprintf(format, hours, minutes);\n}\n","function latepoint_mask_timefield($elem){\n\tif(jQuery().inputmask){\n\t $elem.inputmask({\n\t 'mask': '99:99',\n\t 'placeholder': 'HH:MM'\n\t });\n\t}\n}\n\nfunction latepoint_mask_phone($elem){\n\tif(latepoint_is_phone_masking_enabled() && jQuery().inputmask) $elem.inputmask(latepoint_get_phone_format());\n}\n\n\nfunction latepoint_get_phone_format(){\n return latepoint_helper.phone_format;\n}\n\nfunction latepoint_is_phone_masking_enabled(){\n\treturn (latepoint_helper.enable_phone_masking == 'yes');\n}\n\nfunction latepoint_show_booking_end_time(){\n\treturn (latepoint_helper.show_booking_end_time == 'yes');\n}\n\nfunction latepoint_init_form_masks(){\n\tif(latepoint_is_phone_masking_enabled()) latepoint_mask_phone(jQuery('.os-mask-phone'));\n}\n\nfunction latepoint_get_paypal_payment_amount($booking_form_element){\n\tvar payment_portion = $booking_form_element.find('input[name=\"booking[payment_portion]\"]').val();\n\tvar payment_amount = (payment_portion == 'deposit') ? $booking_form_element.find('.lp-paypal-btn-trigger').data('deposit-amount') : $booking_form_element.find('.lp-paypal-btn-trigger').data('full-amount');\n\treturn payment_amount;\n}","function latepoint_add_notification(message, message_type = 'success'){\n\tvar wrapper = jQuery('body').find('.os-notifications');\n\tif(!wrapper.length){\n\t\tjQuery('body').append('
');\n\t\twrapper = jQuery('body').find('.os-notifications');\n\t}\n\tif(wrapper.find('.item').length > 0) wrapper.find('.item:first-child').remove();\n\twrapper.append('
' + message + '
');\n}","function latepoint_generate_form_message_html(messages, status){\n var message_html = '
';\n return message_html;\n}\n\nfunction latepoint_clear_form_messages($form){\n $form.find('.os-form-message-w').remove();\n}\n\nfunction latepoint_show_data_in_lightbox(message, extra_classes = ''){\n jQuery('.latepoint-lightbox-w').remove();\n var lightbox_css_classes = 'latepoint-lightbox-w latepoint-w ';\n if(extra_classes) lightbox_css_classes+= extra_classes;\n jQuery('body').append('
' + message + '
');\n jQuery('body').addClass('latepoint-lightbox-active');\n}\n\n\n\n// DOCUMENT READY\njQuery(document).ready(function( $ ) {\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n /* \n Ajax buttons action\n */\n $('.latepoint').on('click', 'button[data-os-action], a[data-os-action], div[data-os-action], span[data-os-action], tr[data-os-action]', function(e){\n var $this = $(this);\n if($this.data('os-prompt') && !confirm($this.data('os-prompt'))) return false;\n var params = $(this).data('os-params');\n if($(this).data('os-source-of-params')){\n params = $($(this).data('os-source-of-params')).find('select, input, textarea').serialize();\n }\n var return_format = $this.data('os-return-format') ? $this.data('os-return-format') : 'json'\n var data = { action: 'latepoint_route_call', route_name: $(this).data('os-action'), params: params, return_format: return_format } \n $this.addClass('os-loading');\n if($this.data('os-output-target') == 'side-panel'){\n $('.latepoint-side-panel-w').remove();\n $('body').append('
');\n }\n $.ajax({\n type : \"post\",\n dataType : \"json\",\n url : latepoint_helper.ajaxurl,\n data : data,\n success: function(response){\n if(response.status === \"success\"){\n if($this.data('os-output-target') == 'lightbox'){\n latepoint_show_data_in_lightbox(response.message, $this.data('os-lightbox-classes'));\n }else if($this.data('os-output-target') == 'side-panel'){\n $('.latepoint-side-panel-i').html(response.message);\n setTimeout(function(){\n $('.latepoint-side-panel-w').removeClass('os-loading');\n }, 100);\n }else if($this.data('os-success-action') == 'reload'){\n latepoint_add_notification(response.message);\n location.reload();\n return;\n }else if($this.data('os-success-action') == 'redirect'){\n if($this.data('os-redirect-to')){\n latepoint_add_notification(response.message);\n window.location.replace($this.data('os-redirect-to'));\n }else{\n window.location.replace(response.message); \n }\n return;\n }else if($this.data('os-output-target') && $($this.data('os-output-target')).length){\n if($this.data('os-output-target-do') == 'append'){\n $($this.data('os-output-target')).append(response.message);\n }else{\n $($this.data('os-output-target')).html(response.message);\n }\n }else{\n switch($this.data('os-before-after')){\n case 'before':\n $this.before(response.message);\n break;\n case 'after':\n $this.after(response.message);\n break;\n case 'none':\n break;\n default:\n latepoint_add_notification(response.message);\n }\n }\n if($this.data('os-after-call')){\n var func_name = $this.data('os-after-call');\n var callback = false;\n if(func_name.includes('.')){\n var func_arr = func_name.split('.');\n if($this.data('os-pass-this') && $this.data('os-pass-response')){\n window[func_arr[0]][func_arr[1]]($this, response);\n }else if($this.data('os-pass-this')){\n window[func_arr[0]][func_arr[1]]($this);\n }else if($this.data('os-pass-response')){\n window[func_arr[0]][func_arr[1]](response);\n }else{\n window[func_arr[0]][func_arr[1]]();\n }\n }else{\n if($this.data('os-pass-this') && $this.data('os-pass-response')){\n window[func_name]($this, response);\n }else if($this.data('os-pass-this')){\n window[func_name]($this);\n }else if($this.data('os-pass-response')){\n window[func_name](response);\n }else{\n window[func_name]();\n }\n }\n }\n $this.removeClass('os-loading');\n }else{\n $this.removeClass('os-loading');\n if($this.data('os-output-target') && $($this.data('os-output-target')).length){\n $($this.data('os-output-target')).prepend(latepoint_generate_form_message_html(response.message, 'error'));\n }else{\n alert(response.message);\n }\n }\n }\n });\n return false;\n });\n\n\n $('.latepoint').on('click', 'form[data-os-action] button[type=\"submit\"]', function(e){\n $(this).addClass('os-loading');\n });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n /* \n Form ajax submit action\n */\n $('.latepoint').on('submit', 'form[data-os-action]', function(e){\n e.preventDefault(); // prevent native submit\n var $form = $(this);\n var form_data = $form.serialize();\n var data = { action: 'latepoint_route_call', route_name: $(this).data('os-action'), params: form_data, return_format: 'json' }\n $form.find('button[type=\"submit\"]').addClass('os-loading');\n $.ajax({\n type : \"post\",\n dataType : \"json\",\n url : latepoint_helper.ajaxurl,\n data : data,\n success: function(response){\n $form.find('button[type=\"submit\"].os-loading').removeClass('os-loading');\n latepoint_clear_form_messages($form);\n if(response.status === \"success\"){\n if($form.data('os-success-action') == 'reload'){\n latepoint_add_notification(response.message);\n location.reload();\n return;\n }else if($form.data('os-success-action') == 'redirect'){\n if($form.data('os-redirect-to')){\n latepoint_add_notification(response.message);\n window.location.replace($form.data('os-redirect-to'));\n }else{\n window.location.replace(response.message);\n }\n return;\n }else if($form.data('os-output-target') && $($form.data('os-output-target')).length){\n $($form.data('os-output-target')).html(response.message);\n }else{\n if(response.message == 'redirect'){\n window.location.replace(response.url);\n }else{\n latepoint_add_notification(response.message);\n $form.prepend(latepoint_generate_form_message_html(response.message, 'success'));\n }\n }\n if($form.data('os-record-id-holder') && response.record_id){\n $form.find('[name=\"' + $form.data('os-record-id-holder') + '\"]').val(response.record_id)\n }\n if($form.data('os-after-call')){\n var func_name = $form.data('os-after-call');\n if($form.data('os-pass-response')){\n window[func_name](response);\n }else{\n window[func_name]();\n }\n }\n $('button.os-loading').removeClass('os-loading');\n }else{\n $('button.os-loading').removeClass('os-loading');\n if($form.data('os-show-errors-as-notification')){\n latepoint_add_notification(response.message, 'error');\n }else{\n $form.prepend(latepoint_generate_form_message_html(response.message, 'error'));\n $([document.documentElement, document.body]).animate({\n scrollTop: ($form.find(\".os-form-message-w\").offset().top - 30)\n }, 200);\n }\n }\n if(response.form_values_to_update){\n $.each(response.form_values_to_update, function(name, value){\n $form.find('[name=\"'+ name +'\"]').val(value);\n });\n }\n }\n });\n return false;\n });\n});","// @codekit-prepend \"os-time.js\"\n// @codekit-prepend \"os-shared.js\"\n// @codekit-prepend \"os-notifications.js\";\n// @codekit-prepend \"os-actions.js\"\n\n\n\n\n function latepoint_init_payment_method_actions($booking_form_element, payment_method){\n var callbacks_list = [];\n var is_last_step = $booking_form_element.data('next-submit-is-last') == 'yes';\n $booking_form_element.trigger('latepoint:initPaymentMethod', [{ payment_method: payment_method, \n callbacks_list: callbacks_list, \n is_last_step: is_last_step }]);\n $booking_form_element.removeClass('step-content-loaded').addClass('step-content-loading');\n jQuery.when(...callbacks_list.map(callback => callback.action()))\n .done(() => {\n $booking_form_element.removeClass('step-content-loading').addClass('step-content-loaded').find('.lp-payment-method-content[data-payment-method=\"' + payment_method + '\"]').show();\n });\n }\n\n function latepoint_show_next_btn($booking_form_element){\n $booking_form_element.find('.latepoint-next-btn').removeClass('disabled');\n $booking_form_element.removeClass('hidden-buttons');\n }\n\n function clear_step_services($booking_form_element){\n latepoint_update_summary_field($booking_form_element, 'service', '');\n clear_sub_step_attendies($booking_form_element);\n }\n\n function clear_sub_step_attendies($booking_form_element){\n $booking_form_element.find('.latepoint_total_attendies').val(1);\n latepoint_update_summary_field($booking_form_element, 'total-attendies', '');\n clear_sub_step_duration($booking_form_element);\n }\n\n function clear_sub_step_duration($booking_form_element){\n $booking_form_element.find('.latepoint_duration').val('');\n latepoint_update_summary_field($booking_form_element, 'duration', '');\n }\n\n function clear_step_service_extras($booking_form_element){\n latepoint_update_summary_field($booking_form_element, 'service-extras', '');\n }\n\n function clear_step_locations($booking_form_element){\n latepoint_update_summary_field($booking_form_element, 'location', '');\n }\n\n function clear_step_agents($booking_form_element){\n latepoint_update_summary_field($booking_form_element, 'agent', '');\n }\n\n function clear_step_datepicker($booking_form_element){\n latepoint_update_summary_field($booking_form_element, 'time', '');\n latepoint_update_summary_field($booking_form_element, 'date', '');\n }\n\n function latepoint_hide_next_btn($booking_form_element){\n $booking_form_element.find('.latepoint-next-btn').addClass('disabled');\n if($booking_form_element.find('.latepoint-prev-btn.disabled').length) $booking_form_element.addClass('hidden-buttons');\n }\n\n\n function latepoint_show_prev_btn($booking_form_element){\n $booking_form_element.find('.latepoint-prev-btn').removeClass('disabled');\n $booking_form_element.removeClass('hidden-buttons');\n }\n\n function latepoint_hide_prev_btn($booking_form_element){\n $booking_form_element.find('.latepoint-prev-btn').addClass('disabled');\n if($booking_form_element.find('.latepoint-next-btn.disabled').length) $booking_form_element.addClass('hidden-buttons');\n }\n\n\nfunction latepoint_show_capacity_selector($item){\n var $booking_form_element = $item.closest('.latepoint-booking-form-element');\n var max_capacity = $item.data('max-capacity');\n var min_capacity = $item.data('min-capacity');\n $booking_form_element.find('.sta-sub-label span').text(max_capacity);\n $booking_form_element.find('.step-services-w').removeClass('selecting-service-duration');\n $booking_form_element.find('.total-attendies-selector-w').data('max-capacity', max_capacity);\n $booking_form_element.find('.total-attendies-selector-w').data('min-capacity', min_capacity);\n $item.closest('.step-services-w').addClass('selecting-total-attendies');\n var current_value = $booking_form_element.find('.total-attendies-selector-input').val();\n $booking_form_element.find('.total-attendies-selector-input').val(Math.max(Number(min_capacity), Number(current_value)));\n latepoint_show_prev_btn($booking_form_element);\n latepoint_show_next_btn($booking_form_element);\n}\n\n\nfunction latepoint_show_durations($item){\n var $booking_form_element = $item.closest('.latepoint-booking-form-element');\n $item.closest('.step-services-w').addClass('selecting-service-duration');\n latepoint_show_prev_btn($booking_form_element);\n latepoint_hide_next_btn($booking_form_element);\n}\n\nfunction latepoint_apply_coupon($elem){\n var $booking_form_element = $elem.closest('.latepoint-booking-form-element');\n\n var $coupon_input = $elem;\n $coupon_input.closest('.coupon-code-input-w').addClass('os-loading');\n var form_params = $booking_form_element.find('.latepoint-form').serialize();\n var data = { action: latepoint_helper.route_action, route_name: $elem.data('route'), params: form_params, layout: 'none', return_format: 'json' }\n jQuery.ajax({\n type : \"post\",\n dataType : \"json\",\n url : latepoint_helper.ajaxurl,\n data : data,\n success: function(data){\n $coupon_input.closest('.coupon-code-input-w').removeClass('os-loading');\n if(data.status === \"success\"){\n $booking_form_element.find('input[name=\"booking[coupon_code]\"]').val($coupon_input.val());\n latepoint_show_message_inside_element(data.message, $booking_form_element.find('.latepoint-body'), 'success');\n $booking_form_element.find('.step-payment-w input[name=\"booking[payment_method]\"]').val('');\n $booking_form_element.find('input[name=\"booking[payment_token]\"]').val('');\n $booking_form_element.find('input[name=\"booking[payment_portion]\"]').val('');\n latepoint_reload_step($booking_form_element);\n }else{\n latepoint_show_message_inside_element(data.message, $booking_form_element.find('.latepoint-body'), 'error');\n }\n }\n });\n}\n\nfunction latepoint_remove_coupon($elem){\n $elem.closest('.applied-coupon-code').fadeOut();\n var $booking_form_element = $elem.closest('.latepoint-booking-form-element');\n $booking_form_element.find('input[name=\"booking[coupon_code]\"]').val('');\n latepoint_reload_step($booking_form_element);\n}\n\nfunction latepoint_reload_step($booking_form_element, step_name = false){\n\n if(step_name){\n $booking_form_element.find('.latepoint_current_step').val(step_name);\n $booking_form_element.removeClass(function (index, className) { return (className.match (/(^|\\s)current-step-\\S+/g) || []).join(' '); }).addClass('current-step-' + step_name);\n if($booking_form_element.find('.latepoint-step-content[data-step-name=\"'+ step_name +'\"]')){\n $booking_form_element.find('.latepoint-step-content[data-step-name=\"'+ step_name +'\"]').nextAll('.latepoint-step-content').remove();\n $booking_form_element.find('.latepoint-step-content[data-step-name=\"'+ step_name +'\"]').remove();\n }\n }\n\n $booking_form_element.find('.latepoint_step_direction').val('specific');\n $booking_form_element.find('.latepoint-form').submit();\n\n return false;\n}\n\nfunction latepoint_get_payment_sub_step($booking_form_element, current_sub_step, prev = false){\n var offset = prev ? -1 : 1;\n var payment_sub_steps = [];\n if($booking_form_element.find('.step-payment-w .lp-payment-times-w').length) payment_sub_steps.push('payment-times');\n if($booking_form_element.find('.step-payment-w .lp-payment-methods-w').length) payment_sub_steps.push('payment-methods');\n if($booking_form_element.find('.step-payment-w .lp-payment-portions-w').length) payment_sub_steps.push('payment-portions');\n\n var selected_payment_method = $booking_form_element.find('input[name=\"booking[payment_method]\"]').val();\n if(selected_payment_method) payment_sub_steps.push('payment-method-content');\n\n var index = payment_sub_steps.indexOf(current_sub_step) + offset;\n if(index >= 0 && index < payment_sub_steps.length){\n var sub_step = payment_sub_steps[index];\n if(sub_step == 'payment-method-content'){\n latepoint_init_payment_method_actions($booking_form_element, selected_payment_method);\n // if no content exists for payment method - do not change sub step\n if(!$booking_form_element.find('.lp-payment-method-content[data-payment-method=\"' + selected_payment_method + '\"]').length) sub_step = current_sub_step;\n }\n return sub_step;\n }else{\n return current_sub_step;\n }\n}\n\n\nfunction latepoint_reset_password_from_booking_init(){\n jQuery('.os-step-existing-customer-login-w').hide();\n jQuery('.os-password-reset-form-holder').on('click', '.password-reset-back-to-login', function(){\n jQuery('.os-password-reset-form-holder').html('');\n jQuery('.os-step-existing-customer-login-w').show();\n return false;\n });\n}\n\nfunction latepoint_update_summary_field($form, field_name, value = ''){\n var $summary_holder = $form.closest('.latepoint-with-summary');\n if(!$summary_holder.length) return;\n value = value ? String(value).trim() : false;\n if(value){\n $form.find('.os-summary-value-'+field_name).html(value).closest('.os-summary-line').addClass('os-has-value');\n if($summary_holder.hasClass('latepoint-summary-is-open')){\n $form.find('.os-summary-line.os-has-value').slideDown(150);\n }else{\n $form.find('.os-summary-line.os-has-value').fadeIn(200);\n }\n $summary_holder.addClass('latepoint-summary-is-open');\n }else{\n $form.find('.os-summary-value-'+field_name).text('').closest('.os-summary-line').slideUp(150).removeClass('os-has-value');\n }\n}\n\nfunction latepoint_password_changed_show_login(response){\n jQuery('.os-step-existing-customer-login-w').show();\n jQuery('.os-password-reset-form-holder').html('');\n latepoint_show_message_inside_element(response.message, jQuery('.os-step-existing-customer-login-w'), 'success');\n}\n\nfunction latepoint_hide_message_inside_element($elem = jQuery('.latepoint-body')){\n if($elem.length && $elem.find('.latepoint-message').length){\n $elem.find('.latepoint-message').remove();\n }\n}\n\nfunction latepoint_show_message_inside_element(message, $elem = jQuery('.latepoint-body'), message_type = 'error'){\n if($elem.length){\n if($elem.find('.latepoint-message').length){\n $elem.find('.latepoint-message').removeClass('latepoint-message-success').removeClass('latepoint-message-error').addClass('latepoint-message-'+ message_type +'').html(message).show();\n }else{\n $elem.prepend('
' + message + '
');\n }\n }\n}\n\nfunction latepoint_add_action(callbacks_list, action, priority = 10){\n callbacks_list.push({priority: priority, action: action});\n callbacks_list.sort((a,b) => a.priority - b.priority);\n return callbacks_list;\n}\n\n\n( function( $ ) {\n \"use strict\";\n\n function latepoint_init_step(step_name, $booking_form_element){\n latepoint_init_step_selectable_items();\n latepoint_init_step_category_items(step_name);\n switch(step_name){\n case 'datepicker':\n latepoint_init_step_datepicker();\n break;\n case 'contact':\n latepoint_init_step_contact();\n break;\n case 'agents':\n latepoint_init_step_agents();\n break;\n case 'locations':\n latepoint_init_step_locations();\n break;\n case 'services':\n latepoint_init_step_services();\n break;\n case 'payment':\n latepoint_init_step_payment($booking_form_element);\n break;\n case 'verify':\n latepoint_init_step_verify($booking_form_element);\n break;\n case 'confirmation':\n latepoint_init_step_confirmation();\n break;\n }\n\n $booking_form_element.trigger(\"latepoint:initStep\", [{step_name: step_name}]);\n $booking_form_element.trigger(\"latepoint:initStep:\" + step_name);\n }\n\n\n\n function day_timeslots($day){\n var $booking_form_element = $day.closest('.latepoint-booking-form-element');\n $day.addClass('selected');\n\n var service_duration = $day.data('service-duration');\n var interval = $day.data('interval');\n var work_start_minutes = $day.data('work-start-time');\n var work_end_minutes = $day.data('work-end-time');\n var total_work_minutes = $day.data('total-work-minutes');\n var bookable_minutes = [];\n var available_capacities_of_bookable_minute = [];\n if($day.attr('data-bookable-minutes')){\n if($day.data('bookable-minutes').toString().indexOf(':') > -1){\n // has capacity information embedded into bookable minutes string\n let bookable_minutes_with_capacity = $day.data('bookable-minutes').toString().split(',');\n for(let i = 0; i < bookable_minutes_with_capacity.length; i++){\n bookable_minutes.push(parseInt(bookable_minutes_with_capacity[i].split(':')[0]));\n available_capacities_of_bookable_minute.push(parseInt(bookable_minutes_with_capacity[i].split(':')[1]));\n }\n }else{\n bookable_minutes = $day.data('bookable-minutes').toString().split(',').map(Number);\n }\n }\n var work_minutes = $day.data('work-minutes').toString().split(',').map(Number);\n\n var $timeslots = $booking_form_element.find('.timeslots');\n $timeslots.html('');\n\n if(total_work_minutes > 0 && bookable_minutes.length && work_minutes.length){\n var prev_minutes = false;\n work_minutes.forEach(function(current_minutes){\n var ampm = latepoint_am_or_pm(current_minutes);\n \n var timeslot_class = 'dp-timepicker-trigger';\n var timeslot_available_capacity = 0;\n if(latepoint_helper.time_pick_style == 'timeline'){\n timeslot_class+= ' dp-timeslot';\n }else{\n timeslot_class+= ' dp-timebox';\n }\n\n if(prev_minutes !== false && ((current_minutes - prev_minutes) > service_duration)){\n // show interval that is off between two work periods\n var off_label = latepoint_minutes_to_hours_and_minutes(prev_minutes + service_duration)+' '+ latepoint_am_or_pm(prev_minutes + service_duration) + ' - ' + latepoint_minutes_to_hours_and_minutes(current_minutes)+' '+latepoint_am_or_pm(current_minutes);\n var off_width = (((current_minutes - prev_minutes - service_duration) / total_work_minutes) * 100);\n $timeslots.append('
' + off_label + '
');\n }\n\n if(!bookable_minutes.includes(current_minutes)){\n timeslot_class+= ' is-booked';\n }else{\n if(available_capacities_of_bookable_minute.length) timeslot_available_capacity = available_capacities_of_bookable_minute[bookable_minutes.indexOf(current_minutes)];\n }\n var tick_html = '';\n var capacity_label = '';\n var capacity_label_html = '';\n var capacity_internal_label_html = '';\n\n if(((current_minutes % 60) == 0) || (interval >= 60)){\n timeslot_class+= ' with-tick';\n tick_html = ''+latepoint_minutes_to_hours_preferably(current_minutes)+''+' '+ampm+'';\n }\n var timeslot_label = latepoint_minutes_to_hours_and_minutes(current_minutes)+' '+ampm;\n if(latepoint_show_booking_end_time()){\n var end_minutes = current_minutes + service_duration;\n if(end_minutes > 1440) end_minutes = end_minutes - 1440;\n var end_minutes_ampm = latepoint_am_or_pm(end_minutes);\n timeslot_label+= ' - ' + latepoint_minutes_to_hours_and_minutes(end_minutes)+' '+end_minutes_ampm + '';\n }\n if(timeslot_available_capacity){\n var spaces_message = timeslot_available_capacity > 1 ? latepoint_helper.many_spaces_message : latepoint_helper.single_space_message;\n capacity_label = timeslot_available_capacity + ' ' + spaces_message;\n capacity_label_html = '' + capacity_label + '';\n capacity_internal_label_html = '' + capacity_label + '';\n }\n timeslot_label = timeslot_label.trim();\n $timeslots.removeClass('slots-not-available').append('
' + capacity_internal_label_html + '' + timeslot_label + '' +''+tick_html+ capacity_label_html + '
');\n prev_minutes = current_minutes;\n });\n }else{\n // No working hours this day\n $timeslots.addClass('slots-not-available').append('
' + latepoint_helper.msg_not_available + \"
\");\n }\n $('.times-header-label span').text($day.data('nice-date'));\n $booking_form_element.find('.time-selector-w').slideDown(200, function(){\n var $scrollable_wrapper = $booking_form_element.find('.latepoint-body');\n $scrollable_wrapper.stop().animate({\n scrollTop: $scrollable_wrapper[0].scrollHeight\n }, 200);\n });\n }\n\n\n\n\n function os_init_timeslots(){\n $('.dp-timepicker-trigger').on('click', function(){\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n if($(this).hasClass('is-booked') || $(this).hasClass('is-off')){\n // Show error message that you cant select a booked period\n }else{\n if($(this).hasClass('selected')){\n $(this).removeClass('selected');\n $(this).find('.dp-success-label').remove();\n $booking_form_element.find('.latepoint_start_time').val('');\n latepoint_hide_next_btn($booking_form_element);\n latepoint_update_summary_field($booking_form_element, 'time', '');\n }else{\n $booking_form_element.find('.dp-timepicker-trigger.selected').removeClass('selected').find('.dp-success-label').remove();\n var selected_timeslot_time = $(this).find('.dp-label-time').html();\n $(this).addClass('selected').find('.dp-label').prepend('' + $booking_form_element.find('.latepoint-form').data('selected-label') + '');\n\n var minutes = parseInt($(this).data('minutes'));\n var timeshift_minutes = parseInt($booking_form_element.find('.latepoint_timeshift_minutes').val());\n // we substract timeshift minutes because its timeshift minutes that the business is running in, in opposite of what we do when we generate a calendar for a client\n if(timeshift_minutes) minutes = minutes - timeshift_minutes;\n var start_date = new Date($booking_form_element.find('.os-day.selected').data('date'));\n if(minutes < 0){\n // business minutes are in previous day\n minutes = 24*60 + minutes;\n // move start date back 1 day\n start_date.setDate(start_date.getDate() - 1);\n }else if(minutes >= 24*60){\n // business minutes are in next day\n minutes = minutes - 24*60;\n start_date.setDate(start_date.getDate() + 1);\n }\n $booking_form_element.find('.latepoint_start_date').val(start_date.toISOString().split('T')[0])\n $booking_form_element.find('.latepoint_start_time').val(minutes);\n latepoint_show_next_btn($booking_form_element);\n latepoint_update_summary_field($booking_form_element, 'time', selected_timeslot_time);\n }\n }\n return false;\n });\n }\n\n function os_init_monthly_calendar_navigation(){\n $('.os-month-next-btn').on('click', function(){\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n var next_month_route_name = $(this).data('route');\n if($booking_form_element.find('.os-monthly-calendar-days-w.active + .os-monthly-calendar-days-w').length){\n $booking_form_element.find('.os-monthly-calendar-days-w.active').removeClass('active').next('.os-monthly-calendar-days-w').addClass('active');\n latepoint_calendar_set_month_label($booking_form_element);\n }else{\n // TODO add condition to check maximum number months to call into the future\n if(true){\n var $btn = $(this);\n $btn.addClass('os-loading');\n var $calendar_element = $booking_form_element.find('.os-monthly-calendar-days-w').last();\n var calendar_year = $calendar_element.data('calendar-year');\n var calendar_month = $calendar_element.data('calendar-month');\n if(calendar_month == 12){\n calendar_year = calendar_year + 1;\n calendar_month = 1;\n }else{\n calendar_month = calendar_month + 1;\n }\n var params = $booking_form_element.find('.latepoint-form').serialize() + '&target_date_string=' + calendar_year + '-' + calendar_month + '-1';\n var data = { action: latepoint_helper.route_action, route_name: next_month_route_name, params: params, layout: 'none', return_format: 'json' }\n $.ajax({\n type : \"post\",\n dataType : \"json\",\n url : latepoint_helper.ajaxurl,\n data : data,\n success: function(data){\n $btn.removeClass('os-loading');\n if(data.status === \"success\"){\n $booking_form_element.find('.os-months').append(data.message);\n $booking_form_element.find('.os-monthly-calendar-days-w.active').removeClass('active').next('.os-monthly-calendar-days-w').addClass('active');\n latepoint_calendar_set_month_label($booking_form_element);\n }else{\n // console.log(data.message);\n }\n }\n });\n }\n }\n latepoint_calendar_show_or_hide_prev_next_buttons($booking_form_element);\n return false;\n });\n $('.os-month-prev-btn').on('click', function(){\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n if($booking_form_element.find('.os-monthly-calendar-days-w.active').prev('.os-monthly-calendar-days-w').length){\n $booking_form_element.find('.os-monthly-calendar-days-w.active').removeClass('active').prev('.os-monthly-calendar-days-w').addClass('active');\n latepoint_calendar_set_month_label($booking_form_element);\n }\n latepoint_calendar_show_or_hide_prev_next_buttons($booking_form_element);\n return false;\n });\n }\n\n function latepoint_calendar_set_month_label($booking_form_element){\n $booking_form_element.find('.os-current-month-label .current-year').text($booking_form_element.find('.os-monthly-calendar-days-w.active').data('calendar-year'));\n $booking_form_element.find('.os-current-month-label .current-month').text($booking_form_element.find('.os-monthly-calendar-days-w.active').data('calendar-month-label'));\n }\n\n\n function latepoint_calendar_show_or_hide_prev_next_buttons($booking_form_element){\n $booking_form_element.find('.os-current-month-label .current-year').text($booking_form_element.find('.os-monthly-calendar-days-w.active .os-monthly-calendar-days').data('calendar-year'));\n $booking_form_element.find('.os-current-month-label .current-month').text($booking_form_element.find('.os-monthly-calendar-days-w.active .os-monthly-calendar-days').data('calendar-month-label'));\n\n if($booking_form_element.find('.os-monthly-calendar-days-w.active').prev('.os-monthly-calendar-days-w').length){\n $booking_form_element.find('.os-month-prev-btn').removeClass('disabled');\n }else{\n $booking_form_element.find('.os-month-prev-btn').addClass('disabled');\n }\n }\n\n function latepoint_format_minutes_to_time(minutes, service_duration){\n var ampm = latepoint_am_or_pm(minutes);\n var formatted_time = latepoint_minutes_to_hours_and_minutes(minutes)+' '+ampm;\n if(latepoint_show_booking_end_time()){\n var end_minutes = minutes + service_duration;\n var end_minutes_ampm = latepoint_am_or_pm(end_minutes);\n formatted_time+= ' - ' + latepoint_minutes_to_hours_and_minutes(end_minutes)+' '+end_minutes_ampm;\n }\n formatted_time = formatted_time.trim();\n return formatted_time;\n }\n\n function latepoint_init_step_datepicker(){\n os_init_timeslots();\n os_init_monthly_calendar_navigation();\n $('.os-months').on('click', '.os-day', function(){\n if($(this).hasClass('os-day-passed')) return false;\n if($(this).hasClass('os-not-in-allowed-period')) return false;\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n if($(this).closest('.os-monthly-calendar-days-w').hasClass('hide-if-single-slot')){\n\n // HIDE TIMESLOT IF ONLY ONE TIMEPOINT\n if($(this).hasClass('os-not-available')){\n // clicked on a day that has no available timeslots\n // do nothing\n }else{\n $booking_form_element.find('.os-day.selected').removeClass('selected');\n $(this).addClass('selected');\n // set date\n $booking_form_element.find('.latepoint_start_date').val($(this).data('date'));\n latepoint_update_summary_field($booking_form_element, 'date', $(this).data('nice-date'));\n if($(this).hasClass('os-one-slot-only')){\n // clicked on a day that has only one slot available\n var bookable_minutes = $(this).data('bookable-minutes').toString().split(':')[0];\n var selected_timeslot_time = latepoint_format_minutes_to_time(Number(bookable_minutes), Number($(this).data('service-duration')));\n $booking_form_element.find('.latepoint_start_time').val($(this).data('bookable-minutes'));\n latepoint_show_next_btn($booking_form_element);\n latepoint_update_summary_field($booking_form_element, 'time', selected_timeslot_time);\n $booking_form_element.find('.time-selector-w').slideUp(200);\n }else{\n // regular day with more than 1 timeslots available\n // build timeslots\n day_timeslots($(this));\n // initialize timeslots events\n os_init_timeslots();\n // clear time and hide next btn\n $booking_form_element.find('.latepoint_start_time').val('');\n latepoint_hide_next_btn($booking_form_element);\n }\n }\n }else{\n \n // SHOW TIMESLOTS EVEN IF ONLY ONE TIMEPOINT\n $booking_form_element.find('.latepoint_start_date').val($(this).data('date'));\n latepoint_update_summary_field($booking_form_element, 'date', $(this).data('nice-date'));\n $booking_form_element.find('.os-day.selected').removeClass('selected');\n $(this).addClass('selected');\n\n // build timeslots\n day_timeslots($(this));\n // initialize timeslots events\n os_init_timeslots();\n // clear time and hide next btn\n latepoint_update_summary_field($booking_form_element, 'time', '');\n $booking_form_element.find('.latepoint_start_time').val('');\n latepoint_hide_next_btn($booking_form_element);\n }\n\n\n return false;\n });\n }\n\n\n function latepoint_init_step_verify($booking_form_element = false){\n if(!$booking_form_element) return;\n\n $booking_form_element.closest('.latepoint-summary-is-open').removeClass('latepoint-summary-is-open');\n }\n\n\n function latepoint_init_step_payment($booking_form_element = false){\n if($booking_form_element.find('.step-payment-w').data('full-amount') > 0){\n latepoint_update_summary_field($booking_form_element, 'price', latepoint_format_price(($booking_form_element.find('.step-payment-w').data('full-amount') * 100 / 100).toFixed(2)));\n }\n if($booking_form_element && ($booking_form_element.find('.step-payment-w').data('default-portion') == 'deposit')){\n $booking_form_element.find('input[name=\"booking[payment_portion]\"]').val('deposit');\n }\n\n // activate payment method content if method and portion are set and no selection is needed\n var selected_payment_method = $booking_form_element.find('input[name=\"booking[payment_method]\"]').val();\n if(selected_payment_method && !$('.lp-payment-times-w').length && !$('.lp-payment-methods-w').length && !$('.lp-payment-portions-w').length){\n latepoint_init_payment_method_actions($booking_form_element, selected_payment_method);\n }\n\n $('.latepoint-booking-form-element .coupon-code-input-submit').on('click', function(e){\n latepoint_apply_coupon($(this).closest('.coupon-code-input-w').find('.coupon-code-input'));\n return false;\n });\n\n $('.latepoint-booking-form-element .coupon-code-clear').on('click', function(e){\n latepoint_remove_coupon($(this));\n return false;\n });\n\n $('.latepoint-booking-form-element input.coupon-code-input').on('keyup', function(e){\n if(e.which === 13){\n latepoint_apply_coupon($(this));\n return false;\n }\n });\n\n\n $('.latepoint-booking-form-element .coupon-code-trigger-w a').on('click', function(e){\n $(this).closest('.payment-total-info').addClass('entering-coupon').find('.coupon-code-input').focus();\n return false;\n });\n\n\n // Pay later button click\n $('.latepoint-booking-form-element .lp-payment-trigger-later').on('click', function(e){\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n $booking_form_element.find('input[name=\"booking[payment_method]\"]').val($(this).data('method'));\n $booking_form_element.find('input[name=\"booking[payment_portion]\"]').val('');\n $booking_form_element.find('.latepoint-form').submit();\n });\n\n\n // Selecting Payment Time\n $('.latepoint-booking-form-element .lp-payment-trigger-payment-time-selector').on('click', function(e){\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n var $payment_step = $booking_form_element.find('.step-payment-w');\n\n latepoint_hide_next_btn($booking_form_element);\n latepoint_show_prev_btn($booking_form_element);\n $payment_step.attr('data-sub-step', latepoint_get_payment_sub_step($booking_form_element, $payment_step.attr('data-sub-step')));\n return false;\n });\n\n // Selecting Payment Method\n $('.latepoint-booking-form-element .lp-payment-trigger-payment-method-selector').on('click', function(e){\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n var selected_payment_method = $(this).data('method');\n $booking_form_element.find('input[name=\"booking[payment_method]\"]').val(selected_payment_method);\n\n var $payment_step = $booking_form_element.find('.step-payment-w');\n latepoint_hide_next_btn($booking_form_element);\n latepoint_show_prev_btn($booking_form_element);\n $payment_step.attr('data-sub-step', latepoint_get_payment_sub_step($booking_form_element, $payment_step.attr('data-sub-step')));\n });\n\n $('.latepoint-booking-form-element .lp-payment-trigger-payment-portion-selector').on('click', function(e){\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n var portion = jQuery(this).data('portion');\n $booking_form_element.find('input[name=\"booking[payment_portion]\"]').val(portion);\n if(portion == 'deposit'){\n $booking_form_element.find('.payment-total-info').addClass('paying-deposit');\n }else{\n $booking_form_element.find('.payment-total-info').removeClass('paying-deposit');\n }\n\n var $payment_step = $booking_form_element.find('.step-payment-w');\n latepoint_hide_next_btn($booking_form_element);\n latepoint_show_prev_btn($booking_form_element);\n $payment_step.attr('data-sub-step', latepoint_get_payment_sub_step($booking_form_element, $payment_step.attr('data-sub-step')));\n });\n\n\n }\n\n\n function latepoint_init_step_category_items(step_name){\n $('.latepoint-step-content[data-step-name=\"' + step_name + '\"] .os-item-category-info').on('click', function(){\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n latepoint_show_prev_btn($booking_form_element);\n $(this).closest('.latepoint-step-content').addClass('selecting-item-category');\n var $category_wrapper = $(this).closest('.os-item-category-w');\n var $main_parent = $(this).closest('.os-item-categories-main-parent');\n if($category_wrapper.hasClass('selected')){\n $category_wrapper.removeClass('selected');\n if($category_wrapper.parent().closest('.os-item-category-w').length){\n $category_wrapper.parent().closest('.os-item-category-w').addClass('selected');\n }else{\n $main_parent.removeClass('show-selected-only');\n }\n }else{\n $main_parent.find('.os-item-category-w.selected').removeClass('selected');\n $main_parent.addClass('show-selected-only');\n $category_wrapper.addClass('selected');\n }\n return false;\n });\n }\n\n\n function latepoint_init_step_selectable_items(){\n $('.os-selectable-items .os-selectable-item').off('click', latepoint_selectable_item_clicked);\n $('.os-selectable-items .os-selectable-item').on('click', latepoint_selectable_item_clicked);\n\n $('.os-selectable-items .os-selectable-item .item-quantity-selector-input').off('keyup', latepoint_selectable_item_quantity_keyup);\n $('.os-selectable-items .os-selectable-item .item-quantity-selector-input').on('keyup', latepoint_selectable_item_quantity_keyup);\n }\n\n\n function latepoint_calculate_total_price($booking_form_element){\n $booking_form_element.find('.os-summary-value.os-summary-value-price').addClass('os-loading');\n var $booking_form = $booking_form_element.find('.latepoint-form');\n var form_data = $booking_form.serialize();\n var data = { action: latepoint_helper.route_action, route_name: latepoint_helper.calculate_price_route, params: form_data, layout: 'none', return_format: 'json'}\n $.ajax({\n type : \"post\",\n dataType : \"json\",\n url : latepoint_helper.ajaxurl,\n data : data,\n success: function(data){\n if(data.status === \"success\"){\n var price = data.is_free ? '' : data.price;\n latepoint_update_summary_field($booking_form_element, 'price', price);\n $booking_form_element.find('.os-summary-value.os-summary-value-price').removeClass('os-loading');\n }\n }\n });\n return;\n }\n\n function latepoint_update_quantity_for_selectable_items($item){\n var ids = $item.closest('.os-selectable-items')\n .find('.os-selectable-item.selected')\n .map(function(){ \n if($(this).hasClass('has-quantity')){\n return $(this).data('item-id') + ':' + $(this).find('input.item-quantity-selector-input').val();\n }else{\n return $(this).data('item-id');\n }\n }).get();\n $item.closest('.latepoint-booking-form-element').find($item.data('id-holder')).val(ids);\n }\n\n function latepoint_selectable_item_quantity_keyup(event){\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n var $item = $(this).closest('.os-selectable-item');\n var new_value = $(this).val();\n if(new_value && new_value.match(/^\\d+$/)){\n var max_quantity = $item.data('max-quantity');\n if(max_quantity && (new_value > max_quantity)) new_value = max_quantity;\n }else{\n new_value = 0;\n }\n $(this).val(new_value);\n\n if(( $item.hasClass('selected') && (new_value > 0) ) || (!$item.hasClass('selected') && (new_value == 0))){\n latepoint_update_quantity_for_selectable_items($item);\n latepoint_calculate_total_price($booking_form_element);\n return false;\n }else{\n $item.trigger('click');\n }\n }\n\n function latepoint_selectable_item_clicked(event){\n event.stopPropagation();\n event.stopImmediatePropagation();\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n if($(this).hasClass('has-quantity')){\n if($(event.target).hasClass('item-quantity-selector')){\n var current_value = parseInt($(this).find('input.item-quantity-selector-input').val());\n var new_value = ($(event.target).data('sign') == 'minus') ? current_value - 1 : current_value + 1;\n var max_quantity = $(this).data('max-quantity');\n if(new_value < 0) new_value = 0;\n if(max_quantity && (new_value > max_quantity)) new_value = max_quantity;\n $(this).find('input.item-quantity-selector-input').val(new_value);\n if(( $(this).hasClass('selected') && (new_value > 0) ) || (!$(this).hasClass('selected') && (new_value == 0))){\n latepoint_update_quantity_for_selectable_items($(this));\n latepoint_calculate_total_price($booking_form_element);\n return false;\n }\n }\n if($(event.target).hasClass('item-quantity-selector-input')){\n latepoint_update_quantity_for_selectable_items($(this));\n latepoint_calculate_total_price($booking_form_element);\n return false;\n }\n }\n var summary_value = '';\n if($(this).hasClass('os-allow-multiselect')){\n if($(this).hasClass('selected')){\n $(this).removeClass('selected');\n if($(this).hasClass('has-quantity')) $(this).find('input.item-quantity-selector-input').val(0);\n }else{\n $(this).addClass('selected');\n if($(this).hasClass('has-quantity') && !($(this).find('input.item-quantity-selector-input').val() > 0)){\n $(this).find('input.item-quantity-selector-input').val(1);\n }\n }\n latepoint_update_quantity_for_selectable_items($(this));\n summary_value = String($(this).closest('.os-selectable-items').find('.os-selectable-item.selected').map(function(){ return (' ' + $(this).data('summary-value')); }).get()).trim();\n latepoint_show_next_btn($booking_form_element);\n }else{\n if(!$(this).hasClass('os-duration-item')) $(this).closest('.os-item-categories-main-parent').find('.os-selectable-item.selected').removeClass('selected');\n $(this).closest('.os-selectable-items').find('.os-selectable-item.selected').removeClass('selected');\n $(this).addClass('selected');\n $booking_form_element.find($(this).data('id-holder')).val($(this).data('item-id'));\n summary_value = $(this).data('summary-value');\n if($(this).data('os-call-func')){\n window[$(this).data('os-call-func')]($(this));\n }\n if($(this).data('activate-sub-step')){\n window[$(this).data('activate-sub-step')]($(this));\n }else{\n latepoint_trigger_next_btn($booking_form_element);\n }\n }\n latepoint_update_summary_field($booking_form_element, $(this).data('summary-field-name'), summary_value);\n if($(this).hasClass('os-priced-item')){\n latepoint_calculate_total_price($booking_form_element);\n }\n }\n\n\n function latepoint_format_price(price){\n return latepoint_helper.currency_symbol_before + String(price) + latepoint_helper.currency_symbol_after;\n }\n\n\n function latepoint_init_step_services(){\n $('.total-attendies-selector-input').on('change', function(){\n var max_capacity = $(this).closest('.total-attendies-selector-w').data('max-capacity');\n var min_capacity = $(this).closest('.total-attendies-selector-w').data('min-capacity');\n var new_value = $(this).val();\n new_value = Math.min(Number(max_capacity), Number(new_value));\n new_value = Math.max(Number(min_capacity), Number(new_value));\n $(this).val(new_value);\n var new_value_formatted = new_value + ' ' + ((new_value > 1) ? $(this).data('summary-plural') : $(this).data('summary-singular'));\n\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n latepoint_update_summary_field($booking_form_element, 'total-attendies', new_value_formatted);\n latepoint_calculate_total_price($booking_form_element);\n });\n $('.total-attendies-selector').on('click', function(){\n var add_value = ($(this).hasClass('total-attendies-selector-plus')) ? 1 : -1;\n var max_capacity = $(this).closest('.total-attendies-selector-w').data('max-capacity');\n var min_capacity = $(this).closest('.total-attendies-selector-w').data('min-capacity');\n var current_value = $(this).closest('.total-attendies-selector-w').find('input.total-attendies-selector-input').val();\n var new_value = (Number(current_value) > 0) ? Math.max((Number(current_value) + add_value), 1) : 1;\n new_value = Math.min(Number(max_capacity), new_value);\n new_value = Math.max(Number(min_capacity), new_value);\n $(this).closest('.total-attendies-selector-w').find('input').val(new_value).trigger('change');\n return false;\n });\n }\n\n\n function latepoint_trigger_next_btn($booking_form_element){\n $booking_form_element.find('.latepoint_step_direction').val('next');\n $booking_form_element.find('.latepoint-form').submit();\n }\n\n function latepoint_init_step_locations(){\n }\n\n function latepoint_init_step_agents(){\n $('.os-items .os-item-details-btn').on('click', function(){\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n var agent_id = $(this).data('agent-id');\n $booking_form_element.find('.os-agent-bio-popup.active').removeClass('active');\n $booking_form_element.find('#osAgentBioPopup' + agent_id).addClass('active');\n return false;\n });\n $('.os-agent-bio-close').on('click', function(){\n $(this).closest('.os-agent-bio-popup').removeClass('active');\n return false;\n });\n }\n\n\n function latepoint_init_step_confirmation(){\n\n $('.latepoint-booking-form-element').on('click', '.set-customer-password-btn', function(){\n var $btn = $(this);\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n\n $btn.addClass('os-loading');\n var params = { account_nonse: $('input[name=\"account_nonse\"]').val(), password: $('input[name=\"customer[password]\"]').val(), password_confirmation: $('input[name=\"customer[password_confirmation]\"]').val()}\n var data = { action: latepoint_helper.route_action, route_name: $(this).data('btn-action'), params: $.param(params), layout: 'none', return_format: 'json' }\n $.ajax({\n type : \"post\",\n dataType : \"json\",\n url : latepoint_helper.ajaxurl,\n data : data,\n success: function(data){\n $btn.removeClass('os-loading');\n if(data.status === \"success\"){\n $booking_form_element.find('.step-confirmation-set-password').html('').hide();\n $booking_form_element.find('.confirmation-cabinet-info').show();\n }else{\n latepoint_show_message_inside_element(data.message, $booking_form_element.find('.step-confirmation-set-password'), 'error');\n }\n }\n });\n return false;\n });\n\n $('.latepoint-booking-form-element').on('click', '.qr-show-trigger', function(){\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n $booking_form_element.find('.qr-code-on-confirmation').addClass('show-vevent-qr-code');\n return false;\n });\n\n $('.latepoint-booking-form-element').on('click', '.show-set-password-fields', function(){\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n\n $booking_form_element.find('.step-confirmation-set-password').show();\n $booking_form_element.find('#customer_password').focus();\n $(this).closest('.info-box').hide();\n return false;\n });\n }\n\n function latepoint_init_customer_dashboard(){\n $('.latepoint-customer-timezone-selector-w select').on('change', function(e){\n var $select_box = $(this);\n $select_box.closest('.latepoint-customer-timezone-selector-w').addClass('os-loading');\n var data = { action: latepoint_helper.route_action, route_name: $(this).closest('.latepoint-customer-timezone-selector-w').data('route-name'), params: { timezone_name: $(this).val()}, layout: 'none', return_format: 'json'}\n $.ajax({\n type : \"post\",\n dataType : \"json\",\n url : latepoint_helper.ajaxurl,\n data : data,\n success: function(data){\n $select_box.closest('.latepoint-customer-timezone-selector-w').removeClass('os-loading');\n if(data.status === \"success\"){\n location.reload();\n }else{\n\n }\n }\n });\n });\n }\n\n function latepoint_init_customer_dashboard_login(){\n if($('.latepoint-login-form-w #facebook-signin-btn').length && $('.latepoint-login-form-w').length){\n $('.latepoint-login-form-w #facebook-signin-btn').on('click', function(){\n var $login_form_wrapper = $(this).closest('.latepoint-login-form-w');\n FB.login(function(response){\n if (response.status === 'connected' && response.authResponse) {\n var params = { token: response.authResponse.accessToken};\n var data = { action: latepoint_helper.route_action, route_name: $login_form_wrapper.find('#facebook-signin-btn').data('login-action'), params: $.param(params), layout: 'none', return_format: 'json' };\n latepoint_step_content_change_start($login_form_wrapper);\n $.ajax({\n type : \"post\",\n dataType : \"json\",\n url : latepoint_helper.ajaxurl,\n data : data,\n success: function(data){\n if(data.status === \"success\"){\n location.reload();\n }else{\n latepoint_show_message_inside_element(data.message, $login_form_wrapper);\n latepoint_step_content_change_end(false, $login_form_wrapper);\n }\n }\n });\n } else {\n \n }\n }, {scope: 'public_profile,email'});\n });\n }\n\n if($('.latepoint-login-form-w #google-signin-btn').length && $('.latepoint-login-form-w').length && typeof google !== 'undefined'){\n // INIT GOOGLE LOGIN\n var googleUser = {};\n\n var $login_form_wrappers = $('.latepoint-login-form-w');\n $login_form_wrappers.each(function(){\n var $login_form_wrapper = $(this);\n google.accounts.id.initialize({\n client_id: latepoint_helper.social_login_google_client_id,\n callback: latepoint_process_google_login\n });\n google.accounts.id.renderButton(\n $login_form_wrapper.find('#google-signin-btn')[0],\n {theme: \"outline\", size: \"medium\"} // customization attributes\n );\n });\n }\n }\n\n function get_customer_name($wrapper){\n var customer_name = '';\n var first_name = $wrapper.find('input[name=\"customer[first_name]\"]').val();\n var last_name = $wrapper.find('input[name=\"customer[last_name]\"]').val();\n if(first_name) customer_name+= first_name;\n if(last_name) customer_name+= ' ' + last_name;\n return customer_name.trim();\n }\n\n function latepoint_init_step_contact(){\n latepoint_init_facebook_login();\n latepoint_init_google_login();\n latepoint_init_form_masks();\n\n $('.step-contact-w').each(function(){\n latepoint_update_summary_field($(this).closest('.latepoint-booking-form-element'), 'customer', get_customer_name($(this)));\n });\n\n $('.step-contact-w').on('keyup', 'input[name=\"customer[first_name]\"], input[name=\"customer[last_name]\"]', function(){\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n latepoint_update_summary_field($booking_form_element, 'customer', get_customer_name($booking_form_element));\n });\n\n $('.step-contact-w').on('keyup', '.os-form-control.required', function(){\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n if(latepoint_validate_fields($booking_form_element.find('.step-contact-w .os-form-control.required'))){\n }else{\n }\n });\n\n // Init Logout button\n $('.step-customer-logout-btn').on('click', function(){\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n var data = { action: latepoint_helper.route_action, route_name: $(this).data('btn-action'), layout: 'none', return_format: 'json' }\n latepoint_step_content_change_start($booking_form_element);\n $.ajax({\n type : \"post\",\n dataType : \"json\",\n url : latepoint_helper.ajaxurl,\n data : data,\n success: function(data){\n latepoint_reload_step($booking_form_element);\n }\n });\n return false;\n });\n\n // Init Login Existing Customer Button\n $('.step-login-existing-customer-btn').on('click', function(){\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n var params = { email: $booking_form_element.find('.os-step-existing-customer-login-w input[name=\"customer_login[email]\"]').val(), password: $booking_form_element.find('.os-step-existing-customer-login-w input[name=\"customer_login[password]\"]').val()}\n var data = { action: latepoint_helper.route_action, route_name: $(this).data('btn-action'), params: $.param(params), layout: 'none', return_format: 'json' }\n latepoint_step_content_change_start($booking_form_element);\n $.ajax({\n type : \"post\",\n dataType : \"json\",\n url : latepoint_helper.ajaxurl,\n data : data,\n success: function(data){\n if(data.status === \"success\"){\n latepoint_reload_step($booking_form_element);\n }else{\n latepoint_show_message_inside_element(data.message, $booking_form_element.find('.os-step-existing-customer-login-w'));\n latepoint_step_content_change_end(false, $booking_form_element);\n }\n }\n });\n return false;\n });\n }\n\n function latepoint_step_content_change_start($booking_form_element){\n $booking_form_element.removeClass('step-content-loaded').addClass('step-content-loading');\n }\n\n // TODO\n function latepoint_step_content_change_end(new_content, $booking_form_element){\n if(new_content) $booking_form_element.find('.latepoint-body .latepoint-step-content').replaceWith(new_content);\n $booking_form_element.removeClass('step-content-loading').addClass('step-content-mid-loading');\n setTimeout(function(){\n $booking_form_element.removeClass('step-content-mid-loading').addClass('step-content-loaded');\n }, 50);\n }\n\n function latepoint_init_facebook_login(){\n if(!$('#facebook-signin-btn').length || !$('.latepoint-booking-form-element').length) return;\n $('#facebook-signin-btn').on('click', function(){\n var $booking_form_element = $(this).closest('.latepoint-booking-form-element');\n FB.login(function(response){\n if (response.status === 'connected' && response.authResponse) {\n var params = { token: response.authResponse.accessToken};\n var data = { action: latepoint_helper.route_action, route_name: $booking_form_element.find('#facebook-signin-btn').data('login-action'), params: $.param(params), layout: 'none', return_format: 'json' };\n latepoint_step_content_change_start($booking_form_element);\n $.ajax({\n type : \"post\",\n dataType : \"json\",\n url : latepoint_helper.ajaxurl,\n data : data,\n success: function(data){\n if(data.status === \"success\"){\n latepoint_reload_step($booking_form_element);\n }else{\n latepoint_show_message_inside_element(data.message, $booking_form_element.find('.os-step-existing-customer-login-w '));\n latepoint_step_content_change_end(false, $booking_form_element);\n }\n }\n });\n } else {\n \n }\n }, {scope: 'public_profile,email'});\n });\n }\n\n function latepoint_process_google_login(response, $booking_form_element = false){\n\n var params = {\n token: response.credential\n };\n var data = {\n action: latepoint_helper.route_action,\n route_name: latepoint_helper.social_login_google_route,\n params: $.param(params),\n layout: 'none',\n return_format: 'json'\n };\n if($booking_form_element) latepoint_step_content_change_start($booking_form_element);\n $.ajax({\n type : \"post\",\n dataType : \"json\",\n url : latepoint_helper.ajaxurl,\n data : data,\n success: function(data){\n if(data.status === \"success\"){\n if($booking_form_element){\n latepoint_reload_step($booking_form_element);\n }else{\n location.reload();\n }\n }else{\n latepoint_show_message_inside_element(data.message, $booking_form_element.find('.os-step-existing-customer-login-w '));\n latepoint_step_content_change_end(false, $booking_form_element);\n }\n }\n });\n }\n\n function latepoint_init_google_login(){\n if(!$('#google-signin-btn').length || !$('.latepoint-booking-form-element').length || typeof google === 'undefined') return;\n var googleUser = {};\n\n var $booking_form_elements = $('.latepoint-booking-form-element');\n $booking_form_elements.each(function(){\n var $booking_form_element = $(this);\n google.accounts.id.initialize({\n client_id: latepoint_helper.social_login_google_client_id,\n callback: (response) => latepoint_process_google_login(response, $booking_form_element)\n });\n google.accounts.id.renderButton(\n $booking_form_element.find('#google-signin-btn')[0],\n {theme: \"outline\", size: \"medium\"} // customization attributes\n );\n });\n }\n\n function latepoint_change_step_desc($booking_form_element, step_name){\n $booking_form_element.removeClass('step-changed').addClass('step-changing');\n setTimeout(function(){\n // Progress bar\n var $step_progress = $booking_form_element.find('.latepoint-progress li[data-step-name=\"' + step_name + '\"]');\n $step_progress.addClass('active').addClass('complete').prevAll().addClass('complete').removeClass('active');\n $step_progress.nextAll().removeClass('complete').removeClass('active');\n // Side panel\n var side_panel_desc = $booking_form_element.find('.latepoint-step-desc-library[data-step-name=\"' + step_name + '\"]').html();\n $booking_form_element.find('.latepoint-step-desc').html(side_panel_desc);\n\n // Top header\n var top_header_desc = $booking_form_element.find('.os-heading-text-library[data-step-name=\"' + step_name + '\"]').html();\n $booking_form_element.find('.os-heading-text').html(top_header_desc);\n setTimeout(function(){\n $booking_form_element.removeClass('step-changing').addClass('step-changed');\n }, 50);\n }, 500);\n }\n\n\n function latepoint_progress_prev($booking_form_element, step_name){\n var $step_progress = $booking_form_element.find('.latepoint-progress li[data-step-name=\"' + step_name + '\"]');\n $step_progress.addClass('active').addClass('complete').prevAll().addClass('complete').removeClass('active');\n $step_progress.nextAll().removeClass('complete').removeClass('active');\n }\n\n\n function latepoint_progress_next($booking_form_element, step_name){\n var $step_progress = $booking_form_element.find('.latepoint-progress li[data-step-name=\"' + step_name + '\"]');\n $step_progress.addClass('active').addClass('complete').prevAll().addClass('complete').removeClass('active');\n $step_progress.nextAll().removeClass('complete').removeClass('active');\n }\n\n\n function latepoint_next_step_description($booking_form_element, step_name){\n $booking_form_element.removeClass('step-changed').addClass('step-changing');\n setTimeout(function(){\n $booking_form_element.find('.latepoint-step-desc').html($booking_form_element.find('.latepoint-step-desc-library.active').removeClass('active').next('.latepoint-step-desc-library').addClass('active').html());\n $booking_form_element.find('.os-heading-text').html($booking_form_element.find('.os-heading-text-library.active').removeClass('active').next('.os-heading-text-library').addClass('active').html());\n setTimeout(function(){\n $booking_form_element.removeClass('step-changing').addClass('step-changed');\n }, 50);\n }, 500);\n }\n function latepoint_prev_step_description($booking_form_element, step_name){\n $booking_form_element.removeClass('step-changed').addClass('step-changing');\n setTimeout(function(){\n $booking_form_element.find('.latepoint-step-desc').html($booking_form_element.find('.latepoint-step-desc-library.active').removeClass('active').prev('.latepoint-step-desc-library').addClass('active').html());\n $booking_form_element.find('.os-heading-text').html($booking_form_element.find('.os-heading-text-library.active').removeClass('active').prev('.os-heading-text-library').addClass('active').html());\n setTimeout(function(){\n $booking_form_element.removeClass('step-changing').addClass('step-changed');\n }, 50);\n }, 500);\n }\n\n\n function latepoint_validate_fields($fields){\n var is_valid = true;\n $fields.each(function(index){\n if($(this).val() == ''){\n is_valid = false;\n return false;\n }\n });\n return is_valid;\n }\n\n function latepoint_submit_booking_form($booking_form){\n var $booking_form_element = $booking_form.closest('.latepoint-booking-form-element');\n var form_data = $booking_form.serialize();\n var data = { action: latepoint_helper.route_action, route_name: $booking_form.data('route-name'), params: form_data, layout: 'none', return_format: 'json'}\n $booking_form_element.removeClass('step-content-loaded').addClass('step-content-loading');\n $.ajax({\n type : \"post\",\n dataType : \"json\",\n url : latepoint_helper.ajaxurl,\n data : data,\n success: function(data){\n if(data.status === \"success\"){\n latepoint_hide_message_inside_element($booking_form_element.find('.latepoint-body'));\n if($booking_form_element.data('flash-error')){\n latepoint_show_message_inside_element($booking_form_element.data('flash-error'), $booking_form_element.find('.latepoint-body'));\n $booking_form_element.data('flash-error', '');\n }\n $booking_form_element.find('.latepoint_current_step').val(data.step_name);\n $booking_form_element.removeClass(function (index, className) { return (className.match (/(^|\\s)current-step-\\S+/g) || []).join(' '); }).addClass('current-step-' + data.step_name);\n setTimeout(function(){\n $booking_form_element.removeClass('step-content-loading').addClass('step-content-mid-loading');\n $booking_form_element.find('.latepoint-body').find('.latepoint-step-content').addClass('is-hidden');\n if($booking_form_element.find('.latepoint-step-content[data-step-name=\"'+ data.step_name +'\"]')){\n $booking_form_element.find('.latepoint-step-content[data-step-name=\"'+ data.step_name +'\"]').remove();\n }\n $booking_form_element.find('.latepoint-body').append(data.message);\n\n latepoint_init_step(data.step_name, $booking_form_element);\n setTimeout(function(){\n $booking_form_element.removeClass('step-content-mid-loading').addClass('step-content-loaded');\n $booking_form_element.find('.latepoint-next-btn, .latepoint-prev-btn').removeClass('os-loading');\n }, 50);\n }, 500);\n\n if(data.is_pre_last_step){\n $booking_form_element.data('next-submit-is-last', 'yes');\n $booking_form_element.find('.latepoint-next-btn span').text($booking_form_element.find('.latepoint-next-btn').data('pre-last-step-label'));\n }else{\n $booking_form_element.data('next-submit-is-last', 'no');\n $booking_form_element.find('.latepoint-next-btn span').text($booking_form_element.find('.latepoint-next-btn').data('label'));\n }\n if(data.is_last_step){\n $booking_form_element.addClass('hidden-buttons').find('.latepoint-footer').remove();\n $booking_form_element.find('.latepoint-progress').css( 'opacity', 0 );\n $booking_form_element.closest('.latepoint-summary-is-open').removeClass('latepoint-summary-is-open');\n $booking_form_element.addClass('is-final-step');\n }else{\n if(data.show_next_btn === true){\n latepoint_show_next_btn($booking_form_element);\n }else{\n latepoint_hide_next_btn($booking_form_element);\n }\n if(data.show_prev_btn === true){\n latepoint_show_prev_btn($booking_form_element);\n }else{\n latepoint_hide_prev_btn($booking_form_element);\n }\n }\n latepoint_change_step_desc($booking_form_element, data.step_name);\n }else{\n $booking_form_element.removeClass('step-content-loading').addClass('step-content-loaded');\n $booking_form_element.find('.latepoint-next-btn, .latepoint-prev-btn').removeClass('os-loading');\n if(data.send_to_step && $booking_form_element.find('.latepoint-step-content[data-step-name=\"'+ data.send_to_step +'\"]').length){\n $booking_form_element.data('flash-error', data.message);\n latepoint_reload_step($booking_form_element, data.send_to_step);\n }else{\n latepoint_show_message_inside_element(data.message, $booking_form_element.find('.latepoint-body'));\n latepoint_show_prev_btn($booking_form_element);\n }\n }\n $booking_form.find('.latepoint_step_direction').val('next');\n }\n });\n }\n\n function latepoint_init_booking_form(){\n\n $('.latepoint-booking-form-element .latepoint-form').on('submit', function(e){\n e.preventDefault();\n var $booking_form = $(this);\n var $booking_form_element = $booking_form.closest('.latepoint-booking-form-element');\n latepoint_hide_prev_btn($booking_form_element);\n var current_step = $booking_form_element.find('.latepoint_current_step').val();\n var callbacks_list = [];\n $booking_form_element.trigger('latepoint:submitBookingForm', [{ current_step: current_step, \n callbacks_list: callbacks_list, \n is_final_submit: $booking_form_element.data('next-submit-is-last') == 'yes',\n direction: $booking_form_element.find('.latepoint_step_direction').val()}]);\n jQuery.when(...callbacks_list.map(callback => callback.action()))\n .done(() => {\n latepoint_submit_booking_form($booking_form);\n })\n .fail((error) => {\n if(error.send_to_step && $booking_form_element.find('.latepoint-step-content[data-step-name=\"'+ error.send_to_step +'\"]').length){\n latepoint_reload_step($booking_form_element, error.send_to_step);\n $booking_form_element.data('flash-error', error.message);\n }\n $booking_form_element.removeClass('step-content-loading').addClass('step-content-loaded');\n latepoint_show_message_inside_element(error.message, $booking_form_element.find('.latepoint-body'), 'error');\n $booking_form_element.find('.latepoint-next-btn').removeClass('os-loading');\n if($booking_form_element.find('.latepoint-step-content:last-child').prev('.latepoint-step-content').length) latepoint_show_prev_btn($booking_form_element);\n });\n });\n\n $('.latepoint-lightbox-close').on('click', function(){\n\n let params = new URLSearchParams(location.search);\n if(params.has('latepoint_booking_intent_key')){\n params.delete('latepoint_booking_intent_key');\n history.replaceState(null, '', '?' + params + location.hash);\n }\n\n $('body').removeClass('latepoint-lightbox-active');\n $('.latepoint-lightbox-w').remove();\n return false;\n });\n\n\n\n $('.latepoint-timezone-selector-w select').on('change', function(e){\n var $select_box = $(this);\n $select_box.closest('.latepoint-timezone-selector-w').addClass('os-loading');\n var data = { action: latepoint_helper.route_action, route_name: $(this).closest('.latepoint-timezone-selector-w').data('route-name'), params: { timezone_name: $(this).val()}, layout: 'none', return_format: 'json'}\n var $booking_form_element = $select_box.closest('.latepoint-booking-form-element');\n $booking_form_element.removeClass('step-content-loaded').addClass('step-content-loading');\n $.ajax({\n type : \"post\",\n dataType : \"json\",\n url : latepoint_helper.ajaxurl,\n data : data,\n success: function(data){\n $select_box.closest('.latepoint-timezone-selector-w').removeClass('os-loading');\n $booking_form_element.removeClass('step-content-loading');\n if(data.status === \"success\"){\n // reload datepicker if its the step\n if($select_box.closest('.latepoint-booking-form-element').hasClass('current-step-datepicker')){\n latepoint_reload_step($select_box.closest('.latepoint-booking-form-element'));\n }\n }else{\n\n }\n }\n });\n });\n\n if(!latepoint_helper.is_timezone_selected){\n const tzid = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if(tzid){\n if(tzid != $('.latepoint-timezone-selector-w select').val()) $('.latepoint-timezone-selector-w select').val(tzid).change();\n }\n }\n\n \n\n $('.latepoint-booking-form-element').on('click', '.lp-option', function(){\n $(this).closest('.lp-options').find('.lp-option.selected').removeClass('selected');\n $(this).addClass('selected');\n });\n\n\n\n\n // Next Step button Click\n $('.latepoint-booking-form-element .latepoint-next-btn').on('click', function(e){\n if($(this).hasClass('disabled') || $(this).hasClass('os-loading')) return false;\n var $next_btn = $(this); \n $next_btn.addClass('os-loading');\n var $booking_form = $(this).closest('.latepoint-form');\n var $booking_form_element = $booking_form.closest('.latepoint-booking-form-element');\n\n var current_step = $booking_form_element.find('.latepoint_current_step').val();\n\n $booking_form.find('.latepoint_step_direction').val('next');\n var callbacks_list = [];\n $booking_form_element.trigger('latepoint:nextStepClicked', [{current_step: current_step, callbacks_list: callbacks_list}]);\n latepoint_hide_prev_btn($booking_form_element);\n jQuery.when(...callbacks_list.map(callback => callback.action()))\n .done(() => {\n $booking_form.submit();\n })\n .fail((error) => {\n latepoint_show_message_inside_element(error.message, $booking_form_element.find('.latepoint-body'), 'error');\n $next_btn.removeClass('os-loading');\n // if previous step exists - show prev button\n if($booking_form_element.find('.latepoint-step-content:last-child').prev('.latepoint-step-content').length) latepoint_show_prev_btn($booking_form_element);\n });\n return false;\n });\n\n\n // Previous Step button Click\n $('.latepoint-booking-form-element .latepoint-prev-btn').on('click', function(e){\n if($(this).hasClass('disabled') || $(this).hasClass('os-loading')) return false;\n var $booking_form = $(this).closest('.latepoint-form');\n var $booking_form_element = $booking_form.closest('.latepoint-booking-form-element');\n\n var current_step = $booking_form_element.find('.latepoint_current_step').val();\n var $current_step = $booking_form_element.find('.latepoint-step-content[data-step-name=\"'+current_step+'\"]');\n\n if(current_step == 'locations'){\n }\n if(current_step == 'agents'){\n }\n if(current_step == 'payment'){\n var $payment_step = $booking_form_element.find('.step-payment-w');\n if($payment_step.length){\n $payment_step.find('.lp-option.selected').removeClass('selected');\n var new_sub_step = latepoint_get_payment_sub_step($booking_form_element, $payment_step.attr('data-sub-step'), true);\n // hide all payment method content blocks\n if(new_sub_step != $payment_step.attr('data-sub-step')){\n $payment_step.find('.lp-payment-method-content').hide();\n $payment_step.attr('data-sub-step', new_sub_step);\n latepoint_hide_next_btn($booking_form_element);\n return false;\n }\n }\n }\n if(current_step == 'services'){\n var $services_step = $booking_form_element.find('.step-services-w');\n if($services_step.hasClass('selecting-service-duration')){\n $services_step.removeClass('selecting-service-duration');\n $services_step.find('.os-services > .os-item.selected').removeClass('selected');\n clear_sub_step_duration($booking_form_element);\n if(($booking_form_element.find('.latepoint-step-content').length <= 1) && !$services_step.hasClass('selecting-item-category')){\n latepoint_hide_prev_btn($booking_form_element)\n }\n latepoint_calculate_total_price($booking_form_element);\n return false;\n }\n if($services_step.hasClass('selecting-total-attendies')){\n $services_step.removeClass('selecting-total-attendies');\n if($services_step.find('.os-services > .os-item.selected').hasClass('has-multiple-durations')){\n // multiple durations\n $services_step.find('.os-services > .os-item.selected .os-service-durations .os-selectable-item.selected').removeClass('selected');\n $services_step.addClass('selecting-service-duration');\n latepoint_hide_next_btn($booking_form_element);\n }else{\n $services_step.find('.os-services > .os-item.selected').removeClass('selected');\n }\n clear_sub_step_attendies($booking_form_element);\n if(($booking_form_element.find('.latepoint-step-content').length <= 1) && !$services_step.hasClass('selecting-item-category')){\n latepoint_hide_prev_btn($booking_form_element);\n }\n latepoint_calculate_total_price($booking_form_element);\n return false;\n }\n }\n\n // handle categories\n if($current_step.hasClass('selecting-item-category')){\n if($current_step.find('.os-item-category-w .os-item-category-w.selected').length){\n $current_step.find('.os-item-category-w .os-item-category-w.selected').parents('.os-item-category-w').addClass('selected').find('.os-item-category-w.selected').removeClass('selected');\n }else{\n $current_step.removeClass('selecting-item-category').find('.os-item-category-w.selected').removeClass('selected');\n $current_step.removeClass('selecting-item-category').find('.os-item-categories-holder.show-selected-only').removeClass('show-selected-only');\n }\n if(($booking_form_element.find('.latepoint-step-content').length <= 1) && !$current_step.hasClass('selecting-item-category')){\n latepoint_hide_prev_btn($booking_form_element);\n }\n latepoint_calculate_total_price($booking_form_element);\n return false;\n }\n\n var $current_active_step = $booking_form_element.find('.latepoint-step-content:last-child');\n if($current_active_step.data('clear-action')){\n window[$current_active_step.data('clear-action')]($booking_form_element);\n }\n\n var $back_btn = $(this);\n $back_btn.addClass('os-loading');\n $booking_form_element.removeClass('step-content-loaded').addClass('step-content-loading');\n var $new_current_step = $booking_form_element.find('.latepoint-step-content.is-hidden').last();\n var new_current_step_name = $new_current_step.data('step-name');\n latepoint_change_step_desc($booking_form_element, new_current_step_name);\n setTimeout(function(){\n $new_current_step.removeClass('is-hidden');\n $current_active_step.remove();\n $booking_form_element.find('.latepoint_current_step').val(new_current_step_name);\n $booking_form_element.removeClass(function (index, className) { return (className.match (/(^|\\s)current-step-\\S+/g) || []).join(' '); }).addClass('current-step-' + new_current_step_name);\n $booking_form_element.find('.latepoint-next-btn span').text($booking_form_element.find('.latepoint-next-btn').data('label'));\n $booking_form_element.data('next-submit-is-last', 'no');\n latepoint_show_next_btn($booking_form_element);\n $back_btn.removeClass('os-loading');\n if($booking_form_element.find('.latepoint-step-content').length <= 1){\n if($new_current_step.hasClass('selecting-item-category')){\n\n }\n if(new_current_step_name == 'services'){\n var $services_step = $booking_form_element.find('.step-services-w');\n if($services_step.hasClass('selecting-service-duration') || $services_step.hasClass('selecting-total-attendies') || $services_step.hasClass('selecting-item-category')){\n if($services_step.find('.os-services > .os-item.selected').hasClass('is-preselected')){\n // if service is preselected check if there are both multiple durations and quantity selector and only then show prev button\n if($services_step.hasClass('selecting-total-attendies') && $services_step.find('.os-services > .os-item.selected').hasClass('has-multiple-durations')){\n // if selecting attendies and there are multiple durations - show prev button\n latepoint_show_prev_btn($booking_form_element);\n }else{\n latepoint_hide_prev_btn($booking_form_element);\n }\n }else{\n latepoint_show_prev_btn($booking_form_element);\n }\n }else{\n latepoint_hide_prev_btn($booking_form_element);\n }\n }else{\n if(!$new_current_step.hasClass('selecting-item-category')){\n latepoint_hide_prev_btn($booking_form_element);\n }\n }\n }\n $booking_form_element.removeClass('step-content-loading').addClass('step-content-mid-loading');\n setTimeout(function(){\n $booking_form_element.removeClass('step-content-mid-loading').addClass('step-content-loaded');\n latepoint_hide_message_inside_element($booking_form_element.find('.latepoint-body'));\n latepoint_calculate_total_price($booking_form_element);\n }, 150);\n }, 700);\n return false;\n });\n }\n\n // DOCUMENT READY\n $( function() {\n\n latepoint_init_customer_dashboard_login();\n latepoint_init_customer_dashboard();\n\n if(latepoint_helper.start_from_booking_intent_key){\n\n var data = { \n action: latepoint_helper.route_action,\n route_name: latepoint_helper.start_from_booking_intent_route, \n params: { booking_intent_key: latepoint_helper.start_from_booking_intent_key }, \n layout: 'none', \n return_format: 'json' \n }\n\n $.ajax({\n type : \"post\",\n dataType : \"json\",\n url : latepoint_helper.ajaxurl,\n data : data,\n success: function(data){\n if(data.status === \"success\"){\n var lightbox_class = '';\n latepoint_show_data_in_lightbox(data.message, data.lightbox_class);\n latepoint_init_booking_form();\n var $booking_form_element = jQuery('.latepoint-lightbox-w .latepoint-booking-form-element');\n $booking_form_element.find('.latepoint-step-content').addClass('is-hidden').last().removeClass('is-hidden');\n if($booking_form_element.find('.latepoint-step-content').length > 1) latepoint_show_prev_btn($booking_form_element);\n var $booking_form_element = jQuery('.latepoint-lightbox-w .latepoint-booking-form-element');\n $booking_form_element.find('.latepoint-step-content').each(function(){\n latepoint_init_step($(this).data('step-name'), $booking_form_element);\n });\n $('body').addClass('latepoint-lightbox-active');\n }else{\n // console.log(data.message);\n }\n }\n });\n }\n\n if($('.latepoint-booking-form-element').length){\n latepoint_init_booking_form();\n $('.latepoint-booking-form-element').each(function(){\n latepoint_init_step($(this).find('.latepoint_current_step').val(), $(this));\n });\n }\n\n $('.latepoint-request-booking-cancellation').on('click', function(){\n if(!confirm(latepoint_helper.cancel_booking_prompt)) return false;\n var $this = $(this);\n var $booking_box = $this.closest('.customer-booking');\n\n var route = $(this).data('route');\n var params = {id: $booking_box.data('id')};\n\n var data = { action: latepoint_helper.route_action, route_name: route, params: params, layout: 'none', return_format: 'json' }\n $this.addClass('os-loading');\n $.ajax({\n type : \"post\",\n dataType : \"json\",\n url : latepoint_helper.ajaxurl,\n data : data,\n success: function(data){\n if(data.status === \"success\"){\n location.reload();\n $this.remove();\n }else{\n $this.removeClass('os-loading');\n }\n }\n });\n return false;\n });\n\n\n $('body').on('click', '.os-step-tabs .os-step-tab', function(){\n $(this).closest('.os-step-tabs').find('.os-step-tab').removeClass('active');\n $(this).addClass('active');\n var target = $(this).data('target');\n $(this).closest('.os-step-tabs-w').find('.os-step-tab-content').hide();\n $(target).show();\n });\n\n $('body').on('keyup', '.os-form-group .os-form-control', function(){\n if($(this).val()){\n $(this).closest('.os-form-group').addClass('has-value');\n }else{\n $(this).closest('.os-form-group').removeClass('has-value');\n }\n });\n\n $('.latepoint-tab-triggers').on('click', '.latepoint-tab-trigger', function(){\n var $tabs_wrapper = $(this).closest('.latepoint-tabs-w')\n $tabs_wrapper.find('.latepoint-tab-trigger.active').removeClass('active');\n $tabs_wrapper.find('.latepoint-tab-content').removeClass('active');\n $(this).addClass('active');\n $tabs_wrapper.find('.latepoint-tab-content' + $(this).data('tab-target')).addClass('active');\n return false;\n });\n\n\n // Main Button to trigger lightbox opening\n $('.latepoint-book-button, .os_trigger_booking').on('click', function(){\n var $this = $(this);\n var route = latepoint_helper.booking_button_route;\n var params = {};\n var restrictions = {};\n if($this.data('show-service-categories')) restrictions.show_service_categories = $this.data('show-service-categories');\n if($this.data('show-locations')) restrictions.show_locations = $this.data('show-locations');\n if($this.data('show-services')) restrictions.show_services = $this.data('show-services');\n if($this.data('show-agents')) restrictions.show_agents = $this.data('show-agents');\n if($this.data('selected-location')) restrictions.selected_location = $this.data('selected-location');\n if($this.data('selected-agent')) restrictions.selected_agent = $this.data('selected-agent');\n if($this.data('selected-service')) restrictions.selected_service = $this.data('selected-service');\n if($this.data('selected-duration')) restrictions.selected_duration = $this.data('selected-duration');\n if($this.data('selected-total-attendees')) restrictions.selected_total_attendies = $this.data('selected-total-attendees');\n if($this.data('selected-service-category')) restrictions.selected_service_category = $this.data('selected-service-category');\n if($this.data('selected-start-date')) restrictions.selected_start_date = $this.data('selected-start-date');\n if($this.data('selected-start-time')) restrictions.selected_start_time = $this.data('selected-start-time');\n if($this.data('calendar-start-date')) restrictions.calendar_start_date = $this.data('calendar-start-date');\n\n if($.isEmptyObject(restrictions) == false) params.restrictions = restrictions;\n\n var data = { action: latepoint_helper.route_action, route_name: route, params: params, layout: 'none', return_format: 'json' }\n $this.addClass('os-loading');\n $.ajax({\n type : \"post\",\n dataType : \"json\",\n url : latepoint_helper.ajaxurl,\n data : data,\n success: function(data){\n if(data.status === \"success\"){\n var lightbox_class = '';\n if($this.data('hide-summary') != 'yes') lightbox_class+= ' latepoint-with-summary';\n if($this.data('hide-side-panel') == 'yes') lightbox_class+= ' latepoint-hide-side-panel';\n latepoint_show_data_in_lightbox(data.message, lightbox_class);\n latepoint_init_booking_form();\n var $booking_form_element = jQuery('.latepoint-lightbox-w .latepoint-booking-form-element');\n latepoint_init_step(data.step, $booking_form_element);\n $('body').addClass('latepoint-lightbox-active');\n $this.removeClass('os-loading');\n \n }else{\n $this.removeClass('os-loading');\n // console.log(data.message);\n }\n }\n });\n\n return false;\n });\n\n\n\n });\n\n\n} )( jQuery );\n"]}