PageSourceSearch

https://www.toyota.co.th/request_testdrive/load_js/default/testdrive_v2/index.js?v=1178

js toyota.co.th collected 2026-10-02 07:42:55 UTC 47,598 bytes, 1,326 lines download raw bytes

1window.items_dealer = [];
2var CampaignType = 'testdrive'
3var selected_dealer ,selected_branch = null;
4var isStockAvailable = false;	
5var gmap_iframe = window.google_map;
6
7var delayAliveSpace = null;
8
9var data_alivespace_timeslot = null;
10function getSelectedSerie(){
11	var serie_selected = $("#series_code").val();
12	return data_alivespace_grade[serie_selected];
13
14}
15isAlive_ruleShown = false;
16var is_eventClickChangeModel = false;
17function showRules(){
18	var title = '<p class="black heavent fs-title ">กฏการใช้สนามทดสอบรถยนต์</p>';
19	var html = '<ol style="margin-left: 15px;"> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-1" name="checkCourtRule-1"> <label class="form-check-label" for="checkCourtRule-1"> ท่านจำเป็นต้องนำใบขับขี่ตัวจริงที่ยังไม่หมดอายุ มาแสดงกับเจ้าหน้าที่ในวันทดลองขับ </label> </div> </li> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-2" name="checkCourtRule-2"> <label class="form-check-label" for="checkCourtRule-2"> การสำรองคิวทดลองขับ 1 คิว สามารถรองรับผู้ขับขี่ได้ 2 คนและผู้โดยสาร 1 คน </label> </div> </li> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-3" name="checkCourtRule-3"> <label class="form-check-label" for="checkCourtRule-3"> กรุณาสวมรองเท้าหุ้มส้นหรือรองเท้าผ้าใบในการทดลองขับ </label> </div> </li> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-4" name="checkCourtRule-4"> <label class="form-check-label" for="checkCourtRule-4"> ห้ามถ่ายภาพนิ่ง และภาพเคลื่อนไหวในระหว่างการทดลองขับ </label> </div> </li> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-5" name="checkCourtRule-5"> <label class="form-check-label" for="checkCourtRule-5"> ห้ามนำอาหาร เครื่องดื่ม และสัตว์เลี้ยงขึ้นบนรถทดลองขับ </label> </div> </li> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-6" name="checkCourtRule-6"> <label class="form-check-label" for="checkCourtRule-6"> ปฏิบัติตามคำแนะนำของผู้ฝึกสอนอย่างเคร่งครัด </label> </div> </li> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-7" name="checkCourtRule-7"> <label class="form-check-label" for="checkCourtRule-7"> ผู้ฝึกสอนมีสิทธิ์ยุติการทดสอบหากก่อให้เกิดเหตุการณ์อันตรายแก่ผู้ทดสอบเองหรือ ผู้ร่วมทดสอบท่านอื่น </label> </div> </li> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-8" name="checkCourtRule-8"> <label class="form-check-label" for="checkCourtRule-8"> สำหรับสตรีมีครรภ์ กรุณาแจ้งให้เจ้าหน้าที่ทราบ </label> </div> </li> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-9" name="checkCourtRule-9"> <label class="form-check-label" for="checkCourtRule-9"> โปรดสูบบุหรี่ในพื้นที่ที่กำหนด </label> </div> </li> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-10" name="checkCourtRule-10"> <label class="form-check-label" for="checkCourtRule-10">
19 หากมาสายเกิน 10 นาที ถือเป็นการสละสิทธิการจองทดลองขับในรอบนั้นๆ </label> </div> </li> </ol>';
20	if(WEB_LANG == 'en'){
21		title = '<p class="black heavent fs-title ">Test Drive Court Safety Rules</p>';
22		html = '<ol style="margin-left: 15px;"> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-1" name="checkCourtRule-1"> <label class="form-check-label" for="checkCourtRule-1"> Your valid driving license is required before test drive. </label> </div> </li> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-2" name="checkCourtRule-2"> <label class="form-check-label" for="checkCourtRule-2"> For  1 test drive reservation slot can accommodate 2 drivers and 1 passenger. </label> </div> </li> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-3" name="checkCourtRule-3"> <label class="form-check-label" for="checkCourtRule-3"> Please wear proper footwear, no slippers or high heels allowed. </label> </div> </li> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-4" name="checkCourtRule-4"> <label class="form-check-label" for="checkCourtRule-4"> No photography or video recording while test drive. </label> </div> </li> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-5" name="checkCourtRule-5"> <label class="form-check-label" for="checkCourtRule-5"> No food, drinks and pet are allowed onboard. </label> </div> </li> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-6" name="checkCourtRule-6"> <label class="form-check-label" for="checkCourtRule-6"> Please follow the instructor’s guidance strictly. </label> </div> </li> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-7" name="checkCourtRule-7"> <label class="form-check-label" for="checkCourtRule-7"> The instructor has the right to stop the test driving early or immediately if there is something that may cause danger. </label> </div> </li> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-8" name="checkCourtRule-8"> <label class="form-check-label" for="checkCourtRule-8"> Please inform our staff if you may be pregnant. </label> </div> </li> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-9" name="checkCourtRule-9"> <label class="form-check-label" for="checkCourtRule-9"> Please smoke and vape in designated area. </label> </div> </li> <li> <div class="form-check"> <input class="form-check-input checkCourtRules" type="checkbox" value="1" id="checkCourtRule-10" name="checkCourtRule-10"> <label class="form-check-label" for="checkCourtRule-10"> If you arrive more than 10 minutes late, your test drive reservation for that session will be canceled. </label> </div> </li> </ol>';
23	}
24	setTimeout(function(){
25		
26		Swal.fire({
27			background: '#eee',
28			title: title,
29			html: html,
30			icon: 'warning', 
31			confirmButtonColor: "#eb0a1e",
32			width: 700,
33			allowOutsideClick: false,
34			showCloseButton:false,
35			confirmButtonText: ((WEB_LANG == 'en')?"Accept":"รับทราบ"),
36			didOpen: (toast) => {
37				
38
39			}
40		}).then((result) => {
41			if (result.isConfirmed) {
42				isAlive_ruleShown = true;
43				pushDataLayer({'event':'EV-alive_rules_acknowledged'});
44			} 
45		  });
46		  Swal.disableButtons();
47		$("#swal2-html-container input").click(function(){
48			Swal.enableButtons();
49			$("#swal2-html-container input").each(function(i,el){
50				if(!el.checked){
51					Swal.disableButtons();
52				}
53			})
54		});
55
56	},400);
57
58	$('#driving_license_expiration_date, #driving_license_expiration_date2').caleran({
59		locale: 'th',
60		format: 'DD/MM/YYYY',
61		minDate: moment().add(3, 'days'),
62		prevMonthIcon: "<",
63		nextMonthIcon: ">",
64		startEmpty: false,
65		singleDate: true,
66		autoCloseOnSelect: true,
67		onafterselect: function(caleran, startDate, endDate){
68			caleran.hideDropdown();
69		}
70	});
71
72	$('#driving_license_expiration_date').on('focus', () => {
73		$('#driving_license_expiration_option_1').prop('checked', true)
74	})
75
76	$('#driving_license_expiration_date2').on('focus', () => {
77		$('#driving_license_expiration_option2_1').prop('checked', true)
78	})
79}
80function gradeAliveSpacelist(){ 
81	var selected_alivespace_grade = getSelectedSerie();
82	var selected_alivespace_serie_id = selected_alivespace_grade['id'];
83	// var selected_alivespace_grades = selected_alivespace_grade['grades'];
84	$.post("/alive/testdrive-reservation/available-grades",
85		{_token: $("#alive-token input").val(),series_id: selected_alivespace_serie_id},
86		function(selected_alivespace_grades){
87			
88			$(".selected-grade-name").text('');
89			$("#alivespace-grade").html("<option value=''>"+$Lang.SHOPPING_TOOLS_SELECT_GRADE+"</option>");
90			$.each(selected_alivespace_grades,function(i,el){
91				$("#alivespace-grade").append("<option value='"+el.id+"'>"+el.title+"</option>");
92			});
93	});
94
95	
96}
97function step3InitLayout(mode ){
98	 
99	if(mode == 'alive'){
100		
101		$(".row-add_driver2").show();
102		$(".row-attach_driverlicence").show();
103	}else{
104		$(".row-add_driver2").hide();
105		$(".row-attach_driverlicence").hide();
106
107	}
108}
109
110var isAliveActive = false;
111function checkAliveSpace(){
112	clearTimeout(delayAliveSpace);
113	var serie_selected = $("#series_code").val();
114	var isAlive_model_visible = true;
115	if(typeof data_alivespace_grade[serie_selected] == 'undefined'){
116		isAlive_model_visible = false;
117	}
118	$("#display-selected-datetime").hide();
119
120	delayAliveSpace = setTimeout(function(){
121		isAliveActive = ($('#dealer').val() == '00000');
122		if(isAliveActive && isAlive_model_visible){
123			
124			gradeAliveSpacelist();
125			$("#box__alive-select-pin").hide(); 
126			$("#box__alive-select-date").hide();
127			$("#box__alive-select-grade").show();
128
129		}else{
130			if(isAlive_model_visible){
131				$("#box__alive-select-pin").show();
132			}else{
133				$("#box__alive-select-pin").hide();
134			}
135
136			$("#box__alive-select-grade").hide();
137			$(".selected-grade-name").text(''); 
138			if($("#dealer").val() != "" ){
139				$.each(items_dealer, function(key,val){
140					var selected_dealer_code = $("#dealer").val() ;
141					if(selected_dealer_code == val.comp_code){ 
142						isStockAvailable = (val.stock == 'Y');
143					}
144				});
145		
146			}else{
147				isStockAvailable = false;
148			}
149
150			if(isStockAvailable ){
151				
152				$("#box__alive-select-date").show();
153				$("#timeslot").html(' <option value="">'+$Lang.SHOPPING_TOOLS_SELECT_TIME+'</option><option value="08:00">08:00 - 12.00</option> <option value="13:00">13:00 - 17:00</option>');
154				max_reserve_day =  21; // days
155				$('.calendar-picker').caleran({
156					autoCloseOnSelect: true,
157					singleDate: true,
158					minDate: moment().add(2, 'days'),
159					maxDate: moment().add(max_reserve_day-1, 'days'), 
160					format: 'DD/MM/YYYY',
161					onafterselect: function(caleran, startDate, endDate){
162						var days = $('.calendar-picker').val().split("/");
163						pushDataLayer({
164							'event': 'EV-select_testdrive_date',
165							'testdrive_date': ( days[2]+"/" +days[1]+"/" +days[0] )
166						})
167					}
168				});
169			}else{
170				$("#box__alive-select-date").hide();
171			}
172		}
173	},100);
174}
175
176function renderTimeslot(){
177	$("#timeslot").html('<option value="">'+$Lang.SHOPPING_TOOLS_SELECT_TIME+'</option>');
178	var days = $('.calendar-picker').val().split("/");
179	day_selected = days[2]+"-" +days[1]+"-" +days[0];
180	var selected_alivespace_grade = getSelectedSerie();
181	var selected_alivespace_serie_id = selected_alivespace_grade['id'];
182	var selected_grade_id = $("#alivespace-grade").val();
183	$.post("/alive/testdrive-reservation/available-time",{_token: $("#alive-token input").val(),series_id:selected_alivespace_serie_id,grade_id:selected_grade_id,reserve_date:day_selected},function(available_day){
184	
185		
186		$.each(available_day,function(i,el){
187			// var time_val = el.split(" - ");
188			$("#timeslot").append("<option value='"+el.id+"'>"+el.time+"</option>");
189		});
190	});
191}
192function updateTimeslot(ev){
193	$("#display-selected-datetime").show();
194	var selected_date = $('.calendar-picker').val();
195	var selected_time = $("#timeslot option:selected").text();
196	var html = selected_date +' '+selected_time ;
197	$(".selected-datetime").html(html);
198	var days = $('.calendar-picker').val().split("/");
199
200	pushDataLayer({
201		'event': 'EV-select_testdrive_timeslot',
202		'testdrive_date': ( days[2]+"/" +days[1]+"/" +days[0] ),
203		'testdrive_time': selected_time
204	})
205}
206$(document).ready(function(e) {
207
208	$("#alivespace-grade").change(function(){
209		$("#box__alive-select-date").hide();
210
211		// var model_code = $("#model_code").val();
212		var selected_grade_id = $("#alivespace-grade").val();
213		$(".selected-grade-name").text($("#alivespace-grade option:selected").text());
214		pushDataLayer({
215			'event': 'EV-select_alive_testdrive_grade',
216			'alive_testdrive_grade': $("#alivespace-grade option:selected").text()
217		})
218
219		
220		var selected_alivespace_grade = getSelectedSerie();
221		var selected_alivespace_serie_id = selected_alivespace_grade['id'];
222		$.post("/alive/testdrive-reservation/disabled-dates",{_token: $("#alive-token input").val(),series_id:selected_alivespace_serie_id,grade_id:selected_grade_id},function(disabled_days){
223
224			var disabled_ranges = [];
225			$.each(disabled_days, function(index, date){
226				disabled_ranges.push({
227					start: moment(date,"YYYY-MM-DD"),
228					end: moment(date,"YYYY-MM-DD")
229				});
230			});
231
232			let currentDate = moment();
233			let minDate = null;
234			let dateFormat = "YYYY-MM-DD";
235
236			// Assuming 'data' is an array of disabled dates in "YYYY-MM-DD" format
237			for (let i = 2; i < 60; i++) {
238				let checkDate = currentDate.clone().add(i, 'days').format(dateFormat);
239				if (!disabled_days.includes(checkDate)) {
240					minDate = checkDate;
241					break;
242				}
243			}
244		
245			max_reserve_day=  21;
246			$('.calendar-picker').caleran({
247				autoCloseOnSelect: true,
248				locale: 'th',
249                format: 'DD/MM/YYYY',
250                startEmpty: false,
251                minDate: moment(minDate),//.add(1, 'days'),
252                // maxDate: moment().add(2, 'months'),
253                maxDate: moment().add(max_reserve_day-1, 'days'), // 7 days
254                prevMonthIcon: "<",
255                nextMonthIcon: ">",
256                singleDate: true,
257                disableDays: function(day){
258                    return false;
259                },
260				disabledRanges: disabled_ranges,
261				 
262				onafterselect: function(caleran, startDate, endDate){
263					// console.log("onafterselect",$('.calendar-picker').val())
264					renderTimeslot(); 
265					var days = $('.calendar-picker').val().split("/");
266					pushDataLayer({
267						'event': 'EV-select_testdrive_date',
268						'testdrive_date': ( days[2]+"/" +days[1]+"/" +days[0] )
269					})
270				},
271				oninit: function(caleran){
272					// console.log("oninit",$('.calendar-picker').val())
273					renderTimeslot();
274				}
275			});
276			var caleran = $('.calendar-picker').data("caleran");
277			caleran.reDrawCalendars();
278			$("#box__alive-select-date").show();
279		},'json');
280		
281
282	})
283	$(".btn-select-alivespace").click(function(ev){
284		ev.preventDefault();
285		gmap_iframe.initMarker();
286		$("#province").val($Lang.SHOPPING_TOOLS_PROVINCE_BANGKOK).change();
287		$("#dealer").val("00000").change();
288		gmap_iframe.branch_change_marker('00000','00')
289
290		gmap_iframe.map.setZoom(12); 
291        $('#box__dealers_select').show();
292		checkAliveSpace();
293
294		pushDataLayer({'event':'EV-testdrive_alive'});
295	});
296	$('#dealer').change(function(ev){
297		checkAliveSpace();
298	});
299
300    
301
302
303	$('.box__step-1').removeClass('start')
304	
305	// if($('#google_map').length > 0){
306	// 	var gmap_iframe = $('#google_map')[0].contentWindow;
307	// }
308	let isMobile = window.matchMedia("only screen and (max-width: 760px)").matches;
309
310
311
312	
313	if($('#Campaign_source').length > 0){
314		if($('#Campaign_source').val() == ""){
315			$('a.close').show();
316		}
317	}
318	else{
319		$('a.close').show();
320	}
321
322	$('.slider-main').slick({
323        slidesToShow: 1,
324        slidesToScroll: 1,
325        dots: false,
326        arrows: true,
327        adaptiveHeight: true,
328        // asNavFor: '.slider-promotion',
329		// responsive: [{
330		// 	breakpoint: 992,
331		// 	settings: {
332		// 		dots: false,
333		// 		asNavFor: '.slider-bullet'
334		// 	}
335		// }]
336    });
337	 
338	$('.slider-main').on('click', '.slick-prev, .slick-next', function() {
339		is_eventClickChangeModel = true; 
340    });
341	if($(window).width() > 991){
342		$('.list__general a[data-type]').click(function(e) {
343            e.preventDefault();
344            var car_type = $(this).data('type');
345            $('.list__general .item').removeClass('active');
346            $(this).parent().addClass('active');
347			var first_slide_number = -1;
348			$('.slider-main .series-item[data-type="'+car_type+'"]').each(function(i,el){
349				if(first_slide_number == -1 && $(el).data("slick-index") >= 0){
350					first_slide_number = $(el).data("slide-number");
351				}
352			})
353			$('.slider-main').slick('slickGoTo', first_slide_number);
354			pushDataLayer({
355				event: "EV-select_cartype",
356                car_type :car_type
357			});
358			is_eventClickChangeModel = true;
359        });
360    } else{
361        $('.list__general .form-select-car_type').on('change', function(){
362            var car_type = $(this).val();
363			if(car_type){
364				var first_slide_number = -1;
365				$('.slider-main .series-item[data-type="'+car_type+'"]').each(function(i,el){
366					if(first_slide_number == -1 && $(el).data("slick-index") >= 0){
367						first_slide_number = $(el).data("slide-number");
368					}
369				})
370				$('.slider-main').slick('slickGoTo', first_slide_number);
371				pushDataLayer({
372					event: "EV-select_cartype",
373					car_type :car_type
374				})
375			}
376			else{
377				$('.slider-main').slick('slickGoTo', 0);
378				$('.form-select-car_type option[value=""]').prop('selected', true)
379			}
380			is_eventClickChangeModel = true;
381        });
382    }
383	if(series_list.length > 0)
384		$('.slider-main').on('afterChange', function(event, slick, currentSlide, nextSlide){
385	 
386			if($('#province').val() != '' ){
387				$('#province').val('').change();
388			}
389			reset_car_selected()
390
391			
392			var series_code = $('.series-item.slick-current').data('id');
393			var series_name = $('.series-item.slick-current').data('name');
394			var car_type = $('.series-item.slick-current').data('type');
395
396			if(is_eventClickChangeModel){
397				is_eventClickChangeModel = false;
398				pushDataLayer({
399					event: "EV-select_model",
400					select_model: series_name,
401					car_type: car_type,
402				});
403			}
404			
405			var selected_series = series_list.find((series) => series.code === series_code)
406			$('#model_code').val(selected_series.model_code)
407
408			let vehicleIds = getVehicleIds(selected_series.model_code, selected_series.grades)
409			$('#vehicle_id').val(`['${vehicleIds.join("']['")}']`)
410
411			$('.list__general .item').removeClass('active');
412			$('.list__general .item a[data-type="'+car_type+'"]').parent().addClass('active');
413
414			const select_car_type = $('.form-select-car_type').val()
415			if(select_car_type){
416				$('.form-select-car_type option[value="'+car_type+'"]').prop('selected', true)
417			}
418			
419			if (series_code) { 
420				$('#series_code').val(series_code);
421				$('#series_name').val(series_name);
422				$('#model_code').val(selected_series.model_code);
423				
424				$('.selected-series-name').text(selected_series.name)
425				$('.selected-series-picture').html(`<img src="${MAIN_URL}/media/${selected_series.picture}" alt="${selected_series.name}">`)
426
427				var active_model_name = $('.series-item.slick-current').data('name');
428				if(typeof line_liff_data != "undefined" && line_liff_data.grade_name  && line_liff_data.model_name == active_model_name){
429					$(grade_select).val(line_liff_data.grade_name).trigger('change');
430				}
431				
432				if(typeof line_liff_data != "undefined"){
433					line_liff_data.model_name = series_name
434				}
435			}
436		});
437
438	// $('.slider__car .slider').slick({
439    //     infinite: true,
440    //     slidesToShow: 3,
441    //     slidesToScroll: 1,
442    //     arrows: true,
443    //     dots: check_mobile() ? false : true,
444    //     centerMode: true,
445    //     variableWidth: true,
446    //     asNavFor: '.slider-bullet'
447    // });
448    
449    // $('.slider-bullet').slick({
450    //     infinite: true,
451    //     slidesToShow: 6,
452    //     slidesToScroll: 1,
453    //     asNavFor: '.slider__car .slider',
454    //     arrows: true,
455    //     dots: false,
456    //     centerMode: true,
457    //     focusOnSelect: true,
458    //     responsive: [
459    //     {
460    //     breakpoint: 768,
461    //         settings: {
462    //             slidesToShow: 5
463    //         }
464    //     }
465    //     ]
466    // });
467
468	const series_code = $('.series-item.slick-current').data('id');
469	var series_name = $('.series-item.slick-current').data('name');
470
471	var selected_series = series_list.find((series) => series.code === series_code)
472
473	// $('#series').val(series_code);
474	// $('#series_name').val(series_name);	
475
476	let vehicleIds = getVehicleIds(selected_series.model_code, selected_series.grades)
477	$('#vehicle_id').val(`['${vehicleIds.join("']['")}']`)
478 
479	$('#series_code').val(series_code);
480	$('#series_name').val(series_name);
481	$('#model_code').val(selected_series.model_code);	
482
483	$('.selected-series-name').text(selected_series.name)
484	$('.selected-series-picture').html(`<img src="${MAIN_URL}/media/${selected_series.picture}" alt="${selected_series.name}">`)
485
486	$('.slider__car .slider').on('afterChange', function(event, slick, currentSlide, nextSlide){
487		var series_code = $('.series-item.slick-current').data('id');
488		var series_name = $('.series-item.slick-current').data('name');
489		
490		if (series_code) { 
491			$('#series_code').val(series_code);
492			$('#series_name').val(series_name);			
493		}
494	});
495
496	$('#province').on('change',onProvinceChange);
497	
498	$('#dealer').on('change', function(){
499		var dealer_code = $(this).val();
500		var province = $('#province').val();
501		var post_code = $('#post_code').val();
502
503		$('#gmap_dealer_code').val('');
504		$('#branch').val('');
505		gmap_iframe.dealer_change_marker(dealer_code, province, post_code);
506		pushDataLayer({
507			"event": "EV-select_dealer",
508			"postal_code": post_code|| null,
509			"province": province,
510			"dealer_code": dealer_code,
511			"dealer_name": $("#dealer option:selected").text()
512		});
513		
514		set_dealer_branch_options(dealer_code);
515		
516		// $('#url_dlr').val(dealer_code);
517		checkAliveSpace();
518    });
519
520	$('#branch').on('change', function(){
521		console.log("branch_code change::",$(this).val())
522		var branch_code = $(this).val();
523		var dealer_code = $('#dealer').val();
524		check_step2_complete();
525		if(branch_code){
526			gmap_iframe.branch_change_marker(branch_code, dealer_code);
527			pushDataLayer({
528				"event": "EV-select_branch",
529				"dealer_code": dealer_code,
530				"dealer_name": $("#dealer option:selected").text(),
531				"branch_code": branch_code,
532				"branch_name": $("#branch option:selected").text()
533			});
534		}
535		else{
536			$('#dealer').trigger('change');
537		}
538
539		// $('#url_dlr').val(dealer_code);
540		// if(dealer_code){
541		// 	$('#url_bra').val(branch_code);
542		// }
543		// else{
544		// 	$('#url_bra').val('');
545		// }
546	});	
547
548	$('#btn_submit').click(function() {
549		const btn = $(this);
550		const url_dlr = $('#url_dlr').val();
551		const url_bra = $('#url_bra').val();
552
553		btn.attr('disabled', 'disabled');
554		
555		$('#branch').removeAttr('disabled');
556		$('#dealer').removeAttr('disabled');
557
558		$('#dealer').val(selected_dealer);
559		$('#branch').val(selected_branch);
560				
561		$("#dealer_name").val($("#dealer option:selected").text());
562		$("#branch_name").val($("#branch option:selected").text());
563		
564		$(".loading").show();
565
566        var key = $("#g-recaptcha-k").val();
567        grecaptcha.execute(key, {action: 'testdrive_request'}).then(function(token) {
568            $("#g-recaptcha-response").val(token);	
569			is_alive_space = $("#dealer").val() == "00000";
570			if(is_alive_space){
571				
572				// btn.removeAttr('disabled');
573				// $(".loading").hide();
574				//Todo validate
575
576				window.dataLayer = window.dataLayer || [];
577				window.dataLayer.push({
578					event: 'formSubmissionSuccess',
579					formId: 'main_form'
580				});
581
582				// if(typeof tracking_store_data != "undefined"){
583				// 	payload += ("&uid="+tracking_store_data.uid+"&tid="+tracking_store_data.tid);
584				// }
585				
586				// if(typeof line_liff_data != "undefined"){
587				// 	payload += ("&line_id="+line_liff_data.line_id);
588				// }
589				// var days = $('.calendar-picker').val().split("/");
590				// day_selected = days[2]+"-" +days[1]+"-" +days[0];
591				$("#reserve_date").val($('.calendar-picker').val());
592				$("#time_slot_id").val($("#timeslot").val());
593				$("#grade_id").val($("#alivespace-grade").val());
594
595				var selected_alivespace_grade = getSelectedSerie();
596				var selected_alivespace_serie_id = selected_alivespace_grade['id'];
597				$("#series_id").val(selected_alivespace_serie_id);
598
599				$("#main_form").attr('action', "/alive/testdrive-reservation/fill-in-information");
600				$("#main_form").removeAttr('target');
601				$("#main_form").attr('target', "alive_iframe");
602				$("#main_form").trigger('submit');
603				submit_alive_timeout = setTimeout(function(){
604					alert_error("Timeout, please try again");
605					
606					$('.loading').hide();
607					$("#btn_submit").removeClass("disable");
608					$("#btn_submit").removeAttr("disabled");
609				},9000);
610			}else{
611				var validator_url = SITE_URL+"/index.php?app=testdrive_v2&fnc=validator"+(WEB_LANG == 'en' ? '&lang=en' : '')+"&r=" +  Math.floor(Math.random()*10000) ;
612				var action_url = SITE_URL+"/index.php?app=testdrive_v2&fnc=save"+(WEB_LANG == 'en' ? '&lang=en' : '')+"&r="+Math.floor(Math.random()*10000) ;	
613				
614				$.post(
615					validator_url,
616					$('#main_form').serialize(),
617					function(json) {
618						btn.removeAttr('disabled');
619						
620						if (json.result == 'Access Denied') {
621							alert_error("Access Denied or Session Timeout");
622							$(".loading").hide();
623							return false;
624						}
625
626						if (json.result == 'INVALID') {
627							if(url_dlr != "" && url_bra == ""){
628								$('#dealer').attr('disabled', 'disabled');
629							}
630
631							$('#popup__error .error').text('');
632
633							
634							if(json.message.captcha != ''){
635								alert_error(json.message.captcha);
636							
637							}
638							else if(json.message.firstname != ''){
639								alert_error(json.message.firstname);
640							
641							}
642							else if(json.message.lastname != ''){
643								alert_error(json.message.lastname);
644							
645							}
646							else if(json.message.phone != ''){
647								alert_error(json.message.phone);
648							
649							}
650							else if(json.message.email != '' ){
651								alert_error(json.message.email);
652							
653							}
654							else if(json.message.plan_to_purchase != '' ){
655								alert_error(json.message.plan_to_purchase);
656							}
657							else if(json.message.check_condition != ''){
658								alert_error(json.message.check_condition);
659							}else{
660								var errMessage = "";
661								var isBackClick = false;
662								$.each(json.message,function(i,e){
663									
664									if( i == "branch" || i == 'dealer'){
665										// goto step2
666										isBackClick = true;
667									}
668									if(e != ""){
669										errMessage = " " + e + " " + i;
670										
671									}
672								});
673								if(isBackClick){
674									$(".box__step-3 .box__sticky .back").click();
675								}
676								
677								if( errMessage != "")
678									alert_error(errMessage);
679								else
680									alert_error( JSON.stringify( json.message));
681
682							}
683							
684							$(".loading").hide();
685							
686							$('#tag-formstatus').val('quotaion_fail');
687
688							window.dataLayer = window.dataLayer || [];
689							window.dataLayer.push({
690								event: 'formSubmissionFailure',
691								formId: 'main_form'
692							});
693
694						} 
695						else{
696							$('#main_form').attr('action', action_url);
697							$('#tag-formstatus').val('testdrive_success');
698
699							window.dataLayer = window.dataLayer || [];
700							window.dataLayer.push({
701								event: 'formSubmissionSuccess',
702								formId: 'main_form'
703							});
704							
705							my_submit();
706						}
707					},
708					'json'
709				);
710					
711			}
712		})
713	});
714		
715	$(".dealer_branch").hide();
716	
717	$("#post_code").on('click', function(){
718		$("#post_code").prop('readonly',false);
719	});
720	$("#post_code").on('focus', function(){
721		document.xpost_code = $("#post_code").val();
722	});
723
724	$("#post_code").on('blur', function(){
725		// $("#post_code").prop('readonly',true);
726		var post_code_val = $("#post_code").val();
727		if(post_code_val == "" && document.xpost_code != ""){  	
728
729			updateDealer($("#post_code")[0]);
730			
731			$('#box__dealers_select').hide();				
732			$('#province').val('').trigger('change');
733			gmap_iframe.infoWindow.close();		
734		}
735
736		if($(this).val().length == 5){
737			$('#box__dealers_select').show();				
738
739			var items = [];
740			$.each(items_dealer, function(key,val) {
741				if(post_code_val == val.post_code){
742					items.push(val);
743				}
744			});
745			
746			var default_dealer_code = $('#dealer').val();
747			set_dealer_branch_options(default_dealer_code);
748			
749			if(items.length == 0){ 
750				alert_error(WEB_LANG == 'en' ? 'Dealer is not found' : 'ไม่พบผู้แทนจำหน่าย');
751				$('#box__dealers_select').hide();				
752				$('#province').val('').trigger('change');
753				gmap_iframe.infoWindow.close();				
754			}
755		}
756	});
757
758 
759
760	//Step 1 action
761	$('.box__step-1 .box__sticky .btn-link').on('click', function(){
762		checkAliveSpace();
763		var current_series_code = $('.series-item.slick-current').data('id');
764
765		if(!current_series_code){
766			alert_error(WEB_LANG == 'en' ? 'Please select Car' : 'กรุณาเลือกรุ่นรถที่ท่านสนใจ');
767		}
768		
769		if(current_series_code){
770			$('.box__step-1').hide();
771			$('.box__step-2').show();
772
773		
774
775			setTimeout(function(){$("#firstname").focus();},1000);
776			// var uri = window.location.href.split('?')[1];
777			// window.history.pushState("", "", (WEB_LANG == 'en' ? '/en' : '')+"/request_testdrive/step2.html"+(uri ? "?"+uri : ""));
778			if( typeof dataLayer != "undefined"){
779
780				dataLayer.push({'event':'EV-page-view','page_path': (WEB_LANG == 'en' ? '/en' : '')+"/request_testdrive/step2("+source_page_mode+")"})
781				
782				pushDataLayer({'event':'EV-shoppingtools_testdrive_step2'});
783			}
784			check_step2_complete();
785		}
786	});
787
788	//Step 2 action
789	$('.box__step-2 .box__sticky .back').on('click', function(){			
790		gmap_iframe.isChangeAble = true;
791		$("#post_code").prop('readonly',true);
792		$('.box__step-1').show();
793		$('.box__step-2').hide();
794		goto_top();		
795		$('.slider__car .slider').slick('setPosition');
796
797		pushDataLayer({
798			'event': 'EV-back_btn_step2',
799		});
800		pushDataLayer({'event': 'EV-shoppingtools_testdrive_step1',
801			"select_model": $('.series-item.slick-current').data('name'),
802			"car_type": $('.series-item.slick-current').data('type'),});
803	});
804
805	$('.box__step-2 .box__sticky .next').on('click', function(){
806
807		gmap_iframe.isChangeAble = false;
808		// $("#post_code").prop('readonly',true);
809
810		selected_dealer = $('#dealer').val();
811		selected_branch = $('#branch').val();
812		var post_code = $('#post_code').val();
813		
814		if(selected_dealer == "" || selected_branch == ""){
815
816			if(post_code && post_code.length < 5){
817				alert_error(WEB_LANG == 'en' ? 'Please fill Postal Code 5 digits' : 'กรุณาระบุรหัสไปรษณีย์ให้ถูกต้อง');
818			} else{				
819				if(!selected_dealer){
820					alert_error(WEB_LANG == 'en' ? 'Please select Dealer' : 'กรุณาเลือกผู้แทนจำหน่าย');
821				}
822				else if(!selected_branch){
823					alert_error(WEB_LANG == 'en' ? 'Please select Branch' : 'กรุณาเลือกสาขา');
824				}
825			}
826			gmap_iframe.isChangeAble = true;
827		}
828		if(isStockAvailable || isAliveActive){
829			var days = $('.calendar-picker').val().split("/");
830			var grade_selected = $("#alivespace-grade").val();
831			if(isAliveActive &&  grade_selected == ''){
832				return alert_error( $Lang.SHOPPING_TOOLS_REQ_GRADE );
833			}
834			if(days.length != 3){
835				return alert_error( $Lang.SHOPPING_TOOLS_REQ_DATE );
836			}else{
837				day_selected = days[2]+"-" +days[1]+"-" +days[0];
838				
839				if( moment(day_selected) > moment().add(2, 'days') &&
840					moment(day_selected) < moment().add(2, 'days')
841				){
842					return alert_error( $Lang.SHOPPING_TOOLS_REQ_WRONGDATE);
843				}
844			}
845			if($("#timeslot").val() == ''){
846				return alert_error( $Lang.SHOPPING_TOOLS_REQ_TIME );
847			}
848		}
849		if(selected_dealer == '00000' && $("#alivespace-grade").val() == ''){
850			return alert_error( $Lang.SHOPPING_TOOLS_REQ_GRADE);
851		}
852
853			
854		if(selected_dealer && selected_branch){
855			$('.box__step-2').hide();
856			$('.box__step-3').show();
857			if(isAliveActive){
858				
859				setTimeout(function(){
860					if(!isAlive_ruleShown) showRules();
861				},300);
862				step3InitLayout('alive');
863			}else{
864				
865				step3InitLayout('default');
866			}
867	
868			$('#dealer_name').val($('#dealer option:selected').text());
869			$('#branch_name').val($('#branch option:selected').text());
870
871			$('.selected-dealer-name').text($('#dealer_name').val())
872			$('.selected-branch-name').text($('#branch_name').val())
873
874			// var uri = window.location.href.split('?')[1];
875			// window.history.pushState("", "", (WEB_LANG == 'en' ? '/en' : '')+"/request_testdrive/step3.html"+(uri ? "?"+uri : ""));
876			if( typeof dataLayer != "undefined"){
877
878				dataLayer.push({'event':'EV-page-view','page_path': (WEB_LANG == 'en' ? '/en' : '')+"/request_testdrive/step3("+source_page_mode+")"});
879				pushDataLayer({'event':'EV-shoppingtools_testdrive_step3'});
880			}
881				goto_top();
882		}
883	});
884	
885	//Step 3 action
886	$('.box__step-3 .box__sticky .back').on('click', function(){
887		gmap_iframe.isChangeAble = true;
888		$("#post_code").prop('readonly',true);			
889		$('.box__step-2').show();
890		$('.box__step-3').hide();
891		// var uri = window.location.href.split('?')[1];
892		// window.history.pushState("", "", (WEB_LANG == 'en' ? '/en' : '')+"/request_testdrive/step2.html"+(uri ? "?"+uri : ""));
893		if( typeof dataLayer != "undefined"){
894
895			dataLayer.push({'event':'EV-page-view','page_path': (WEB_LANG == 'en' ? '/en' : '')+"/request_testdrive/step2("+source_page_mode+")"})
896			pushDataLayer({ 'event': 'EV-back_btn_step3',
897			'name':  CryptoJS_SHA256($("#firstname").val()),
898			'lastname': CryptoJS_SHA256($("#lastname").val()),
899			'mobile_no': CryptoJS_SHA256($("#phone").val()),
900			'email': CryptoJS_SHA256($("#email").val()),
901			'purchase_plan': $("input[name=plan_to_purchase]:checked").val() });
902			pushDataLayer({'event':'EV-shoppingtools_testdrive_step2'});
903		}
904		goto_top();
905		
906	});
907
908
909	
910	$('.btn-find-nearly .link').on('click', function(){
911		navigator.geolocation.watchPosition(function(position) {
912			$('.find-nearly .text').hide();
913			// $('#url_dlrprv').val('');
914			// $('#url_dlr').val('');
915			// $('#url_bra').val('');
916		},
917		function(error) {
918		if (error.code == error.PERMISSION_DENIED)
919			$('.btn-find-nearly .text').show();
920		});
921	});
922
923
924
925	$('.btn-find-nearly').on('click', function(){
926		gmap_iframe.set_nearly_me(true);
927	});
928
929	$.fn.inputFilter = function(inputFilter) {
930		return this.on("input keydown keyup mousedown mouseup select contextmenu drop", function() {
931			if (inputFilter(this.value)) {
932			this.oldValue = this.value;
933			this.oldSelectionStart = this.selectionStart;
934			this.oldSelectionEnd = this.selectionEnd;
935			} else if (this.hasOwnProperty("oldValue")) {
936			this.value = this.oldValue;
937			this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
938			}
939		});
940	};
941
942	$("#post_code").inputFilter(function(value) {
943		return /^\d*$/.test(value);
944	});
945	
946
947	 
948
949	var model = $("#referer_model").val();
950	if(model){$('.slider-main')
951		var $slide = $('.slider-main .item[data-id="'+model+'"]');
952		var slide_number = $slide.data("slide-number");
953		$('.slider-main').slick("slickGoTo", slide_number);
954	}else{
955		var default_car_type = 'personal_car';
956		$(".list__general a[data-type='"+default_car_type+"']").eq(0).trigger('click');
957		$('.form-select-car_type').trigger('change');
958	}
959});
960
961
962
963
964
965var source_page_mode = 'html';
966const init_url_hash = () => {
967	if(typeof line_liff_data != "undefined"){
968		lineInit();
969		source_page_mode = 'line';
970		if( typeof dataLayer != "undefined")
971		dataLayer.push({'event':'EV-page-view','page_path': (WEB_LANG == 'en' ? '/en' : '')+"/request_testdrive/step1("+source_page_mode+")"});
972	}else{
973		if( typeof dataLayer != "undefined")
974		dataLayer.push({'event':'EV-page-view','page_path': (WEB_LANG == 'en' ? '/en' : '')+"/request_testdrive/step1("+source_page_mode+")"});
975	}
976	pushDataLayer({'event':'EV-shoppingtools_testdrive_step1',
977			"select_model": $('.series-item.slick-current').data('name'),
978			"car_type": $('.series-item.slick-current').data('type'),});
979}
980
981const remove_hash_from_url = () => {
982    var uri = window.location.toString();
983    if (uri.indexOf("#") > 0) {
984        var clean_uri = uri.substring(0, uri.indexOf("#"));
985        window.history.replaceState({}, document.title, clean_uri);
986    }
987}
988
989
990
991const check_post_code = (evt, val) => {
992	evt = (evt) ? evt : window.event;
993	var charCode = (evt.which) ? evt.which : evt.keyCode;
994	
995	// console.log(charCode+" : "+(charCode - 48));
996
997	if((charCode > 31 && (charCode < 48 || charCode > 57)) || charCode == 13){
998		return false;
999	}
1000	else{
1001		if(val.length == 5){
1002			$('#post_code').trigger('blur');
1003
1004		}
1005		return true;
1006	}
1007}
1008
1009const init_branch_select = () => {
1010	const options = '<option data-hidden="hidden"  value="">'+$Lang.SHOPPING_TOOLS_BRANCH+'</option>'
1011	$('#branch').html(options);
1012}
1013
1014const check_mobile = () => { 
1015	if( navigator.userAgent.match(/Android/i)
1016	|| navigator.userAgent.match(/webOS/i)
1017	|| navigator.userAgent.match(/iPhone/i)
1018	|| navigator.userAgent.match(/iPad/i)
1019	|| navigator.userAgent.match(/iPod/i)
1020	|| navigator.userAgent.match(/BlackBerry/i)
1021	|| navigator.userAgent.match(/Windows Phone/i)
1022	){
1023	   return true;
1024	 }
1025	else {
1026	   return false;
1027	 }
1028}
1029
1030
1031const goto_top = () => {	
1032	
1033		$("html, body").animate({scrollTop: 0}, 500);
1034	
1035}  
1036
1037function close_form(){		
1038	if (window.frameElement) {
1039		parent.jQuery.fancybox.close();
1040	}
1041	else {
1042		window.close();
1043	}
1044}
1045//** for callback success form alive site
1046var submit_alive_timeout = null;
1047function alivespace_submit_success(data) {
1048	$('.loading').hide();
1049	$("#btn_submit").removeClass("disable");
1050	$("#btn_submit").removeAttr("disabled");
1051	clearTimeout(submit_alive_timeout);
1052	if (data.result == "success") {
1053		$("#row_form").hide();
1054		$("#subhead_main").hide();
1055		$("#subhead_thank").show();
1056		$(".loading").hide();
1057
1058		saveLineTrackingSuccess();
1059		pushDataLayer({'event':'EV-shoppingtools_testdrive_submit'});
1060		setTimeout(function(){
1061			var uri = window.location.href.split('?')[1];				
1062		
1063			if(isLiff){
1064				action_url = BASE_URL+(WEB_LANG == 'en' ? '/en' : '')+'/request_testdrive/result_complete/webview_mode/';
1065			}else{
1066				action_url = BASE_URL+(WEB_LANG == 'en' ? '/en' : '')+'/request_testdrive/result_complete'+(uri ? "?"+uri : "");
1067			}
1068			$("#form_result_complete").attr('action',action_url);
1069			$("#tid").val(tracking_store_data.tid);
1070			$("#alive_reserve_code").val(data.data.reserve_code);
1071			$("#alive_series_name").val($('#series_name').val());
1072			$("#alive_reserve_date").val(data.data.reserve_date);
1073			$("#alive_reserve_time").val(data.data.reserve_time);
1074
1075			ga4data.event = 'EV-shoppingtools_testdrive_complete';
1076			ga4data.total_time_spent = (new Date()).getTime() - PAGE_timeStart;
1077			delete ga4data.step;
1078			delete ga4data.step_time_spent;
1079			delete ga4data.gtm;
1080			var ga4str = JSON.stringify(ga4data);
1081			var postData = encodeURIComponent(ga4str);
1082			var gch = CryptoJS_SHA256(ga4str);
1083			$("#ga4data").val(postData);
1084			$("#gch").val(gch);
1085
1086			$("#form_result_complete").trigger('submit');
1087
1088		},100);
1089		
1090	} else{
1091		if(data.message){
1092			if(data.statusCode == '40006'){
1093				alert_error(data.message);
1094				$("#alivespace-grade").change();
1095			}else{
1096				var error_message = data.message.split('/<br />');
1097				var display_message = error_message[0];
1098				if(error_message.length > 1){
1099					if( WEB_LANG != 'th' ){
1100						display_message = error_message[1];
1101					}
1102				}
1103
1104				alert_error($Lang.SHOPPING_TOOLS_SYSTEMERROR+ " , "+display_message );
1105			}
1106		}else{
1107			alert_error($Lang.SHOPPING_TOOLS_SYSTEMERROR);
1108		}
1109	}
1110	$(".loading").hide();
1111}
1112function my_submit() { 
1113
1114	var payload = $('#main_form').serialize();
1115	if(typeof tracking_store_data != "undefined"){
1116		payload += ("&uid="+tracking_store_data.uid+"&tid="+tracking_store_data.tid);
1117	}
1118	
1119	if(typeof line_liff_data != "undefined"){
1120		payload += ("&line_id="+line_liff_data.line_id);
1121	}
1122	if(isStockAvailable){
1123
1124		var days = $('.calendar-picker').val().split("/");
1125		day_selected = days[2]+"-" +days[1]+"-" +days[0];
1126		payload += ("&reserve_date="+day_selected);
1127		payload += ("&reserve_time="+$("#timeslot").val());
1128	}
1129
1130	payload += ("&grade_code="+$("#alivespace-grade").val());
1131
1132
1133	
1134	
1135	$.post(
1136		SITE_URL+"/index.php?app=testdrive_v2&fnc=save"+(WEB_LANG == 'en' ? '&lang=en' : ''),
1137		payload,
1138		function(data) {
1139			if (data.result == "success") {
1140				$("#row_form").hide();
1141				$("#subhead_main").hide();
1142				$("#subhead_thank").show();
1143				$(".loading").hide();
1144
1145				saveLineTrackingSuccess();
1146
1147				pushDataLayer({ 'event':'EV-shoppingtools_testdrive_submit' });
1148				setTimeout(function(){
1149					var uri = window.location.href.split('?')[1];				
1150				
1151					if(isLiff){
1152						action_url = BASE_URL+(WEB_LANG == 'en' ? '/en' : '')+'/request_testdrive/result_complete/webview_mode/';
1153					}else{
1154						action_url = BASE_URL+(WEB_LANG == 'en' ? '/en' : '')+'/request_testdrive/result_complete'+(uri ? "?"+uri : "");
1155					}
1156					$("#form_result_complete").attr('action',action_url);
1157					$("#tid").val(tracking_store_data.tid);
1158
1159					ga4data.event = 'EV-shoppingtools_testdrive_complete';
1160					ga4data.total_time_spent = (new Date()).getTime() - PAGE_timeStart;
1161					delete ga4data.step;
1162					delete ga4data.step_time_spent;
1163					delete ga4data.gtm;
1164					var ga4str = JSON.stringify(ga4data);
1165					var postData = encodeURIComponent(ga4str);
1166					var gch = CryptoJS_SHA256(ga4str);
1167					$("#ga4data").val(postData);
1168					$("#gch").val(gch);
1169					$("#form_result_complete").submit();
1170				},300);
1171				
1172			} 
1173			else{
1174				if(data.message){
1175					if(data.statusCode == '40006'){
1176						alert_error(data.message);
1177						$("#alivespace-grade").change();
1178					}else{
1179						alert_error($Lang.SHOPPING_TOOLS_SYSTEMERROR+ " , "+data.message+" ("+data.statusCode+")");
1180					}
1181				}else{
1182					alert_error($Lang.SHOPPING_TOOLS_SYSTEMERROR);
1183				}
1184			}
1185			$(".loading").hide();
1186		}, 'json'
1187	);
1188}
1189
1190window.updateDealer = (trigerObj) => {
1191	var items = [];
1192	var post_code = $('#post_code');
1193
1194	if($("#post_code").val().length == 0 && $("#province").val().length == 0){
1195		return false;
1196	}
1197
1198	$(".loading").show();
1199
1200	$("#branch").html('<option hidden value="">'+$Lang.SHOPPING_TOOLS_BRANCH+'</option>');
1201
1202	if($(trigerObj).attr("id") == "post_code"){
1203		if($('#post_code').val().length == 5){
1204			$("#province").val("");
1205			if( latest_postal_code != $('#post_code').val() ){	
1206				pushDataLayer({
1207					"event": "EV-search_postalcode", 
1208					"postal_code": post_code.val(),
1209				})
1210			}
1211
1212			
1213			
1214			$.each(items_dealer, function(key,val) {
1215				if(post_code.val() == val.post_code){
1216					items.push(val);
1217				}
1218			});
1219			
1220			if(items.length > 0){
1221				$("#province").val(items[0].province_name);
1222				gmap_iframe.province_change_marker(items[0].province_name, '', post_code.val());
1223
1224				pushDataLayer({
1225					"event": "EV-select_province",
1226					"province": $('#province').val(),
1227				})
1228
1229				set_dealer_options(items[0].province_name);
1230
1231				if(items.length == 1){
1232					$('#dealer').val(items[0].dealer_code.substr(0, 5)).trigger('change');
1233				}
1234			}
1235			
1236			$(".loading").hide();
1237			if( latest_postal_code != $('#post_code').val() ){	
1238				latest_postal_code = $('#post_code').val();
1239			}
1240
1241		}
1242		else{
1243			$(".loading").hide();					
1244			$("#province").val("");
1245			$("#dealer").html('<option data-hidden="hidden"  value="">'+$Lang.SHOPPING_TOOLS_DEALER+'</option>');
1246			return 0;
1247		}
1248	}
1249	else if($(trigerObj).attr("id") == "province"){
1250	 
1251		if($('#province').val().length > 0){
1252			$("#post_code").val("");
1253			delete ga4data.postal_code;
1254			gmap_iframe.province_change_marker($('#province').val(), 'province', post_code.val());
1255			pushDataLayer({
1256				"event": "EV-select_province",
1257				"province": $('#province').val(),
1258			});
1259			set_dealer_options($('#province').val());
1260		}
1261	}
1262 
1263}
1264
1265 
1266$.fn.blockInput = function (options){
1267	// find inserted or removed characters
1268	function findDelta(value, prevValue){
1269		var delta = '';
1270
1271		for (var i = 0; i < value.length; i++){
1272			var str = value.substr(0, i) + 
1273				value.substr(i + value.length - prevValue.length);
1274
1275			if (str === prevValue) delta = 
1276				value.substr(i, value.length - prevValue.length);
1277		}
1278
1279		return delta;
1280	}
1281
1282	function isValidChar(c){
1283		return new RegExp(options.regex).test(c);
1284	}
1285
1286	function isValidString(str){
1287		for (var i = 0; i < str.length; i++)
1288		if (!isValidChar(str.substr(i, 1))) return false;
1289
1290		return true;
1291	}
1292
1293	this.filter('input,textarea').on('input', function (){
1294		var val = this.value,
1295			lastVal = $(this).data('lastVal');
1296
1297		// get inserted chars
1298		var inserted = findDelta(val, lastVal);
1299		// get removed chars
1300		var removed = findDelta(lastVal, val);
1301		// determine if user pasted content
1302		var pasted = inserted.length > 1 || (!inserted && !removed);
1303
1304		if (pasted){
1305			if (!isValidString(val)) this.value = lastVal;
1306		} 
1307		else if (!removed){
1308			if (!isValidChar(inserted)) this.value = lastVal;
1309		}
1310
1311		// store current value as last value
1312		$(this).data('lastVal', this.value);
1313	}).on('focus', function (){
1314		$(this).data('lastVal', this.value);
1315	});
1316
1317	return this;
1318};
1319
1320const reset_car_selected = () => {
1321
1322	$('#series_code').val("")
1323	$('#series_name').val("")
1324	$('#model_code').val("")
1325
1326}

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.