PageSourceSearch

https://miuvoshop.com.sg/wp-content/plugins/mwb-bookings-for-woocommerce/common/js/mwb-common.js?ver=3.11.0

js miuvoshop.com.sg collected 2026-10-05 22:59:46 UTC 22,423 bytes, 670 lines download raw bytes

1(function( $ ) {
2	'use strict';
3
4	/**
5	 * All of the code for your common JavaScript source
6	 * should reside in this file.
7	 *
8	 * Note: It has been assumed you will write jQuery code here, so the
9	 * $ function reference has been prepared for usage within the scope
10	 * of this function.
11	 *
12	 * This enables you to define handlers, for when the DOM is ready:
13	 *
14	 * $(function() {
15	 *
16	 * });
17	 *
18	 * When the window is loaded:
19	 *
20	 * $( window ).load(function() {
21	 *
22	 * });
23	 *
24	 * ...and/or other possibilities.
25	 *
26	 * Ideally, it is not considered best practise to attach more than a
27	 * single DOM-ready or window-load handler for a particular page.
28	 * Although scripts in the WordPress core, Plugins and Themes may be
29	 * practising this, we should strive to set a better example in our own work.
30	 */
31    $(document).ready(function(){
32		if ( $('.mbfw_time_picker').length > 0 ) {
33			$('.mbfw_time_picker').timepicker();
34		}
35		
36		$(document).on('change', 'form.cart  :input', function(e){
37            var form_data = new FormData( $('form.cart')[0] );
38			if ('twelve_hour' == mwb_mbfw_public_obj.wps_diaplay_time_format ) {
39				for (let [key, value] of form_data.entries()) {
40					if (key === 'wps_booking_single_calendar_form' && key != null ) {
41					form_data.set('wps_booking_single_calendar_form', convertTimeFormat(value));
42					} else if (key === 'mwb_mbfw_booking_to_time' && key != null ) {
43						if( ( '' != value ) ){
44
45							form_data.set('mwb_mbfw_booking_to_time', convertTimeFormatDual(value));
46						} else{
47							form_data.set('mwb_mbfw_booking_to_time', '');
48						}
49					} else if (key === 'mwb_mbfw_booking_from_time' && key != null ) {
50					
51						form_data.set('mwb_mbfw_booking_from_time', convertTimeFormatDual(value));
52					}
53
54				}
55			}
56
57			if ( $('.mwb_mbfw_booking_product_id').val() ) {
58				retrieve_booking_total_ajax( form_data );
59			}
60		});
61		
62
63		$(document).on('focusout blur keydown paste focus mousedown mouseover mouseout', '.mwb-mbfw-cart-page-data', function () {
64			
65			var form_data = new FormData( $('form.cart')[0] );
66			if ('twelve_hour' == mwb_mbfw_public_obj.wps_diaplay_time_format ) {
67				
68				for (let [key, value] of form_data.entries()) {
69					if (key === 'wps_booking_single_calendar_form' && key != null ) {
70					form_data.set('wps_booking_single_calendar_form', convertTimeFormat(value));
71					}  else if (key === 'mwb_mbfw_booking_to_time' && key != null ) {
72					
73						form_data.set('mwb_mbfw_booking_to_time', convertTimeFormatDual(value));
74					
75					} else if (key === 'mwb_mbfw_booking_from_time' && key != null ) {
76						
77						form_data.set('mwb_mbfw_booking_from_time', convertTimeFormatDual(value));
78					}
79				}
80			}
81
82			if ( $('.mwb_mbfw_booking_product_id').val() ) {
83				retrieve_booking_total_ajax( form_data );
84			}
85		});
86
87		$('#mwb-mbfw-booking-from-time, #mwb-mbfw-booking-to-time').on('keydown paste focus mousedown',function(e){
88			
89			e.preventDefault();
90			
91
92		});
93		$('.mwb_mbfw_time_date_picker_frontend').datetimepicker({
94			format  : 'd-m-Y H:00',
95			minDate : mwb_mbfw_common_obj.minDate,
96		});
97		$('.mwb_mbfw_date_picker_frontend').datetimepicker({
98			format     : 'd-m-Y',
99			timepicker : false,
100			minDate    : mwb_mbfw_common_obj.minDate,
101		});
102		
103		
104		$('#mwb_mbfw_choose_holiday').datepicker({
105			dateFormat : 'dd-mm-yy',
106			minDate: mwb_mbfw_common_obj.minDate,
107			
108		});
109		$('.mwb_mbfw_time_picker_frontend').datetimepicker({
110			format     : 'H:i',
111			datepicker : false,
112		});
113		$('#mwb-mbfw-booking-from-time').on('change', function(){
114
115			var from_time = $(this).val();
116			var to_time   = $('#mwb-mbfw-booking-to-time').val();	
117
118			if ( from_time == '' ) {
119				return;
120			}
121			var date_array = from_time.split(" ");
122			var date = date_array[0]; var flag = 0;
123			if ( isToday(date) ) {
124				if ( mwb_mbfw_public_obj.is_pro_active != ''){
125					var upcoming_holiday = bfwp_public_param.upcoming_holiday;
126					if( upcoming_holiday.length > 0 ) {
127						if(isDateInArray(date, upcoming_holiday)) {
128							if (jQuery(jQuery('.flatpickr-calendar')).length > 1 ) {
129									jQuery(jQuery('.flatpickr-calendar')[0]).removeClass('open');
130									jQuery(jQuery('.flatpickr-calendar')[0]).addClass('close');
131									$('#mwb-mbfw-booking-from-time').val('');
132									return;
133							}
134						} else {
135							if ( from_time && to_time ) {
136								if ('twelve_hour' == mwb_mbfw_public_obj.wps_diaplay_time_format ) {
137									from_time = convertTimeFormatDual(from_time);
138									to_time = convertTimeFormatDual(to_time);
139								}
140
141								if ( moment( from_time, 'DD-MM-YYYY HH:mm' ) >= moment( to_time, 'DD-MM-YYYY HH:mm' ) ) {
142									$(this).val('');
143								
144									if (jQuery(jQuery('.flatpickr-calendar')).length > 1 ) {
145										if (jQuery(jQuery('.flatpickr-calendar')[0]).hasClass('open')){
146											jQuery(jQuery('.flatpickr-calendar')[0]).removeClass('open');
147											jQuery(jQuery('.flatpickr-calendar')[0]).addClass('close');
148											$(this).val('');
149											alert( mwb_mbfw_public_obj.wrong_order_date_2 );
150										}
151									}
152									
153								}
154							}
155						}
156					}
157				} else {
158					var upcoming_holiday = mwb_mbfw_public_obj.upcoming_holiday;
159					if( upcoming_holiday.length > 0 ) {
160						if(isDateInArray(date, upcoming_holiday)) {
161							if (jQuery(jQuery('.flatpickr-calendar')).length > 1 ) {
162									jQuery(jQuery('.flatpickr-calendar')[0]).removeClass('open');
163									jQuery(jQuery('.flatpickr-calendar')[0]).addClass('close');
164									$('#mwb-mbfw-booking-from-time').val('');
165									return;
166							}
167						} else {
168							if ( from_time && to_time ) {
169								if ('twelve_hour' == mwb_mbfw_public_obj.wps_diaplay_time_format ) {
170									from_time = convertTimeFormatDual(from_time);
171									to_time = convertTimeFormatDual(to_time);
172								}
173
174								if ( moment( from_time, 'DD-MM-YYYY HH:mm' ) >= moment( to_time, 'DD-MM-YYYY HH:mm' ) ) {
175									$(this).val('');
176								
177									if (jQuery(jQuery('.flatpickr-calendar')).length > 1 ) {
178										if (jQuery(jQuery('.flatpickr-calendar')[0]).hasClass('open')){
179											jQuery(jQuery('.flatpickr-calendar')[0]).removeClass('open');
180											jQuery(jQuery('.flatpickr-calendar')[0]).addClass('close');
181											$(this).val('');
182											alert( mwb_mbfw_public_obj.wrong_order_date_2 );
183										}
184									}
185									
186								}
187							}
188						}
189					}
190				}
191			} else {
192			
193			if ( from_time && to_time ) {
194				if ('twelve_hour' == mwb_mbfw_public_obj.wps_diaplay_time_format ) {
195					from_time = convertTimeFormatDual(from_time);
196					to_time = convertTimeFormatDual(to_time);
197				}
198				if ( moment( from_time, 'DD-MM-YYYY HH:mm' ) >= moment( to_time, 'DD-MM-YYYY HH:mm' ) ) {
199					$(this).val('');
200				
201					if (jQuery(jQuery('.flatpickr-calendar')).length > 1 ) {
202						if (jQuery(jQuery('.flatpickr-calendar')[0]).hasClass('open')){
203							jQuery(jQuery('.flatpickr-calendar')[0]).removeClass('open');
204							jQuery(jQuery('.flatpickr-calendar')[0]).addClass('close');
205							$(this).val('');
206							alert( mwb_mbfw_public_obj.wrong_order_date_2 );
207						}
208					}
209					
210				}
211			}}
212		});
213		$('#mwb-mbfw-booking-to-time').on('change', function(){
214
215			var from_time = $('#mwb-mbfw-booking-from-time').val();
216			var to_time   = $(this).val();
217
218			var date_array = to_time.split(" ");
219			var date = date_array[0];
220			if ( isToday(date) ) {
221				if ( mwb_mbfw_public_obj.is_pro_active != ''){
222
223					var upcoming_holiday = bfwp_public_param.upcoming_holiday;
224					if( upcoming_holiday.length > 0 ) {
225						if(isDateInArray(date, upcoming_holiday)) {
226							if (jQuery(jQuery('.flatpickr-calendar')).length > 1 ) {
227									jQuery(jQuery('.flatpickr-calendar')[0]).removeClass('open');
228									jQuery(jQuery('.flatpickr-calendar')[0]).addClass('close');
229									$('#mwb-mbfw-booking-to-time').val('');
230							}
231						} else {
232							if ( from_time && to_time ) {
233								if ('twelve_hour' == mwb_mbfw_public_obj.wps_diaplay_time_format ) {
234									from_time = convertTimeFormatDual(from_time);
235									to_time = convertTimeFormatDual(to_time);
236								}
237								if ( moment( from_time, 'DD-MM-YYYY HH:mm' ) >= moment( to_time, 'DD-MM-YYYY HH:mm' ) ) {
238									$('#mwb-mbfw-booking-to-time').val('');
239
240									if (jQuery(jQuery('.flatpickr-calendar')).length > 1 ) {
241										if (jQuery(jQuery('.flatpickr-calendar')[1]).hasClass('open')){
242											jQuery(jQuery('.flatpickr-calendar')[1]).removeClass('open');
243											jQuery(jQuery('.flatpickr-calendar')[1]).addClass('close');
244											$(this).val('');
245											alert( mwb_mbfw_public_obj.wrong_order_date_1 );
246										}
247									}
248									
249									
250								}
251							}
252						}
253					}
254				} else{
255				var upcoming_holiday = mwb_mbfw_public_obj.upcoming_holiday;
256					if( upcoming_holiday.length > 0 ) {
257						if(isDateInArray(date, upcoming_holiday)) {
258							if (jQuery(jQuery('.flatpickr-calendar')).length > 1 ) {
259									jQuery(jQuery('.flatpickr-calendar')[0]).removeClass('open');
260									jQuery(jQuery('.flatpickr-calendar')[0]).addClass('close');
261									$('#mwb-mbfw-booking-to-time').val('');
262							}
263						} else {
264							if ( from_time && to_time ) {
265								if ('twelve_hour' == mwb_mbfw_public_obj.wps_diaplay_time_format ) {
266									from_time = convertTimeFormatDual(from_time);
267									to_time = convertTimeFormatDual(to_time);
268								}
269								if ( moment( from_time, 'DD-MM-YYYY HH:mm' ) >= moment( to_time, 'DD-MM-YYYY HH:mm' ) ) {
270									$('#mwb-mbfw-booking-to-time').val('');
271
272									if (jQuery(jQuery('.flatpickr-calendar')).length > 1 ) {
273										if (jQuery(jQuery('.flatpickr-calendar')[1]).hasClass('open')){
274											jQuery(jQuery('.flatpickr-calendar')[1]).removeClass('open');
275											jQuery(jQuery('.flatpickr-calendar')[1]).addClass('close');
276											$(this).val('');
277											alert( mwb_mbfw_public_obj.wrong_order_date_1 );
278										}
279									}
280									
281									
282								}
283							}
284						}
285					}
286				}
287			}else {
288
289				if ( from_time && to_time ) {
290					if ('twelve_hour' == mwb_mbfw_public_obj.wps_diaplay_time_format ) {
291						from_time = convertTimeFormatDual(from_time);
292						to_time = convertTimeFormatDual(to_time);
293					}
294					if ( moment( from_time, 'DD-MM-YYYY HH:mm' ) >= moment( to_time, 'DD-MM-YYYY HH:mm' ) ) {
295						$('#mwb-mbfw-booking-to-time').val('');
296						
297						if (jQuery(jQuery('.flatpickr-calendar')).length > 1 ) {
298							if (jQuery(jQuery('.flatpickr-calendar')[1]).hasClass('open')){
299								jQuery(jQuery('.flatpickr-calendar')[1]).removeClass('open');
300								jQuery(jQuery('.flatpickr-calendar')[1]).addClass('close');
301								$(this).val('');
302								alert( mwb_mbfw_public_obj.wrong_order_date_1 );
303							}
304						}
305						
306						
307					}
308				}
309			}
310		});
311		$('#mwb-mbfw-booking-to-time').on('click', function(){
312			if (jQuery(jQuery('.flatpickr-calendar')).length > 1 ) {
313				if (jQuery(jQuery('.flatpickr-calendar')[1]).hasClass('close')){
314					jQuery(jQuery('.flatpickr-calendar')[1]).removeClass('close');
315					jQuery(jQuery('.flatpickr-calendar')[1]).addClass('open')
316				}
317			}
318		});
319		$('#mwb-mbfw-booking-from-time').on('click', function(){
320			;
321			if (jQuery(jQuery('.flatpickr-calendar')).length > 1 ) {
322				if (jQuery(jQuery('.flatpickr-calendar')[0]).hasClass('close')){
323					jQuery(jQuery('.flatpickr-calendar')[0]).removeClass('close');
324					jQuery(jQuery('.flatpickr-calendar')[0]).addClass('open')
325				}
326			}
327		});
328    });
329
330	// cancel order from my account page.
331	jQuery(document).on('click', '#wps_bfw_cancel_order', function(){
332
333		if (confirm(mwb_mbfw_common_obj.cancel_booking_order) == true) {
334			
335			var product_id = jQuery(this).attr('data-product');
336			var order_id   = jQuery(this).attr('data-order');
337			var data       = {
338				'action'     : 'bfw_cancelled_booked_order',
339				'nonce'      : mwb_mbfw_common_obj.nonce,
340				'product_id' : product_id,
341				'order_id'   : order_id,
342			}
343			
344			jQuery.ajax({
345				url     : mwb_mbfw_common_obj.ajax_url,
346				method  : 'POST',
347				data    : data,
348				success : function( response ) {
349					window.location.reload();
350				}
351			});
352		}
353
354		
355	});
356	jQuery(document).on('change', '.mwb-mbfw-additional-service-quantity', function () {
357
358    var $input  = jQuery(this);
359    var termId  = $input.data('term-id');
360    var qty     = parseInt($input.val(), 10);
361
362    if (!termId || isNaN(qty)) {
363        return;
364    }
365
366    jQuery.ajax({
367        url: mwb_mbfw_common_obj.ajax_url,
368        type: 'POST',
369        dataType: 'json',
370        data: {
371            action: 'mwb_check_service_max_qty',
372            term_id: termId,
373            qty: qty,
374            nonce: mwb_mbfw_common_obj.nonce
375        },
376        success: function (response) {
377            if (!response.success) {
378                alert(response.data.message);
379
380                // reset to allowed max
381				if (response.data.allowed.max !== null) {
382                        $input.val(response.data.allowed.max);
383                    } else if (response.data.allowed.min !== null) {
384                        $input.val(response.data.allowed.min);
385                    } else {
386                        $input.val(0);
387                    }
388            }
389        }
390    });
391});
392
393	jQuery('#wps_booking_single_calendar_form').on('blur',function(){
394		var calendar_dataa =  jQuery('#wps_booking_single_calendar_form').val();
395
396		var bodyClasses = $('body').attr('class');
397
398		// Use a regular expression to find the product ID in the body class
399		// var productIDMatch = bodyClasses.match(/postid-(\d+)/);
400		var prod_id = jQuery('.mwb_mbfw_booking_product_id').val();
401		if (prod_id) {
402			var productId = prod_id;
403	
404			// You can use productId here for further processing
405		} else {
406			console.log('Product ID not found.');
407		}
408
409
410		jQuery.ajax({
411			method: 'POST',
412			url: mwb_mbfw_common_obj.ajax_url,
413			data: {
414				nonce: mwb_mbfw_common_obj.nonce,
415				action: 'mbfw_get_cart_data',
416				product_id: productId,
417				slot_selected : calendar_dataa,
418				slot_left:mwb_mbfw_public_obj.booking_slot_array_max_limit
419			},
420			success: function(msg) {
421				if ('undefined'!= msg){
422
423					if('no'==msg){
424						jQuery('.cart .single_add_to_cart_button').prop('disabled', false);
425					} else if (msg <= 0) {
426						jQuery('.cart .single_add_to_cart_button').prop('disabled', true);
427					} else{
428						
429						jQuery('.qty').attr('max',msg);
430						jQuery('.cart .single_add_to_cart_button').prop('disabled', false);
431
432					}
433				}
434						
435					
436				
437			},
438		});
439	});
440
441})( jQuery );
442function convertTimeFormat(input) {
443    // Extract date and time using regex
444    let match = input.match(/^(\d{1,2}-\d{2}-\d{4}) (\d{1,2}:\d{2} [APM]{2}) - (\d{1,2}:\d{2} [APM]{2})$/);
445    if (!match) return input;
446
447    let date = match[1]; // Extract the date
448    let startTime = moment(match[2], "h:mm A").format("HH:mm"); // Convert start time to 24-hour format
449    let endTime = moment(match[3], "h:mm A").format("HH:mm"); // Convert end time to 24-hour format
450
451    return `${date} ${startTime} - ${endTime}`;
452}
453
454function convertTimeFormatDual(input) {
455	input_val = input;
456	// if ('twelve_hour' == mwb_mbfw_public_obj.wps_diaplay_time_format ) {
457
458		currentLang = mwb_mbfw_public_obj.lang;
459
460
461		// Replace localized AM/PM markers with standard AM/PM
462		var map = timeChangeLanguage(currentLang) || timeChangeLanguage('default'); // Use default map if lang not found
463		if (currentLang == 'az') {
464			var map = { 'GƏ': 'AM', 'GS': 'PM' }
465		}
466		if (currentLang == 'be') {
467			var map = { 'ДП': 'AM', 'ПП': 'PM' }
468		}
469		input = input.replace(new RegExp(Object.keys(map).join("|"), "gi"), function(match) {console.log(match,1);
470			return map[match];
471		});
472	// }
473    // Extract date and time using regex
474    let match = input.match(/^(\d{1,2}-\d{2}-\d{4}) (\d{1,2}:\d{2} [APM]{2})$/);
475    if (!match) return input;
476
477	let date = match[1]; // Extract the date
478
479	let startTime = moment(match[2], "hh:mm A").format("HH:mm"); // Convert start time to 24-hour format
480
481    return `${date} ${startTime}`;
482}
483
484function isToday(dateTimeStr) {
485    // Parse the input using the known format
486    const inputDate = moment(dateTimeStr, "DD-MM-YYYY");
487
488    // Compare only the date (ignores time)
489    return inputDate.isSame(moment(), 'day');
490}
491
492function isDateInArray(dateStr, dateArray) {
493    // Convert input date to the array's format: YYYY-MM-DD
494    const formatted = moment(dateStr, "DD-MM-YYYY").format("YYYY-MM-DD");
495
496    return dateArray.includes(formatted);
497}
498
499function retrieve_booking_total_ajax( form_data ) {
500	
501	var condition = true;
502	data_from = jQuery('#mwb-mbfw-booking-from-time').val();
503	data_to =jQuery('#mwb-mbfw-booking-to-time').val();
504	
505	if ('twelve_hour' == mwb_mbfw_public_obj.wps_diaplay_time_format ) {
506		data_from = (undefined == data_from ) ? undefined : convertTimeFormatDual( data_from );
507		data_to = (undefined == data_to ) ? undefined :convertTimeFormatDual( data_to );
508	}
509
510	if ( data_from != undefined && data_to != undefined ){	
511		var datesBetween = getDatesBetween(data_from, data_to);
512		for (let index = 0; index < datesBetween.length; index++) {
513			var originalDate = datesBetween[index];
514			var upcoming_holiday = mwb_mbfw_public_obj.upcoming_holiday[0];
515			var formattedDate = convertDateFormat(originalDate);
516			
517			if (upcoming_holiday.includes(formattedDate)) {
518				condition = false;
519			}
520		}
521	}
522	if ( $('.mwb-mbfw-total-area').length > 0 && condition == true ) {
523
524		form_data.append('action', 'mbfw_retrieve_booking_total_single_page');
525		form_data.append('nonce', mwb_mbfw_common_obj.nonce);
526		jQuery.ajax({
527			url         : mwb_mbfw_common_obj.ajax_url,
528			method      : 'post',
529			data        : form_data,
530			processData : false,
531			contentType : false,
532			success     : function( msg ) {
533			
534				var str1 = msg;
535			
536				var str2 = "rror establishing a database connectio";
537				if(str1.indexOf(str2) != -1){
538					msg = '';
539				}
540				if (msg == 'fail'){
541						$('#mwb-mbfw-booking-to-time').val('');
542						jQuery('.cart .single_add_to_cart_button').prop('disabled', true);
543					if ( $('#alert_msg_client').val() == undefined){
544						jQuery('.mwb-mbfw-cart-page-data').append('<span id="alert_msg_client" style="color:red">'+mwb_mbfw_common_obj.holiday_alert+'</span>')		
545
546						return;
547					}
548				} else{
549					if ( $('#alert_msg_client').val() != undefined){
550
551						setTimeout(function(){ 
552							$('#alert_msg_client').remove();
553						}, 4000);
554					
555					}
556					$('.mwb-mbfw-total-area').html(msg);
557					jQuery('.cart .single_add_to_cart_button').prop('disabled', false);
558
559				}
560
561			}
562		});
563	} else{
564		
565		if ( condition == false ){
566			if ( $('#alert_msg_client').val() == undefined){
567				jQuery('.mwb-mbfw-cart-page-data').append('<span id="alert_msg_client" style="color:red">'+mwb_mbfw_common_obj.holiday_alert+'</span>')		
568				$('#mwb-mbfw-booking-to-time').val('');
569			}
570		}
571	}
572}
573
574
575function getDatesBetween(startDate, endDate) {
576    var dates = [];
577    var currentDate = parseDate(startDate);
578    endDate = parseDate(endDate);
579    
580    while (currentDate <= endDate) {
581        dates.push(formatDate(currentDate));
582        currentDate.setDate(currentDate.getDate() + 1);
583    }
584    
585    return dates;
586}
587
588function parseDate(dateString) {
589    var parts = dateString.split("-");
590    return new Date(parts[2], parts[1] - 1, parts[0]);
591}
592
593function formatDate(date) {
594    var day = date.getDate();
595    var month = date.getMonth() + 1;
596    var year = date.getFullYear();
597    return pad(day) + "-" + pad(month) + "-" + year;
598}
599
600function pad(number) {
601    return number < 10 ? "0" + number : number;
602}
603
604function convertDateFormat(dateString) {
605    var parts = dateString.split("-");
606    return parts[2] + "-" + parts[1] + "-" + parts[0];
607}
608
609function timeChangeLanguage( lang ){
610	const amPmMap = {
611		'default': { 'AM': 'AM', 'PM': 'PM' },
612		'ar': { 'ص': 'AM', 'م': 'PM' }, // Arabic
613		'at': { 'AM': 'AM', 'PM': 'PM' }, // Austria (uses similar to English)
614		'az': { 'AM': 'AM', 'PM': 'PM' }, // Azerbaijani
615		'be': { 'AM': 'AM', 'PM': 'PM' }, // Belarusian
616		'bg': { 'AM': 'AM', 'PM': 'PM' }, // Bulgarian
617		'bn': { 'AM': 'AM', 'PM': 'PM' }, // Bengali
618		'bs': { 'AM': 'AM', 'PM': 'PM' }, // Bosnian
619		'cat': { 'AM': 'AM', 'PM': 'PM' }, // Catalan
620		'cs': { 'AM': 'AM', 'PM': 'PM' }, // Czech
621		'cy': { 'AM': 'AM', 'PM': 'PM' }, // Welsh
622		'da': { 'AM': 'AM', 'PM': 'PM' }, // Danish
623		'de': { 'AM': 'AM', 'PM': 'PM' }, // German
624		'eo': { 'AM': 'AM', 'PM': 'PM' }, // Esperanto
625		'es': { 'AM': 'AM', 'PM': 'PM' }, // Spanish
626		'et': { 'AM': 'AM', 'PM': 'PM' }, // Estonian
627		'fa': { 'AM': 'AM', 'PM': 'PM' }, // Persian
628		'fi': { 'AM': 'AM', 'PM': 'PM' }, // Finnish
629		'fr': { 'AM': 'AM', 'PM': 'PM' }, // French
630		'gr': { 'AM': 'AM', 'PM': 'PM' }, // Greek
631		'he': { 'AM': 'AM', 'PM': 'PM' }, // Hebrew
632		'hi': { 'पूर्वाह्न': 'AM', 'अपराह्न': 'PM' }, // Hindi
633		'hr': { 'AM': 'AM', 'PM': 'PM' }, // Croatian
634		'hu': { 'AM': 'AM', 'PM': 'PM' }, // Hungarian
635		'id': { 'AM': 'AM', 'PM': 'PM' }, // Indonesian
636		'is': { 'AM': 'AM', 'PM': 'PM' }, // Icelandic
637		'it': { 'AM': 'AM', 'PM': 'PM' }, // Italian
638		'ja': { '午前': 'AM', '午後': 'PM' }, // Japanese
639		'ka': { 'AM': 'AM', 'PM': 'PM' }, // Georgian
640		'km': { 'AM': 'AM', 'PM': 'PM' }, // Khmer
641		'ko': { 'AM': 'AM', 'PM': 'PM' }, // Korean
642		'kz': { 'AM': 'AM', 'PM': 'PM' }, // Kazakh
643		'lt': { 'AM': 'AM', 'PM': 'PM' }, // Lithuanian
644		'lv': { 'AM': 'AM', 'PM': 'PM' }, // Latvian
645		'mk': { 'AM': 'AM', 'PM': 'PM' }, // Macedonian
646		'mn': { 'AM': 'AM', 'PM': 'PM' }, // Mongolian
647		'my': { 'AM': 'AM', 'PM': 'PM' }, // Burmese
648		'nl': { 'AM': 'AM', 'PM': 'PM' }, // Dutch
649		'no': { 'AM': 'AM', 'PM': 'PM' }, // Norwegian
650		'pa': { 'AM': 'AM', 'PM': 'PM' }, // Punjabi
651		'pl': { 'AM': 'AM', 'PM': 'PM' }, // Polish
652		'pt': { 'AM': 'AM', 'PM': 'PM' }, // Portuguese
653		'ro': { 'AM': 'AM', 'PM': 'PM' }, // Romanian
654		'ru': { 'AM': 'AM', 'PM': 'PM' }, // Russian
655		'si': { 'AM': 'AM', 'PM': 'PM' }, // Sinhala
656		'sk': { 'AM': 'AM', 'PM': 'PM' }, // Slovak
657		'sl': { 'AM': 'AM', 'PM': 'PM' }, // Slovenian
658		'sq': { 'AM': 'AM', 'PM': 'PM' }, // Albanian
659		'sr': { 'AM': 'AM', 'PM': 'PM' }, // Serbian
660		'sv': { 'AM': 'AM', 'PM': 'PM' }, // Swedish
661		'th': { 'AM': 'AM', 'PM': 'PM' }, // Thai
662		'tr': { 'AM': 'AM', 'PM': 'PM' }, // Turkish
663		'uk': { 'AM': 'AM', 'PM': 'PM' }, // Ukrainian
664		'uz': { 'AM': 'AM', 'PM': 'PM' }, // Uzbek
665		'vn': { 'AM': 'AM', 'PM': 'PM' }, // Vietnamese
666		'zh': { 'AM': 'AM', 'PM': 'PM' }, // Chinese (Simplified)
667	};
668	 return amPmMap[lang];
669	
670}

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.