{"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_validate_form","$form","errors","find","each","validations","jQuery","this","data","$input","label","closest","text","field_has_errors","val","push","message","wp","i18n","__","window","intlTelInputGlobals","getInstance","isValidNumber","addClass","removeClass","latepoint_create_form_data_from_non_form_element","$elem","formData","FormData","fields","serializeArray","forEach","field","append","name","value","latepoint_create_form_data_from_booking_form","$booking_form","form_data","params","file_data","phoneInputName","getAttribute","phoneInputValue","getNumber","intlTelInputUtils","numberFormat","E164","set","latepoint_formdata_to_url_encoded_string","route_action","files","file_name","latepoint_mask_timefield","inputmask","mask","placeholder","filtered_form_data","_iterator","_createForOfIteratorHelper","_step","s","n","done","_step$value","_slicedToArray","key","File","err","e","f","param","Object","fromEntries","latepoint_mask_percent","alias","radixPoint","decimal_separator","digits","digitsOptional","suffix","rightAlign","latepoint_mask_minutes","removeMaskOnSubmit","latepoint_mask_money","groupSeparator","thousand_separator","number_of_decimals","prefix","currency_symbol_before","currency_symbol_after","latepoint_mask_date","inputFormat","date_format_for_js","latepoint_mask_phone","jsElem","dropdownContainer","document","body","onlyCountries","JSON","parse","included_phone_countries","preferredCountries","defaults","countryData","getCountryData","country","replace","intlTelInput","formatOnDisplay","nationalMode","autoPlaceholder","initialCountry","geoIpLookup","success","failure","cookieName","latepoint_has_cookie","latepoint_get_cookie","get","always","response","countryCode","toLowerCase","latepoint_set_cookie","separateDialCode","latepoint_show_booking_end_time","show_booking_end_time","days","date","Date","setTime","getTime","cookie","toGMTString","match","latepoint_delete_cookie","latepoint_add_notification","message_type","wrapper","remove","latepoint_generate_form_message_html","messages","status","message_html","Array","isArray","latepoint_clear_form_messages","latepoint_show_data_in_lightbox","extra_classes","lightbox_css_classes","latepoint_init_form_masks","latepoint_init_payment_method_actions","$booking_form_element","payment_method","_jQuery","callbacks_list","is_last_step","trigger","when","apply","_toConsumableArray","map","callback","action","show","fail","console","error","latepoint_lightbox_close","latepoint_show_next_btn","clear_step_services","latepoint_reload_summary","clear_sub_step_attendies","clear_sub_step_duration","clear_step_service_extras","clear_step_locations","clear_step_agents","clear_step_datepicker","latepoint_hide_next_btn","latepoint_show_prev_btn","latepoint_hide_prev_btn","latepoint_show_capacity_selector","$item","max_capacity","min_capacity","current_value","max","Number","latepoint_show_durations","latepoint_apply_coupon","$coupon_input","form_params","serialize","route_name","layout","return_format","ajax","type","dataType","url","ajaxurl","latepoint_show_message_inside_element","latepoint_reload_step","latepoint_remove_coupon","fadeOut","step_name","index","className","join","nextAll","submit","latepoint_get_payment_sub_step","current_sub_step","prev","offset","payment_sub_steps","selected_payment_method","indexOf","sub_step","latepoint_reset_password_from_booking_init","hide","on","html","field_name","$summary_holder","reload_booking_summary_route","latepoint_password_changed_show_login","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","hasClass","selected_timeslot_time","timeshift_minutes","start_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","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","event","new_value","max_quantity","stopPropagation","stopImmediatePropagation","target","summary_value","String","latepoint_trigger_next_btn","price","min","new_value_formatted","add_value","agent_id","latepoint_init_booking_summary_lightbox","account_nonse","password","password_confirmation","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","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","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","source_id","isEmptyObject","lightbox_class","step","$","$this","confirm","before","after","func_name","func_arr","log","alert","telInstance","record_id","documentElement","top","form_values_to_update","ready","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_validate_form($form){\n\tlet errors = [];\n\t$form.find('select[data-os-validate], input[data-os-validate]').each(function(){\n\t\tlet validations = jQuery(this).data('os-validate').split(' ');\n\t\tlet $input = jQuery(this);\n\t\tlet label = $input.closest('.os-form-group').find('label').text();\n\t\tlet field_has_errors = false;\n\t\tif(validations) {\n\t\t\tfor (let i = 0; i < validations.length; i++) {\n\t\t\t\tswitch (validations[i]) {\n\t\t\t\t\tcase 'presence':\n\t\t\t\t\t\tif(!$input.val()){\n\t\t\t\t\t\t\terrors.push({message: label + ' ' + wp.i18n.__('can not be blank', 'latepoint')});\n\t\t\t\t\t\t\tfield_has_errors = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'phone':\n\t\t\t\t\t\tif (!window.intlTelInputGlobals.getInstance($input[0]).isValidNumber()) {\n\t\t\t\t\t\t\terrors.push({message: label + ' ' + wp.i18n.__('is invalid', 'latepoint')});\n\t\t\t\t\t\t\tfield_has_errors = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(field_has_errors){\n\t\t\t$input.closest('.os-form-group').addClass('os-invalid');\n\t\t}else{\n\t\t\t$input.closest('.os-form-group').removeClass('os-invalid');\n\t\t}\n\t});\n\treturn errors;\n}\n\nfunction latepoint_create_form_data_from_non_form_element($elem){\n\tlet formData = new FormData();\n\t// create objecte from all input fields that are inside of the element\n\tlet fields = $elem.find('select, input, textarea').serializeArray();\n\tif(fields){\n\t\tfields.forEach(field => formData.append(field.name, field.value));\n\t}\n\treturn formData;\n}\n\nfunction latepoint_create_form_data_from_booking_form($booking_form){\n let form_data = new FormData();\n let params = new FormData($booking_form[0]);\n\n // get values from phone number fields\n if (('intlTelInputGlobals' in window) && ('intlTelInputUtils' in window)) {\n $booking_form.find('input.os-mask-phone').each(function () {\n const phoneInputName = this.getAttribute('name');\n const phoneInputValue = window.intlTelInputGlobals.getInstance(this).getNumber(window.intlTelInputUtils.numberFormat.E164);\n\t\t\t// override value generated automatically by formdata with a formatted value of a phone field with country code\n params.set(phoneInputName, phoneInputValue);\n });\n }\n\n form_data.append('params', latepoint_formdata_to_url_encoded_string(params));\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 let file_data;\n // put file data into main form_data object, since we can't send them in \"params\" string\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 let file_name = this.getAttribute(\"name\");\n for(let i = 0;i');\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(function( $ ) {\n\n if($('.latepoint').find('[data-os-action-onload]').length){\n $('.latepoint').find('[data-os-action-onload]').each(function(){\n var $this = jQuery(this);\n $this.addClass('os-loading');\n var params = $this.data('os-params');\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-onload'), params: params, return_format: return_format }\n jQuery.ajax({\n type : \"post\",\n dataType : \"json\",\n url : latepoint_helper.ajaxurl,\n data : data,\n success: function(response) {\n $this.removeClass('os-loading');\n if (response.status === \"success\") {\n if($this.data('os-output-target') == 'self'){\n $this.html(response.message);\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 = jQuery(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 if($this.data('os-after-call-error')){\n var func_name = $this.data('os-after-call-error');\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 }\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 = new FormData($form[0]);\n\n if (('intlTelInputGlobals' in window) && ('intlTelInputUtils' in window)) {\n $form.find('input.os-mask-phone').each(function () {\n let telInstance = window.intlTelInputGlobals.getInstance(this);\n if(telInstance){\n const phoneInputName = this.getAttribute('name');\n const phoneInputValue = window.intlTelInputGlobals.getInstance(this).getNumber(window.intlTelInputUtils.numberFormat.E164);\n form_data.set(phoneInputName, phoneInputValue);\n }\n });\n }\n\n var data = { action: 'latepoint_route_call', route_name: $(this).data('os-action'), params: latepoint_formdata_to_url_encoded_string(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\n\nfunction latepoint_init_form_masks(){\n\tif(('intlTelInput' in window) && ('intlTelInputGlobals' in window)) {\n\t\tjQuery('.os-mask-phone').each(function() {\n\t\t\tlatepoint_mask_phone(jQuery(this));\n\t\t});\n\t}\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 latepoint_init_form_masks();\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\n\nfunction latepoint_submit_booking_form($booking_form){\n var $booking_form_element = $booking_form.closest('.latepoint-booking-form-element');\n\n $booking_form_element.removeClass('step-content-loaded').addClass('step-content-loading');\n jQuery.ajax({\n type : \"post\",\n dataType : \"json\",\n processData: false,\n contentType: false,\n url : latepoint_helper.ajaxurl,\n data : latepoint_create_form_data_from_booking_form($booking_form),\n success: function(data){\n if(data.status === \"success\"){\n latepoint_hide_message_inside_element($booking_form_element.find('.latepoint-body'));\n if($booking_form_element.data('flash-error')){\n latepoint_show_message_inside_element($booking_form_element.data('flash-error'), $booking_form_element.find('.latepoint-body'));\n $booking_form_element.data('flash-error', '');\n }\n $booking_form_element.find('.latepoint_current_step').val(data.step_name);\n $booking_form_element.removeClass(function (index, className) { return (className.match (/(^|\\s)current-step-\\S+/g) || []).join(' '); }).addClass('current-step-' + data.step_name);\n setTimeout(function(){\n $booking_form_element.removeClass('step-content-loading').addClass('step-content-mid-loading');\n $booking_form_element.find('.latepoint-body').find('.latepoint-step-content').addClass('is-hidden');\n if($booking_form_element.find('.latepoint-step-content[data-step-name=\"'+ data.step_name +'\"]')){\n $booking_form_element.find('.latepoint-step-content[data-step-name=\"'+ data.step_name +'\"]').remove();\n }\n $booking_form_element.find('.latepoint-body').append(data.message);\n\n latepoint_init_step(data.step_name, $booking_form_element);\n setTimeout(function(){\n $booking_form_element.removeClass('step-content-mid-loading').addClass('step-content-loaded');\n $booking_form_element.find('.latepoint-next-btn, .latepoint-prev-btn').removeClass('os-loading');\n }, 50);\n }, 500);\n\n if(data.is_pre_last_step){\n $booking_form_element.data('next-submit-is-last', 'yes');\n $booking_form_element.find('.latepoint-next-btn span').text($booking_form_element.find('.latepoint-next-btn').data('pre-last-step-label'));\n }else{\n $booking_form_element.data('next-submit-is-last', 'no');\n $booking_form_element.find('.latepoint-next-btn span').text($booking_form_element.find('.latepoint-next-btn').data('label'));\n }\n if(data.is_last_step){\n $booking_form_element.addClass('hidden-buttons').find('.latepoint-footer').remove();\n $booking_form_element.find('.latepoint-progress').css( 'opacity', 0 );\n $booking_form_element.closest('.latepoint-summary-is-open').removeClass('latepoint-summary-is-open');\n $booking_form_element.addClass('is-final-step');\n }else{\n if(data.show_next_btn === true){\n latepoint_show_next_btn($booking_form_element);\n }else{\n latepoint_hide_next_btn($booking_form_element);\n }\n if(data.show_prev_btn === true){\n latepoint_show_prev_btn($booking_form_element);\n }else{\n latepoint_hide_prev_btn($booking_form_element);\n }\n }\n latepoint_change_step_desc($booking_form_element, data.step_name);\n }else{\n $booking_form_element.removeClass('step-content-loading').addClass('step-content-loaded');\n $booking_form_element.find('.latepoint-next-btn, .latepoint-prev-btn').removeClass('os-loading');\n if(data.send_to_step && $booking_form_element.find('.latepoint-step-content[data-step-name=\"'+ data.send_to_step +'\"]').length){\n $booking_form_element.data('flash-error', data.message);\n latepoint_reload_step($booking_form_element, data.send_to_step);\n }else{\n latepoint_show_message_inside_element(data.message, $booking_form_element.find('.latepoint-body'));\n latepoint_show_prev_btn($booking_form_element);\n }\n }\n $booking_form.find('.latepoint_step_direction').val('next');\n }\n });\n}\n\nfunction latepoint_init_booking_form($booking_form_element){\n\n $booking_form_element.find('.latepoint-form').on('submit', function(e){\n e.preventDefault();\n var $booking_form = jQuery(this);\n latepoint_hide_prev_btn($booking_form_element);\n var current_step = $booking_form_element.find('.latepoint_current_step').val();\n var callbacks_list = [];\n $booking_form_element.trigger('latepoint:submitBookingForm', [{ current_step: current_step,\n callbacks_list: callbacks_list,\n is_final_submit: $booking_form_element.data('next-submit-is-last') == 'yes',\n direction: $booking_form_element.find('.latepoint_step_direction').val()}]);\n jQuery.when(...callbacks_list.map(callback => callback.action()))\n .done(() => {\n latepoint_submit_booking_form($booking_form);\n })\n .fail((error) => {\n if(error.send_to_step && $booking_form_element.find('.latepoint-step-content[data-step-name=\"'+ error.send_to_step +'\"]').length){\n latepoint_reload_step($booking_form_element, error.send_to_step);\n $booking_form_element.data('flash-error', error.message);\n }\n $booking_form_element.removeClass('step-content-loading').addClass('step-content-loaded');\n latepoint_show_message_inside_element(error.message, $booking_form_element.find('.latepoint-body'), 'error');\n $booking_form_element.find('.latepoint-next-btn').removeClass('os-loading');\n if($booking_form_element.find('.latepoint-step-content:last-child').prev('.latepoint-step-content').length) latepoint_show_prev_btn($booking_form_element);\n });\n });\n\n $booking_form_element.find('.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 $booking_form_element.find('.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 $booking_form_element.find('.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 $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 != $booking_form_element.find('.latepoint-timezone-selector-w select').val()) $booking_form_element.find('.latepoint-timezone-selector-w select').val(tzid).change();\n }\n }\n\n\n\n $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 $booking_form_element.find('.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\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 $booking_form_element.find('.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\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 if($trigger.data('source-id')) restrictions.source_id = $trigger.data('source-id');\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 = 'booking-form-in-lightbox';\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 var $booking_form_element = jQuery('.latepoint-lightbox-w .latepoint-booking-form-element');\n latepoint_init_booking_form($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 var $booking_form_element = jQuery('.latepoint-lightbox-w .latepoint-booking-form-element');\n latepoint_init_booking_form($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(jQuery('.latepoint-booking-form-element').length){\n jQuery('.latepoint-booking-form-element').each(function(){\n latepoint_init_booking_form(jQuery(this));\n latepoint_init_step(jQuery(this).find('.latepoint_current_step').val(), jQuery(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 jQuery('.latepoint-request-booking-cancellation').on('click', function(){\n if(!confirm(latepoint_helper.cancel_booking_prompt)) return false;\n var $this = jQuery(this);\n var $booking_box = $this.closest('.customer-booking');\n\n var route = jQuery(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 jQuery('body').on('click', '.os-step-tabs .os-step-tab', function(){\n jQuery(this).closest('.os-step-tabs').find('.os-step-tab').removeClass('active');\n jQuery(this).addClass('active');\n var target = jQuery(this).data('target');\n jQuery(this).closest('.os-step-tabs-w').find('.os-step-tab-content').hide();\n jQuery(target).show();\n });\n\n jQuery('body').on('keyup', '.os-form-group .os-form-control', function(){\n if(jQuery(this).val()){\n jQuery(this).closest('.os-form-group').addClass('has-value');\n }else{\n jQuery(this).closest('.os-form-group').removeClass('has-value');\n }\n });\n\n jQuery('.latepoint-tab-triggers').on('click', '.latepoint-tab-trigger', function(){\n var $tabs_wrapper = jQuery(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 jQuery(this).addClass('active');\n $tabs_wrapper.find('.latepoint-tab-content' + jQuery(this).data('tab-target')).addClass('active');\n return false;\n });\n\n\n // Main Button to trigger lightbox opening\n jQuery('body').on('click', '.latepoint-book-button, .os_trigger_booking', function(){\n latepoint_init_booking_form_by_trigger(jQuery(this));\n return false;\n });\n\n});\n"],"mappings":"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"}