{"version":3,"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_percent","alias","radixPoint","decimal_separator","digits","number_of_decimals","digitsOptional","suffix","rightAlign","latepoint_mask_minutes","removeMaskOnSubmit","latepoint_mask_money","groupSeparator","thousand_separator","prefix","currency_symbol_before","currency_symbol_after","latepoint_mask_date","inputFormat","date_format_for_js","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_add_notification","message","message_type","wrapper","find","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","$booking_form_element","payment_method","_jQuery","callbacks_list","is_last_step","data","trigger","removeClass","when","apply","_toConsumableArray","map","callback","action","done","show","fail","err","console","error","latepoint_lightbox_close","latepoint_show_next_btn","clear_step_services","latepoint_reload_summary","clear_sub_step_attendies","val","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","$booking_form","form_data","reload_booking_summary_route","latepoint_password_changed_show_login","response","latepoint_hide_message_inside_element","prepend","latepoint_add_action","priority","sort","a","b","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_locations","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","includes","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","trim","msg_not_available","slideDown","$scrollable_wrapper","stop","animate","scrollTop","scrollHeight","latepoint_init_timeslots","this","hasClass","selected_timeslot_time","timeshift_minutes","start_date","Date","setDate","getDate","toISOString","latepoint_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","slideUp","latepoint_format_price","toFixed","e","which","focus","$payment_step","portion","$category_wrapper","$main_parent","parent","off","latepoint_selectable_item_clicked","latepoint_selectable_item_quantity_keyup","latepoint_update_quantity_for_selectable_items","ids","get","event","new_value","max_quantity","stopPropagation","stopImmediatePropagation","target","summary_value","String","window","latepoint_trigger_next_btn","price","replace","min","new_value_formatted","add_value","agent_id","latepoint_init_booking_summary_lightbox","account_nonse","password","password_confirmation","param","latepoint_init_customer_dashboard","$select_box","timezone_name","location","reload","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","each","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","setTimeout","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","FormData","file_data","files","file_name","getAttribute","processData","contentType","is_pre_last_step","css","show_next_btn","show_prev_btn","send_to_step","latepoint_init_booking_form","_jQuery2","preventDefault","current_step","is_final_submit","direction","toggleClass","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","latepoint_init_booking_form_by_trigger","$trigger","route","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","lightbox_class","step","document","ready","$","$this","confirm","before","after","func_name","func_arr","log","alert","record_id","documentElement","body","top","form_values_to_update","name","start_from_booking_intent_key","start_from_booking_intent_route","booking_intent_key","cancel_booking_prompt","$booking_box","$tabs_wrapper"],"sources":["../../lib/assets/javascripts/bin/time.js","../../lib/assets/javascripts/bin/shared.js","../../lib/assets/javascripts/bin/notifications.js","../../lib/assets/javascripts/bin/actions.js","../../lib/assets/javascripts/bin/front/main.js","../../lib/assets/javascripts/front.js"],"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_percent($elem){\n\tif(jQuery().inputmask){\n\t $elem.inputmask({\n\t\t\t'alias': 'decimal',\n\t\t\t'radixPoint': latepoint_helper.decimal_separator,\n\t\t\t'digits': latepoint_helper.number_of_decimals,\n\t\t\t'digitsOptional': false,\n\t\t\t'suffix': '%',\n\t\t\t'placeholder': '0',\n\t\t\t'rightAlign': false\n\t });\n\t}\n}\n\nfunction latepoint_mask_minutes($elem){\n\tif(jQuery().inputmask){\n\t $elem.inputmask({\n\t\t\t'removeMaskOnSubmit' : true,\n\t\t\t'alias': 'numeric',\n\t\t\t'digits': 0,\n\t\t\t'suffix': ' minutes',\n\t\t\t'placeholder': '0',\n\t\t\t'rightAlign': false\n\t });\n\t}\n}\n\n\nfunction latepoint_mask_money($elem){\n\tif(jQuery().inputmask){\n\t $elem.inputmask({\n\t\t\t'alias': 'currency',\n\t\t\t'groupSeparator': latepoint_helper.thousand_separator,\n\t\t\t'radixPoint': latepoint_helper.decimal_separator,\n\t\t\t'digits': latepoint_helper.number_of_decimals,\n\t\t\t'digitsOptional': false,\n\t\t\t'prefix': latepoint_helper.currency_symbol_before ? latepoint_helper.currency_symbol_before + ' ' : '',\n\t\t\t'suffix': latepoint_helper.currency_symbol_after ? ' ' + latepoint_helper.currency_symbol_after : '',\n\t\t\t'placeholder': '0',\n\t\t\t'rightAlign': false\n\t });\n\t}\n}\n\nfunction latepoint_mask_date($elem){\n\tif(jQuery().inputmask){\n\t $elem.inputmask({\n\t\t\t'alias': 'datetime',\n\t\t\t'inputFormat' : latepoint_helper.date_format_for_js\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}","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 'replace':\n $this.replaceWith(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(typeof window[func_arr[0]][func_arr[1]] !== 'function'){\n console.log(func_name + ' is undefined');\n }\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(typeof window[func_name] !== 'function'){\n console.log(func_name + ' is undefined');\n }\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(typeof window[func_name] !== 'function'){\n console.log(func_name + ' is undefined');\n }\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});","/*\n * Copyright (c) 2022 LatePoint LLC. All rights reserved.\n */\n\nfunction 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 .fail((err) => { console.error(err)});\n }\n\n function latepoint_lightbox_close(){\n jQuery('body').removeClass('latepoint-lightbox-active');\n jQuery('.latepoint-lightbox-w').remove();\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_reload_summary($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_reload_summary($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_reload_summary($booking_form_element, 'duration', '');\n }\n\n function clear_step_service_extras($booking_form_element){\n latepoint_reload_summary($booking_form_element, 'service-extras', '');\n }\n\n function clear_step_locations($booking_form_element){\n latepoint_reload_summary($booking_form_element, 'location', '');\n }\n\n function clear_step_agents($booking_form_element){\n latepoint_reload_summary($booking_form_element, 'agent', '');\n }\n\n function clear_step_datepicker($booking_form_element){\n latepoint_reload_summary($booking_form_element, 'time', '');\n latepoint_reload_summary($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_reload_summary($booking_form_element, field_name = '', value = ''){\n var $summary_holder = $booking_form_element.closest('.latepoint-with-summary');\n if(!$summary_holder.length) return;\n\n $booking_form_element.find('.latepoint-summary-w').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.reload_booking_summary_route, params: form_data, 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 if(data.status === \"success\"){\n $booking_form_element.find('.os-summary-contents').html(data.message);\n $booking_form_element.find('.latepoint-summary-w').removeClass('os-loading');\n $summary_holder.addClass('latepoint-summary-is-open');\n }\n }\n });\n return;\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\nfunction 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\nfunction 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 jQuery('.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\nfunction latepoint_init_timeslots(){\n jQuery('.dp-timepicker-trigger').on('click', function(){\n var $booking_form_element = jQuery(this).closest('.latepoint-booking-form-element');\n if(jQuery(this).hasClass('is-booked') || jQuery(this).hasClass('is-off')){\n // Show error message that you cant select a booked period\n }else{\n if(jQuery(this).hasClass('selected')){\n jQuery(this).removeClass('selected');\n jQuery(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_reload_summary($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 = jQuery(this).find('.dp-label-time').html();\n jQuery(this).addClass('selected').find('.dp-label').prepend('' + $booking_form_element.find('.latepoint-form').data('selected-label') + '');\n\n var minutes = parseInt(jQuery(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_reload_summary($booking_form_element, 'time', selected_timeslot_time);\n }\n }\n return false;\n });\n}\n\nfunction latepoint_init_monthly_calendar_navigation(){\n jQuery('.os-month-next-btn').on('click', function(){\n var $booking_form_element = jQuery(this).closest('.latepoint-booking-form-element');\n var next_month_route_name = jQuery(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 = jQuery(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 jQuery.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 jQuery('.os-month-prev-btn').on('click', function(){\n var $booking_form_element = jQuery(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\nfunction 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\nfunction 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\nfunction 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\nfunction latepoint_init_step_datepicker(){\n latepoint_init_timeslots();\n latepoint_init_monthly_calendar_navigation();\n jQuery('.os-months').on('click', '.os-day', function(){\n if(jQuery(this).hasClass('os-day-passed')) return false;\n if(jQuery(this).hasClass('os-not-in-allowed-period')) return false;\n var $booking_form_element = jQuery(this).closest('.latepoint-booking-form-element');\n if(jQuery(this).closest('.os-monthly-calendar-days-w').hasClass('hide-if-single-slot')){\n\n // HIDE TIMESLOT IF ONLY ONE TIMEPOINT\n if(jQuery(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 jQuery(this).addClass('selected');\n // set date\n $booking_form_element.find('.latepoint_start_date').val(jQuery(this).data('date'));\n latepoint_reload_summary($booking_form_element, 'date', jQuery(this).data('nice-date'));\n if(jQuery(this).hasClass('os-one-slot-only')){\n // clicked on a day that has only one slot available\n var bookable_minutes = jQuery(this).data('bookable-minutes').toString().split(':')[0];\n var selected_timeslot_time = latepoint_format_minutes_to_time(Number(bookable_minutes), Number(jQuery(this).data('service-duration')));\n $booking_form_element.find('.latepoint_start_time').val(jQuery(this).data('bookable-minutes'));\n latepoint_show_next_btn($booking_form_element);\n latepoint_reload_summary($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(jQuery(this));\n // initialize timeslots events\n latepoint_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(jQuery(this).data('date'));\n latepoint_reload_summary($booking_form_element, 'date', jQuery(this).data('nice-date'));\n $booking_form_element.find('.os-day.selected').removeClass('selected');\n jQuery(this).addClass('selected');\n\n // build timeslots\n day_timeslots(jQuery(this));\n // initialize timeslots events\n latepoint_init_timeslots();\n // clear time and hide next btn\n latepoint_reload_summary($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\nfunction 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\nfunction latepoint_init_step_payment($booking_form_element = false){\n if($booking_form_element.find('.step-payment-w').data('full-amount') > 0){\n latepoint_reload_summary($booking_form_element, 'price', latepoint_format_price(($booking_form_element.find('.step-payment-w').data('full-amount') * 100 / 100).toFixed(latepoint_helper.number_of_decimals)));\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 && !jQuery('.lp-payment-times-w').length && !jQuery('.lp-payment-methods-w').length && !jQuery('.lp-payment-portions-w').length){\n latepoint_init_payment_method_actions($booking_form_element, selected_payment_method);\n }\n\n jQuery('.latepoint-booking-form-element .coupon-code-input-submit').on('click', function(e){\n latepoint_apply_coupon(jQuery(this).closest('.coupon-code-input-w').find('.coupon-code-input'));\n return false;\n });\n\n jQuery('.latepoint-booking-form-element .coupon-code-clear').on('click', function(e){\n latepoint_remove_coupon(jQuery(this));\n return false;\n });\n\n jQuery('.latepoint-booking-form-element input.coupon-code-input').on('keyup', function(e){\n if(e.which === 13){\n latepoint_apply_coupon(jQuery(this));\n return false;\n }\n });\n\n\n jQuery('.latepoint-booking-form-element .coupon-code-trigger-w a').on('click', function(e){\n jQuery(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 jQuery('.latepoint-booking-form-element .lp-payment-trigger-later').on('click', function(e){\n var $booking_form_element = jQuery(this).closest('.latepoint-booking-form-element');\n $booking_form_element.find('input[name=\"booking[payment_method]\"]').val(jQuery(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 jQuery('.latepoint-booking-form-element .lp-payment-trigger-payment-time-selector').on('click', function(e){\n var $booking_form_element = jQuery(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 jQuery('.latepoint-booking-form-element .lp-payment-trigger-payment-method-selector').on('click', function(e){\n var $booking_form_element = jQuery(this).closest('.latepoint-booking-form-element');\n var selected_payment_method = jQuery(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 jQuery('.latepoint-booking-form-element .lp-payment-trigger-payment-portion-selector').on('click', function(e){\n var $booking_form_element = jQuery(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\nfunction latepoint_init_step_category_items(step_name){\n jQuery('.latepoint-step-content[data-step-name=\"' + step_name + '\"] .os-item-category-info').on('click', function(){\n var $booking_form_element = jQuery(this).closest('.latepoint-booking-form-element');\n latepoint_show_prev_btn($booking_form_element);\n jQuery(this).closest('.latepoint-step-content').addClass('selecting-item-category');\n var $category_wrapper = jQuery(this).closest('.os-item-category-w');\n var $main_parent = jQuery(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\nfunction latepoint_init_step_selectable_items(){\n jQuery('.os-selectable-items .os-selectable-item').off('click', latepoint_selectable_item_clicked);\n jQuery('.os-selectable-items .os-selectable-item').on('click', latepoint_selectable_item_clicked);\n\n jQuery('.os-selectable-items .os-selectable-item .item-quantity-selector-input').off('keyup', latepoint_selectable_item_quantity_keyup);\n jQuery('.os-selectable-items .os-selectable-item .item-quantity-selector-input').on('keyup', latepoint_selectable_item_quantity_keyup);\n}\n\n\nfunction 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(jQuery(this).hasClass('has-quantity')){\n return jQuery(this).data('item-id') + ':' + jQuery(this).find('input.item-quantity-selector-input').val();\n }else{\n return jQuery(this).data('item-id');\n }\n }).get();\n $item.closest('.latepoint-booking-form-element').find($item.data('id-holder')).val(ids);\n}\n\nfunction latepoint_selectable_item_quantity_keyup(event){\n var $booking_form_element = jQuery(this).closest('.latepoint-booking-form-element');\n var $item = jQuery(this).closest('.os-selectable-item');\n var new_value = jQuery(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 jQuery(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_reload_summary($booking_form_element);\n return false;\n }else{\n $item.trigger('click');\n }\n}\n\nfunction latepoint_selectable_item_clicked(event){\n event.stopPropagation();\n event.stopImmediatePropagation();\n var $booking_form_element = jQuery(this).closest('.latepoint-booking-form-element');\n if(jQuery(this).hasClass('has-quantity')){\n if(jQuery(event.target).hasClass('item-quantity-selector')){\n var current_value = parseInt(jQuery(this).find('input.item-quantity-selector-input').val());\n var new_value = (jQuery(event.target).data('sign') == 'minus') ? current_value - 1 : current_value + 1;\n var max_quantity = jQuery(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 jQuery(this).find('input.item-quantity-selector-input').val(new_value);\n if(( jQuery(this).hasClass('selected') && (new_value > 0) ) || (!jQuery(this).hasClass('selected') && (new_value == 0))){\n latepoint_update_quantity_for_selectable_items(jQuery(this));\n latepoint_reload_summary($booking_form_element);\n return false;\n }\n }\n if(jQuery(event.target).hasClass('item-quantity-selector-input')){\n latepoint_update_quantity_for_selectable_items(jQuery(this));\n latepoint_reload_summary($booking_form_element);\n return false;\n }\n }\n var summary_value = '';\n if(jQuery(this).hasClass('os-allow-multiselect')){\n if(jQuery(this).hasClass('selected')){\n jQuery(this).removeClass('selected');\n if(jQuery(this).hasClass('has-quantity')) jQuery(this).find('input.item-quantity-selector-input').val(0);\n }else{\n jQuery(this).addClass('selected');\n if(jQuery(this).hasClass('has-quantity') && !(jQuery(this).find('input.item-quantity-selector-input').val() > 0)){\n jQuery(this).find('input.item-quantity-selector-input').val(1);\n }\n }\n latepoint_update_quantity_for_selectable_items(jQuery(this));\n summary_value = String(jQuery(this).closest('.os-selectable-items').find('.os-selectable-item.selected').map(function(){ return (' ' + jQuery(this).data('summary-value')); }).get()).trim();\n latepoint_show_next_btn($booking_form_element);\n }else{\n if(!jQuery(this).hasClass('os-duration-item')) jQuery(this).closest('.os-item-categories-main-parent').find('.os-selectable-item.selected').removeClass('selected');\n jQuery(this).closest('.os-selectable-items').find('.os-selectable-item.selected').removeClass('selected');\n jQuery(this).addClass('selected');\n $booking_form_element.find(jQuery(this).data('id-holder')).val(jQuery(this).data('item-id'));\n summary_value = jQuery(this).data('summary-value');\n if(jQuery(this).data('os-call-func')){\n window[jQuery(this).data('os-call-func')](jQuery(this));\n }\n if(jQuery(this).data('activate-sub-step')){\n window[jQuery(this).data('activate-sub-step')](jQuery(this));\n }else{\n latepoint_trigger_next_btn($booking_form_element);\n }\n }\n latepoint_reload_summary($booking_form_element, jQuery(this).data('summary-field-name'), summary_value);\n}\n\n\nfunction latepoint_format_price(price){\n // replace default decimal separator dot with comma if it's in settings\n if(latepoint_helper.decimal_separator == ',') price = String(price).replace('.', ',');\n return latepoint_helper.currency_symbol_before + String(price) + latepoint_helper.currency_symbol_after;\n}\n\n\nfunction latepoint_init_step_services(){\n jQuery('.total-attendies-selector-input').on('change', function(){\n var max_capacity = jQuery(this).closest('.total-attendies-selector-w').data('max-capacity');\n var min_capacity = jQuery(this).closest('.total-attendies-selector-w').data('min-capacity');\n var new_value = jQuery(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 jQuery(this).val(new_value);\n var new_value_formatted = new_value + ' ' + ((new_value > 1) ? jQuery(this).data('summary-plural') : jQuery(this).data('summary-singular'));\n\n var $booking_form_element = jQuery(this).closest('.latepoint-booking-form-element');\n latepoint_reload_summary($booking_form_element, 'total-attendies', new_value_formatted);\n });\n jQuery('.total-attendies-selector').on('click', function(){\n var add_value = (jQuery(this).hasClass('total-attendies-selector-plus')) ? 1 : -1;\n var max_capacity = jQuery(this).closest('.total-attendies-selector-w').data('max-capacity');\n var min_capacity = jQuery(this).closest('.total-attendies-selector-w').data('min-capacity');\n var current_value = jQuery(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 jQuery(this).closest('.total-attendies-selector-w').find('input').val(new_value).trigger('change');\n return false;\n });\n}\n\n\nfunction 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\nfunction latepoint_init_step_locations(){\n}\n\nfunction latepoint_init_step_agents(){\n jQuery('.os-items .os-item-details-btn').on('click', function(){\n var $booking_form_element = jQuery(this).closest('.latepoint-booking-form-element');\n var agent_id = jQuery(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 jQuery('.os-agent-bio-close').on('click', function(){\n jQuery(this).closest('.os-agent-bio-popup').removeClass('active');\n return false;\n });\n}\n\nfunction latepoint_init_booking_summary_lightbox(){\n jQuery('.customer-dashboard-booking-summary-lightbox').on('click', '.qr-show-trigger', function(){\n jQuery(this).closest('.latepoint-lightbox-i').find('.qr-code-on-confirmation').addClass('show-vevent-qr-code');\n return false;\n });\n}\n\nfunction latepoint_init_step_confirmation(){\n\n jQuery('.latepoint-booking-form-element').on('click', '.set-customer-password-btn', function(){\n var $btn = jQuery(this);\n var $booking_form_element = jQuery(this).closest('.latepoint-booking-form-element');\n\n $btn.addClass('os-loading');\n var params = { account_nonse: jQuery('input[name=\"account_nonse\"]').val(), password: jQuery('input[name=\"customer[password]\"]').val(), password_confirmation: jQuery('input[name=\"customer[password_confirmation]\"]').val()}\n var data = { action: latepoint_helper.route_action, route_name: jQuery(this).data('btn-action'), params: jQuery.param(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 $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 jQuery('.latepoint-booking-form-element').on('click', '.qr-show-trigger', function(){\n var $booking_form_element = jQuery(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 jQuery('.latepoint-booking-form-element').on('click', '.show-set-password-fields', function(){\n var $booking_form_element = jQuery(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 jQuery(this).closest('.info-box').hide();\n return false;\n });\n}\n\nfunction latepoint_init_customer_dashboard(){\n jQuery('.latepoint-customer-timezone-selector-w select').on('change', function(e){\n var $select_box = jQuery(this);\n $select_box.closest('.latepoint-customer-timezone-selector-w').addClass('os-loading');\n var data = { action: latepoint_helper.route_action, route_name: jQuery(this).closest('.latepoint-customer-timezone-selector-w').data('route-name'), params: { timezone_name: jQuery(this).val()}, 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 $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\nfunction latepoint_init_customer_dashboard_login(){\n if(jQuery('.latepoint-login-form-w #facebook-signin-btn').length && jQuery('.latepoint-login-form-w').length){\n jQuery('.latepoint-login-form-w #facebook-signin-btn').on('click', function(){\n var $login_form_wrapper = jQuery(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: jQuery.param(params), layout: 'none', return_format: 'json' };\n latepoint_step_content_change_start($login_form_wrapper);\n jQuery.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(jQuery('.latepoint-login-form-w #google-signin-btn').length && jQuery('.latepoint-login-form-w').length && typeof google !== 'undefined'){\n // INIT GOOGLE LOGIN\n var googleUser = {};\n\n var $login_form_wrappers = jQuery('.latepoint-login-form-w');\n $login_form_wrappers.each(function(){\n var $login_form_wrapper = jQuery(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\nfunction 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\nfunction latepoint_init_step_contact(){\n latepoint_init_facebook_login();\n latepoint_init_google_login();\n latepoint_init_form_masks();\n\n jQuery('.step-contact-w').each(function(){\n latepoint_reload_summary(jQuery(this).closest('.latepoint-booking-form-element'), 'customer', get_customer_name(jQuery(this)));\n });\n\n jQuery('.step-contact-w').on('keyup', 'input[name=\"customer[first_name]\"], input[name=\"customer[last_name]\"]', function(){\n var $booking_form_element = jQuery(this).closest('.latepoint-booking-form-element');\n latepoint_reload_summary($booking_form_element, 'customer', get_customer_name($booking_form_element));\n });\n\n jQuery('.step-contact-w').on('keyup', '.os-form-control.required', function(){\n var $booking_form_element = jQuery(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 jQuery('.step-customer-logout-btn').on('click', function(){\n var $booking_form_element = jQuery(this).closest('.latepoint-booking-form-element');\n var data = { action: latepoint_helper.route_action, route_name: jQuery(this).data('btn-action'), layout: 'none', return_format: 'json' }\n latepoint_step_content_change_start($booking_form_element);\n jQuery.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 jQuery('.step-login-existing-customer-btn').on('click', function(){\n var $booking_form_element = jQuery(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: jQuery(this).data('btn-action'), params: jQuery.param(params), layout: 'none', return_format: 'json' }\n latepoint_step_content_change_start($booking_form_element);\n jQuery.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\nfunction latepoint_step_content_change_start($booking_form_element){\n $booking_form_element.removeClass('step-content-loaded').addClass('step-content-loading');\n}\n\n// TODO\nfunction 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\nfunction latepoint_init_facebook_login(){\n if(!jQuery('#facebook-signin-btn').length || !jQuery('.latepoint-booking-form-element').length) return;\n jQuery('#facebook-signin-btn').on('click', function(){\n var $booking_form_element = jQuery(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: jQuery.param(params), layout: 'none', return_format: 'json' };\n latepoint_step_content_change_start($booking_form_element);\n jQuery.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\nfunction 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: jQuery.param(params),\n layout: 'none',\n return_format: 'json'\n };\n if($booking_form_element) latepoint_step_content_change_start($booking_form_element);\n jQuery.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\nfunction latepoint_init_google_login(){\n if(!jQuery('#google-signin-btn').length || !jQuery('.latepoint-booking-form-element').length || typeof google === 'undefined') return;\n var googleUser = {};\n\n var $booking_form_elements = jQuery('.latepoint-booking-form-element');\n $booking_form_elements.each(function(){\n var $booking_form_element = jQuery(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\nfunction 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\nfunction 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\nfunction 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\nfunction 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}\nfunction 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\nfunction latepoint_validate_fields($fields){\n var is_valid = true;\n $fields.each(function(index){\n if(jQuery(this).val() == ''){\n is_valid = false;\n return false;\n }\n });\n return is_valid;\n}\n\nfunction latepoint_submit_booking_form($booking_form){\n var $booking_form_element = $booking_form.closest('.latepoint-booking-form-element');\n var form_data = new FormData();\n\n form_data.append('params', $booking_form.serialize());\n form_data.append('action', latepoint_helper.route_action);\n form_data.append('route_name', $booking_form.data('route-name'));\n form_data.append('layout', 'none');\n form_data.append('return_format', 'json');\n\n var file_data;\n $booking_form.find('input[type=\"file\"]').each(function(){\n file_data = this.files; // get multiple files from input file\n // remove booking[ from the param name and replace with files[ so that booking[field_name][] is turned into files[field_name]\n var file_name = this.getAttribute(\"name\");\n for(var i = 0;i 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 jQuery('.latepoint-lightbox-summary-trigger').on('click', function(){\n var $wrapper = jQuery(this).closest('.latepoint-w');\n $wrapper.toggleClass('show-summary-on-mobile');\n return false;\n });\n\n jQuery('.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 jQuery('body').removeClass('latepoint-lightbox-active');\n jQuery('.latepoint-lightbox-w').remove();\n return false;\n });\n\n\n\n jQuery('.latepoint-timezone-selector-w select').on('change', function(e){\n var $select_box = jQuery(this);\n $select_box.closest('.latepoint-timezone-selector-w').addClass('os-loading');\n var data = { action: latepoint_helper.route_action, route_name: jQuery(this).closest('.latepoint-timezone-selector-w').data('route-name'), params: { timezone_name: jQuery(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 jQuery.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 != jQuery('.latepoint-timezone-selector-w select').val()) jQuery('.latepoint-timezone-selector-w select').val(tzid).change();\n }\n }\n\n\n\n jQuery('.latepoint-booking-form-element').on('click', '.lp-option', function(){\n jQuery(this).closest('.lp-options').find('.lp-option.selected').removeClass('selected');\n jQuery(this).addClass('selected');\n });\n\n\n\n\n // Next Step button Click\n jQuery('.latepoint-booking-form-element .latepoint-next-btn').on('click', function(e){\n if(jQuery(this).hasClass('disabled') || jQuery(this).hasClass('os-loading')) return false;\n var $next_btn = jQuery(this);\n $next_btn.addClass('os-loading');\n var $booking_form = jQuery(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 jQuery('.latepoint-booking-form-element .latepoint-prev-btn').on('click', function(e){\n if(jQuery(this).hasClass('disabled') || jQuery(this).hasClass('os-loading')) return false;\n var $booking_form = jQuery(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_reload_summary($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_reload_summary($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_reload_summary($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 = jQuery(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_reload_summary($booking_form_element);\n }, 150);\n }, 700);\n return false;\n });\n}\n\nfunction latepoint_init_booking_form_by_trigger($trigger){\n var route = latepoint_helper.booking_button_route;\n var params = {};\n var restrictions = {};\n if($trigger.data('show-service-categories')) restrictions.show_service_categories = $trigger.data('show-service-categories');\n if($trigger.data('show-locations')) restrictions.show_locations = $trigger.data('show-locations');\n if($trigger.data('show-services')) restrictions.show_services = $trigger.data('show-services');\n if($trigger.data('show-agents')) restrictions.show_agents = $trigger.data('show-agents');\n if($trigger.data('selected-location')) restrictions.selected_location = $trigger.data('selected-location');\n if($trigger.data('selected-agent')) restrictions.selected_agent = $trigger.data('selected-agent');\n if($trigger.data('selected-service')) restrictions.selected_service = $trigger.data('selected-service');\n if($trigger.data('selected-duration')) restrictions.selected_duration = $trigger.data('selected-duration');\n if($trigger.data('selected-total-attendees')) restrictions.selected_total_attendies = $trigger.data('selected-total-attendees');\n if($trigger.data('selected-service-category')) restrictions.selected_service_category = $trigger.data('selected-service-category');\n if($trigger.data('selected-start-date')) restrictions.selected_start_date = $trigger.data('selected-start-date');\n if($trigger.data('selected-start-time')) restrictions.selected_start_time = $trigger.data('selected-start-time');\n if($trigger.data('calendar-start-date')) restrictions.calendar_start_date = $trigger.data('calendar-start-date');\n\n if(jQuery.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 $trigger.addClass('os-loading');\n jQuery.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($trigger.data('hide-summary') != 'yes') lightbox_class+= ' latepoint-with-summary';\n if($trigger.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 jQuery('body').addClass('latepoint-lightbox-active');\n $trigger.removeClass('os-loading');\n\n }else{\n $trigger.removeClass('os-loading');\n // console.log(data.message);\n }\n }\n });\n }","/*\n * Copyright (c) 2022 LatePoint LLC. All rights reserved.\n */\n// @codekit-prepend \"bin/time.js\"\n// @codekit-prepend \"bin/shared.js\"\n// @codekit-prepend \"bin/notifications.js\";\n// @codekit-prepend \"bin/actions.js\"\n// @codekit-prepend \"bin/front/main.js\"\n\n\n// DOCUMENT READY\njQuery(document).ready(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\n jQuery('body').on('click', '.latepoint-lightbox-close', function(){\n latepoint_lightbox_close();\n return false;\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 $('body').on('click', '.latepoint-book-button, .os_trigger_booking', function(){\n latepoint_init_booking_form_by_trigger($(this));\n return false;\n });\n\n});\n"],"mappings":"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"}