1(function($,window,document,undefined){var pluginName="eaBootstrap",defaults={main_selector:'#ea-bootstrap-main',main_template:null,overview_selector:"#ea-appointments-overview",overview_template:null,store:{},ajaxCount:0,initScrollOff:!1};function Plugin(element,options){this.element=element;this.$element=jQuery(element);this.settings=jQuery.extend({},defaults,options);this._defaults=defaults;this._name=pluginName;this.init()} 2jQuery.extend(Plugin.prototype,{vacation:function(workerId,day,serviceId=null){var response=[!0,day,''];jQuery.each(ea_service_start_data,function(index,service_start_data){if(serviceId==service_start_data.id&&jQuery.inArray(day,service_start_data.booking_date_skip)!==-1){response=[!1,'blocked vacation',(ea_settings['trans.not-available']||'Not Available')]}});if(Array.isArray(ea_settings.block_days)&&ea_settings.block_days.includes(day)){return[!1,'blocked',ea_settings.block_days_tooltip]} 3if(!Array.isArray(ea_vacations)||ea_vacations.length===0){return response} 4jQuery.each(ea_vacations,function(index,vacation){if(vacation.workers.length>0){var workerIds=jQuery.map(vacation.workers,function(worker){return worker.id});if(jQuery.inArray(String(workerId),jQuery.map(workerIds,String))===-1){return!0}} 5if(jQuery.inArray(day,vacation.days)===-1){return!0} 6var isPartial=!1;var rawStart=null;var rawEnd=null;if(vacation.time){if(typeof vacation.time==='object'){if(vacation.time.fullDay===!1||vacation.time.fullDay==='0'||vacation.time.fullDay===0){isPartial=!0;rawStart=vacation.time.startTime||vacation.time.start||vacation.time.from||vacation.time.time_from;rawEnd=vacation.time.endTime||vacation.time.end||vacation.time.to||vacation.time.time_to}}}else if(vacation.fullDay===!1||vacation.fullDay===0||vacation.fullDay==='0'){isPartial=!0;rawStart=vacation.startTime||vacation.start||vacation.from||vacation.time_from;rawEnd=vacation.endTime||vacation.end||vacation.to||vacation.time_to}else if(vacation.time_from&&vacation.time_to){isPartial=!0;rawStart=vacation.time_from;rawEnd=vacation.time_to} 7if(isPartial&&rawStart&&rawEnd){var startTime=moment(rawStart,['HH:mm','H:mm','HH:mm:ss']);if(!startTime.isValid()){startTime=moment(rawStart)} 8var endTime=moment(rawEnd,['HH:mm','H:mm','HH:mm:ss']);if(!endTime.isValid()){endTime=moment(rawEnd)} 9if(startTime.isValid()&&endTime.isValid()){if(!window.ea_partial_vacations)window.ea_partial_vacations=[];window.ea_partial_vacations=window.ea_partial_vacations.filter(function(v){return!(v.day===day&&v.workerId==workerId)});window.ea_partial_vacations.push({day:day,start:startTime.format('HH:mm'),end:endTime.format('HH:mm'),workerId:workerId,tooltip:vacation.tooltip||''});return!0}} 10response=[!1,'blocked vacation',vacation.tooltip];return!1});return response},init:function(){var plugin=this;if(ea_settings.datepicker&&ea_settings.datepicker.length>1){moment.locale(ea_settings.datepicker.substr(0,2))} 11function sanitizeTemplateHtml(html){if(!html)return html;html=html.replace(/`/g,'`');html=html.replace(/&/g,'&').replace(/&/g,'&').replace(/&/g,'&');html=html.replace(/[\u200B-\u200F\uFEFF\u00AD]/g,'');return html} 12function safeTemplate(selector){var html=jQuery(selector).html();if(!html){return function(data){var dynamicHtml=sanitizeTemplateHtml(jQuery(selector).html());if(dynamicHtml){try{return _.template(dynamicHtml)(data)}catch(e){console.error('EA: Template compilation error for '+selector+':',e.message);if(e.source)console.error('EA: Generated source:\n',e.source);}} 13return'<div></div>'}} 14html=sanitizeTemplateHtml(html);try{return _.template(html)}catch(e){console.error('EA: Template compilation error for '+selector+':',e.message);if(e.source){console.error('EA: Generated source:\n',e.source)} 15return _.template('<div></div>')}} 16plugin.settings.main_template=safeTemplate(plugin.settings.main_selector);plugin.settings.overview_template=safeTemplate(plugin.settings.overview_selector);this.$element.html(plugin.settings.main_template({settings:ea_settings}));if(ea_settings.ea_new_ui==='1'){plugin.$element.addClass('ea-new-ui ea-new-ui-container');plugin.$element.find('.ea-bootstrap').addClass('ea-new-ui ea-new-ui-container');var $bootstrap=plugin.$element.find('.ea-bootstrap').length?plugin.$element.find('.ea-bootstrap'):plugin.$element;if(ea_settings.width&&ea_settings.width!=='400px'){$bootstrap.css('max-width',ea_settings.width);plugin.$element.css('max-width',ea_settings.width)} 17if(String(ea_settings.rtl)==='1'){$bootstrap.addClass('ea-rtl').attr('dir','rtl');plugin.$element.addClass('ea-rtl').attr('dir','rtl')} 18if(String(ea_settings.layout_cols)==='2'||plugin.$element.find('.step.final.col-md-6').length){$bootstrap.addClass('ea-layout-cols-2');plugin.$element.addClass('ea-layout-cols-2')} 19if($bootstrap.length&&!$bootstrap.find('.ea-booking-title').length){$bootstrap.prepend('<h2 class="ea-booking-title">'+(ea_settings['trans.book-appointment']||'Book an appointment')+'</h2>')} 20plugin.newUiLayoutDropdowns();if(ea_settings['form.style']==='wizard'){plugin.initWizardMode()}else if(ea_settings['form.style']==='sidebar'){plugin.initSidebarMode()}else{if(!$bootstrap.find('.ea-booking-summary-bar').length){$bootstrap.append('<div class="ea-booking-summary-bar">'+'<span class="ea-summary-text empty">'+(ea_settings['trans.select-date-time']||'Select a date & time to continue')+'</span>'+'<div class="ea-new-ui-actions">'+'<button type="button" class="ea-btn ea-cancel" style="display:none;">'+(ea_settings['trans.cancel']||'Cancel')+'</button>'+'<button type="button" class="ea-btn ea-submit booking-button" style="display:none;">'+(ea_settings['trans.book-appointment']||'Book appointment')+'</button>'+'</div>'+'</div>')}}} 21if(!this.settingsOk()){return} 22this.$element.find('.ea-phone-number-part, .ea-phone-country-code-part').change(function(){plugin.parsePhoneField($(this))});this.$element.find('.ea-phone-country-code-part').each(function(index,select){$(select).val($(select).data('default'))});this.$element.find('form').validate({focusInvalid:!1,invalidHandler:function(form,validator){if(!validator.numberOfInvalids()) 23return;if((ea_settings['form.style']==='wizard'&&plugin.currentWizardStep)||(ea_settings['form.style']==='sidebar'&&plugin.currentSidebarStep)){var $invalidElem=jQuery(validator.errorList[0].element);
23var $pane=$invalidElem.closest('.ea-wizard-pane, .ea-sidebar-pane');if($pane.length){var paneStep=parseInt($pane.data('pane'),10);if(paneStep){if(ea_settings['form.style']==='wizard'&&paneStep!==plugin.currentWizardStep){plugin.goToWizardStep(paneStep)}else if(ea_settings['form.style']==='sidebar'&&paneStep!==plugin.currentSidebarStep){plugin.goToSidebarStep(paneStep)}}}} 24$('html, body').animate({scrollTop:($(validator.errorList[0].element).offset().top-30)},1000)}});this.$element.find('select').not('.custom-field').change(jQuery.proxy(this.getNextOptions,this));jQuery.datepicker.setDefaults(jQuery.datepicker.regional[ea_settings.datepicker]);var firstDay=ea_settings.start_of_week;var minDate=(ea_settings.min_date===null)?0:ea_settings.min_date;this.$element.find('.date').datepicker({onSelect:jQuery.proxy(plugin.dateChange,plugin),dateFormat:'yy-mm-dd',minDate:minDate,firstDay:firstDay,maxDate:ea_settings.max_date,defaultDate:ea_settings.default_date,showWeek:ea_settings.show_week==='1',onChangeMonthYear:function(year,month,widget){plugin.selectChange(month,year)},beforeShowDay:function(date){var month=date.getMonth()+1;var days=date.getDate();if(month<10){month='0'+month} 25if(days<10){days='0'+days} 26var dateString=date.getFullYear()+'-'+month+'-'+days;var locationId=plugin.$element.find('[name="location"]').val();var serviceId=plugin.$element.find('[name="service"]').val();var workerId=plugin.$element.find('[name="worker"]').val();if(typeof ea_connections!=='undefined'&&Array.isArray(ea_connections)&&ea_connections.length>0){if(locationId&&serviceId&&workerId){var dayNames=['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];var dayName=dayNames[date.getDay()];var isWorkingDay=!1;var hasTomorrowOnly=!1;var now=new Date();var tomorrow=new Date(now.getFullYear(),now.getMonth(),now.getDate()+1);var tomorrowStr=tomorrow.getFullYear()+'-'+(tomorrow.getMonth()+1<10?'0':'')+(tomorrow.getMonth()+1)+'-'+(tomorrow.getDate()<10?'0':'')+tomorrow.getDate();jQuery.each(ea_connections,function(i,conn){if(conn.location==locationId&&conn.service==serviceId&&conn.worker==workerId){if(conn.day_from&&dateString<conn.day_from)return!0;if(conn.day_to&&dateString>conn.day_to)return!0;if(parseInt(conn.repeat_week,10)===-1){hasTomorrowOnly=!0;if(dateString===tomorrowStr){isWorkingDay=!0} 27return!1} 28if(conn.day_of_week){var daysArr=conn.day_of_week.split(',').map(function(s){return s.trim()});if(jQuery.inArray(dayName,daysArr)!==-1){isWorkingDay=!0;return!1}}}});if(hasTomorrowOnly&&!isWorkingDay){return[!1,'tomorrow-only',(ea_settings['trans.tomorrow-only']||'Only tomorrow is available for booking')]} 29if(!isWorkingDay){return[!1,'not-working',(ea_settings['trans.not-working']||'Not Working')]}}} 30return plugin.vacation(workerId,dateString,serviceId)}});this.hideDefault();this.$element.find('.ea-bootstrap').on('click','.time-value',function(event){event.preventDefault();var parentForm=jQuery(this).closest('form');var result=plugin.selectTimes(jQuery(this));plugin.savedSelectedSlots=[];plugin.savedSelectedDate=plugin.settings.currentDate||plugin.$element.find('.date').datepicker().val();plugin.$element.find('.selected-time').each(function(){plugin.savedSelectedSlots.push(jQuery(this).data('val'))});plugin.updateSubmitButtonState();plugin.triggerSlotSelectEvent();if(!result){if(ea_settings['trans.slot-not-selectable']!==undefined){alert(ea_settings['trans.slot-not-selectable'])}else{alert(ea_settings['trans.slot-not-selectable']||'Not enough time please choose an earlier slot')} 31return} 32if(ea_settings['pre.reservation']==='1'){plugin.appSelected.apply(plugin)}else{var booking_data={};booking_data.location=parentForm.find('select[name="location"] > option:selected, [name="location"] > option:selected').first().text();booking_data.service=parentForm.find('select[name="service"] > option:selected, [name="service"] > option:selected').first().text();booking_data.worker=parentForm.find('select[name="worker"] > option:selected, [name="worker"] > option:selected').first().text();booking_data.date=parentForm.find('.date').datepicker().val();booking_data.time=parentForm.find('.selected-time').first().data('val');booking_data.price=parentForm.find('select[name="service"] > option:selected, [name="service"] > option:selected').first().data('price');booking_data.service_description=parentForm.find('select[name="service"] > option:selected, [name="service"] > option:selected').first().data('description')||'';if(ea_settings.is_multiple_booking_allowed=='1'){var $selectedSlots=parentForm.find('.selected-time');booking_data.price=$selectedSlots.length*booking_data.price;if($selectedSlots.length>1){var timesArr=[];$selectedSlots.each(function(){timesArr.push(jQuery(this).data('val'))});booking_data.time=timesArr.join(', ')}}
33var format=ea_settings.date_format+' '+ea_settings.time_format;var firstTime=(booking_data.time||'').toString().split(',')[0].trim();if(firstTime){var formattedDate=moment(booking_data.date+'T'+firstTime,ea_settings.default_datetime_format).format(ea_settings.date_format||'YYYY-MM-DD');booking_data.date_time=formattedDate+' '+booking_data.time}else{booking_data.date_time=booking_data.date+' '+booking_data.time} 34var overview_content='';overview_content=plugin.settings.overview_template({data:booking_data,settings:ea_settings});parentForm.find('#booking-overview').html(overview_content);parentForm.find('#ea-total-amount').on('checkout:done',function(event,checkoutId){var paypal_input=parentForm.find('#paypal_transaction_id');if(paypal_input.length==0){paypal_input=jQuery('<input id="paypal_transaction_id" class="custom-field" name="paypal_transaction_id" type="hidden"/>');parentForm.find('.final').append(paypal_input)} 35paypal_input.val(checkoutId);plugin.singleConformation(event)});parentForm.find('.final').removeClass('disabled');plugin.$element.find('#ea-payment-select').show();jQuery(document).trigger('ea-timeslot:selected');if(ea_settings.ea_new_ui==='1'){plugin.updateNewUiSummaryBar()}} 36if(ea_settings.save_form_content!=='0'){plugin.loadPreviousFormData(plugin.$element.find('form'))}});this.blurNextSteps(this.$element.find('.step:visible:first'),!0,!0);if(ea_settings['pre.reservation']==='1'){this.$element.find('.ea-submit').on('click',jQuery.proxy(plugin.finalComformation,plugin))}else{this.$element.find('.ea-submit').on('click',jQuery.proxy(plugin.singleConformation,plugin))} 37this.$element.find('.ea-cancel').on('click',jQuery.proxy(plugin.cancelApp,plugin));this.updateSubmitButtonState();setTimeout(function(){jQuery(document).trigger('ea-init:completed')},1000)},selectTimes:function($element){var plugin=this;if(ea_settings.is_multiple_booking_allowed!='1'){var serviceData=plugin.$element.find('[name="service"] > option:selected').data();var duration=serviceData.duration;var slot_step=serviceData.slot_step;var takeSlots=1;var $nextSlots=$element.nextAll();var forSelection=[];forSelection.push($element);if(($nextSlots.length+1)<takeSlots){return!1} 38$element.parent().children().removeClass('selected-time');jQuery.each($nextSlots,function(index,elem){var $elem=jQuery(elem);var startTime=moment($element.data('val'),'HH:mm');var calculatedTime=(index+1)*slot_step;var expectedTime=startTime.add(calculatedTime,'minutes').format('HH:mm');if($elem.data('val')!==expectedTime){return!1} 39if(index+2>takeSlots){return!1} 40if($elem.hasClass('time-disabled')){return!1} 41forSelection.push($elem)});if(forSelection.length<takeSlots){return!1} 42jQuery.each(forSelection,function(index,elem){elem.addClass('selected-time')});plugin.savedSelectedSlots=[];plugin.savedSelectedDate=plugin.settings.currentDate||plugin.$element.find('.date').datepicker().val();plugin.$element.find('.selected-time').each(function(){plugin.savedSelectedSlots.push(jQuery(this).data('val'))});return!0} 43if($element.hasClass('time-disabled')){return!1} 44$element.toggleClass('selected-time');plugin.savedSelectedSlots=[];plugin.savedSelectedDate=plugin.settings.currentDate||plugin.$element.find('.date').datepicker().val();plugin.$element.find('.selected-time').each(function(){plugin.savedSelectedSlots.push(jQuery(this).data('val'))});return!0},settingsOk:function(){var plugin=this;var selectOptions=this.$element.find('select').not('.custom-field');var missingItems=[];var valid=!0;selectOptions.each(function(index,element){var $el=jQuery(element);var options=$el.children('option');if(options.length===1&&options.attr('value')==''){var fieldName=$el.attr('name')||'field';var capitalized=fieldName.charAt(0).toUpperCase()+fieldName.slice(1);if(missingItems.indexOf(capitalized)===-1){missingItems.push(capitalized)} 45valid=!1}});if(!valid){var isNoConnections=(typeof ea_settings!=='undefined'&&ea_settings.connection_status==='none');var isExpired=!isNoConnections;var cardTitle=(ea_settings['trans.setup-required-title']||'Easy Appointments - Setup Required');var cardDesc=(ea_settings['trans.setup-required-desc']||'Online booking is currently unavailable because active connections or required settings are missing or expired.');if(isExpired){cardTitle=(ea_settings['trans.connections-expired-title']||'Oops! All Connections Have Expired');
45cardDesc=(ea_settings['trans.connections-expired-desc']||'Online booking is currently unavailable because connection end dates have passed.')}else if(isNoConnections){cardTitle=(ea_settings['trans.booking-unavailable-title']||'Online Booking Unavailable');cardDesc=(ea_settings['trans.booking-unavailable-desc']||'Online booking is currently unavailable at this time.')} 46var missingListHtml='';if(!isExpired&&!isNoConnections){missingListHtml=missingItems.map(function(item){return'<li style="margin-bottom: 6px; display: flex; align-items: center; gap: 8px;">'+'<span style="color: #ef4444; font-weight: 700;">â¢</span> '+'<span>'+(ea_settings['trans.define-active']||'Define at least one active ')+'<strong>'+item+'</strong>'+(ea_settings['trans.and-connection']||' and connection')+'</span>'+'</li>'}).join('')} 47var listContainerHtml=missingListHtml?'<ul style="margin: 0 0 18px 0; padding: 0; list-style: none; font-size: 13.5px; color: #334155;">'+missingListHtml+'</ul>':'';var cardHtml='<div class="ea-booking-alert-card" style="'+'background: #ffffff; '+'border: 1px solid #fee2e2; '+'border-left: 5px solid #ef4444; '+'border-radius: 12px; '+'padding: 24px 28px; '+'margin: 20px 0; '+'box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05), 0 4px 6px -2px rgba(0, 0, 0, 0.02); '+'font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;'+'">'+'<div style="display: flex; align-items: flex-start; gap: 16px;">'+'<div style="'+'background: #fef2f2; '+'color: #ef4444; '+'width: 44px; '+'height: 44px; '+'border-radius: 10px; '+'display: flex; '+'align-items: center; '+'justify-content: center; '+'flex-shrink: 0;'+'">'+'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">'+'<circle cx="12" cy="12" r="10"></circle>'+'<line x1="12" y1="8" x2="12" y2="12"></line>'+'<line x1="12" y1="16" x2="12.01" y2="16"></line>'+'</svg>'+'</div>'+'<div style="flex: 1;">'+'<h3 style="margin: 0 0 6px 0; font-size: 17px; font-weight: 700; color: #0f172a; letter-spacing: -0.01em;">'+cardTitle+'</h3>'+'<p style="margin: 0 0 14px 0; font-size: 14px; color: #475569; line-height: 1.5;">'+cardDesc+'</p>'+listContainerHtml+'<div style="display: flex; align-items: center; gap: 12px; flex-wrap: wrap;">'+'<button type="button" class="ea-notify-admin-btn" style="'+'background: #2563eb; '+'color: #ffffff; '+'border: none; '+'border-radius: 8px; '+'padding: 10px 18px; '+'font-size: 13.5px; '+'font-weight: 600; '+'cursor: pointer; '+'display: inline-flex; '+'align-items: center; '+'gap: 8px; '+'transition: all 0.2s ease; '+'box-shadow: 0 2px 4px rgba(37, 99, 235, 0.2);'+'">'+(ea_settings['trans.notify-administrator']||'Notify Administrator')+'</button>'+'<span class="ea-notify-status" style="font-size: 13px; font-weight: 500; display: none;"></span>'+'</div>'+'</div>'+'</div>'+'</div>';this.$element.html(cardHtml);this.$element.find('.ea-notify-admin-btn').on('click',function(e){e.preventDefault();var $btn=jQuery(this);var $status=plugin.$element.find('.ea-notify-status');$btn.prop('disabled',!0).css('opacity','0.7').html('<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="animation: spin 1s linear infinite;"><circle cx="12" cy="12" r="10" stroke-opacity="0.25"></circle><path d="M12 2a10 10 0 0 1 10 10"></path></svg> '+(ea_settings['trans.sending-notification']||'Sending Notification...'));jQuery.post(ea_ajaxurl,{action:'ea_notify_admin_booking_issue',_wpnonce:ea_settings.check},function(res){if(res&&res.success){$btn.hide();$status.css({'color':'#16a34a','display':'inline-block'}).html('<span style="display: inline-flex; align-items: center; gap: 6px;"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="20 6 9 17 4 12"></polyline></svg> '+(ea_settings['trans.notification-sent']||'Notification Sent! Administrator has been emailed.')+'</span>')}else{$btn.prop('disabled',!1).css('opacity','1').text(ea_settings['trans.notify-administrator']||'Notify Administrator');$status.css({'color':'#dc2626','display':'inline-block'}).text((res&&res.data&&res.data.message)?res.data.message:(ea_settings['trans.error-sending-email']||'Error sending email. Please try again.'))}}).fail(function(){$btn.prop('disabled',!1).css('opacity','1').text(ea_settings['trans.notify-administrator']||'Notify Administrator');$status.css({'color':'#dc2626','display':'inline-block'}).text(ea_settings['trans.server-error']||'Server error. Please try again later.')})})} 48return valid},hideDefault:function(){var steps=this.$element.find('.step');var counter=0;steps.each(function(index,element){var select=jQuery(element).find('select').not('.custom-field');if(select.length<1){return} 49var options=select.children('option');if(options.length!==1){return} 50if(options.value!==''){jQuery(element).hide();counter++}});if(counter===3){this.settings.initScrollOff=!0}},getPrevousOptions:function(element){var plugin=this;var options={};var locationVal=plugin.$element.find('select[name="location"], select[data-c="location"]').first().val();var serviceVal=plugin.$element.find('select[name="service"], select[data-c="service"]').first().val();var workerVal=plugin.$element.find('select[name="worker"], select[data-c="worker"]').first().val();if(locationVal)options.location=locationVal;if(serviceVal)options.service=serviceVal;if(workerVal)options.worker=workerVal;var step=element?element.parents('.step'):jQuery();if(step.length){var data_prev=step.prevAll('.step');data_prev.each(function(index,elem){var input_field=jQuery(elem).find('.filter').filter('input, select');if(input_field.length&&input_field.data('c')&&input_field.val()){options[input_field.data('c')]=input_field.val()}})} 51return options},getNextOptions:function(event){var current=jQuery(event.target);var currentCategory=current.data('c');var isLocationOrService=(currentCategory==='location'||currentCategory==='service');if(currentCategory==='service'){var desc=current.find('option:selected').data('description')||'';if(desc){jQuery('#ea-service-description').html(desc).show()}else{jQuery('#ea-service-description').hide()}} 52var step=current.closest('.step');var $date=this.$element.find('.date');
52if($date.hasClass('hasDatepicker')){$date.datepicker('refresh')} 53this.blurNextSteps(step,isLocationOrService);if(current.val()===''){return} 54var options={};options[currentCategory]=current.val();var data_prev=step.prevAll('.step');data_prev.each(function(index,elem){var option=jQuery(elem).find('select,input').first();options[jQuery(option).data('c')]=option.val()});this.$element.find('.step:hidden').each(function(index,elem){var option=jQuery(elem).find('select,input').first();options[jQuery(option).data('c')]=option.val()});var nextStep=step.nextAll('.step:visible:first');var next=jQuery(nextStep).find('select,input');if(next.length===0){this.blurNextSteps(nextStep,isLocationOrService);if(ea_settings['form.style']!=='wizard'&&ea_settings['form.style']!=='sidebar'&¤tCategory==='worker'){this.scrollToElement(this.$element.find('.date'))} 55return} 56options.next=next.data('c');this.callServer(options,next)},callServer:function(options,next_element){var plugin=this;options.action='ea_next_step';options.check=ea_settings.check;options._cb=Math.floor(Math.random()*1000000);this.placeLoader(next_element.parent());var req=jQuery.get(ea_ajaxurl,options,function(response){next_element.empty();var default_option_value='-';if(options.next=='service'){jQuery('#ea-service-description').hide();default_option_value=ea_settings['trans.service_option']} 57if(options.next=='location'){jQuery('#ea-service-description').hide();default_option_value=ea_settings['trans.location_option']} 58if(options.next=='worker'){jQuery('#ea-service-description').hide();default_option_value=ea_settings['trans.worker_option'];var selectedService=plugin.$element.find('[name="service"] option:selected');var desc=selectedService.data('description')||'';jQuery('#ea-service-description').html(desc).toggle(!!desc)} 59plugin.$element.find('[id="repeat_booking"]').parents('.form-group').hide();next_element.append('<option value="">'+default_option_value+'</option>');var option_count=0;jQuery.each(response,function(index,element){var name=element.name;var $option=jQuery('<option value="'+element.id+'">'+name+'</option>');$option.data('raw-name',element.name);if('price' in element){$option.data('price',element.price);if(ea_settings['price.hide']!=='1'&&ea_settings['price.hide.service']!=='1'){if(ea_settings['hide.decimal_in_price']=='1'&&!isNaN(element.price)){element.price=Math.round(element.price)} 60if(ea_settings['currency.before']==='1'){$option.text(element.name+' - '+next_element.data('currency')+element.price)}else{$option.text(element.name+' - '+element.price+next_element.data('currency'))}}} 61if('slot_step' in element){$option.data('slot_step',element.slot_step);$option.data('duration',element.duration);$option.data('description',element.description)} 62next_element.append($option);option_count++});next_element.closest('.step').removeClass('disabled');plugin.removeLoader();if(ea_settings['form.style']!=='wizard'&&ea_settings['form.style']!=='sidebar'&&options.next!=='service'&&options.next!=='worker'){plugin.scrollToElement(next_element.parent())} 63if(ea_settings.auto_select_option==='1'&&option_count===1){next_element.children().last().prop('selected',!0).trigger('change')} 64var $date=plugin.$element.find('.date');if($date.hasClass('hasDatepicker')){$date.datepicker('refresh')}},'json');req.fail(function(xhr,status){if(xhr.status===403){alert(ea_settings['trans.nonce-expired'])} 65if(xhr.status===404){alert(ea_settings['trans.ajax-call-not-available'])} 66if(xhr.status===500){alert(ea_settings['trans.internal-error'])} 67plugin.removeLoader()})},placeLoader:function($element){this.settings.ajaxCount++;if(!$element||!$element.length||$element.is(':hidden')||$element.hasClass('ea-new-ui-step-hidden')||$element.parents('.ea-new-ui-step-hidden').length){var fieldName=($element&&$element.length)?$element.find('select, input').data('c'):'';var $visibleGrp=fieldName?this.$element.find('.ea-new-ui-field-group[data-field="'+fieldName+'"]'):jQuery();if($visibleGrp.length){$element=$visibleGrp}else if(this.$element.find('.ea-filters-grid').length){$element=this.$element.find('.ea-filters-gri
67d')}else{$element=this.$element.find('.time').length?this.$element.find('.time'):this.$element.find('.date')}} 68if($element&&$element.length){$element.css('position','relative')} 69var $loader=jQuery('#ea-loader');if(!$loader.length){$loader=jQuery('<div id="ea-loader"></div>').appendTo(this.$element)} 70if($element&&$element.length){$loader.appendTo($element)} 71$loader.css({'position':'absolute','top':0,'left':0,'width':'100%','height':'100%','min-height':'40px','z-index':100,'display':'flex','align-items':'center','justify-content':'center','background':'rgba(255, 255, 255, 0.7)','border-radius':'8px'}).show()},removeLoader:function(){this.settings.ajaxCount=0;jQuery('#ea-loader').css('display','none').hide()},getCurrentStatus:function(){var options=jQuery(this.element).find('select').not('.custom-field')},blurNextSteps:function(current,dontScroll,initialCall){dontScroll=dontScroll||!1;initialCall=initialCall||!1;current.removeClass('disabled');var nextSteps=current.nextAll('.step:visible');var nextParentSteps=current.parent().nextAll('.step:visible');jQuery.merge(nextSteps,nextParentSteps);nextSteps.each(function(index,element){jQuery(element).addClass('disabled')});if(current.hasClass('calendar')){var calendar=this.$element.find('.date');calendar.datepicker("refresh");if(!initialCall||ea_settings.cal_auto_select!=='0'){this.selectChange()} 72if(ea_settings['form.style']!=='wizard'&&ea_settings['form.style']!=='sidebar'&&!dontScroll){this.scrollToElement(calendar)}}},dateChange:function(dateString,calendar){var plugin=this,next_element,calendarEl;calendarEl=jQuery(calendar.dpDiv).parents('.date');if(plugin.settings.currentDate===dateString&&calendarEl.find('.time-row').length>0){calendarEl.find('.time-row').remove();return} 73plugin.settings.currentDate=dateString;calendarEl.parent().next().addClass('disabled');var options=this.getPrevousOptions(calendarEl);options.action='ea_date_selected';options.date=dateString;options.check=ea_settings.check;this.placeLoader(calendarEl);var req=jQuery.get(ea_ajaxurl,options,function(response_m){var response=response_m.calendar_slots;if(response_m.connection_details&&response_m.connection_details.repeat_booking==1){plugin.$element.find('[id="repeat_booking"]').parents('.form-group').show()}else{plugin.$element.find('[id="repeat_booking"]').parents('.form-group').hide()} 74next_element=jQuery(document.createElement('div')).addClass('time well well-lg');var fromTo=ea_settings["label.from_to"]=="1";var classAMPM=(ea_settings.time_format=="am-pm")?' am-pm':'';if(fromTo&&ea_settings.ea_new_ui!=="1"){next_element.addClass('time well well-lg col-50')}else{next_element.addClass('time well well-lg')} 75response.sort(function(a,b){var a1=a.value,b1=b.value;if(a1==b1){return 0} 76return a1>b1?1:-1});jQuery.each(response,function(index,element){var selectLabel=fromTo?element.show+' - '+element.ends:element.show;var isDisabled=!1;var tooltip_title="";if(window.ea_partial_vacations&&window.ea_partial_vacations.length>0){var selectedWorker=plugin.$element.find('[name="worker"] option:selected, .ea-filters-grid select[data-c="worker"] option:selected').filter(':selected').val()||plugin.$element.find('[name="worker"]').val();var $selectedService=plugin.$element.find('[name="service"] option:selected, .ea-filters-grid select[data-c="service"] option:selected').filter(':selected');var serviceDuration=parseInt($selectedService.data('duration'))||parseInt(plugin.$element.find('[name="service"]').find('option:selected').data('duration'))||0;window.ea_partial_vacations.forEach(function(vac){if(vac.day===plugin.settings.currentDate&&vac.workerId==selectedWorker){var start=moment(vac.start,'HH:mm');var end=moment(vac.end,'HH:mm');var appointmentStart=moment(element.value,'HH:mm');var appointmentEnd=appointmentStart.clone().add(serviceDuration,'minutes');if(appointmentStart.isBefore(end)&&appointmentEnd.isAfter(start)){tooltip_title=vac.tooltip;isDisabled=!0}}})} 77if(!tooltip_title&&typeof ea_vacations!=='undefined'&&Array.isArray(ea_vacations)){var selWorker=plugin.$element.find('[name="worker"]').val();var curDateVal=dateString||plugin.settings.currentDate;jQuery.each(ea_vacations,function(idx,v){if(v.days&&jQuery.inArray(curDateVal,v.days)!==-1){if(v.workers&&v.workers.length>0){var wIds=jQuery.map(v.workers,function(w){return w.id});if(jQuery.inArray(String(selWorker),jQuery.map(wIds,String))!==-1){tooltip_title=v.tooltip||'';return!1}}}})} 78var displayTime=selectLabel;if(element.count>0&&!isDisabled){if(ea_settings.show_remaining_slots==='1'){next_element.append('<a href="#" class="time-value slots'+classAMPM+'" data-val="'+element.value+'">'+displayTime+' ('+element.count+')</a>')}else{next_element.append('<a href="#" class="time-value'+classAMPM+'" data-val="'+element.value+'">
78'+displayTime+'</a>')}}else{if(ea_settings.show_remaining_slots==='1'){next_element.append('<a class="time-disabled slots'+classAMPM+'" title="'+tooltip_title+'">'+displayTime+' (0)</a>')}else{next_element.append('<a class="time-disabled'+classAMPM+'" title="'+tooltip_title+'">'+displayTime+'</a>')}}});if(response.length===0){next_element.html('<p class="time-message">'+ea_settings['trans.please-select-new-date']+'</p>')} 79var colSpan=ea_settings.show_week==='1'?8:7;var newRow=jQuery(document.createElement('tr')).addClass('time-row').append('<td colspan="'+colSpan+'" />');if(ea_settings.ea_new_ui==='1'){var calDateLabel=plugin.formatDateLabel(dateString);newRow.find('td').append('<p class="ea-times-header">'+(ea_settings['trans.available-times']||'Available times')+' \u2014 '+calDateLabel+'</p>')} 80newRow.find('td').append(next_element);jQuery(calendar.dpDiv).find('.ui-datepicker-current-day').closest('tr').after(newRow);next_element.parent().removeClass('disabled');if(!plugin.settings.initScrollOff){next_element.find('.time-value:first').focus()}else{plugin.settings.initScrollOff=!1} 81if(plugin.savedSelectedDate===dateString&&plugin.savedSelectedSlots&&plugin.savedSelectedSlots.length>0){var restoredCount=0;next_element.find('.time-value').each(function(){var val=jQuery(this).data('val');if(plugin.savedSelectedSlots.indexOf(val)!==-1){jQuery(this).addClass('selected-time');restoredCount++}});if(restoredCount>0){plugin.updateSidebarButtons();plugin.updateWizardButtons();plugin.updateSubmitButtonState()}}else if(ea_settings.auto_select_slot==='1'){if(next_element.find('.time-value').not('.time-disabled').length===1){next_element.find('.time-value').not('.time-disabled').click()}}},'json');req.always(function(){plugin.refreshData(plugin.settings.store);plugin.removeLoader()});req.fail(function(xhr,status){if(xhr.status===403){alert(ea_settings['trans.nonce-expired'])} 82if(xhr.status===404){alert(ea_settings['trans.ajax-call-not-available'])} 83if(xhr.status===500){alert(ea_settings['trans.internal-error'])} 84plugin.removeLoader()})},selectChange:function(month,year){var self=this;self.placeLoader(self.$element.find('.calendar'));var simulateClick=!1;if(typeof month==='undefined'||typeof year==='undefined'){var $firstDay=this.$element.find('[data-handler="selectDay"]:first');month=parseInt($firstDay.data('month'))+1;year=$firstDay.data('year')} 85simulateClick=!0;if(this.checkStatus()){var selects=this.$element.find('select').not('.custom-field');var fields=selects.serializeArray();fields.push({'name':'action','value':'ea_month_status'});fields.push({'name':'month','value':month});fields.push({'name':'year','value':year});fields.push({'name':'check','value':ea_settings.check});fields.push({'name':'_cb','value':Math.floor(Math.random()*1000000)});var req=jQuery.get(ea_ajaxurl,fields,function(result){self.settings.store=result;self.refreshData(result);if(simulateClick){var $cDay=self.$element.find('.ui-datepicker-current-day');if($cDay.hasClass('free')){if(ea_settings.cal_auto_select!=='0'){$cDay.click()}}else{self.$element.find('.time-row').remove()}}},'json');req.fail(function(xhr,status){if(xhr.status===403){alert(ea_settings['trans.nonce-expired'])} 86if(xhr.status===404){alert(ea_settings['trans.ajax-call-not-available'])} 87if(xhr.status===500){alert(ea_settings['trans.internal-error'])} 88self.removeLoader()})}},refreshData:function(data){var datepicker=this.$element.find('.date');jQuery.each(data,function(key,status){var $td=datepicker.find('.'+key);$td.removeClass('free');$td.removeClass('busy');$td.removeClass('no-slots');$td.addClass(status)});this.removeLoader()},checkStatus:function(){var selects=this.$element.find('select').not('.custom-field');var isComplete=!0;selects.each(function(index,element){isComplete=isComplete&&jQuery(element).val()!==''});return isComplete},appSelected:function(element){var plugin=this;this.placeLoader(this.$element.find('.selected-time'));var options={location:this.$element.find('[name="location"]').val(),service:this.$element.find('[name="service"]').val(),worker:this.$element.find('[name="worker"]').val(),repeat_booking:this.$element.find('[name="repeat_booking"]').val(),repeat_start_date:this.$element.find('[name="repeat_start_date"]').val(),repeat_end_date:this.$element.find('[name="repeat_end_date"]').val(),date:this.$element.find('.date').datepicker().val(),end_date:this.$element.find('.date').datepicker().val(),check:ea_settings.check,action:'ea_res_appointment'};if(ea_settings.is_multiple_booking_allowed=='1'){var selectedTimes=[];plugin.$element.find('.selected-time').each(function(){selectedTimes.push(jQuery(this).data('val'))});if(selectedTimes.length>0){options.start=selectedTimes.join(',')}else{options.start=this.$element.find('.selected-time').first().data('val')}}else{options.start=this.$element.find('.selected-time').data('val')} 89options._cb=Math.floor(Math.random()*1000000);var booking_data={};booking_data.location=this.$element.find('select[name="location"] > option:selected, [name="location"] > option:selected').first().text();booking_data.service=this.$element.find('select[name="service"] > option:selected, [name="service"] > option:selected').first().text();booking_data.worker=this.$element.find('select[name="worker"] > option:selected, [name="worker"] > option:selected').first().text();booking_data.date=this.$element.find('.date').datepicker().val();booking_data.time=this.$element.find('.selected-time').first().data('val');booking_data.price=this.$element.find('select[name="service"] > option:selected, [name="service"] > option:selected').first().data('price');booking_data.service_description=this.$element.find('select[name="service"] > option:selected, [name="service"] > option:selected').first().data('description')||'';
89var format=ea_settings.date_format+' '+ea_settings.time_format;var firstTime=(booking_data.time||'').toString().split(',')[0].trim();if(firstTime){var formattedDate=moment(booking_data.date+'T'+firstTime,ea_settings.default_datetime_format).format(ea_settings.date_format||'YYYY-MM-DD');booking_data.date_time=formattedDate+' '+booking_data.time}else{booking_data.date_time=booking_data.date+' '+booking_data.time} 90var req=jQuery.get(ea_ajaxurl,options,function(response){plugin.res_app=response.id;plugin.$element.find('.ea-cancel').data('_hash',response._hash);plugin.$element.find('.step').addClass('disabled');plugin.$element.find('.final').removeClass('disabled');plugin.scrollToElement(plugin.$element.find('.final'));var overview_content='';overview_content=plugin.settings.overview_template({data:booking_data,settings:ea_settings});plugin.$element.find('#booking-overview').html(overview_content);plugin.$element.find('#ea-total-amount').on('checkout:done',function(event,checkoutId){var paypal_input=plugin.$element.find('#paypal_transaction_id');if(paypal_input.length==0){paypal_input=jQuery('<input id="paypal_transaction_id" class="custom-field" name="paypal_transaction_id" type="hidden"/>');plugin.$element.find('.final').append(paypal_input)} 91paypal_input.val(checkoutId);plugin.finalComformation(event)})},'json');req.fail(function(xhr,status){if(xhr.status===403){alert(ea_settings['trans.nonce-expired'])} 92if(xhr.status===404){alert(ea_settings['trans.ajax-call-not-available'])} 93if(xhr.status===500){alert(ea_settings['trans.internal-error'])} 94plugin.removeLoader()});req.always(jQuery.proxy(function(){plugin.removeLoader()}))},loadPreviousFormData:function($form){if(typeof localStorage==='undefined'){return} 95var options=JSON.parse(localStorage.getItem('ea-form-options'));if(options===null){options={}} 96var params=this.getJsonFromUrl();if(options==null&¶ms==null){return} 97Object.keys(options).forEach(function(key){$form.find('[name="'+key+'"]').val(options[key])});Object.keys(params).forEach(function(key){$form.find('[name="'+key+'"]').val(params[key])})},storeFormData:function(options){if(typeof localStorage!=='undefined'){localStorage.setItem('ea-form-options',JSON.stringify(options))}},formatRedirect:function(urlString,data){var parsedUrl=urlString;jQuery.each(data,function(key,value){parsedUrl=parsedUrl.replaceAll('{{'+key+'}}',encodeURIComponent(value))});return parsedUrl},finalComformation:function(event){if(typeof event!=='undefined'){event.preventDefault()} 98var plugin=this;if(plugin.isSubmitting){return} 99var form=this.$element.find('form');if(!form.valid()){return} 100plugin.isSubmitting=!0;var $submitBtn=this.$element.find('.ea-submit, .booking-button');$submitBtn.prop('disabled',!0).addClass('ea-loading').html('<span class="ea-btn-spinner"></span><span>'+(ea_settings['trans.booking-in-progress']||'Booking...')+'</span>');var $navControls=plugin.$element.find('.ea-cancel, .ea-wizard-btn-back, .ea-sidebar-btn-back, .ea-wizard-btn-next, .ea-sidebar-btn-next, .ea-wizard-step-item, .ea-sidebar-tab-item');$navControls.prop('disabled',!0).addClass('is-disabled').css('pointer-events','none');var options={id:this.res_app,check:ea_settings.check};this.$element.find('.custom-field').not('.dummy').each(function(index,element){var name=jQuery(element).attr('name');options[name]=jQuery(element).val()});options.action='ea_final_appointment';options._cb=Math.floor(Math.random()*1000000);var req=jQuery.get(ea_ajaxurl,options,function(response){plugin.storeFormData(options);plugin.isSubmitting=!1;jQuery('.ea-submit, .booking-button').removeClass('ea-loading').prop('disabled',!0).html('<span>'+(ea_settings['trans.booked']||'Booked')+'</span>');jQuery('.ea-cancel, .ea-wizard-btn-back, .ea-wizard-btn-next, .ea-wizard-nav, .ea-sidebar-btn-back, .ea-sidebar-btn-next, .ea-sidebar-nav, .ea-sidebar-nav-wrap, .ea-sidebar-header, #ea-service-description, .ea-service-description, .ea-service-description-wrap').hide();plugin.$element.find('.ea-cancel, .ea-wizard-btn-back, .ea-wizard-btn-next, .ea-wizard-nav, .ea-sidebar-btn-back, .ea-sidebar-btn-next, .ea-sidebar-nav, .ea-sidebar-nav-wrap, .ea-sidebar-header, #ea-service-description, .ea-service-description, .ea-service-description-wrap').empty().hide();plugin.$element.find('#paypal-button').hide();if(ea_settings['show.display_thankyou_note']==1){plugin.$element.addClass('ea-booking-complete');var $bootstrap=plugin.$element.find('.ea-bootstrap').length?plugin.$element.find('.ea-bootstrap'):plugin.$element;$bootstrap.addClass('ea-booking-complete');
100plugin.$element.find('.ea-filters-grid, .ea-filters-grid-full, .ea-booking-title, .ea-booking-summary-bar, .ea-new-ui-final-actions, .booking-button, .ea-submit, .ea-wizard-stepper-container, .ea-wizard-nav, .ea-wizard-btn-back, .ea-wizard-btn-next, .ea-sidebar-nav-wrap, .ea-sidebar-header, .ea-sidebar-nav, #ea-service-description, .ea-service-description, .ea-service-description-wrap').hide();$bootstrap.find('.ea-wizard-stepper-container, .ea-wizard-nav, .ea-wizard-btn-back, .ea-wizard-btn-next, .ea-sidebar-nav-wrap, .ea-sidebar-header, .ea-sidebar-nav, #ea-service-description, .ea-service-description, .ea-service-description-wrap').hide();plugin.$element.find('.step').not('.final').hide();plugin.$element.find('.ea-sidebar-pane').not('.ea-sidebar-pane-3').hide();plugin.$element.find('.ea-sidebar-pane-3').addClass('is-active').show();plugin.$element.find('.step.final').find('small, label, .ea_hide_show, .form-group, #booking-overview-header, #ea-overview-message, .ea-confirmation-subtext').hide();plugin.$element.find('small, #booking-overview-header, #ea-overview-message, .ea-confirmation-subtext').not('.ea-confirmation-title').not('.ea-status-note').hide();plugin.$element.find('.step.final').children().not('#booking-overview').not('#ea-success-box').hide();var table_html=plugin.$element.find('#booking-overview').find('table').html();plugin.$element.find('#booking-overview').show();plugin.$element.find('#booking-overview').find('table').hide();plugin.$element.find('.final').show();plugin.$element.find('#ea-success-box').show();plugin.$element.find('#ea-success-box .ea-confirmation-title, #ea-success-box .ea-status-note').show().css({'display':'block','visibility':'visible'});plugin.$element.find('#ea-overview-details').html('<table class="ea-overview-table" style="width:100% !important; table-layout:fixed !important; border-collapse:collapse !important;">'+table_html+'</table>');const meta=document.getElementById('ea-meta-data');if(meta){const rawDateTime=meta.dataset.dateTime||'';const service=meta.dataset.service||'';const worker=meta.dataset.worker||'';const location=meta.dataset.location||'';const priceElem=document.getElementById('ea-total-amount');const price=priceElem?(priceElem.dataset.price||''):'';const currency=meta.dataset.currency||'';const title=`${service} with ${worker}`;const description=`Service: ${service}\nWorker: ${worker}\nPrice: ${price}${currency}`;
100const startDateObj=new Date(rawDateTime);if(!isNaN(startDateObj.getTime())){const endDateObj=new Date(startDateObj.getTime()+60*60*1000);const formatDateForGoogle=(dateObj)=>dateObj.toISOString().replace(/[-:]/g,'').split('.')[0]+'Z';const start=formatDateForGoogle(startDateObj);const end=formatDateForGoogle(endDateObj);const calendarUrl=new URL("https://calendar.google.com/calendar/render");calendarUrl.searchParams.set("action","TEMPLATE");calendarUrl.searchParams.set("text",title);calendarUrl.searchParams.set("dates",`${start}/${end}`);calendarUrl.searchParams.set("details",description);calendarUrl.searchParams.set("location",location);calendarUrl.searchParams.set("trp","false");const calBtn=document.getElementById("ea-add-to-calendar");if(calBtn){calBtn.href=calendarUrl.toString()}}} 101plugin.$element.find('.ea-status-note').text(ea_settings.default_status_message);window.scrollTo({top:0,behavior:'smooth'})}else{plugin.$element.addClass('ea-booking-complete');var $bootstrap=plugin.$element.find('.ea-bootstrap').length?plugin.$element.find('.ea-bootstrap'):plugin.$element;$bootstrap.addClass('ea-booking-complete');plugin.$element.find('.ea-wizard-stepper-container, .ea-wizard-nav, .ea-wizard-btn-back, .ea-wizard-btn-next, .ea-sidebar-nav-wrap, .ea-sidebar-header, .ea-sidebar-nav').hide();$bootstrap.find('.ea-wizard-stepper-container, .ea-wizard-nav, .ea-wizard-btn-back, .ea-wizard-btn-next, .ea-sidebar-nav-wrap, .ea-sidebar-header, .ea-sidebar-nav').hide();plugin.$element.find('.ea-sidebar-pane').not('.ea-sidebar-pane-3').hide();plugin.$element.find('.ea-sidebar-pane-3').addClass('is-active').show();plugin.$element.find('.final').show().append('<h3 class="ea-done-message">'+_.escape(ea_settings['trans.done_message'])+'</h3>')} 102plugin.$element.find('form').find('input,select,textarea').prop('disabled',!0);plugin.$element.find('.calendar').addClass('disabled');plugin.$element.find('.g-recaptcha').remove();plugin.triggerEvent();var redirected=!1;options.worker_name=plugin.$element.find('select[name="worker"] option:selected, [name="worker"] option:selected').first().text();options.service_name=plugin.$element.find('select[name="service"] option:selected, [name="service"] option:selected').first().text();options.location_name=plugin.$element.find('select[name="location"] option:selected, [name="location"] option:selected').first().text();options.start_time=plugin.$element.find('.selected-time').data('val');options.date_time=plugin.$element.find('.date').val()+' '+options.start_time;if(ea_settings['advance.redirect']!==''){var data=JSON.parse(ea_settings['advance.redirect'].replaceAll('"','"'));var service=plugin.$element.find('[name="service"]').val();var redirect=data.find(function(el){return el.service===service});if(redirect){redirected=!0;setTimeout(function(){window.location.href=plugin.formatRedirect(redirect.url,options)},2000)}} 103if(ea_settings['submit.redirect']!==''&&redirected===!1){setTimeout(function(){window.location.href=plugin.formatRedirect(ea_settings['submit.redirect'],options)},2000)}},'json').fail(jQuery.proxy(function(response,status,error){plugin.isSubmitting=!1;var $navControls=plugin.$element.find('.ea-cancel, .ea-wizard-btn-back, .ea-sidebar-btn-back, .ea-wizard-btn-next, .ea-sidebar-btn-next, .ea-wizard-step-item, .ea-sidebar-tab-item');$navControls.prop('disabled',!1).removeClass('is-disabled').css('pointer-events','auto');if(response.responseJSON&&response.responseJSON.message){alert(response.responseJSON.message)} 104this.$element.find('.ea-submit, .booking-button').prop('disabled',!1).removeClass('ea-loading').html(ea_settings['trans.book-appointment']||'Book appointment')},plugin))},singleConformation:function(event){if(typeof event!=='undefined'){event.preventDefault()} 105var plugin=this;if(plugin.isSubmitting){return} 106var form=this.$element.find('form');if(!form.valid()){var $final=plugin.$element.find('.step.final');if($final.length){plugin.scrollToElement($final)} 107return} 108plugin.isSubmitting=!0;var $submitBtn=this.$element.find('.ea-submit, .booking-button');$submitBtn.prop('disabled',!0).addClass('ea-loading').html('<span class="ea-btn-spinner"></span><span>'+(ea_settings['trans.booking-in-progress']||'Booking...')+'</span>');var $navControls=plugin.$element.find('.ea-cancel, .ea-wizard-btn-back, .ea-sidebar-btn-back, .ea-wizard-btn-next, .ea-sidebar-btn-next, .ea-wizard-step-item, .ea-sidebar-tab-item');$navControls.prop('disabled',!0).addClass('is-disabled').css('pointer-events','none');var options={location:this.$element.find('[name="location"]').val(),service:this.$element.find('[name="service"]').val(),worker:this.$element.find('[name="worker"]').val(),repeat_booking:this.$element.find('[name="repeat_booking"]').val(),repeat_start_date:this.$element.find('[name="repeat_start_date"]').val(),repeat_end_date:this.$element.find('[name="repeat_end_date"]').val(),date:this.$element.find('.date').datepicker().val(),end_date:this.$element.find('.date').datepicker().val(),check:ea_settings.check,action:'ea_res_appointment'};if(ea_settings.is_multiple_booking_allowed=='1'){var selectedTimes=[];plugin.$element.find('.selected-time').each(function(){selectedTimes.push(jQuery(this).data('val'))});if(selectedTimes.length>0){options.start=selectedTimes.join(',')}else{options.start=this.$element.find('.selected-time').first().data('val')}}else{options.start=this.$element.find('.selected-time').data('val')} 109if(this.$element.find('.g-recaptcha-response').length===1){options.captcha=this.$element.find('.g-recaptcha-response').val()} 110if(ea_settings['captcha3.site-key']&&grecaptcha){grecaptcha.ready(function(){gre
110captcha.execute(ea_settings['captcha3.site-key'],{action:'submit'}).then(function(token){options.captcha=token;options._cb=Math.floor(Math.random()*1000000);jQuery.get(ea_ajaxurl,options,function(response){plugin.res_app=response.id;plugin.isSubmitting=!1;plugin.finalComformation(event)},'json').fail(jQuery.proxy(function(response){plugin.isSubmitting=!1;var $navControls=plugin.$element.find('.ea-cancel, .ea-wizard-btn-back, .ea-sidebar-btn-back, .ea-wizard-btn-next, .ea-sidebar-btn-next, .ea-wizard-step-item, .ea-sidebar-tab-item');$navControls.prop('disabled',!1).removeClass('is-disabled').css('pointer-events','auto');if(response.responseJSON&&response.responseJSON.message){alert(response.responseJSON.message)} 111this.$element.find('.ea-submit, .booking-button').prop('disabled',!1).removeClass('ea-loading').html(ea_settings['trans.book-appointment']||'Book appointment')},plugin)).always(jQuery.proxy(function(){plugin.removeLoader()},plugin))})});return} 112options._cb=Math.floor(Math.random()*1000000);jQuery.get(ea_ajaxurl,options,function(response){plugin.res_app=response.id;plugin.isSubmitting=!1;plugin.finalComformation(event)},'json').fail(jQuery.proxy(function(response){plugin.isSubmitting=!1;var $navControls=plugin.$element.find('.ea-cancel, .ea-wizard-btn-back, .ea-sidebar-btn-back, .ea-wizard-btn-next, .ea-sidebar-btn-next, .ea-wizard-step-item, .ea-sidebar-tab-item');$navControls.prop('disabled',!1).removeClass('is-disabled').css('pointer-events','auto');if(response.responseJSON&&response.responseJSON.message){alert(response.responseJSON.message)} 113this.$element.find('.ea-submit, .booking-button').prop('disabled',!1).removeClass('ea-loading').html(ea_settings['trans.book-appointment']||'Book appointment')},plugin)).always(jQuery.proxy(function(){plugin.removeLoader()},plugin))},triggerEvent:function(){var plugin=this;var booking_data={};booking_data.location=plugin.$element.find('select[name="location"] > option:selected, [name="location"] > option:selected').first().text();booking_data.service=plugin.$element.find('select[name="service"] > option:selected, [name="service"] > option:selected').first().text();booking_data.worker=plugin.$element.find('select[name="worker"] > option:selected, [name="worker"] > option:selected').first().text();booking_data.date=plugin.$element.find('.date').datepicker().val();booking_data.time=plugin.$element.find('.selected-time').first().data('val');booking_data.price=plugin.$element.find('select[name="service"] > option:selected, [name="service"] > option:selected').first().data('price');var event=new CustomEvent('easyappnewappointment',{detail:booking_data});document.dispatchEvent(event)},triggerSlotSelectEvent:function(){var event=new Event('easyappslotselect');document.dispatchEvent(event)},resetForm:function(){var plugin=this;var $form=plugin.$element.find('form');if($form.length&&$form[0]&&$form[0].reset){$form[0].reset()} 114plugin.$element.find('select.filter, select.custom-field, .ea-new-ui select').each(function(){var $select=jQuery(this);var firstVal=$select.find('option:first').val()||'';$select.val(firstVal)});plugin.$element.find('#ea-service-description').empty().hide();plugin.$element.find('.selected-time').removeClass('selected-time');plugin.$element.find('.time').empty();plugin.$element.find('.time-row').remove();var $date=plugin.$element.find('.date');if($date.length&&$date.datepicker){try{$date.datepicker('setDate',null);$date.find('.ui-datepicker-current-day').removeClass('ui-datepicker-current-day')}catch(e){}} 115if($form.length&&$form.data('validator')){$form.data('validator').resetForm()} 116plugin.$element.find('#booking-overview').empty();var $bar=plugin.$element.find('.ea-booking-summary-bar');if($bar.length){$bar.find('.ea-summary-text').text(ea_settings['trans.select-date-time']||'Select a date & time to continue').addClass('empty');$bar.find('.ea-submit, .ea-cancel').hide()} 117plugin.res_app=null;plugin.updateSubmitButtonState();plugin.blurNextSteps(plugin.$element.find('.step:visible:first'),!0,!0);if(ea_settings['form.style']==='wizard'){plugin.maxReachedWizardStep=1;plugin.goToWizardStep(1);plugin.$element.find('.ea-wizard-nav, .ea-wizard-stepper-container').show();plugin.$element.find('.ea-wizard-btn-back, .ea-wizard-btn-next').show();plugin.updateWizardButtons()}else if(ea_settings['form.style']==='sidebar'){plugin.maxReachedSidebarStep=1;plugin.goToSidebarStep(1);plugin.$element.find('.ea-sidebar-layout').show();plugin.$element.find('.ea-sidebar-btn-back, .ea-sidebar-btn-next').show();plugin.updateSidebarButtons()}},cancelApp:function(event){if(event)event.preventDefault();var plugin=this;var currentResApp=plugin.res_app;var _hash=plugin.$element.find('.ea-cancel').data('_hash');plugin.resetForm();if(ea_settings['pre.reservation']==='1'&¤tResApp){var options={id:currentResApp,check:ea_settings.check,_hash:_hash,action:'ea_cancel_appointment',_cb:Math.floor(Math.random()*1000000)};jQuery.get(ea_ajaxurl,options,function(response){},'json')} 118return!1},chooseStep:function(){var plugin=this;var $temp;if(ea_settings['advance_cancel.redirect']!==''){var data=JSON.parse(ea_settings['advance_cancel.redirect']);var service=plugin.$element.find('[name="service"]').val();var redirect=data.find(function(el){return el.service===service});if(redirect){setTimeout(function(){window.location.href=redirect.url},2000)} 119return} 120switch(ea_settings['cancel.scroll']){case 'calendar':plugin.scrollToElement(plugin.$element.find('.date'));break;case 'worker':$temp=plugin.$element.find('[name="worker"]');$temp.val('');$temp.change();$temp.closest('.step').nextAll('.step').find('select').val('');this.$element.find('.time-row').remove();plugin.scrollToElement($temp);break;case 'service':$temp=plugin.$element.find('[name="service"]');$temp.val('');$temp.change();$temp.closest('.step').nextAll('.step').find('select').val('');this.$element.find('.time-row').remove();plugin.scrollToElement($temp);break;case 'location':$temp=plugin.$element.find('[name="location"]');$temp.val('');$temp.change();$temp.closest('.step').nextAll('.step').find('select').val('');this.$element.find('.time-row').remove();plugin.scrollToElement($temp);break;case 'pagetop':break}},scrollToElement:function(element){if(ea_settings.scroll_off==='true'){return} 121jQuery('html, body').animate({scrollTop:(element.offset().top-20)},500)},getJsonFromUrl:function(){var query=location.search.substr(1);var result={};query.split("&").forEach(function(part){var item=part.split("=");result[item[0]]=decodeURIComponent(item[1])});return result},parsePhoneField:function($el){var code=$el.parent().find('.ea-phone-country-code-part').val();var number=$el.parent().find('.ea-phone-number-part').val().replace(/^0+/,'');$el.parent().find('.full-value').val('+'+code+number)},newUiLayoutDropdowns:function(){var plugin=this;var $bootstrap=plugin.$element.find('.ea-bootstrap');function closeAllCustomSelects(){jQuery('.ea-custom-select').removeClass('is-open is-dropup')} 122if(!plugin._customSelectGlobalBound){jQuery(document).off('click.eaCustomSelect').on('click.eaCustomSelect',function(e){if(!jQuery(e.target).closest('.ea-custom-select').length){closeAllCustomSelects()}});jQuery(document).off('keydown.eaCustomSelect').on('keydown.eaCustomSelect',function(e){if(e.key==='Escape'||e.keyCode===27){closeAllCustomSelects()}});plugin._customSelectGlobalBound=!0} 123var $locationStep=$bootstrap.find('[name="location"]').closest('.step');var $serviceStep=$bootstrap.find('[name="service"]').closest('.step');var $workerStep=$bootstrap.find('[name="worker"]').closest('.step');function buildFieldGroup($step,labelText){var $select=$step.find('select');var $label=$step.find('.ea-label');var lText=labelText||($label.length?$label.text().trim():'');$step.addClass('ea-new-ui-step-hidden').css({position:'absolute',visibility:'hidden',width:0,height:0,overflow:'hidden',padding:0,margin:0});var $grp=jQuery('<div class="ea-field-group"></div>');if(lText){$grp.append('<label>'+lText+'</label>')} 124var origName=$select.attr('name')||'';var $customSelect=jQuery('<div class="ea-custom-select" data-field="'+origName+'">'+'<div class="ea-custom-select-trigger" tabindex="0">'+'<span class="ea-custom-select-label"></span>'+'<span class="ea-custom-select-arrow">'+'<svg width="12" height="8" viewBox="0 0 12 8" fill="none"><path d="M1 1.5L6 6.5L11 1.5" stroke="#4b5563" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>'+'</span>'+'</div>'+'<div class="ea-custom-select-dropdown">'+'<ul class="ea-custom-select-options"></ul>'+'</div>'+'</div>');$grp.append($customSelect);function renderCustomOptions(){var $list=$customSelect.find('.ea-custom-select-options');$list.empty();var selectedVal=$select.val();var selectedLabel='';$select.find('option').each(function(){var $opt=jQuery(this);var val=$opt.attr('value')!==undefined?$opt.attr('value'):$opt.val();var text=$opt.text().trim();var isSelected=(val===selectedVal)||($opt.is(':selected')&&!selectedLabel);if(isSelected&&(val!==''||!selectedLabel)){selectedLabel=text} 125var match=text.match(/^(.*?)(?:\s*-\s*([0-9]+(?:\.[0-9]+)?\s*[^\d\s]+|[^\d\s]+\s*[0-9]+(?:\.[0-9]+)?))$/);var optionHtml='';if(match&&match[1]&&match[2]&&val!==''){var namePart=match[1].trim();var pricePart=match[2].trim();optionHtml='<span class="ea-custom-opt-name">'+namePart+'</span>'+'<span class="ea-custom-opt-price">'+pricePart+'</span>'}else{optionHtml='<span class="ea-custom-opt-name">'+text+'</span>'} 126var $li=jQuery('<li class="ea-custom-option'+(isSelected?' is-selected':'')+'" data-value="'+val+'" title="'+text+'">'+optionHtml+'</li>');$li.on('click',function(e){e.preventDefault();e.stopPropagation();var newVal=jQuery(this).attr('data-value');$select.val(newVal).trigger('change');$customSelect.find('.ea-custom-option').removeClass('is-selected');jQuery(this).addClass('is-selected');$customSelect.find('.ea-custom-select-label').text(text).attr('title',text);closeAllCustomSelects()});$list.append($li)});if(!selectedLabel){selectedLabel=$select.find('option:first').text()||'Select...'} 127$customSelect.find('.ea-custom-select-label').text(selectedLabel).attr('title',selectedLabel)} 128function syncDisabled(){var isDisabled=$step.hasClass('disabled')||$select.is(':disabled');
128if(isDisabled){$grp.addClass('disabled');$customSelect.addClass('is-disabled').attr('tabindex','-1');$customSelect.removeClass('is-open is-dropup')}else{$grp.removeClass('disabled');$customSelect.removeClass('is-disabled').attr('tabindex','0')}} 129$customSelect.find('.ea-custom-select-trigger').on('click',function(e){e.preventDefault();e.stopPropagation();if($customSelect.hasClass('is-disabled'))return;var wasOpen=$customSelect.hasClass('is-open');closeAllCustomSelects();if(!wasOpen){$customSelect.addClass('is-open');var rect=$customSelect[0].getBoundingClientRect();var spaceBelow=window.innerHeight-rect.bottom;if(spaceBelow<240&&rect.top>240){$customSelect.addClass('is-dropup')}else{$customSelect.removeClass('is-dropup')}}});$customSelect.on('keydown',function(e){if($customSelect.hasClass('is-disabled'))return;var $items=$customSelect.find('.ea-custom-option');if(!$items.length)return;var $focused=$customSelect.find('.ea-custom-option.is-focused');var currIndex=$focused.length?$items.index($focused):$items.index($customSelect.find('.ea-custom-option.is-selected'));if(e.key==='Enter'||e.key===' '){e.preventDefault();if(!$customSelect.hasClass('is-open')){$customSelect.find('.ea-custom-select-trigger').click()}else if($focused.length){$focused.click()}else if(currIndex>=0){$items.eq(currIndex).click()}}else if(e.key==='ArrowDown'){e.preventDefault();if(!$customSelect.hasClass('is-open')){$customSelect.find('.ea-custom-select-trigger').click()}else{var nextIdx=currIndex+1<$items.length?currIndex+1:0;$items.removeClass('is-focused');var $nextItem=$items.eq(nextIdx).addClass('is-focused');if($nextItem.length&&$nextItem[0].scrollIntoView){$nextItem[0].scrollIntoView({block:'nearest'})}}}else if(e.key==='ArrowUp'){e.preventDefault();if(!$customSelect.hasClass('is-open')){$customSelect.find('.ea-custom-select-trigger').click()}else{var prevIdx=currIndex-1>=0?currIndex-1:$items.length-1;$items.removeClass('is-focused');var $prevItem=$items.eq(prevIdx).addClass('is-focused');if($prevItem.length&&$prevItem[0].scrollIntoView){$prevItem[0].scrollIntoView({block:'nearest'})}}}});$select.on('change',function(){renderCustomOptions();syncDisabled()});if(window.MutationObserver&&$select[0]){var observer=new MutationObserver(function(){renderCustomOptions();syncDisabled()});observer.observe($select[0],{childList:!0,attributes:!0,attributeFilter:['disabled','class']});if($step[0]){var stepObserver=new MutationObserver(function(){syncDisabled()});stepObserver.observe($step[0],{attributes:!0,attributeFilter:['class']})}} 130renderCustomOptions();syncDisabled();return $grp} 131if($bootstrap.find('.ea-filters-grid').length){return} 132var hasLocation=$locationStep.length&&$locationStep.find('select').children('option').length>1;var hasService=$serviceStep.length;var hasWorker=$workerStep.length;var $grid=null;if(hasLocation&&hasService){$grid=jQuery('<div class="ea-filters-grid"></div>');$grid.append(buildFieldGroup($locationStep,null));$grid.append(buildFieldGroup($serviceStep,null))}else if(hasService){$grid=jQuery('<div class="ea-filters-grid-full"></div>');$grid.append(buildFieldGroup($serviceStep,null))} 133if(hasWorker){var $workerGrid=jQuery('<div class="ea-filters-grid-full"></div>');$workerGrid.append(buildFieldGroup($workerStep,null));var $title=$bootstrap.find('.ea-booking-title');if($grid){if($title.length){$title.after($workerGrid).after($grid)}else{$bootstrap.prepend($workerGrid).prepend($grid)}}else{if($title.length){$title.after($workerGrid)}else{$bootstrap.prepend($workerGrid)}}}else if($grid){var $title3=$bootstrap.find('.ea-booking-title');if($title3.length){$title3.after($grid)}else{$bootstrap.prepend($grid)}} 134var $descBox=plugin.$element.find('#ea-service-description');if($descBox.length){if($workerGrid&&$workerGrid.length){$workerGrid.after($descBox)}else if($grid&&$grid.length){$grid.after($descBox)}}},updateNewUiSummaryBar:function(){var plugin=this;var $bar=plugin.$element.find('.ea-booking-summary-bar');if(!$bar.length)return;var $selected=plugin.$element.find('.selected-time');var $summaryText=$bar.find('.ea-summary-text');if(!$selected.length){$summaryText.text(ea_settings['trans.select-date-time']||'Select a date & time to continue').addClass('empty');$bar.find('.ea-submit, .ea-cancel').hide();return} 135var dateVal=plugin.$element.find('.date').datepicker().val()||plugin.settings.currentDate||'';var summaryParts=[];if(dateVal){summaryParts.push(moment(dateVal,'YYYY-MM-DD').format('ddd D MMM'))} 136if(ea_settings.is_multiple_booking_allowed=='1'&&$selected.length>1){var timesArr=[];$selected.each(function(){timesArr.push(jQuery(this).data('val'))});summaryParts.push(timesArr.join(', '))}else{var timeVal=$selected.first().data('val')||'';var duration=parseInt(plugin.$element.find('select[name="service"] > option:selected, [name="service"] > option:selected').first().data('duration'))||0;if(timeVal){if(ea_settings['label.from_to']==='1'&&duration>0){var endTime=moment(timeVal,'HH:mm').add(duration,'minutes').format('HH:mm');summaryParts.push(timeVal+' - '+endTime)}else{var slotText=timeVal;
136if(duration>0){slotText+=' \u00b7 '+duration+' '+(ea_settings['trans.min']||'min')} 137summaryParts.push(slotText)}}} 138if(summaryParts.length){$summaryText.text(summaryParts.join(', ')).removeClass('empty')}else{$summaryText.text(ea_settings['trans.select-date-time']||'Select a date & time to continue').addClass('empty')} 139$bar.find('.ea-submit, .ea-cancel').show();plugin.updateSubmitButtonState()},formatDateLabel:function(dateString){if(!dateString)return'';return moment(dateString,'YYYY-MM-DD').format('ddd D MMMM')},updateSubmitButtonState:function(){var plugin=this;var hasSelected=plugin.$element.find('.selected-time').length>0;var $submitBtns=plugin.$element.find('.ea-submit, .booking-button');if(hasSelected){$submitBtns.prop('disabled',!1).removeClass('is-disabled')}else{$submitBtns.prop('disabled',!0).addClass('is-disabled')} 140if(ea_settings['form.style']==='wizard'){plugin.updateWizardButtons()}else if(ea_settings['form.style']==='sidebar'){plugin.updateSidebarButtons()}},initWizardMode:function(){var plugin=this;var $bootstrap=plugin.$element.find('.ea-bootstrap').length?plugin.$element.find('.ea-bootstrap'):plugin.$element;var $form=$bootstrap.find('form');if($bootstrap.hasClass('ea-wizard-mode')){return} 141$bootstrap.addClass('ea-wizard-mode ea-wizard-step-1');plugin.$element.addClass('ea-wizard-mode ea-wizard-step-1');$bootstrap.removeClass('ea-layout-cols-2');plugin.$element.removeClass('ea-layout-cols-2');$form.find('div.col-md-6').removeClass('col-md-6');$form.find('.step.final.col-md-6').removeClass('col-md-6');plugin.currentWizardStep=1;plugin.maxReachedWizardStep=1;var step1Label=ea_settings['trans.wizard_step_service']||ea_settings['trans.service']||'Service';var step2Label=ea_settings['trans.wizard_step_datetime']||ea_settings['trans.date-time']||'Date & Time';var step3Label=ea_settings['trans.wizard_step_details']||ea_settings['trans.personal-informations']||'Details';var stepperHtml='<div class="ea-wizard-stepper-container">'+'<div class="ea-wizard-stepper">'+'<div class="ea-wizard-step-item is-current" data-step="1">'+'<div class="ea-wizard-step-bubble">'+'<span class="ea-wizard-step-num">1</span>'+'<span class="ea-wizard-step-check">✓</span>'+'</div>'+'<span class="ea-wizard-step-label">'+step1Label+'</span>'+'</div>'+'<div class="ea-wizard-step-line" data-line="1"><div class="ea-wizard-step-line-fill"></div></div>'+'<div class="ea-wizard-step-item" data-step="2">'+'<div class="ea-wizard-step-bubble">'+'<span class="ea-wizard-step-num">2</span>'+'<span class="ea-wizard-step-check">✓</span>'+'</div>'+'<span class="ea-wizard-step-label">'+step2Label+'</span>'+'</div>'+'<div class="ea-wizard-step-line" data-line="2"><div class="ea-wizard-step-line-fill"></div></div>'+'<div class="ea-wizard-step-item" data-step="3">'+'<div class="ea-wizard-step-bubble">'+'<span class="ea-wizard-step-num">3</span>'+'<span class="ea-wizard-step-check">✓</span>'+'</div>'+'<span class="ea-wizard-step-label">'+step3Label+'</span>'+'</div>'+'</div>'+'</div>';var $title=$bootstrap.find('.ea-booking-title');if($title.length){$title.after(stepperHtml)}else{$bootstrap.prepend(stepperHtml)} 142var $pane1=jQuery('<div class="ea-wizard-pane ea-wizard-pane-1 is-active" data-pane="1"></div>');var $pane2=jQuery('<div class="ea-wizard-pane ea-wizard-pane-2" data-pane="2"></div>');var $pane3=jQuery('<div class="ea-wizard-pane ea-wizard-pane-3" data-pane="3"></div>');var $grid=$bootstrap.find('.ea-filters-grid, .ea-filters-grid-full');var $hiddenSteps=$bootstrap.find('.ea-new-ui-step-hidden');var $descBox=$bootstrap.find('#ea-service-description');var $stepLocation=$bootstrap.find('[name="location"]').closest('.step');var $stepService=$bootstrap.find('[name="service"]').closest('.step');var $stepWorker=$bootstrap.find('[name="worker"]').closest('.step');$pane1.append('<div class="ea-wizard-pane-body"></div>');var $pane1Body=$pane1.find('.ea-wizard-pane-body');if($grid.length){$pane1Body.append($grid)}else{if($stepLocation.length)$pane1Body.append($stepLocation);if($stepService.length)$pane1Body.append($stepService);if($stepWorker.length)$pane1Body.append($stepWorker);} 143if($hiddenSteps.length){$pane1Body.append($hiddenSteps)} 144if($descBox.length){$pane1Body.append($descBox)} 145var nextText=ea_settings['trans.wizard_next']||'Next';var backText=ea_settings['trans.wizard_back']||'Back';$pane1.append('<div class="ea-wizard-nav ea-wizard-nav-1">'+'<button type="button" class="ea-btn ea-wizard-btn-next ea-wizard-next-1 btn btn-primary">'+nextText+' <span class="ea-wizard-arrow">→</span>'+'</button>'+'</div>');var $calStep=$bootstrap.find('.step.calendar');var $timeStep=$bootstrap.find('.step').not('.calendar, .final, .ea-new-ui-step-hidden, .form-group');
145if(!$timeStep.length){$timeStep=$bootstrap.find('.date').closest('.step').next('.step')} 146$pane2.append('<div class="ea-wizard-pane-body"></div>');var $pane2Body=$pane2.find('.ea-wizard-pane-body');$pane2Body.append($calStep).append($timeStep);$pane2.append('<div class="ea-wizard-nav ea-wizard-nav-2">'+'<button type="button" class="ea-btn ea-wizard-btn-back ea-wizard-back-2 btn btn-default">'+'<span class="ea-wizard-arrow">←</span> '+backText+'</button>'+'<button type="button" class="ea-btn ea-wizard-btn-next ea-wizard-next-2 btn btn-primary is-disabled" disabled>'+nextText+' <span class="ea-wizard-arrow">→</span>'+'</button>'+'</div>');var $finalStep=$bootstrap.find('.step.final');$pane3.append('<div class="ea-wizard-pane-body"></div>');var $pane3Body=$pane3.find('.ea-wizard-pane-body');$pane3Body.append($finalStep);$pane3.append('<div class="ea-wizard-nav ea-wizard-nav-3">'+'<button type="button" class="ea-btn ea-wizard-btn-back ea-wizard-back-3 btn btn-default">'+'<span class="ea-wizard-arrow">←</span> '+backText+'</button>'+'</div>');$form.append($pane1).append($pane2).append($pane3);var $submitBtn=$finalStep.find('.ea-submit, .booking-button');var $cancelBtn=$finalStep.find('.ea-cancel');var $nav3=$pane3.find('.ea-wizard-nav-3');if($submitBtn.length&&!$nav3.find('.ea-submit').length){$nav3.append($submitBtn)} 147if($cancelBtn.length&&!$nav3.find('.ea-cancel').length){$nav3.append($cancelBtn)} 148$bootstrap.on('click','.ea-wizard-next-1',function(e){e.preventDefault();plugin.goToWizardStep(2)});$bootstrap.on('click','.ea-wizard-back-2',function(e){e.preventDefault();plugin.goToWizardStep(1)});$bootstrap.on('click','.ea-wizard-next-2',function(e){e.preventDefault();plugin.goToWizardStep(3)});$bootstrap.on('click','.ea-wizard-back-3',function(e){e.preventDefault();plugin.goToWizardStep(2)});$bootstrap.on('click','.ea-wizard-step-item',function(e){e.preventDefault();var targetStep=parseInt(jQuery(this).data('step'),10);
148if(targetStep&&targetStep<=plugin.maxReachedWizardStep){plugin.goToWizardStep(targetStep)}});$bootstrap.on('click','.time-value',function(){setTimeout(function(){plugin.updateWizardButtons()},50)})},updateWizardButtons:function(){var plugin=this;var $bootstrap=plugin.$element.find('.ea-bootstrap').length?plugin.$element.find('.ea-bootstrap'):plugin.$element;var hasSelectedTime=$bootstrap.find('.selected-time').length>0;var $next2=$bootstrap.find('.ea-wizard-next-2');if(hasSelectedTime){$next2.prop('disabled',!1).removeClass('is-disabled');if(plugin.maxReachedWizardStep<2){plugin.maxReachedWizardStep=2}}else{$next2.prop('disabled',!0).addClass('is-disabled')}},goToWizardStep:function(targetStep){var plugin=this;var $bootstrap=plugin.$element.find('.ea-bootstrap').length?plugin.$element.find('.ea-bootstrap'):plugin.$element;targetStep=parseInt(targetStep,10);if(isNaN(targetStep)||targetStep<1||targetStep>3)return;if(targetStep>1&&plugin.currentWizardStep===1){var serviceVal=$bootstrap.find('[name="service"]').val();if(!serviceVal||serviceVal===''||serviceVal==='-'){var $svcField=$bootstrap.find('[name="service"], .ea-field-group:has([name="service"])').first();$svcField.addClass('ea-shake');setTimeout(function(){$svcField.removeClass('ea-shake')},600);return}} 149if(targetStep===3){var hasTime=$bootstrap.find('.selected-time').length>0;if(!hasTime){var $timeBox=$bootstrap.find('.time, .ea-times-wrap, .date').first();$timeBox.addClass('ea-shake');setTimeout(function(){$timeBox.removeClass('ea-shake')},600);return} 150var $firstSlot=$bootstrap.find('.selected-time').first();if($firstSlot.length){plugin.updateBookingOverviewFromSlot($firstSlot)}} 151$bootstrap.find('.ea-wizard-pane').removeClass('is-active');$bootstrap.find('.ea-wizard-pane-'+targetStep).addClass('is-active');var $steps=$bootstrap.find('.ea-wizard-step-item');$steps.each(function(){var s=parseInt(jQuery(this).data('step'),10);jQuery(this).removeClass('is-current is-completed is-disabled');if(s<targetStep){jQuery(this).addClass('is-completed')}else if(s===targetStep){jQuery(this).addClass('is-current')}else{if(s>plugin.maxReachedWizardStep){jQuery(this).addClass('is-disabled')}}});$bootstrap.find('.ea-wizard-step-line[data-line="1"]').toggleClass('is-completed',targetStep>=2);$bootstrap.find('.ea-wizard-step-line[data-line="2"]').toggleClass('is-completed',targetStep>=3);$bootstrap.removeClass('ea-wizard-step-1 ea-wizard-step-2 ea-wizard-step-3').addClass('ea-wizard-step-'+targetStep);plugin.$element.removeClass('ea-wizard-step-1 ea-wizard-step-2 ea-wizard-step-3').addClass('ea-wizard-step-'+targetStep);plugin.currentWizardStep=targetStep;if(targetStep>plugin.maxReachedWizardStep){plugin.maxReachedWizardStep=targetStep} 152if(targetStep===2){var $date=$bootstrap.find('.date');if($date.hasClass('hasDatepicker')){$date.datepicker('refresh')} 153if($bootstrap.find('.time-row .time-value').length===0){plugin.selectChange()}else{if(plugin.savedSelectedSlots&&plugin.savedSelectedSlots.length>0){$bootstrap.find('.time-value').each(function(){var val=jQuery(this).data('val');if(plugin.savedSelectedSlots.indexOf(val)!==-1){jQuery(this).addClass('selected-time')}})}} 154plugin.updateWizardButtons()} 155var offsetTop=$bootstrap.offset().top-30;if(jQuery(window).scrollTop()>offsetTop){jQuery('html, body').animate({scrollTop:offsetTop},250)}},updateBookingOverviewFromSlot:function($slot){var plugin=this;var parentForm=$slot.closest('form');if(!parentForm.length)parentForm=plugin.$element.find('form');var booking_data={};booking_data.location=parentForm.find('select[name="location"] > option:selected, [name="location"] > option:selected').first().text();booking_data.service=parentForm.find('select[name="service"] > option:selected, [name="service"] > option:selected').first().text();booking_data.worker=parentForm.find('select[name="worker"] > option:selected, [name="worker"] > option:selected').first().text();booking_data.date=parentForm.find('.date').datepicker().val()||'';booking_data.time=parentForm.find('.selected-time').first().data('val')||'';booking_data.price=parentForm.find('select[name="service"] > option:selected, [name="service"] > option:selected').first().data('price');booking_data.service_description=parentForm.find('select[name="service"] > option:selected, [name="service"] > option:selected').first().data('description')||'';if(ea_settings.is_multiple_booking_allowed=='1'){var $selectedSlots=parentForm.find('.selected-time');booking_data.price=$selectedSlots.length*booking_data.price;if($selectedSlots.length>1){var timesArr=[];$selectedSlots.each(function(){timesArr.push(jQuery(this).data('val'))});booking_data.time=timesArr.join(', ')}} 156var firstTime=(booking_data.time||'').toString().split(',')[0].trim();if(firstTime&&booking_data.date){var formattedDate=moment(booking_data.date+'T'+firstTime,ea_settings.default_datetime_format).format(ea_settings.date_format||'YYYY-MM-DD');booking_data.date_time=formattedDate+' '+booking_data.time}else{booking_data.date_time=(booking_data.date||'')+' '+(booking_data.time||'')} 157var overview_content=plugin.settings.overview_template({data:booking_data,settings:ea_settings});parentForm.find('#booking-overview').html(overview_content);parentForm.find('.final').removeClass('disabled')},initSidebarMode:function(){var plugin=this;var $bootstrap=plugin.$element.find('.ea-bootstrap').length?plugin.$element.find('.ea-bootstrap'):plugin.$element;var $form=$bootstrap.find('form');if($bootstrap.hasClass('ea-sidebar-mode')){return} 158$bootstrap.addClass('ea-sidebar-mode ea-sidebar-step-1');plugin.$element.addClass('ea-sidebar-mode ea-sidebar-step-1');$bootstrap.removeClass('ea-layout-cols-2');plugin.$element.removeClass('ea-layout-cols-2');$form.find('div.col-md-6').removeClass('col-md-6');$form.find('.step.final.col-md-6').removeClass('col-md-6');plugin.currentSidebarStep=1;plugin.maxReachedSidebarStep=1;var step1Label=ea_settings['trans.sidebar_step_service']||ea_settings['trans.sidebar_step_package']||'Select Service';var step2Label=ea_settings['trans.sidebar_step_datetime']||'Date & Time';var step3Label=ea_settings['trans.sidebar_step_info']||'Your Information';var collapseLabel=ea_settings['trans.sidebar_collapse']||'Collapse menu';var continueText=ea_settings['trans.continue']||'Continue';var backText=ea_settings['trans.wizard_back']||'Back';var iconPackage='<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg>';var iconCalendar='<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>';var iconUser='<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg>';var sidebarNavHtml='<div class="ea-sidebar-layout">'+'<div class="ea-sidebar-nav-wrap">'+'<div class="ea-sidebar-nav-header">'+'<div class="ea-sidebar-nav-title">'+(ea_settings['trans.book-appointment']||'Appointment Booking')+'</div>'+'</div>'+'<div class="ea-sidebar-tabs">'+'<div class="ea-sidebar-tab-item is-current" data-step="1">'+'<div class="ea-sidebar-tab-icon">'+iconPackage+'</div>'+'<div class="ea-sidebar-tab-info">'+'<span class="ea-sidebar-tab-num">STEP 1</span>'+'<span class="ea-sidebar-tab-title">'+step1Label+'</span>'+'</div>'+'<div class="ea-sidebar-tab-status">'+'<span class="ea-sidebar-tab-dot"></span>'+'</div>'+'</div>'+'<div class="ea-sidebar-tab-item" data-step="2">'+'<div class="ea-sidebar-tab-icon">'+iconCalendar+'</div>'+'<div class="ea-sidebar-tab-info">'+'<span class="ea-sidebar-tab-num">
158STEP 2</span>'+'<span class="ea-sidebar-tab-title">'+step2Label+'</span>'+'</div>'+'<div class="ea-sidebar-tab-status">'+'<span class="ea-sidebar-tab-dot"></span>'+'</div>'+'</div>'+'<div class="ea-sidebar-tab-item" data-step="3">'+'<div class="ea-sidebar-tab-icon">'+iconUser+'</div>'+'<div class="ea-sidebar-tab-info">'+'<span class="ea-sidebar-tab-num">STEP 3</span>'+'<span class="ea-sidebar-tab-title">'+step3Label+'</span>'+'</div>'+'<div class="ea-sidebar-tab-status">'+'<span class="ea-sidebar-tab-dot"></span>'+'</div>'+'</div>'+'</div>'+'<div class="ea-sidebar-collapse-wrap">'+'<button type="button" class="ea-sidebar-collapse-btn">'+'<span class="ea-sidebar-collapse-icon">←</span>'+'<span class="ea-sidebar-collapse-text">'+collapseLabel+'</span>'+'</button>'+'</div>'+'</div>'+'<div class="ea-sidebar-main-wrap">'+'<div class="ea-sidebar-header">'+'<div class="ea-sidebar-header-left">'+'<h3 class="ea-sidebar-header-title">'+step1Label+'</h3>'+'<span class="ea-sidebar-header-subtitle">Step 1 of 3</span>'+'</div>'+'</div>'+'<div class="ea-sidebar-panes"></div>'+'</div>'+'</div>';var $title=$bootstrap.find('.ea-booking-title');if($title.length){$title.hide()} 159var $panesContainer=jQuery(sidebarNavHtml).appendTo($form).find('.ea-sidebar-panes');var $pane1=jQuery('<div class="ea-sidebar-pane ea-sidebar-pane-1 is-active" data-pane="1"></div>');var $pane2=jQuery('<div class="ea-sidebar-pane ea-sidebar-pane-2" data-pane="2"></div>');var $pane3=jQuery('<div class="ea-sidebar-pane ea-sidebar-pane-3" data-pane="3"></div>');var $grid=$bootstrap.find('.ea-filters-grid, .ea-filters-grid-full');var $hiddenSteps=$bootstrap.find('.ea-new-ui-step-hidden');var $descBox=$bootstrap.find('#ea-service-description');var $stepLocation=$bootstrap.find('[name="location"]').closest('.step');var $stepService=$bootstrap.find('[name="service"]').closest('.step');var $stepWorker=$bootstrap.find('[name="worker"]').closest('.step');$pane1.append('<div class="ea-sidebar-pane-body"></div>');var $pane1Body=$pane1.find('.ea-sidebar-pane-body');if($grid.length){$pane1Body.append($grid)}else{if($stepLocation.length)$pane1Body.append($stepLocation);if($stepService.length)$pane1Body.append($stepService);if($stepWorker.length)$pane1Body.append($stepWorker);} 160if($hiddenSteps.length){$pane1Body.append($hiddenSteps)} 161if($descBox.length){$pane1Body.append($descBox)} 162$pane1.append('<div class="ea-sidebar-nav ea-sidebar-nav-1">'+'<button type="button" class="ea-btn ea-sidebar-btn-next ea-sidebar-next-1 btn btn-primary">'+continueText+' <span class="ea-sidebar-arrow">→</span>'+'</button>'+'</div>');var $calStep=$bootstrap.find('.step.calendar');var $timeStep=$bootstrap.find('.step').not('.calendar, .final, .ea-new-ui-step-hidden, .form-group');if(!$timeStep.length){$timeStep=$bootstrap.find('.date').closest('.step').next('.step')} 163$pane2.append('<div class="ea-sidebar-pane-body"></div>');var $pane2Body=$pane2.find('.ea-sidebar-pane-body');$pane2Body.append($calStep).append($timeStep);$pane2.append('<div class="ea-sidebar-nav ea-sidebar-nav-2">'+'<button type="button" class="ea-btn ea-sidebar-btn-back ea-sidebar-back-2 btn btn-default">'+'<span class="ea-sidebar-arrow">←</span> '+backText+'</button>'+'<button type="button" class="ea-btn ea-sidebar-btn-next ea-sidebar-next-2 btn btn-primary is-disabled" disabled>'+continueText+' <span class="ea-sidebar-arrow">→</span>'+'</button>'+'</div>');var $finalStep=$bootstrap.find('.step.final');$pane3.append('<div class="ea-sidebar-pane-body"></div>');var $pane3Body=$pane3.find('.ea-sidebar-pane-body');$pane3Body.append($finalStep);$pane3.append('<div class="ea-sidebar-nav ea-sidebar-nav-3">'+'<button type="button" class="ea-btn ea-sidebar-btn-back ea-sidebar-back-3 btn btn-default">'+'<span class="ea-sidebar-arrow">←</span> '+backText+'</button>'+'</div>');$panesContainer.append($pane1).append($pane2).append($pane3);var $submitBtn=$finalStep.find('.ea-submit, .booking-button');var $cancelBtn=$finalStep.find('.ea-cancel');var $nav3=$pane3.find('.ea-sidebar-nav-3');if($submitBtn.length&&!$nav3.find('.ea-submit').length){$nav3.append($submitBtn)} 164if($cancelBtn.length&&!$nav3.find('.ea-cancel').length){$nav3.append($cancelBtn)} 165$bootstrap.on('click','.ea-sidebar-collapse-btn',function(e){e.preventDefault();var $navWrap=$bootstrap.find('.ea-sidebar-nav-wrap');$navWrap.toggleClass('is-collapsed');var isCollapsed=$navWrap.hasClass('is-collapsed');$bootstrap.find('.ea-sidebar-collapse-icon').html(isCollapsed?'→':'←');$bootstrap.find('.ea-sidebar-collapse-btn').attr('title',isCollapsed?(ea_settings['trans.sidebar_expand']||'Expand menu'):collapseLabel)});$bootstrap.on('click','.ea-sidebar-next-1',function(e){e.preventDefault();plugin.goToSidebarStep(2)});$bootstrap.on('click','.ea-sidebar-back-2',function(e){e.preventDefault();plugin.goToSidebarStep(1)});$bootstrap.on('click','.ea-sidebar-next-2',function(e){e.preventDefault();plugin.goToSidebarStep(3)});$bootstrap.on('click','.ea-sidebar-back-3',function(e){e.preventDefault();plugin.goToSidebarStep(2)});$bootstrap.on('click','.ea-sidebar-tab-item',function(e){e.preventDefault();
165var targetStep=parseInt(jQuery(this).data('step'),10);if(targetStep&&targetStep<=plugin.maxReachedSidebarStep){plugin.goToSidebarStep(targetStep)}});$bootstrap.on('click','.time-value',function(){setTimeout(function(){plugin.updateSidebarButtons()},50)})},updateSidebarButtons:function(){var plugin=this;var $bootstrap=plugin.$element.find('.ea-bootstrap').length?plugin.$element.find('.ea-bootstrap'):plugin.$element;var hasSelectedTime=$bootstrap.find('.selected-time').length>0;var $next2=$bootstrap.find('.ea-sidebar-next-2');if(hasSelectedTime){$next2.prop('disabled',!1).removeClass('is-disabled');if(plugin.maxReachedSidebarStep<2){plugin.maxReachedSidebarStep=2}}else{$next2.prop('disabled',!0).addClass('is-disabled')}},goToSidebarStep:function(targetStep){var plugin=this;var $bootstrap=plugin.$element.find('.ea-bootstrap').length?plugin.$element.find('.ea-bootstrap'):plugin.$element;targetStep=parseInt(targetStep,10);if(isNaN(targetStep)||targetStep<1||targetStep>3)return;if(targetStep>1&&plugin.currentSidebarStep===1){var serviceVal=$bootstrap.find('[name="service"]').val();if(!serviceVal||serviceVal===''||serviceVal==='-'){var $svcField=$bootstrap.find('[name="service"], .ea-field-group:has([name="service"])').first();$svcField.addClass('ea-shake');setTimeout(function(){$svcField.removeClass('ea-shake')},600);return}} 166if(targetStep===3){var hasTime=$bootstrap.find('.selected-time').length>0;if(!hasTime){var $timeBox=$bootstrap.find('.time, .ea-times-wrap, .date').first();$timeBox.addClass('ea-shake');setTimeout(function(){$timeBox.removeClass('ea-shake')},600);return} 167var $firstSlot=$bootstrap.find('.selected-time').first();if($firstSlot.length){plugin.updateBookingOverviewFromSlot($firstSlot)}} 168$bootstrap.find('.ea-sidebar-pane').removeClass('is-active');$bootstrap.find('.ea-sidebar-pane-'+targetStep).addClass('is-active');var step1Label=ea_settings['trans.sidebar_step_service']||ea_settings['trans.sidebar_step_package']||'Select Service';var step2Label=ea_settings['trans.sidebar_step_datetime']||'Date & Time';var step3Label=ea_settings['trans.sidebar_step_info']||'Your Information';var headerTitles={1:step1Label,2:step2Label,3:step3Label};$bootstrap.find('.ea-sidebar-header-title').text(headerTitles[targetStep]||'');$bootstrap.find('.ea-sidebar-header-subtitle').text('Step '+targetStep+' of 3');var $tabs=$bootstrap.find('.ea-sidebar-tab-item');$tabs.each(function(){var s=parseInt(jQuery(this).data('step'),10);jQuery(this).removeClass('is-current is-completed is-disabled');if(s<targetStep){jQuery(this).addClass('is-completed')}else if(s===targetStep){jQuery(this).addClass('is-current')}else{if(s>plugin.maxReachedSidebarStep){jQuery(this).addClass('is-disabled')}}});$bootstrap.removeClass('ea-sidebar-step-1 ea-sidebar-step-2 ea-sidebar-step-3').addClass('ea-sidebar-step-'+targetStep);plugin.$element.removeClass('ea-sidebar-step-1 ea-sidebar-step-2 ea-sidebar-step-3').addClass('ea-sidebar-step-'+targetStep);plugin.currentSidebarStep=targetStep;if(targetStep>plugin.maxReachedSidebarStep){plugin.maxReachedSidebarStep=targetStep} 169if(targetStep===2){var $date=$bootstrap.find('.date');if($date.hasClass('hasDatepicker')){$date.datepicker('refresh')} 170if($bootstrap.find('.time-row .time-value').length===0){plugin.selectChange()}else{if(plugin.savedSelectedSlots&&plugin.savedSelectedSlots.length>0){$bootstrap.find('.time-value').each(function(){var val=jQuery(this).data('val');if(plugin.savedSelectedSlots.indexOf(val)!==-1){jQuery(this).addClass('selected-time')}})}} 171plugin.updateSidebarButtons()} 172var offsetTop=$bootstrap.offset().top-30;if(jQuery(window).scrollTop()>offsetTop){jQuery('html, body').animate({scrollTop:offsetTop},250)}}});jQuery.fn[pluginName]=function(options){this.each(function(){if(!jQuery.data(this,"plugin_"+pluginName)){jQuery.data(this,"plugin_"+pluginName,new Plugin(this,options))}});return this}})(jQuery,window,document);jQuery(document).ready(function($){jQuery('.ea-bootstrap').eaBootstrap()});jQuery(document).ready(function(){if(ea_settings.allow_customer_search==1){jQuery('#ea_customer_search').select2({placeholder:ea_settings['trans.customer_search_label'],minimumInputLength:2,ajax:{url:ea_ajaxurl,dataType:'json',delay:250,data:function(params){return{action:'ea_search_customers',q:params.term,nonce:ea_settings.check}},processResults:function(data){return{results:data.map(function(c){return{id:c.id,text:c.name+' ('+c.email+')'}})}}}});jQuery(document).on('select2:select','#ea_customer_search',function(e){var customerId=e.params&&e.params.data?e.params.data.id:jQuery(this).val();
172if(!customerId)return;var $container=jQuery(this).closest('.ea-bootstrap, .ea-new-ui-container, form');if(!$container.length){$container=jQuery('.ea-bootstrap, .ea-new-ui-container, form').first()} 173jQuery.ajax({url:ea_ajaxurl,type:'POST',dataType:'json',data:{action:'ea_get_customer_detail',id:customerId,check:ea_settings.check,nonce:ea_settings.check},success:function(c){if(typeof c==='string'){try{c=JSON.parse(c)}catch(err){}} 174if(!c||typeof c!=='object')return;var setFieldVal=function(selectors,val){if(val===undefined||val===null)return;selectors.forEach(function(sel){var $field=$container.find(sel);if($field.length){$field.val(val).trigger('change').trigger('input')}})};setFieldVal(['#name','[name="name"]','#customer_name','[name="customer_name"]'],c.name);setFieldVal(['#email','[name="email"]','#customer_email','[name="customer_email"]'],c.email);setFieldVal(['#phone','[name="phone"]','#mobile','[name="mobile"]','#phone_number'],c.mobile||c.phone);setFieldVal(['#address','[name="address"]'],c.address)}})})}});jQuery(document).ready(function(){jQuery('select#repeat_booking').on('change',function(){if(jQuery(this).val()==='2'){jQuery('#custom-recurrence-modal').show();jQuery('#custom-recurrence-overlay').show()} 175if(jQuery(this).val()==='1'){jQuery('input[name="repeat_booking"]').val(1);jQuery('input[name="repeat_start_date"]').val(0);jQuery('input[name="repeat_end_date"]').val(0);jQuery('#recurrence-summary').hide()} 176if(jQuery(this).val()==='0'){jQuery('input[name="repeat_booking"]').val(0);jQuery('input[name="repeat_start_date"]').val(0);jQuery('input[name="repeat_end_date"]').val(0);jQuery('#recurrence-summary').hide()}});jQuery('#modal-end-never').on('change',function(){jQuery('#modal-end-date').prop('disabled',!0)});jQuery('#modal-end-on').on('change',function(){jQuery('#modal-end-date').prop('disabled',!1)});jQuery('#modal-cancel-btn').on('click',function(){jQuery('#custom-recurrence-modal').hide();jQuery('#custom-recurrence-overlay').hide();jQuery('select#repeat_booking').val('0')});jQuery('#modal-save-btn').on('click',function(){var repeatWeek=jQuery('#modal-repeat-week').val();var startDate=jQuery('#modal-start-date').val();var endType=jQuery('input[name="modal-end-type"]:checked').val();var endDate=(endType=='date')?jQuery('#modal-end-date').val():'never';if(endType==='date'&&endDate!==''&&startDate!==''){if(new Date(endDate)<new Date(startDate)){alert(ea_settings['trans.end-date-error']||'End date cannot be earlier than start date.');return}} 177jQuery('input[name="repeat_booking"]').val(repeatWeek);jQuery('input[name="repeat_start_date"]').val(startDate);jQuery('input[name="repeat_end_date"]').val(endDate);jQuery('#summary-repeat-week').text(repeatWeek+' '+(ea_settings['trans.weeks']||'week(s)'));jQuery('#summary-start-date').text(startDate);jQuery('#summary-end-date').text(endType=='date'?endDate:(ea_settings['trans.never']||'Never'));jQuery('#recurrence-summary').show();jQuery('#custom-recurrence-modal').hide();jQuery('#custom-recurrence-overlay').hide()});jQuery(document).on('ea-timeslot:selected',function(){setTimeout(function(){jQuery('#ea-payment-select input[type="radio"]:checked').trigger('click')},50)})}) 178;
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.