PageSourceSearch

https://mahilasaarthi.in/wp-content/plugins/booking-and-rental-man…/mp_script/md_script.js?ver=1790866982

js mahilasaarthi.in collected 2026-10-01 15:05:09 UTC 52,390 bytes, 1,382 lines download raw bytes

1
2
3document.addEventListener('DOMContentLoaded', function () {
4    const qtyInputs = document.querySelectorAll('.rbfw_muiti_items_qty');
5    const summaryDiv = document.getElementById('rbfw-items-summary');
6
7    function updateSummary() {
8        let summaryHtml = '';
9        let hasItems = false;
10        var durationType = jQuery('#durationType').val();
11        var durationQty = parseInt(jQuery('#durationQty').val()) || 1;
12
13        qtyInputs.forEach(input => {
14            const qty = parseInt(input.value);
15            if (qty > 0) {
16                const itemName = input.dataset.name;
17                const pricePerUnit = parseFloat(input.dataset[`price${durationType.charAt(0).toUpperCase() + durationType.slice(1)}`]) || 0;
18
19                const total = (qty * durationQty *  pricePerUnit).toFixed(2);
20
21                summaryHtml += `<li class="item-type"><span>${itemName}</span> <span>${qty} x ${durationQty} x <span>${rbfw_js_variables.currency}${pricePerUnit}</span> = <span>${rbfw_js_variables.currency}${total}</span></li>`;
22
23                hasItems = true;
24            }
25        });
26
27
28        // summaryDiv.innerHTML = hasItems ? summaryHtml : '';
29    }
30
31    // Attach event listeners to quantity inputs
32    qtyInputs.forEach(input => { 
33        input.addEventListener('input', updateSummary);
34    });
35
36    // Also trigger update when clicking plus or minus buttons
37    const plusButtons = document.querySelectorAll('.rbfw_qty_plus');
38    const minusButtons = document.querySelectorAll('.rbfw_qty_minus');
39    const durationType = document.querySelectorAll('#durationType');
40
41    [...plusButtons, ...minusButtons].forEach(btn => {
42        btn.addEventListener('click', function () {
43            // Slight delay to ensure value updates first
44            setTimeout(updateSummary, 50);
45        });
46    });
47
48    [...durationType].forEach(btn => {
49        btn.addEventListener('change', function () {
50            // Slight delay to ensure value updates first
51            setTimeout(updateSummary, 50);
52        });
53    });
54});
55
56 // pricing table show/hide
57jQuery(document).on('click', '.pricing-info-view', function (e) {
58    e.preventDefault();
59    jQuery(this).closest('.rbfw-pricing-info-heading').toggleClass('open');
60    jQuery(this).closest('.mp_right_section').toggleClass('overlay');
61    jQuery('.price-item-container').stop(true, true).toggleClass('open').fadeToggle();
62});
63
64jQuery('body').on('focusin', '.pickup_date', function(e) {
65    jQuery(this).datepicker({
66        dateFormat: js_date_format,
67        minDate: '',
68        beforeShowDay: function(date)
69        {
70            // Use enhanced inventory checking that considers return date
71            return rbfw_enhanced_pickup_beforeShowDay(date);
72        },
73        onSelect: function (dateString, data) {
74            let date_ymd = data.selectedYear + '-' + ('0' + (parseInt(data.selectedMonth) + 1)).slice(-2) + '-' + ('0' + parseInt(data.selectedDay)).slice(-2);
75            jQuery('input[name="rbfw_pickup_start_date"]').val(date_ymd).trigger('change');
76
77            let post_id = jQuery('#rbfw_post_id').val();
78            let rbfw_enable_time_slot = jQuery('#rbfw_enable_time_slot').val();
79
80            let rbfw_minimum_booking_day = parseInt(jQuery('#rbfw_minimum_booking_day').val());
81            let rbfw_maximum_booking_day = parseInt(jQuery('#rbfw_maximum_booking_day').val());
82
83
84            let selected_date_array = date_ymd.split('-');
85            let gYear = selected_date_array[0];
86            let gMonth = selected_date_array[1];
87            let gDay = selected_date_array[2];
88
89            let minDate = new Date(gYear,  gMonth - 1, gDay );
90            minDate.setDate(minDate.getDate() + rbfw_minimum_booking_day);
91
92            jQuery(".dropoff_date").datepicker("option", "minDate", minDate);
93
94
95            if(rbfw_minimum_booking_day){
96                let maxDate = new Date(gYear,  gMonth - 1, gDay - 1 );
97                maxDate.setDate(maxDate.getDate() + rbfw_maximum_booking_day);
98                jQuery(".dropoff_date").datepicker("option", "maxDate", maxDate );
99            }
100
101            if(rbfw_enable_time_slot=='yes'){
102               // particular_time_date_dependent_ajax(post_id,date_ymd,'time_enable',rbfw_enable_time_slot,'.rbfw-select.rbfw-time-price.pickup_time');
103                let rbfw_particulars_data = jQuery('#rbfw_particulars_data').val();
104                let rdfw_available_time = jQuery('#rdfw_available_time').val();
105                getAvailableTimes(rbfw_particulars_data , date_ymd,rdfw_available_time,'pickup_time');
106
107
108
109            }
110            
111            // Trigger calendar refresh to apply enhanced inventory checking
112            setTimeout(function() {
113                rbfw_refresh_calendar_with_inventory_check();
114            }, 200);
115        },
116    });
117
118   jQuery(document).on("mousemove", ".ui-datepicker-calendar td", function() {
119        let $this = jQuery(this);
120        console.log($this.attr('title'));
121        if ($this.find(".date-label").length === 0) {
122            let dateText = $this.attr('title');
123          
124            if (dateText) {
125                $this.append(`<span class='date-label'>`+dateText+`</span>`);
126            }
127        }
128    });
129});
130
131
132
133
134
135
136jQuery('body').on('change', 'input[name="rbfw_pickup_start_date"]', function(e) {
137
138
139    //const endDate = getURLParameter('rbfw_end_date');
140
141    jQuery(".dropoff_date").val('');
142
143
144    jQuery('.dropoff_date').datepicker({
145        dateFormat: js_date_format,
146        onSelect: function (dateString, data) {
147            let date_ymd = data.selectedYear + '-' + ('0' + (parseInt(data.selectedMonth) + 1)).slice(-2) + '-' + ('0' + parseInt(data.selectedDay)).slice(-2);
148            jQuery('input[name="rbfw_pickup_end_date"]').val(date_ymd).trigger('change');
149
150            let post_id = jQuery('#rbfw_post_id').val();
151            let rbfw_enable_time_slot = jQuery('#rbfw_enable_time_slot').val();
152
153            if(rbfw_enable_time_slot=='yes'){
154                let rbfw_particulars_data = jQuery('#rbfw_particulars_data').val();
155                let rdfw_available_time = jQuery('#rdfw_available_time').val();
156                getAvailableTimes(rbfw_particulars_data , date_ymd,rdfw_available_time,'dropoff_time');
157               // particular_time_date_dependent_ajax(post_id,date_ymd_drop,'',rbfw_enable_time_slot,'.rbfw-select.rbfw-time-price.dropoff_time');
158            }
159            
160            // Trigger calendar refresh to apply enhanced inventory checking
161            rbfw_refresh_calendar_with_inventory_check();
162        },
163        beforeShowDay: function(date)
164        {
165            return rbfw_off_day_dates(date,'md',rbfw_js_variables.rbfw_today_booking_enable,'yes');
166        }
167    });
168});
169
170
171
172
173jQuery('.dropoff_date').click(function(e) {
174    let pickup_date = jQuery('[name="rbfw_pickup_start_date"]').val();
175    if (pickup_date == '') {
176        alert(rbfw_translation.select_pickup_date);
177    }
178});
179
180
181jQuery('body').on('change', '.pickup_date', function(e) {
182    jQuery(".dropoff_date").val('');
183});
184jQuery('body').on('change', '#hidden_pickup_date, #hidden_dropoff_date, .pickup_time, .dropoff_time', function (e) {
185
186    let pickup_date = jQuery('#pickup_date').val();
187    let dropoff_date = jQuery('#dropoff_date').val();
188    let pickup_time = jQuery('#pickup_time').find(':selected').val();
189    let dropoff_time = jQuery('#dropoff_time').find(':selected').val();
190    let rbfw_available_time = jQuery('#rbfw_available_time').val();
191
192    if (!dropoff_date) {
193        //jQuery('.mps_alert_warning').remove();
194        //jQuery('<div class="rbfw_nia_notice mps_alert_warning">Please enter drop off date!</div>').insertBefore(' button.rbfw_bikecarmd_book_now_btn');
195        jQuery('button.rbfw_bikecarmd_book_now_btn').attr('disabled',true);
196    }
197
198
199    if(rbfw_available_time=='yes'){
200        if(pickup_date && dropoff_date && pickup_time && dropoff_time){
201            rbfw_bikecarmd_ajax_price_calculation();
202        }
203    }else{
204        if(pickup_date && dropoff_date){
205            rbfw_bikecarmd_ajax_price_calculation();
206        }
207    }
208});
209
210
211
212
213jQuery('body').on('change', '#rbfw_search_type', function (e) {
214    var selectedOption = jQuery(this).find('option:selected');
215    var post_id = selectedOption.data('post_id');
216
217    jQuery.ajax({
218        type: 'POST',
219        dataType: 'json',
220        url: rbfw_ajax_front.rbfw_ajaxurl,
221        data: {
222            'action' : 'rbfw_bikecarmd_ajax_min_max_and_offdays_info',
223            'post_id': post_id,
224            'nonce' : rbfw_ajax_front.nonce_bikecarmd_ajax_min_max_and_offdays_info
225
226        },
227        beforeSend: function() {
228            jQuery('.rbfw_bike_car_md_item_wrapper').addClass('rbfw_loader_in');
229            jQuery('.rbfw_bike_car_md_item_wrapper').append('<i class="fas fa-spinner fa-spin"></i>');
230        },
231        success: function (response) {
232
233            jQuery('#rbfw_minimum_booking_day').attr('value',response.rbfw_minimum_booking_day);
234            jQuery('#rbfw_maximum_booking_day').attr('value',response.rbfw_maximum_booking_day);
235            jQuery('#rbfw_off_days').attr('value',response.rbfw_off_days);
236            jQuery('#rbfw_offday_range').attr('value',response.rbfw_offday_range);
237
238            jQuery('.rbfw_bike_car_md_item_wrapper').removeClass('rbfw_loader_in');
239            jQuery('.rbfw_bike_car_md_item_wrapper i.fa-spinner').remove();
240
241        },
242        error : function(response){
243            console.log(response);
244        }
245    });
246})
247
248
249jQuery('body').on('focusin', '.pickup_date_search', function(e) {
250
251
252    jQuery(this).datepicker({
253        dateFormat: js_date_format,
254        minDate: '',
255        beforeShowDay: function(date)
256        {
257            // Use enhanced inventory checking for search calendar as well
258            return rbfw_enhanced_pickup_beforeShowDay(date);
259        },
260        onSelect: function (dateString, data) {
261            let date_ymd = data.selectedYear + '-' + ('0' + (parseInt(data.selectedMonth) + 1)).slice(-2) + '-' + ('0' + parseInt(data.selectedDay)).slice(-2);
262            jQuery('input[name="rbfw_pickup_date_search"]').val(date_ymd).trigger('change');
263
264            let post_id = jQuery('#rbfw_post_id').val();
265
266
267            let rbfw_minimum_booking_day = parseInt(jQuery('#rbfw_minimum_booking_day').val());
268            let rbfw_maximum_booking_day = parseInt(jQuery('#rbfw_maximum_booking_day').val());
269            let selected_date_array = date_ymd.split('-');
270            let gYear = selected_date_array[0];
271            let gMonth = selected_date_array[1];
272            let gDay = selected_date_array[2];
273
274            let minDate = new Date(gYear,  gMonth - 1, gDay );
275            minDate.setDate(minDate.getDate() + rbfw_minimum_booking_day);
276            jQuery(".dropoff_date_search").datepicker("option", "minDate", minDate);
277        },
278    });
279
280});
281
282
283jQuery('body').on('change', 'input[name="rbfw_pickup_date_search"]', function(e) {
284    jQuery('.dropoff_date_search').datepicker({
285        dateFormat: js_date_format,
286        onSelect: function (dateString, data) {
287            let date_ymd_drop = data.selectedYear + '-' + ('0' + (parseInt(data.selectedMonth) + 1)).slice(-2) + '-' + ('0' + parseInt(data.selectedDay)).slice(-2);
288            jQuery('input[name="rbfw_dropoff_date_search"]').val(date_ymd_drop).trigger('change');
289        },
290        beforeShowDay: function(date)
291        {
292            // Use enhanced inventory checking for search dropoff calendar as well
293            return rbfw_enhanced_pickup_beforeShowDay(date);
294        }
295
296    });
297});
298
299
300jQuery(window).on('load', function() {
301
302    if(jQuery('#body-class').val()=='single-rbfw_item'){
303        jQuery('body').addClass('single-rbfw_item');
304    }
305
306
307    let pickup_date = jQuery('#pickup_date').val();
308    let dropoff_date = jQuery('#dropoff_date').val();
309    if(pickup_date && dropoff_date){
310
311        const date = new Date(pickup_date);
312
313        const year = date.getFullYear();
314        const month = ('0' + (date.getMonth() + 1)).slice(-2); // Months are 0-based
315        const day = ('0' + date.getDate()).slice(-2);
316        const date_ymd = `${year}-${month}-${day}`;
317        jQuery('input[name="rbfw_pickup_start_date"]').val(date_ymd).trigger('change');
318
319
320        rbfw_bikecarmd_ajax_price_calculation();
321    }
322})
323
324
325
326jQuery(document).on('change', '#rbfw_item_quantity_md', function(e) {
327    let that = jQuery(this);
328    var total_days = jQuery('[name="total_days"]').val();
329
330    if(total_days){
331        rbfw_service_price_calculation(total_days);
332    }
333});
334
335
336
337/*Extra service start*/
338
339
340
341jQuery(document).ready(function () {
342
343
344    const durationTypeSelect = jQuery('#durationType');
345    const pickupDateInput = jQuery('#pickupDate');
346    const pickupTimeInput = jQuery('#pickupTime');
347    const qtyLabel = jQuery('#qtyLabel');
348
349    // Set minimum date to today
350    const today = new Date().toISOString().split('T')[0];
351    pickupDateInput.attr('min', today).val(today);
352
353    // Set default time to current time + 1 hour
354    const now = new Date();
355    now.setHours(now.getHours() + 1);
356    pickupTimeInput.val(now.toTimeString().slice(0, 5));
357
358    // Change quantity functions
359    window.changeQty = function (inputId, delta) {
360        const input = jQuery('#' + inputId);
361        const currentValue = parseInt(input.val()) || 1;
362        const newValue = Math.max(1, currentValue + delta);
363        input.val(newValue);
364        jQuery(input).trigger('change');
365    }
366
367    window.changeItemQty = function (itemType, delta) {
368        const input = jQuery(`[data-item="${itemType}"]`);
369        const currentValue = parseInt(input.val()) || 0;
370        const newValue = Math.max(0, currentValue + delta);
371        input.val(newValue);
372
373    }
374
375    function updateQtyLabel() {
376        const durationType = durationTypeSelect.val();
377        if (durationType) {
378            const typeMap = {
379                hourly: rbfw_translation.hours,
380                daily: rbfw_translation.days,
381                weekly: rbfw_translation.weeks,
382                monthly: rbfw_translation.months
383            };
384            qtyLabel.text(rbfw_translation.number_of+ ` ${typeMap[durationType]}`);
385        } else {
386            qtyLabel.text(rbfw_translation.number_of+' '+rbfw_translation.duration);
387        }
388    }
389
390    // Add event listener
391    durationTypeSelect.on('change', function () {
392        updateQtyLabel();
393    });
394
395    // Initial label update
396    updateQtyLabel();
397});
398
399
400
401
402jQuery('body').on('change', '#hidden_pickup_date, .pickup_time, #durationType, #durationQty', function (e) {
403
404    let pickup_date = jQuery('#pickup_date').val();
405    let pickup_time = jQuery('#pickup_time').find(':selected').val();
406    let durationType = jQuery('#durationType').val();
407    let durationQty = jQuery('#durationQty').val();
408    let rbfw_enable_time_slot = jQuery('#rbfw_enable_time_slot').val();
409
410    const changedElement = e.target.id || e.target.className;
411
412    if(changedElement == 'durationType'){
413        jQuery('.item-price').children('span').hide();
414        jQuery('.item-price .rbfw_'+durationType+'_price').show();
415    }
416
417    if (!pickup_date) {
418        jQuery('button.rbfw_bikecarmd_book_now_btn').attr('disabled',true);
419    }
420
421    if(pickup_date  && durationType && durationQty){
422        if(rbfw_enable_time_slot=='no'){
423            calculateTotalMultipleItems();
424        }else{
425            if(pickup_time){
426                calculateTotalMultipleItems();
427            }
428        }
429
430    }
431
432});
433
434
435
436
437// Handle quantity change multiple items
438
439jQuery(document).on('input', '.rbfw_muiti_items_qty', function () {
440    let $input = jQuery(this);
441    let val = parseInt($input.val()) || 0;
442    const max = parseInt($input.attr('max'));
443    if (val > max) {
444        val = max;
445        jQuery(this).val(val); // Set it back to max
446    }
447    calculateTotalMultipleItems(true);
448});
449
450    // Handle plus button
451jQuery(document).on('click', '.rbfw_multi_items_qty_plus', function () {
452    const row = jQuery(this).closest('.rbfw-resource-item');
453    const input = row.find('.rbfw_muiti_items_qty');
454    const max = parseInt(input.attr('max')) || 100;
455    let value = parseInt(input.val()) || 0;
456    if (value < max) {
457        input.val(value + 1).trigger('input');
458    }
459
460});
461
462    // Handle minus button
463jQuery(document).on('click', '.rbfw_multi_items_qty_minus', function () {
464    const row = jQuery(this).closest('.rbfw-resource-item');
465    const input = row.find('.rbfw_muiti_items_qty');
466    let value = parseInt(input.val()) || 0;
467    if (value > 0) {
468        input.val(value - 1).trigger('input');
469    }
470});
471
472    // Initial calculation on page load
473
474// Checkbox change
475jQuery(document).on('change', '.rbfw_service_price_data', function() {
476    let itemClass = '.rbfw_service_quantity.item_' + jQuery(this).data('item');
477    if (jQuery(this).is(':checked')) {
478        jQuery(itemClass).show();
479    } else {
480        jQuery(itemClass).hide();
481    }
482    calculateTotalSingleItem();
483});
484
485// Quantity change
486jQuery(document).on('input change', '.rbfw_service_qty', function() {
487    calculateTotalSingleItem();
488});
489
490// Plus button
491jQuery(document).on('click', '.rbfw_service_quantity_plus', function(e) {
492    e.preventDefault();
493    let input = jQuery(this).siblings('input');
494    let val = parseInt(input.val()) || 0;
495    let max = parseInt(input.attr('max')) || 9999;
496    if (val < max) {
497        input.val(val + 1).trigger('change');
498    }
499});
500
501// Minus button
502jQuery(document).on('click', '.rbfw_service_quantity_minus', function(e) {
503    e.preventDefault();
504    let input = jQuery(this).siblings('input');
505    let val = parseInt(input.val()) || 0;
506    let min = parseInt(input.attr('min')) || 0;
507    if (val > min) {
508        input.val(val - 1).trigger('change');
509    }
510});
511
512
513
514
515// Checkbox toggle
516jQuery(document).on('change', '.rbfw-resource-price', function() {
517    let inputBox = jQuery(this).closest('tr').find('.rbfw_bikecarmd_es_input_box');
518
519    if (jQuery(this).is(':checked')) {
520        inputBox.show();
521    } else {
522        inputBox.hide();
523    }
524
525    var $checkbox = jQuery(this);
526    var $qtyInput = jQuery('.rbfw_bikecarmd_es_qty[data-name="' + $checkbox.data('name') + '"]');
527
528    if ($checkbox.is(':checked')) {
529        $qtyInput.val(1); // Set value to 1 when checked
530    } else {
531        $qtyInput.val(0); // Optional: reset to 0 when unchecked
532    }
533
534    calculateTotalExtraService();
535});
536
537
538
539
540// Quantity changes
541jQuery(document).on('input change', '.rbfw_bikecarmd_es_qty', function() {
542    calculateTotalExtraService();
543});
544
545// Plus button click
546jQuery(document).on('click', '.rbfw_bikecarmd_es_qty_plus', function(e) {
547    e.preventDefault();
548    let input = jQuery(this).siblings('input');
549    console.log('input',input);
550    let val = parseInt(input.val()) || 0;
551    let max = parseInt(input.attr('max')) || 9999;
552    if (val < max) {
553        input.val(val + 1).trigger('change');
554    }
555});
556
557// Minus button click
558jQuery(document).on('click', '.rbfw_bikecarmd_es_qty_minus', function(e) {
559    e.preventDefault();
560    let input = jQuery(this).siblings('input');
561    let val = parseInt(input.val()) || 0;
562    let min = parseInt(input.attr('min')) || 0;
563    if (val > min) {
564        input.val(val - 1).trigger('change');
565    }
566});
567
568
569
570jQuery(document).on('input', '.rbfw_muiti_items_additional_service_qty', function () {
571    let $input = jQuery(this);
572    let val = parseInt($input.val()) || 0;
573    const max = parseInt($input.attr('max'));
574    if (val > max) {
575        val = max;
576        jQuery(this).val(val); // Set it back to max
577    }
578    calculateAdditional(true);
579});
580
581// Handle plus button
582jQuery(document).on('click', '.rbfw_additional_service_qty_plus', function () {
583    const row = jQuery(this).closest('.service-price-item');
584    const input = row.find('.rbfw_muiti_items_additional_service_qty');
585    const max = parseInt(input.attr('max')) || 100;
586    let value = parseInt(input.val()) || 0;
587    if (value < max) {
588        input.val(value + 1).trigger('input');
589    }
590    calculateAdditional(true);
591});
592
593// Handle minus button
594jQuery(document).on('click', '.rbfw_additional_service_qty_minus', function () {
595
596    const row = jQuery(this).closest('.service-price-item');
597    const input = row.find('.rbfw_muiti_items_additional_service_qty');
598    let value1 = parseInt(input.val()) || 0;
599
600    if (value1 > 0) {
601        input.val(value1 -1).trigger('input');
602    }
603    calculateAdditional(true);
604});
605
606// Initial calculation on page load
607
608
609
610jQuery(document).on('change', '.rbfw-management-price', function() {
611
612    if (jQuery(this).hasClass('rbfw-fee-required')) {
613        jQuery(this).prop('checked', true);
614        e.preventDefault(); // prevent change
615    }
616
617
618    var $checkbox = jQuery(this);
619    var $parent = $checkbox.closest('.rbfw-checkbox'); // find the parent container
620    var $managementQty = $parent.find('.rbfw-management-qty'); // hidden input to set yes/no
621
622    if ($checkbox.is(':checked')) {
623        $managementQty.val('yes'); // Mark as selected
624    } else {
625        $managementQty.val('no'); // Mark as not selected
626    }
627
628    calculateTotalManagementPrice();
629});
630
631
632
633function rbfw_multi_items_ajax_price_calculation(){
634
635    let post_id = jQuery('[data-service-id]').data('service-id');
636    let date_format = jQuery('#wp_date_format').val();
637    let rbfw_available_time = jQuery('#rbfw_available_time').val();
638    let rbfw_duration_price = jQuery('#rbfw_duration_price').val();
639    let rbfw_service_category_price = jQuery('#rbfw_service_category_price').val();
640    let pickup_date = jQuery('#pickup_date').val();
641    let pickup_time = jQuery('#pickup_time').find(':selected').val();
642    let durationType = jQuery('#durationType').val();
643    let durationQty = jQuery('#durationQty').val();
644
645    if(pickup_date == ''){
646        return false;
647    }
648
649    jQuery.ajax({
650        type: 'POST',
651        dataType: 'json',
652        url: rbfw_ajax_front.rbfw_ajaxurl,
653        data: {
654            'action' : 'rbfw_multi_items_ajax_price_calculation',
655            'post_id': post_id,
656            'date_format': date_format,
657            'pickup_date': pickup_date,
658            'pickup_time': pickup_time,
659            'durationType': durationType,
660            'durationQty': durationQty,
661            'rbfw_duration_price': rbfw_duration_price,
662            'rbfw_service_category_price': rbfw_service_category_price,
663            'rbfw_available_time': rbfw_available_time,
664            'nonce' : rbfw_ajax_front.nonce_multi_items_ajax_price_calculation
665        },
666        beforeSend: function() {
667            jQuery('.rbfw_multi_items_wrapper_inner').addClass('rbfw_loader_in');
668            jQuery('.rbfw_multi_items_wrapper_inner').append('<i class="fas fa-spinner fa-spin"></i>');
669        },
670        success: function (response) {
671            jQuery('.rbfw_multi_items_wrapper_inner').removeClass('rbfw_loader_in');
672            jQuery('.rbfw_multi_items_wrapper_inner i.fa-spinner').remove();
673
674            jQuery('[name="total_days"]').val(response.total_days);
675
676            //alert(response.rbfw_management_price_html);
677
678            let rbfw_management_price = 0;
679            jQuery('.rbfw-management-price:checked').each(function() {
680                let price_type = jQuery(this).data('price_type');
681                let price = parseFloat(jQuery(this).data('price')) || 0;
682                if(price_type == 'percentage'){
683                    let sub_total_price = response.duration_price_number + response.service_cost;
684                    rbfw_management_price += ( price/100 ) * sub_total_price;
685                }else{
686                    rbfw_management_price += price;
687                }
688            });
689
690
691
692
693
694
695
696            jQuery('.management-costing .price-figure').text( wc_price_rbfw(rbfw_management_price));
697
698
699            jQuery('.resource-costing .price-figure').html(response.service_cost_html);
700
701
702            jQuery('.subtotal .price-figure').html(response.sub_total_price_html);
703
704            jQuery('.rbfw_pricing_applied').hide();
705
706
707            if(response.duration_price_number){
708                jQuery('.duration-costing').show();
709                jQuery('.duration-costing .price-figure').html(response.duration_price_html);
710            }else{
711                jQuery('.duration-costing').hide();
712            }
713
714            if(response.security_deposit_amount){
715                jQuery('.security_deposit').show();
716                jQuery('.security_deposit span').html(response.security_deposit_desc);
717            }else{
718                jQuery('.security_deposit').hide();
719            }
720
721            jQuery('.total .price-figure').text( wc_price_rbfw(rbfw_management_price + response.total_price));
722
723            jQuery('.rbfw-duration').show();
724            jQuery('.rbfw-duration .item-content').html(response.total_duration);
725            jQuery('.rbfw-duration .rbfw_duration_md').val(response.total_duration);
726
727
728            jQuery('.rbfw_quantity_md').show();
729
730            jQuery('.rbfw-variations-content-wrapper').show();
731            jQuery('.rbfw_resourse_md').show();
732            jQuery('.rbfw_bikecarmd_price_result').show();
733            jQuery('.rbfw_reg_form_rb').show();
734
735            /*multiple service price day wise*/
736            jQuery(".service-price-item").each(function(index, value) {
737                if(response.max_available_qty.service_stock[index]==0){
738                    jQuery(this).find(".rbfw-sold-out").show().addClass("rbfw_sold_out");
739                    jQuery(this).find(".rbfw-checkbox").hide();
740                    jQuery(this).find(".rbfw_service_price_data").data('quantity',0);
741                }else{
742                    jQuery(this).find(".rbfw-sold-out").hide().removeClass("rbfw_sold_out");
743                    jQuery(this).find(".rbfw-checkbox").show();
744                }
745                if(response.max_available_qty.service_stock[index]==0){
746                    jQuery(this).find(".rbfw_muiti_items_additional_service_qty").attr('value',response.max_available_qty.service_stock[index]);
747                }
748                jQuery(this).find(".rbfw_muiti_items_additional_service_qty").attr('max',response.max_available_qty.service_stock[index]);
749
750            });
751
752            /*extra service */
753
754            jQuery(".rbfw_muiti_items_qty").each(function(index, value) {
755                if(response.max_available_qty.extra_service_instock[index]==0){
756                    jQuery(this).val(0);
757                }
758                jQuery(this).attr('max',response.max_available_qty.extra_service_instock[index]);
759            });
760
761            calculateAdditional(true);
762
763
764        },
765        error : function(response){
766            console.log(response);
767        }
768    });
769}
770
771function calculateAdditional() {
772    let additional_price = 0;
773    jQuery('.rbfw_muiti_items_additional_service_qty').each(function () {
774        const price = parseFloat(jQuery(this).data('price')) || 0;
775        const service_price_type = jQuery(this).data('service_price_type');
776        const quantity = jQuery(this).val() || 0;
777        if(service_price_type=='day_wise'){
778            const rbfw_total_days = jQuery('#rbfw_total_days').val();
779            additional_price += price * quantity * rbfw_total_days;
780        }else{
781            additional_price += price * quantity;
782        }
783    });
784
785    if(additional_price){
786        jQuery('#AddonsPrice span').text(wc_price_rbfw(additional_price));
787        jQuery('#AddonsPrice').show();
788    }else{
789        jQuery('#AddonsPrice').hide();
790    }
791
792    jQuery('#rbfw_service_category_price').val(additional_price.toFixed(2));
793
794    var sub_total_price = additional_price + parseInt(jQuery('#rbfw_management_price').val()) + parseInt(jQuery('#rbfw_duration_price').val());
795
796
797
798    let rbfw_security_deposit_actual_amount = 0;
799    if(jQuery('#rbfw_security_deposit_enable').val() == 'yes'){
800        let rbfw_security_deposit_amount  = jQuery('#rbfw_security_deposit_amount').val();
801        if (jQuery('#rbfw_security_deposit_type').val() == 'percentage'){
802            rbfw_security_deposit_actual_amount = (rbfw_security_deposit_amount / 100) * sub_total_price;
803        }else{
804            rbfw_security_deposit_actual_amount = rbfw_security_deposit_amount;
805        }
806    }
807    var total_price = sub_total_price  + parseFloat(rbfw_security_deposit_actual_amount);
808    if(rbfw_security_deposit_actual_amount){
809        jQuery('.security_deposit').show();
810        jQuery('.security_deposit span').html(wc_price_rbfw(parseFloat(rbfw_security_deposit_actual_amount)));
811    }
812
813
814    jQuery('.subtotal .price-figure').text(wc_price_rbfw(sub_total_price));
815    jQuery('.total .price-figure').text(wc_price_rbfw(total_price));
816
817}
818
819function calculateTotalExtraService() {
820    let extra_service_price = 0;
821
822    // Loop through all checked services
823    jQuery('.rbfw-resource-price:checked').each(function() {
824        let price = parseFloat(jQuery(this).data('price')) || 0;
825
826        // Find the corresponding quantity input
827        let qtyInput = jQuery(this).closest('tr').find('.rbfw_bikecarmd_es_qty');
828        let qty = parseInt(qtyInput.val()) || 1;
829
830        extra_service_price += price * qty;
831    });
832
833
834
835    // Show total in a container with id="total_price"
836    var rbfw_service_price = jQuery('#rbfw_service_price').val();
837    jQuery('#rbfw_es_service_price').val(extra_service_price.toFixed(2));
838
839    var resourse_cost = parseFloat(rbfw_service_price) + parseFloat(extra_service_price);
840
841    jQuery('.resource-costing span').text(wc_price_rbfw(resourse_cost));
842
843    let sub_total_price = resourse_cost + parseFloat(jQuery('#rbfw_duration_price').val());
844
845    let rbfw_management_price = 0;
846    let quantity = parseFloat(jQuery('#rbfw_item_quantity_md').val()) || 1;
847    let total_days = parseFloat(jQuery('#rbfw_total_days').val()) || 1;
848
849    jQuery('.rbfw-management-price:checked').each(function() {
850        let price_type = jQuery(this).data('price_type');
851        let price = parseFloat(jQuery(this).data('price')) || 0;
852        let frequency = jQuery(this).data('frequency');
853
854        if (price_type === 'percentage') {
855            rbfw_management_price += ((price / 100) * sub_total_price);
856        } else {
857            if (frequency === 'one-time') {
858                rbfw_management_price += price * quantity;
859            } else {
860                rbfw_management_price += price * quantity * total_days;
861            }
862        }
863    });
864
865    jQuery('#rbfw_management_price').val(rbfw_management_price.toFixed(2));
866    jQuery('.management-costing span').text(wc_price_rbfw(rbfw_management_price));
867
868
869
870    let rbfw_security_deposit_actual_amount = 0;
871    if(jQuery('#rbfw_security_deposit_enable').val() == 'yes'){
872        let rbfw_security_deposit_amount  = jQuery('#rbfw_security_deposit_amount').val();
873        if (jQuery('#rbfw_security_deposit_type').val() == 'percentage'){
874            rbfw_security_deposit_actual_amount = (rbfw_security_deposit_amount / 100) * sub_total_price;
875        }else{
876            rbfw_security_deposit_actual_amount = rbfw_security_deposit_amount;
877        }
878    }
879
880
881    var total_price = sub_total_price + rbfw_management_price +  parseFloat(rbfw_security_deposit_actual_amount);
882    jQuery('.security_deposit span').html(wc_price_rbfw(parseFloat(rbfw_security_deposit_actual_amount)));
883
884
885    jQuery('.subtotal .price-figure').html(wc_price_rbfw(sub_total_price));
886    jQuery('.total .price-figure').html(wc_price_rbfw(total_price));
887
888}
889
890function calculateTotalManagementPrice() {
891
892
893    let rbfw_duration_price = parseFloat(jQuery('#rbfw_duration_price').val()) || 0;
894    let rbfw_service_price = parseFloat(jQuery('#rbfw_service_price').val()) || 0;
895    let extra_service_price = parseFloat(jQuery('#rbfw_es_service_price').val()) || 0;
896    let quantity = parseFloat(jQuery('#rbfw_item_quantity_md').val()) || 1;
897    let total_days = parseFloat(jQuery('#rbfw_total_days').val()) || 1;
898
899    let sub_total_price = rbfw_duration_price + rbfw_service_price + extra_service_price;
900
901    let rbfw_management_price = fee_management(sub_total_price,total_days,quantity);
902
903
904    jQuery('#rbfw_management_price').val(rbfw_management_price.toFixed(2));
905    jQuery('.management-costing span').text(wc_price_rbfw(rbfw_management_price));
906
907    let rbfw_security_deposit_actual_amount = 0;
908
909    if(jQuery('#rbfw_security_deposit_enable').val() == 'yes'){
910        let rbfw_security_deposit_amount  = jQuery('#rbfw_security_deposit_amount').val();
911        if (jQuery('#rbfw_security_deposit_type').val() == 'percentage'){
912            rbfw_security_deposit_actual_amount = (rbfw_security_deposit_amount / 100) * sub_total_price;
913        }else{
914            rbfw_security_deposit_actual_amount = rbfw_security_deposit_amount;
915        }
916    }
917
918    let total_price = sub_total_price + rbfw_management_price + parseFloat(rbfw_security_deposit_actual_amount);
919
920
921
922    jQuery('.security_deposit span').html(wc_price_rbfw(rbfw_security_deposit_actual_amount));
923    jQuery('.subtotal .price-figure').html(wc_price_rbfw(sub_total_price));
924    jQuery('.total .price-figure').html(wc_price_rbfw(total_price));
925
926}
927
928function calculateTotalSingleItem() {
929    let service_price = 0;
930
931    // Loop through all checked services
932    jQuery('.rbfw_service_price_data:checked').each(function() {
933        let price = parseFloat(jQuery(this).data('price')) || 0;
934        let qtyInput = jQuery('input[name="' + jQuery(this).attr('name').replace('[main_cat_name]', '[quantity]') + '"]');
935        let service_price_type = jQuery(this).data('service_price_type');
936        let qty = parseInt(qtyInput.val()) || 1;
937
938
939        if(service_price_type=='day_wise'){
940            const rbfw_total_days = jQuery('#rbfw_total_days').val();
941            service_price += price * qty * rbfw_total_days;
942        }else{
943            service_price += price * qty;
944        }
945
946    });
947
948
949
950
951
952    // Show total in an element with id="total_price"
953    jQuery('#rbfw_service_price').val(service_price.toFixed(2));
954
955    var resourse_cost = service_price + parseInt(jQuery('#rbfw_es_service_price').val());
956
957    jQuery('.resource-costing span').text(wc_price_rbfw(resourse_cost));
958
959    var sub_total_price = resourse_cost + parseFloat(jQuery('#rbfw_duration_price').val());
960
961    let rbfw_management_price = 0;
962    let quantity = parseFloat(jQuery('#rbfw_item_quantity_md').val()) || 1;
963    let total_days = parseFloat(jQuery('#rbfw_total_days').val()) || 1;
964
965    jQuery('.rbfw-management-price:checked').each(function() {
966        let price_type = jQuery(this).data('price_type');
967        let price = parseFloat(jQuery(this).data('price')) || 0;
968        let frequency = jQuery(this).data('frequency');
969
970        if (price_type === 'percentage') {
971            rbfw_management_price += ((price / 100) * sub_total_price);
972        } else {
973            if (frequency === 'one-time') {
974                rbfw_management_price += price * quantity;
975            } else {
976                rbfw_management_price += price * quantity * total_days;
977            }
978        }
979    });
980
981    jQuery('#rbfw_management_price').val(rbfw_management_price.toFixed(2));
982    jQuery('.management-costing span').text(wc_price_rbfw(rbfw_management_price));
983
984
985    let rbfw_security_deposit_actual_amount = 0;
986    if(jQuery('#rbfw_security_deposit_enable').val() == 'yes'){
987        let rbfw_security_deposit_amount  = jQuery('#rbfw_security_deposit_amount').val();
988        if (jQuery('#rbfw_security_deposit_type').val() == 'percentage'){
989             rbfw_security_deposit_actual_amount = (rbfw_security_deposit_amount / 100) * sub_total_price;
990        }else{
991            rbfw_security_deposit_actual_amount = rbfw_security_deposit_amount;
992        }
993    }
994    var total_price = sub_total_price + rbfw_management_price + parseFloat(rbfw_security_deposit_actual_amount);
995    jQuery('.security_deposit span').html(wc_price_rbfw(parseFloat(rbfw_security_deposit_actual_amount)));
996
997    jQuery('.subtotal .price-figure').html(wc_price_rbfw(sub_total_price));
998    jQuery('.total .price-figure').html(wc_price_rbfw(total_price));
999
1000}
1001
1002
1003function calculateTotalMultipleItems(only_calculation=false) {
1004
1005    var durationType = jQuery('#durationType').val();
1006    var durationQty = parseInt(jQuery('#durationQty').val()) || 1;
1007    var item_total_price = 0;
1008    jQuery('.rbfw_muiti_items_qty').each(function () {
1009        var $qtyInput = jQuery(this);
1010        var pricePerUnit = parseFloat($qtyInput.data('price-' + durationType)) || 0;
1011        var quantity = parseInt($qtyInput.val()) || 0;
1012
1013        var itemTotal = pricePerUnit * quantity * durationQty;
1014        $qtyInput
1015            .closest('.rbfw_qty_input')
1016            .find('.rbfw_item_peice')
1017            .val(pricePerUnit.toFixed(2));
1018
1019        item_total_price += itemTotal;
1020    });
1021
1022
1023    if(item_total_price){
1024        jQuery('button.rbfw_bikecarmd_book_now_btn').attr('disabled',false);
1025        jQuery('.multi-service-category-section').show();
1026    }else{
1027        jQuery('button.rbfw_bikecarmd_book_now_btn').attr('disabled',true);
1028        jQuery('.multi-service-category-section').hide();
1029    }
1030
1031
1032    jQuery('#rbfw_duration_price').val(item_total_price.toFixed(2));
1033
1034    var sub_total_price = item_total_price + parseInt(jQuery('#rbfw_service_category_price').val());
1035
1036    let rbfw_management_price = fee_management(sub_total_price,1,1);
1037
1038
1039
1040    if(only_calculation){
1041
1042        let rbfw_security_deposit_actual_amount = 0;
1043        if(jQuery('#rbfw_security_deposit_enable').val() == 'yes'){
1044            let rbfw_security_deposit_amount  = jQuery('#rbfw_security_deposit_amount').val();
1045            if (jQuery('#rbfw_security_deposit_type').val() == 'percentage'){
1046                rbfw_security_deposit_actual_amount = (rbfw_security_deposit_amount / 100) * sub_total_price;
1047            }else{
1048                rbfw_security_deposit_actual_amount = rbfw_security_deposit_amount;
1049            }
1050        }
1051        var total_price = sub_total_price + rbfw_management_price + parseFloat(rbfw_security_deposit_actual_amount);
1052
1053        if(rbfw_security_deposit_actual_amount){
1054            jQuery('.security_deposit').show();
1055            jQuery('.security_deposit span').html(wc_price_rbfw(parseFloat(rbfw_security_deposit_actual_amount)));
1056        }
1057
1058        jQuery('.subtotal .price-figure').text(wc_price_rbfw(sub_total_price));
1059        jQuery('.total .price-figure').text(wc_price_rbfw(total_price));
1060
1061
1062    }else{
1063        rbfw_multi_items_ajax_price_calculation();
1064    }
1065}
1066
1067/**
1068 * Refresh calendar to apply enhanced inventory checking after return date selection
1069 */
1070function rbfw_refresh_calendar_with_inventory_check() {
1071    // Small delay to ensure the return date is properly set
1072    setTimeout(function() {
1073        var pickup_date = jQuery('[name="rbfw_pickup_start_date"]').val();
1074        var return_date = jQuery('[name="rbfw_pickup_end_date"]').val();
1075        
1076        if(pickup_date && return_date) {
1077            // Refresh the datepicker to trigger beforeShowDay callback
1078            jQuery('.pickup_date').datepicker('refresh');
1079            jQuery('.dropoff_date').datepicker('refresh');
1080            
1081            // Also update any other calendar instances that might exist
1082            jQuery('.pickup_date_search').datepicker('refresh');
1083            jQuery('.dropoff_date_search').datepicker('refresh');
1084            
1085            console.log('Calendar refreshed with enhanced inventory checking for range:', pickup_date, 'to', return_date);
1086        }
1087    }, 100);
1088}
1089
1090/**
1091 * Enhanced beforeShowDay callback for pickup date - just use normal logic
1092 */
1093function rbfw_enhanced_pickup_beforeShowDay(date) {
1094    // For pickup dates, use normal inventory checking
1095    return rbfw_off_day_dates(date, 'md', rbfw_js_variables.rbfw_today_booking_enable, false);
1096}
1097
1098
1099
1100function rbfw_bikecarmd_ajax_price_calculation(stock_no_effect){
1101
1102
1103    let post_id = jQuery('[data-service-id]').data('service-id');
1104    let date_format = jQuery('#wp_date_format').val();
1105    let pickup_date = jQuery('#hidden_pickup_date').val();
1106    let dropoff_date = jQuery('#hidden_dropoff_date').val();
1107    let rbfw_available_time = jQuery('#rbfw_available_time').val();
1108    let pickup_time = jQuery('.pickup_time').find(':selected').val();
1109    let dropoff_time = jQuery('.dropoff_time').find(':selected').val();
1110
1111    let item_quantity = jQuery('#rbfw_item_quantity_md').find(':selected').val();
1112    let rbfw_enable_variations = jQuery('#rbfw_enable_variations').val();
1113
1114    var rbfw_input_stock_quantity = jQuery('#rbfw_input_stock_quantity').val();
1115
1116    if(typeof item_quantity === "undefined"){
1117        item_quantity = jQuery("[name='rbfw_item_quantity']").val();
1118    }
1119
1120    let rbfw_service_price = jQuery('#rbfw_service_price').val();
1121    let rbfw_es_service_price = jQuery('#rbfw_es_service_price').val();
1122
1123    let rbfw_management_price = jQuery('#rbfw_management_price').val();
1124
1125    let rbfw_enable_time_slot = jQuery('#rbfw_enable_time_slot').val();
1126
1127    if(pickup_date == '' || dropoff_date == ''){
1128        return false;
1129    }
1130
1131    jQuery.ajax({
1132        type: 'POST',
1133        dataType: 'json',
1134        url: rbfw_ajax_front.rbfw_ajaxurl,
1135        data: {
1136            'action' : 'rbfw_bikecarmd_ajax_price_calculation',
1137            'post_id': post_id,
1138            'date_format': date_format,
1139            'pickup_date': pickup_date,
1140            'pickup_time': pickup_time,
1141            'dropoff_date': dropoff_date,
1142            'dropoff_time': dropoff_time,
1143            'item_quantity': item_quantity,
1144            'rbfw_service_price': rbfw_service_price,
1145            'rbfw_enable_variations': rbfw_enable_variations,
1146            'rbfw_es_service_price': rbfw_es_service_price,
1147            'rbfw_management_price': rbfw_management_price,
1148            'rbfw_available_time': rbfw_available_time,
1149            'rbfw_enable_time_slot': rbfw_enable_time_slot,
1150            'nonce' : rbfw_ajax_front.nonce_bikecarmd_ajax_price_calculation
1151        },
1152        beforeSend: function() {
1153            jQuery('.rbfw_bike_car_md_item_wrapper').addClass('rbfw_loader_in');
1154            jQuery('.rbfw_bike_car_md_item_wrapper').append('<i class="fas fa-spinner fa-spin"></i>');
1155        },
1156        success: function (response) {
1157            jQuery('.rbfw_bike_car_md_item_wrapper').removeClass('rbfw_loader_in');
1158            jQuery('.rbfw_bike_car_md_item_wrapper i.fa-spinner').remove();
1159
1160            jQuery('[name="total_days"]').val(response.total_days);
1161
1162            let rbfw_management_price = 0;
1163            jQuery('.rbfw-management-price:checked').each(function() {
1164                let price_type = jQuery(this).data('price_type');
1165                let price = parseFloat(jQuery(this).data('price')) || 0;
1166                if(price_type == 'percentage'){
1167                    let sub_total_price = response.duration_price_number + response.service_cost;
1168                    rbfw_management_price += ( price/100 ) * sub_total_price;
1169                }else{
1170                    let frequency = jQuery(this).data('frequency');
1171                    if(frequency == 'one-time' ){
1172                        rbfw_management_price += price * response.ticket_item_quantity;
1173                    }else{
1174                        rbfw_management_price += price * response.ticket_item_quantity * response.total_days
1175                    }
1176                }
1177            });
1178
1179
1180            jQuery('.resource-costing .price-figure').html(response.service_cost_html);
1181
1182            jQuery('.management-costing .price-figure').text( wc_price_rbfw(rbfw_management_price));
1183
1184            jQuery('.subtotal .price-figure').html(response.sub_total_price_html);
1185
1186            jQuery('.rbfw_pricing_applied').hide();
1187
1188            if(response.pricing_applied != 'No'){
1189                jQuery('.rbfw_pricing_applied.'+response.pricing_applied).show();
1190            }
1191
1192
1193            if(response.duration_price_number){
1194                jQuery('.duration-costing').show();
1195                jQuery('.duration-costing .price-figure').html(response.duration_price_html);
1196            }else{
1197                jQuery('.duration-costing').hide();
1198            }
1199
1200
1201            if(response.discount){
1202                jQuery('.discount').show();
1203                jQuery('.discount span').html(response.discount_html);
1204                jQuery('.discount').show();
1205            }else{
1206                jQuery('.discount').hide();
1207            }
1208
1209            if(response.security_deposit_amount){
1210                jQuery('.security_deposit').show();
1211                jQuery('.security_deposit span').html(response.security_deposit_desc);
1212            }else{
1213                jQuery('.security_deposit').hide();
1214            }
1215
1216            jQuery('.total .price-figure').text( wc_price_rbfw(rbfw_management_price + response.total_price));
1217            jQuery('.rbfw-duration').show();
1218            jQuery('.rbfw-duration .item-content').html(response.total_duration);
1219            jQuery('.rbfw-duration .item-price').html(response.duration_price_html);
1220            jQuery('.rbfw-duration .rbfw_duration_md').val(response.total_duration);
1221            jQuery('#rbfw_duration_price').val(response.duration_price);
1222
1223
1224            var remaining_stock =  response.max_available_qty.remaining_stock;
1225            var ticket_item_quantity =  response.ticket_item_quantity;
1226
1227            var  quantity_options = '';
1228            for (let i = 0; i <= remaining_stock; i++) {
1229                var selected = '';
1230                if(ticket_item_quantity == i){
1231                    var selected = 'selected';
1232                }
1233                if(i==0){
1234                    quantity_options += "<option "+selected+" value="+i+">Choose number of quantity</option>";
1235                }else{
1236                    quantity_options += "<option "+selected+" value="+i+">
1236"+i+"</option>";
1237                }
1238            }
1239
1240            jQuery('#rbfw_item_quantity_md').html(quantity_options);
1241
1242
1243            jQuery('.rbfw_quantity_md').show();
1244            jQuery('.multi-service-category-section').show();
1245            jQuery('.rbfw-variations-content-wrapper').show();
1246            jQuery('.rbfw_resourse_md').show();
1247            jQuery('.rbfw_bikecarmd_price_result').show();
1248            jQuery('.rbfw_reg_form_rb').show();
1249
1250            /*multiple service price day wise*/
1251            jQuery(".service-price-item").each(function(index, value) {
1252                if(response.max_available_qty.service_stock[index]==0){
1253                    jQuery(this).find(".rbfw-sold-out").show().addClass("rbfw_sold_out");
1254                    jQuery(this).find(".rbfw-checkbox").hide();
1255                    jQuery(this).find(".rbfw_service_price_data").data('quantity',0);
1256                }else{
1257                    jQuery(this).find(".rbfw-sold-out").hide().removeClass("rbfw_sold_out");
1258                    jQuery(this).find(".rbfw-checkbox").show();
1259                }
1260                if(response.max_available_qty.service_stock[index]==0){
1261                    jQuery(this).find(".rbfw_service_info_stock").attr('value',response.max_available_qty.service_stock[index]);
1262                }
1263                jQuery(this).find(".rbfw_service_info_stock").attr('max',response.max_available_qty.service_stock[index]);
1264
1265                jQuery(this).find(".remaining_stock").text('('+response.max_available_qty.service_stock[index]+')');
1266            });
1267
1268            /*extra service */
1269
1270            jQuery(".rbfw_bikecarmd_es_qty").each(function(index, value) {
1271                if(response.max_available_qty.extra_service_instock[index]==0){
1272                    jQuery(this).val(0);
1273                }
1274                jQuery(this).attr('max',response.max_available_qty.extra_service_instock[index]);
1275            });
1276            jQuery(".es_stock").each(function(index, value) {
1277                if(response.max_available_qty.extra_service_instock[index]==0){
1278                    jQuery(this).find(".rbfw-sold-out").show().addClass("rbfw_sold_out");
1279                    jQuery(this).find(".rbfw-checkbox").hide();
1280                }
1281                jQuery(this).text(response.max_available_qty.extra_service_instock[index]);
1282            });
1283            jQuery(".rbfw_bikecarmd_es_hidden_input_box").each(function(index, value) {
1284                if(response.max_available_qty.extra_service_instock[index]==0){
1285                    jQuery(this).find(".rbfw-sold-out").show().addClass("rbfw_sold_out");
1286                    jQuery(this).find(".rbfw-checkbox").hide();
1287                }else{
1288                    jQuery(this).find(".rbfw-sold-out").hide().removeClass("rbfw_sold_out");
1289                    jQuery(this).find(".rbfw-checkbox").show();
1290                }
1291            });
1292
1293
1294            if(response.rbfw_enable_variations == 'yes'){
1295                var total_variation_stock = 0;
1296                jQuery(".rbfw_variant").each(function(index, value) {
1297                    var variant_text = jQuery(this).val();
1298                    if(response.max_available_qty.variant_instock[index]<response.ticket_item_quantity){
1299                        jQuery(this).attr("disabled", 'disabled');
1300                        jQuery(this).text(variant_text+' (stock out)' + ' available quantity: ' + response.max_available_qty.variant_instock[index]);
1301                        if(jQuery(this).is(':selected')){
1302                            jQuery(this).removeAttr("selected");
1303                        }
1304                    }else{
1305                        total_variation_stock = 1;
1306                        jQuery(this).removeAttr("disabled");
1307                        jQuery(this).text(variant_text + ' (available quantity: ' +' '+ response.max_available_qty.variant_instock[index] +')');
1308                    }
1309                });
1310
1311                if((total_variation_stock == 0)) {
1312                    jQuery('.rbfw_nia_notice').remove();
1313                    jQuery('<div class="rbfw_nia_notice mps_alert_warning">' + rbfw_translation.no_items_available + '</div>').insertBefore(' button.rbfw_bikecarmd_book_now_btn');
1314                    jQuery('button.rbfw_bikecarmd_book_now_btn').attr('disabled',true);
1315                }else {
1316                    jQuery('.rbfw_nia_notice').remove();
1317                    jQuery('button.rbfw_bikecarmd_book_now_btn').attr('disabled',false);
1318                }
1319            }else{
1320
1321                if((rbfw_input_stock_quantity == 'no_has_value')) {
1322                    jQuery('.rbfw_nia_notice').remove();
1323                    jQuery('button.rbfw_bikecarmd_book_now_btn').attr('disabled',false);
1324                }else{
1325                    if((response.max_available_qty.remaining_stock <= 0)) {
1326                        jQuery('.rbfw_nia_notice').remove();
1327                        jQuery('<div class="rbfw_nia_notice mps_alert_warning">' + rbfw_translation.no_items_available + '</div>').insertBefore(' button.rbfw_bikecarmd_book_now_btn');
1328                        jQuery('button.rbfw_bikecarmd_book_now_btn').attr('disabled',true);
1329                    } else {
1330                        jQuery('.rbfw_nia_notice').remove();
1331                        jQuery('button.rbfw_bikecarmd_book_now_btn').attr('disabled',false);
1332                    }
1333                }
1334            }
1335
1336        },
1337        error : function(response){
1338            console.log(response);
1339        }
1340    });
1341}
1342
1343
1344function rbfw_service_price_calculation(total_days){
1345    jQuery(".rbfw_service_price_data").val(0);
1346    jQuery('.rbfw_service_quantity').css( "display", "none" );
1347    jQuery('.available-stock').css('display','none');
1348    var total = 0;
1349    jQuery(".rbfw_service_price_data:checked").each(function() {
1350        var item_no = jQuery(this).data('item');
1351        jQuery(this).val(1);
1352        var service_price_type =  jQuery(this).data('service_price_type');
1353        var service_quantity = jQuery(this).data('quantity');
1354        var rbfw_enable_md_type_item_qty = jQuery(this).data('rbfw_enable_md_type_item_qty');
1355        if(rbfw_enable_md_type_item_qty=='yes'){
1356            jQuery('.item_'+item_no).removeAttr('style');
1357            jQuery('.available-stock'+'.item_'+item_no).css('display','block');
1358        }
1359        if(service_price_type=='day_wise'){
1360            total +=  jQuery(this).data('price')*service_quantity*total_days;
1361        }else{
1362            total +=  jQuery(this).data('price')*service_quantity;
1363        }
1364    });
1365    jQuery('#rbfw_service_price').val(total);
1366    rbfw_bikecarmd_ajax_price_calculation();
1367}
1368
1369function wc_price_rbfw(price) {
1370    if(rbfw_js_variables.currency_format=='left'){
1371        return rbfw_js_variables.currency + price.toFixed(rbfw_js_variables.price_decimals)
1372    }else{
1373        return price.toFixed(rbfw_js_variables.price_decimals) + rbfw_js_variables.currency;
1374    }
1375}
1376
1377
1378
1379
1380
1381
1382

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.