PageSourceSearch

https://purefilter.com/assets/js/ajax.js?v=9853

js purefilter.com collected 2026-10-08 10:09:03 UTC 119,441 bytes, 4,171 lines download raw bytes

1function login() {
2	var token = $('input[name="token"]').val();
3	$.ajax(base_url + "api/load_login", {
4		method: "GET",
5		data: { token: token },
6		beforeSend: function () {
7			//$('.loader').show();
8		},
9	}).done(function (data) {
10		if (data != "") {
11			$("#login-modal").html(data);
12			$("#login-modal").modal("show");
13		} else {
14			//$('.btn-loadmore').hide();
15		}
16	});
17}
18
19function verifySerialExists($this) {
20	var lang = $("html").attr("lang");
21	var form_el = $this.closest("form");
22	var frm = new FormData(form_el[0]);
23
24	$.ajax({
25		data: frm,
26		type: "POST",
27		url:
28			window.location.origin +
29			"/ProductRegisteration/verifySerialByPcodeIsserailSerial",
30		cache: false,
31		contentType: false,
32		processData: false,
33		dataType: "json",
34		success: function (arresult) {
35			if (arresult.rs) {
36				form_el.submit();
37			} else {
38				popup_message(
39					(type = "error"),
40					(message = ""),
41					(title = arresult.error_text),
42					(timer = 3000),
43					(timer_message = "ปิดหลังจาก 3 วินาที")
44				);
45			}
46		},
47	});
48}
49
50function filterProductListTopOnly($this) {
51	var token = $('input[name="token"]').val();
52	if ($this.hasClass("top-filter")) {
53		var product_value = parseInt($this.attr("data-prod-con"));
54		var category_code = parseInt($this.attr("data-product-model"));
55		$.ajax(base_url + "api/load_product_list_top_only", {
56			method: "GET",
57			data: {
58				token: token,
59				product_val: product_value,
60				category_code: category_code,
61			},
62			beforeSend: function () {
63				console.log("sent");
64				//$('.loader').show();
65			},
66		}).done(function (data) {
67			if (data != "") {
68				var data_elem = $this
69					.closest(".wrapper")
70					.find(".group-product")
71					.find(".group-product-list")
72					.find(".row");
73				data_elem.empty();
74				data_elem.html(data);
75			} else {
76				//$('.btn-loadmore').hide();
77			}
78		});
79	}
80}
81
82function filterProductFilterList($this) {
83	var token = $('input[name="token"]').val();
84	if ($this.hasClass("pure-filler-item")) {
85		var water_value = 0;
86		var filter_value = 0;
87
88		setTimeout(() => {
89			var group_filter_elem = $this
90				.closest(".group-product")
91				.find(".group-filter");
92
93			var group_product_list_elem = $this
94				.closest(".wrapper")
95				.find(".group-product-list");
96
97			var water_select = group_filter_elem.find(".water");
98			var filter_select = group_filter_elem.find(".filter");
99
100			var water_value_elem = water_select.find("li.active a");
101			var filter_value_elem = filter_select.find("li.active a");
102
103			var price_filter_select = group_product_list_elem.find(".pure-filter");
104			var price_filter_elem = price_filter_select.find("li.active a");
105
106			if (price_filter_elem.length > 0) {
107				var price_filter_value = parseInt(price_filter_elem.attr("value"));
108			} else {
109				var price_filter_value = 0;
110			}
111
112			if (water_value_elem.length > 0) {
113				water_value = parseInt(water_value_elem.attr("value"));
114			} else {
115				water_value = 0;
116			}
117
118			if (filter_value_elem.length > 0) {
119				filter_value = parseInt(filter_value_elem.attr("value"));
120			} else {
121				filter_value = 0;
122			}
123
124			$.ajax(base_url + "api/load_product_filter_list", {
125				method: "GET",
126				data: {
127					token: token,
128					water_val: water_value,
129					filter_val: filter_value,
130					price_filter_value: price_filter_value,
131				},
132				beforeSend: function () {
133					console.log("sent");
134					//$('.loader').show();
135				},
136			}).done(function (data) {
137				if (data != "") {
138					var data_elem = $this
139						.closest(".group-product")
140						.find(".group-product-list")
141						.find(".row");
142					data_elem.empty();
143					data_elem.html(data);
144				} else {
145					//$('.btn-loadmore').hide();
146				}
147			});
148		}, 250);
149	} else if ($this.hasClass("price_filter")) {
150		var water_value = 0;
151		var filter_value = 0;
152
153		setTimeout(() => {
154			var group_filter_elem = $this.closest(".wrapper").find(".group-filter");
155
156			var group_product_list_elem = $this
157				.closest(".wrapper")
158				.find(".group-product-list");
159
160			var water_select = group_filter_elem.find(".water");
161			var filter_select = group_filter_elem.find(".filter");
162
163			var water_value_elem = water_select.find("li.active a");
164			var filter_value_elem = filter_select.find("li.active a");
165
166			var price_filter_select = group_product_list_elem.find(".pure-filter");
167			var price_filter_elem = price_filter_select.find("li.active a");
168
169			if (price_filter_elem.length > 0) {
170				var price_filter_value = parseInt(price_filter_elem.attr("value"));
171			} else {
172				var price_filter_value = 0;
173			}
174
175			if (water_value_elem.length > 0) {
176				water_value = parseInt(water_value_elem.attr("value"));
177			} else {
178				water_value = 0;
179			}
180
181			if (filter_value_elem.length > 0) {
182				filter_value = parseInt(filter_value_elem.attr("value"));
183			} else {
184				filter_value = 0;
185			}
186
187			$.ajax(base_url + "api/load_product_filter_list", {
188				method: "GET",
189				data: {
190					token: token,
191					water_val: water_value,
192					filter_val: filter_value,
193					price_filter_value: price_filter_value,
194				},
195				beforeSend: function () {
196					console.log("sent");
197					//$('.loader').show();
198				},
199			}).done(function (data) {
200				if (data != "") {
201					var data_elem = $this
202						.closest(".group-product")
203						.find(".group-product-list")
204						.find(".row");
205					data_elem.empty();
206					data_elem.html(data);
207				} else {
208					//$('.btn-loadmore').hide();
209				}
210			});
211		}, 250);
212	}
213}
214
215function filterProductList($this) {
216	var token = $('input[name="token"]').val();
217	if ($this.hasClass("top-filter")) {
218		var product_value = parseInt($this.attr("data-prod-con"));
219		var group_prod_elem = $this.closest(".wrapper").find(".group-product");
220		var group_filter_elem = group_prod_elem.find(".group-filter");
221		var group_product_list_elem = group_prod_elem.find(".group-product-list");
222
223		var water_select = group_filter_elem.find(".water");
224		var install_select = group_filter_elem.find(".install");
225		var usage_select = group_filter_elem.find(".usage");
226		var filter_select = group_filter_elem.find(".filter");
227
228		var water_value_elem = water_select.find("li.active a");
229		var install_value_elem = install_select.find("li.active a");
230		var usage_value_elem = usage_select.find("li.active a");
231		var filter_value_elem = filter_select.find("li.active a");
232
233		var price_filter_select = group_product_list_elem.find(".pure-filter");
234		var price_filter_elem = price_filter_select.find("li.active a");
235
236		if (price_filter_elem.length > 0) {
237			var price_filter_value = parseInt(price_filter_elem.attr("value"));
238		} else {
239			var price_filter_value = 0;
240		}
241
242		if (water_value_elem.length > 0) {
243			var water_value = parseInt(water_value_elem.attr("value"));
244		} else {
245			var water_value = 0;
246		}
247
248		if (install_value_elem.length > 0) {
249			var install_value = parseInt(install_value_elem.attr("value"));
250		} else {
251			var install_value = 0;
252		}
253
254		if (usage_value_elem.length > 0) {
255			var usage_value = parseInt(usage_value_elem.attr("value"));
256		} else {
257			var usage_value = 0;
258		}
259
260		if (filter_value_elem.length > 0) {
261			var filter_value = parseInt(filter_value_elem.attr("value"));
262		} else {
263			var filter_value = 0;
264		}
265
266		$.ajax(base_url + "api/load_product_list", {
267			method: "GET",
268			data: {
269				token: token,
270				water_val: water_value,
271				install_val: install_value,
272				usage_val: usage_value,
273				filter_val: filter_value,
274				product_val: product_value,
275				price_filter_value: price_filter_value,
276			},
277			beforeSend: function () {
278				console.log("sent");
279				//$('.loader').show();
280			},
281		}).done(function (data) {
282			if (data != "") {
283				var data_elem = $this
284					.closest(".wrapper")
285					.find(".group-product")
286					.find(".group-product-list")
287					.find(".row");
288				data_elem.empty();
289				data_elem.html(data);
290			} else {
291				//$('.btn-loadmore').hide();
292			}
293		});
294	} else if ($this.hasClass("pure-filler-item")) {
295		var water_value = 0;
296		var install_value = 0;
297		var usage_value = 0;
298		var filter_value = 0;
299		var price_filter_value = 0;
300
301		setTimeout(() => {
302			var group_product_elem = $this
303				.closest(".wrapper")
304				.find(".hero-banner-has-tab");
305			var product_active_element = group_product_elem.find("ul li a.active");
306
307			var group_filter_elem = group_product_elem.find(".group-filter");
308			var group_product_list_elem = group_product_elem.find(
309				".group-product-list"
310			);
311
312			var group_filter_elem = $this
313				.closest(".group-product")
314				.find(".group-filter");
315			var water_select = group_filter_elem.find(".water");
316			var install_select = group_filter_elem.find(".install");
317			var usage_select = group_filter_elem.find(".usage");
318			var filter_select = group_filter_elem.find(".filter");
319
320			var water_value_elem = water_select.find("li.active a");
321			var install_value_elem = install_select.find("li.active a");
322			var usage_value_elem = usage_select.find("li.active a");
323			var filter_value_elem = filter_select.find("li.active a");
324
325			var price_filter_select = group_product_list_elem.find(".pure-filter");
326			var price_filter_elem = price_filter_select.find("li.active a");
327
328			if (price_filter_elem.length > 0) {
329				var price_filter_value = parseInt(price_filter_elem.attr("value"));
330			} else {
331				var price_filter_value = 0;
332			}
333
334			if (water_value_elem.length > 0) {
335				water_value = parseInt(water_value_elem.attr("value"));
336			} else {
337				water_value = 0;
338			}
339
340			if (install_value_elem.length > 0) {
341				install_value = parseInt(install_value_elem.attr("value"));
342			} else {
343				install_value = 0;
344			}
345
346			if (usage_value_elem.length > 0) {
347				usage_value = parseInt(usage_value_elem.attr("value"));
348			} else {
349				usage_value = 0;
350			}
351
352			if (filter_value_elem.length > 0) {
353				filter_value = parseInt(filter_value_elem.attr("value"));
354			} else {
355				filter_value = 0;
356			}
357
358			var product_value = parseInt(
359				product_active_element.attr("data-prod-con")
360			);
361
362			$.ajax(base_url + "api/load_product_list", {
363				method: "GET",
364				data: {
365					token: token,
366					water_val: water_value,
367					install_val: install_value,
368					usage_val: usage_value,
369					filter_val: filter_value,
370					product_val: product_value,
371					price_filter_value: price_filter_value,
372				},
373				beforeSend: function () {
374					console.log("sent");
375					//$('.loader').show();
376				},
377			}).done(function (data) {
378				if (data != "") {
379					var data_elem = $this
380						.closest(".group-product")
381						.find(".group-product-list")
382						.find(".row");
383					data_elem.empty();
384					data_elem.html(data);
385				} else {
386					//$('.btn-loadmore').hide();
387				}
388			});
389		}, 250);
390	} else if ($this.hasClass("price_filter")) {
391		var water_value = 0;
392		var install_value = 0;
393		var usage_value = 0;
394		var filter_value = 0;
395		var price_filter_value = 0;
396		setTimeout(() => {
397			var group_product_top_elem = $this
398				.closest(".wrapper")
399				.find(".hero-banner-has-tab");
400			var product_active_element =
401				group_product_top_elem.find("ul li a.active");
402
403			var group_product_elem = $this.closest(".wrapper").find(".group-product");
404
405			var group_filter_elem = group_product_elem.find(".group-filter");
406			var group_product_list_elem = group_product_elem.find(
407				".group-product-list"
408			);
409
410			var group_filter_elem = $this
411				.closest(".group-product")
412				.find(".group-filter");
413			var water_select = group_filter_elem.find(".water");
414			var install_select = group_filter_elem.find(".install");
415			var usage_select = group_filter_elem.find(".usage");
416			var filter_select = group_filter_elem.find(".filter");
417
418			var water_value_elem = water_select.find("li.active a");
419			var install_value_elem = install_select.find("li.active a");
420			var usage_value_elem = usage_select.find("li.active a");
421			var filter_value_elem = filter_select.find("li.active a");
422
423			var price_filter_select = group_product_list_elem.find(".pure-filter");
424			var price_filter_elem = price_filter_select.find("li.active a");
425			if (price_filter_elem.length > 0) {
426				var price_filter_value = parseInt(price_filter_elem.attr("value"));
427			} else {
428				var price_filter_value = 0;
429			}
430
431			if (water_value_elem.length > 0) {
432				water_value = parseInt(water_value_elem.attr("value"));
433			} else {
434				water_value = 0;
435			}
436
437			if (install_value_elem.length > 0) {
438				install_value = parseInt(install_value_elem.attr("value"));
439			} else {
440				install_value = 0;
441			}
442
443			if (usage_value_elem.length > 0) {
444				usage_value = parseInt(usage_value_elem.attr("value"));
445			} else {
446				usage_value = 0;
447			}
448
449			if (filter_value_elem.length > 0) {
450				filter_value = parseInt(filter_value_elem.attr("value"));
451			} else {
452				filter_value = 0;
453			}
454
455			var product_value = parseInt(
456				product_active_element.attr("data-prod-con")
457			);
458
459			$.ajax(base_url + "api/load_product_list", {
460				method: "GET",
461				data: {
462					token: token,
463					water_val: water_value,
464					install_val: install_value,
465					usage_val: usage_value,
466					filter_val: filter_value,
467					product_val: product_value,
468					price_filter_value: price_filter_value,
469				},
470				beforeSend: function () {
471					console.log("sent");
472					//$('.loader').show();
473				},
474			}).done(function (data) {
475				if (data != "") {
476					var data_elem = $this
477						.closest(".group-product")
478						.find(".group-product-list")
479						.find(".row");
480					data_elem.empty();
481					data_elem.html(data);
482				} else {
483					//$('.btn-loadmore').hide();
484				}
485			});
486		}, 250);
487	}
488}
489
490function dealerFilter($this) {
491	if ($this.hasClass("dealer-submit")) {
492		var dealer_wrapper = $this.closest(".dealer-filter-select");
493	} else {
494		var dealer_wrapper = $this
495			.closest(".container")
496			.find(".dealer-filter-select");
497	}
498
499	var zipcode = dealer_wrapper.find(".zip-code").val();
500	var province = "";
501	var district = "";
502	if (zipcode != "") {
503		dealer_wrapper.find(".province select.selectpicker").val("-1");
504		dealer_wrapper.find(".district select.selectpicker").val("-1");
505		province = dealer_wrapper.find(".province select.selectpicker").val();
506		district = dealer_wrapper.find(".district select.selectpicker").val();
507		$(".selectpicker").selectpicker("refresh");
508	} else {
509		province = dealer_wrapper.find(".province select.selectpicker").val();
510		district = dealer_wrapper.find(".district select.selectpicker").val();
511	}
512
513	var dealer_type_all = 0;
514	var dealer_type0 = 0;
515	var dealer_type1 = 0;
516	var dealer_type2 = 0;
517	var dealer_type3 = 0;
518
519	if ($("#check-all").is(":checked")) {
520		dealer_type_all = 1;
521	}
522	if ($("#dealerCheck1").is(":checked")) {
523		dealer_type0 = 1;
524	}
525	if ($("#dealerCheck2").is(":checked")) {
526		dealer_type1 = 1;
527	}
528	if ($("#dealerCheck3").is(":checked")) {
529		dealer_type2 = 1;
530	}
531	if ($("#dealerCheck4").is(":checked")) {
532		dealer_type3 = 1;
533	}
534
535	var token = $this
536		.closest(".dealer-filter-select")
537		.find("form")
538		.find("input[name=token]")
539		.val();
540
541	$.ajax(base_url + "api/load_spacific_dealer", {
542		method: "GET",
543		data: {
544			token: token,
545			zipcode_val: zipcode,
546			province_val: province,
547			district_val: district,
548			dealer_type_all: dealer_type_all,
549			dealer_type_0: dealer_type0,
550			dealer_type_1: dealer_type1,
551			dealer_type_2: dealer_type2,
552			dealer_type_3: dealer_type3,
553		},
554		beforeSend: function () {
555			console.log("sent");
556			//$('.loader').show();
557		},
558	}).done(function (data) {
559		if (data != "") {
560			var data_elem = $this
561				.closest(".row")
562				.find(".order-list-dealer")
563				.find(".dealer-group");
564			data_elem.empty();
565			data_elem.html(data);
566			svg();
567		} else {
568			//$('.btn-loadmore').hide();
569		}
570	});
571}
572
573function addToCart($this) {
574	var lang = $("html").attr("lang");
575	if ($this.hasClass("prod-detail-top")) {
576		var thumb_wrapper = $this.closest(".box-product-detail");
577		var thumb_color_selector = thumb_wrapper.find(".thumb-color-selector");
578		var input_elem_check = thumb_color_selector.find("input:checked");
579		var amount = $this
580			.siblings(".qty-select-product")
581			.find("input.top-spinner")
582			.val();
583	} else if ($this.hasClass("prod-detail-stick")) {
584		var thumb_wrapper = $this.closest(".wrapper").find(".box-product-detail");
585		var thumb_color_selector = thumb_wrapper.find(".thumb-color-selector");
586		var input_elem_check = thumb_color_selector.find("input:checked");
587		var amount = $this
588			.siblings(".qty-select-product")
589			.find("input.bottom-spinner")
590			.val();
591	} else if ($this.hasClass("prod-list-filter")) {
592		var thumb_wrapper = $this;
593		var thumb_color_selector = $this;
594		var input_elem_check = $this;
595		var amount = 1;
596	} else if ($this.hasClass("prod-list-water")) {
597		var thumb_wrapper = $this;
598		var thumb_color_selector = $this;
599		var input_elem_check = $this;
600		var amount = 1;
601	} else if ($this.hasClass("home-page")) {
602		var thumb_wrapper = $this.closest(".thumb");
603		var thumb_color_selector = thumb_wrapper.find(".thumb-color-selector");
604		var input_elem_check = thumb_color_selector.find("input:checked");
605		var amount = 1;
606	} else {
607		var thumb_wrapper = $this.closest(".thumb.thumb-filter");
608		var thumb_color_selector = thumb_wrapper.find(".thumb-color-selector");
609		var input_elem_check = thumb_color_selector.find("input:checked");
610		var amount = 1;
611	}
612
613	var product_code = input_elem_check.attr("data-prod");
614	var sku_id = input_elem_check.attr("data-sku");
615
616	var token = $this.closest("body").find("input[name=token]").val();
617	$.ajax(base_url + "api/add_to_cart", {
618		method: "GET",
619		data: {
620			token: token,
621			product_code: product_code,
622			sku_id: sku_id,
623			amount: parseInt(amount),
624		},
625		beforeSend: function () {
626			console.log("sent");
627			//$('.loader').show();
628		},
629	}).done(function (data) {
630		if (data != "") {
631			var cart_elem = $("body").find(".box-cart-product");
632			cart_elem.empty();
633			cart_elem.append(data);
634			if (lang == "th") {
635				popup_message_cart(
636					"success",
637					"",
638					"สำเร็จ<br>เพิ่มสินค้าลงในตะกร้าเรียบร้อย",
639					3000,
640					"ปิดหลังจาก 3 วินาที"
641				);
642			} else {
643				popup_message_cart(
644					"success",
645					"",
646					"Success<br>The product has been added to the cart.",
647					3000,
648					"Close in 3 seconds."
649				);
650			}
651			cart_elem.addClass("active");
652			cart_elem.show();
653		} else {
654			//$('.btn-loadmore').hide();
655		}
656	});
657}
658
659function deleteItem($this) {
660	var data_index = $this.attr("data-index");
661	var data_memberid = $this.attr("data-memberid");
662	var token = $this.closest(".wrapper").find("input[name=token]").val();
663
664	$.ajax(base_url + "api/delete_cart", {
665		method: "GET",
666		data: {
667			token: token,
668			data_index: data_index,
669			data_memberid: data_memberid,
670		},
671		beforeSend: function () {
672			console.log("sent");
673			//$('.loader').show();
674		},
675	}).done(function (data) {
676		if (parseInt(data) == 1) {
677			setTimeout(function () {
678				location.reload();
679			}, 200);
680		} else {
681			element = $this.closest(".thumb-ver");
682			element.remove();
683			refreshTopCart($this);
684			window.location.reload();
685		}
686	});
687}
688
689function deleteAllItem($this) {
690	var member_id = $this.attr("data-id");
691	var token = $this.closest(".wrapper").find("input[name=token]").val();
692
693	$.ajax(base_url + "api/delete_all_cart", {
694		method: "GET",
695		data: {
696			token: token,
697			member_id: member_id,
698		},
699		beforeSend: function () {
700			console.log("sent");
701			//$('.loader').show();
702		},
703	}).done(function (data) {
704		element = $this.closest(".group-item-list");
705		element.empty();
706	});
707	setTimeout(function () {
708		location.reload();
709	}, 300);
710}
711
712function refreshTopCart($this) {
713	var cart_elem = $(".box-cart-product");
714	var token = $this.closest(".wrapper").find("input[name=token]").val();
715	$.ajax(base_url + "api/refresh_top_cart", {
716		method: "GET",
717		data: {
718			token: token,
719		},
720		beforeSend: function () {
721			console.log("sent4");
722			//$('.loader').show();
723		},
724	}).done(function (data) {
725		cart_elem.empty();
726		cart_elem.append(data);
727		// console.log('cart_elem',cart_elem);
728	});
729}
730// marks
731function quantitySelectProduct($this) {
732	// console.log('run quantitySelectProduct');
733
734	let item_list_wrapper = $this.closest(".group-item-list");
735	let thumb_ver = item_list_wrapper.find(".thumb-ver");
736	let data_index = $this.attr("data-index");
737	var token = $this.closest(".wrapper").find("input[name=token]").val();
738	let total = 0;
739	var discount_total = 0;
740	var n_total = 0;
741
742	if ($this.hasClass("plus")) {
743		let input = $this.siblings("input");
744		if (input.data("type") === "number") {
745			let step = input.attr("step");
746			let oldValue = input.val();
747			let newValue = parseInt(oldValue) + parseInt(step || 1);
748			input.val(newValue);
749			input.attr("value", newValue);
750		} else if (input.data("type") === "text") {
751			let oldIndex = input.data("spinner-index") || 0;
752			let items = input.data("spinner-items");
753			let newIndex = oldIndex + 1;
754
755			if (newIndex < items.length) {
756				input.val(items[newIndex]);
757				input.data("spinner-index", newIndex);
758			} else if (input.data("spinner-loop")) {
759				input.val(items[0]);
760				input.data("spinner-index", 0);
761			}
762		}
763	} else if ($this.hasClass("minus")) {
764		let input = $this.siblings("input");
765		if (input.data("type") === "number") {
766			let step = input.attr("step");
767			let oldValue = input.val();
768			let newValue = parseInt(oldValue) - parseInt(step || 1);
769			let minValue = parseInt(input.attr("min"));
770			if (newValue <= minValue) {
771				input.val(minValue);
772			} else {
773				input.val(newValue);
774			}
775		} else if (input.data("type") === "text") {
776			let oldIndex = input.data("spinner-index") || 0;
777			let items = input.data("spinner-items");
778			let newIndex = oldIndex - 1;
779
780			if (newIndex >= 0) {
781				input.val(items[newIndex]);
782				input.data("spinner-index", newIndex);
783			} else if (input.data("spinner-loop")) {
784				input.val(items[items.length - 1]);
785				input.data("spinner-index", items.length - 1);
786			}
787		}
788	}
789
790	for (let index = 0; index < thumb_ver.length; index++) {
791		const thumb_ver_elem = thumb_ver.eq(index);
792
793		const thumb_text_title = thumb_ver_elem.find(".thumb-txt-title");
794		var item_price = parseInt(
795			thumb_text_title.find(".thumb-txt-price").attr("data-item-price")
796		);
797		var full_price = parseInt(
798			thumb_text_title.find(".thumb-txt-price").attr("data-full-price")
799		);
800
801		const item_b_pro_dis_1 = parseInt(
802			thumb_text_title.find(".thumb-txt-price").attr("data-item-bun-dis1")
803		);
804		const item_b_pro_dis_2 = parseInt(
805			thumb_text_title.find(".thumb-txt-price").attr("data-item-bun-dis2")
806		);
807		const item_b_pro_dis_type = parseInt(
808			thumb_text_title.find(".thumb-txt-price").attr("data-item-bun-type")
809		);
810		const item_b_code = parseInt(
811			thumb_text_title.find(".thumb-txt-price").attr("data-item-bun-b-code")
812		);
813
814  
815		const quantity_product = thumb_ver_elem.find(".qty-select-product");
816		const quantity = parseInt(quantity_product.find("input[type=text]").val());
817		let quantity2 = 0;
818		let item_price2 = 0;
819		let q_use = 0;
820		let totalab = 0;
821		var finalDiscount = 0;
822
823		if (item_b_code && item_b_code != "") {
824			for (let index2 = 0; index2 < thumb_ver.length; index2++) {
825				const thumb_ver_elem2 = thumb_ver.eq(index2);
826				const thumb_text_title2 = thumb_ver_elem2.find(".thumb-txt-title");
827				const item_code2 = parseInt(
828					thumb_text_title2.find(".thumb-txt-price").attr("data-item-code")
829				);
830
831				if (item_b_code == item_code2) {
832					item_price2 = parseInt(
833						thumb_text_title2.find(".thumb-txt-price").attr("data-item-price")
834					);
835					const quantity_product2 = thumb_ver_elem2.find(".qty-select-product");
836					quantity2 = parseInt(
837						quantity_product2.find("input[type=text]").val()
838					);
839				}
840			}
841
842			if (quantity > quantity2) {
843				q_use = quantity2;
844			} else {
845				q_use = quantity;
846			}
847			// console.log('item_price',item_price);
848			totalab = item_price2 + item_price;
849			let dis = 0;
850			if (item_b_pro_dis_type != "" && item_b_pro_dis_type == 1) {
851				dis = Math.round((totalab * item_b_pro_dis_1) / 100);
852				discount_total += q_use * dis;
853			} else if (item_b_pro_dis_type != "" && item_b_pro_dis_type == 2) {
854
855				// dis = totalab - item_b_pro_dis_2;
856        // console.log('totalab',totalab);
857        // console.log('item_b_pro_dis_2',item_b_pro_dis_2);
858				// discount_total += q_use * (totalab - item_b_pro_dis_2);
859        // console.log('discount_total',discount_total);
860
861        //onbb-comment -old code
862
863        dis = totalab - item_b_pro_dis_2;
864        console.log('totalab',totalab);
865        console.log('item_b_pro_dis_2',item_b_pro_dis_2);
866				discount_total += q_use * (item_b_pro_dis_2);
867        console.log('discount_total',discount_total);
868
869        // return
870			}
871			total = total + item_price * (quantity - q_use);
872			total = total + item_price2 * (quantity2 - q_use);
873			total = total - item_price2 * quantity2;
874			total = total + dis * q_use;
875      console.log('total',total);
876			if (full_price && full_price != "") {
877        console.log('if');
878				n_total += full_price * quantity;
879			} else {
880        console.log('elsefewqe');
881				n_total += item_price * quantity;
882			}
883		} else {
884      
885			total += item_price * quantity;
886			console.log("total-- :", total);
887
888			if (full_price && full_price != "") {
889        console.log('if1');
890				discount_total += (full_price - item_price) * quantity;
891				n_total += full_price * quantity;
892				finalDiscount = discount_total;
893			} else {
894        console.log('else1');
895        // console.log('n_total1',n_total);
896				n_total += item_price * quantity;
897        // console.log('n_total_change',n_total);
898			}
899		}
900
901		// console.log("yo2", discount_total);
902	}
903
904	// console.log("discount_total before 2", discount_total);
905
906	// return
907
908	let subtotal = n_total - finalDiscount;
909	console.log('full_price :' + full_price);
910	console.log('finalDiscount :' + finalDiscount);
911	console.log('discount_total :' + discount_total);
912
913	// console.log("n_total", n_total);
914	// console.log("finalDiscount", finalDiscount);
915
916	if (finalDiscount !== 0) {
917		var n_total_val_string = new Intl.NumberFormat("th", {
918			style: "currency",
919			currency: "THB",
920			minimumFractionDigits: 0,
921		}).format(n_total - finalDiscount);
922	} else {
923		var n_total_val_string = new Intl.NumberFormat("th", {
924			style: "currency",
925			currency: "THB",
926			minimumFractionDigits: 0,
927		}).format(n_total);
928	}
929
930	// console.log("subtotal", subtotal);
931
932	n_total_val_string = n_total_val_string.replace("฿", "");
933
934	// console.log("discount_total before", discount_total);
935
936	// console.log('finalDiscount',finalDiscount);
937
938  // console.log('finaldis1',finalDiscount);
939  // console.log('discount_total1',discount_total);
940
941  // return
942
943	if (finalDiscount !== 0) {
944		var dis_val_string = new Intl.NumberFormat("th", {
945			style: "currency",
946			currency: "THB",
947			minimumFractionDigits: 0,
948		}).format(finalDiscount);
949	} else {
950		var dis_val_string = new Intl.NumberFormat("th", {
951			style: "currency",
952			currency: "THB",
953			minimumFractionDigits: 0,
954		}).format(discount_total);
955	}//Case bundal
956
957
958  // console.log('dis_val_string',dis_val_string);
959
960  // return
961
962	dis_val_string = dis_val_string.replace("฿", "");
963	// console.log("discount_total after", discount_total);
964
965  
966	if (finalDiscount !== 0) {
967		var total_val_string = new Intl.NumberFormat("th", {
968			style: "currency",
969			currency: "THB",
970			minimumFractionDigits: 0,
971		}).format(n_total - finalDiscount);
972	} else {
973		var total_val_string = new Intl.NumberFormat("th", {
974			style: "currency",
975			currency: "THB",
976			minimumFractionDigits: 0,
977		}).format(n_total - discount_total);
978	}
979	// console.log('');
980	// var total_val_string = new Intl.NumberFormat('th', { style: 'currency', currency: 'THB', minimumFractionDigits: 0 }).format(n_total-discount_total);
981	total_val_string = total_val_string.replace("฿", "");
982
983	let row_wrapper = item_list_wrapper.closest(".row");
984	let group_order = row_wrapper.find(".group-order");
985	let order_group_price = group_order.find(".order-group-price");
986	let top_price = order_group_price.find(".order-txt-total");
987	let dis_price = order_group_price.find(".order-txt-dis");
988	let top_price_txt = top_price.find(".price-txt");
989
990	let dis_txt = dis_price.find(".dis-txt");
991
992	// top_price_txt.html(n_total_val_string);
993
994
995
996	if (discount_total != 0) {
997		dis_txt.html("-" + dis_val_string);
998	} else {
999		dis_txt.html(dis_val_string);
1000		// console.log("this else");
1001	}
1002	top_price.attr("data-top-price", n_total);
1003	top_price_txt.html(
1004		new Intl.NumberFormat("th", {
1005			// style: "currency",
1006			currency: "THB",
1007			minimumFractionDigits: 0,
1008		}).format(n_total)
1009	);
1010	// console.log("dtt", discount_total);
1011	dis_price.attr("data-dis-price", discount_total);
1012
1013  
1014	let total_order = row_wrapper.find(".total-order");
1015	let total_price = total_order.find(".total-price");
1016
1017	let total_price_txt = total_price.find(".price-txt");
1018
1019
1020
1021	// console.log("subtotal : " + subtotal);
1022	// console.log("n_total : " + n_total);
1023
1024	if (finalDiscount !== 0) {
1025		// total_price.attr("data-total", subtotal - finalDiscount);
1026		total_price.attr("data-total", subtotal);
1027	} else {
1028		total_price.attr("data-total", n_total - discount_total);
1029		// total_price.attr("data-total", n_total);
1030		// total_price.attr("data-total", total);
1031
1032	}
1033
1034
1035
1036	if (finalDiscount !== 0) {
1037    console.log('#this if');
1038		// total_price_txt.html(subtotal - finalDiscount);
1039		var sub_total_val_string_currency = new Intl.NumberFormat("th", {
1040			// style: "currency",
1041			currency: "THB",
1042			minimumFractionDigits: 0,
1043		}).format(subtotal);
1044		total_price_txt.html(sub_total_val_string_currency);
1045	} else {
1046    console.log('#this else');
1047		var total_val_string_currency = new Intl.NumberFormat("th", {
1048			// style: "currency",
1049			currency: "THB",
1050			minimumFractionDigits: 0,
1051		}).format(n_total - discount_total);
1052
1053    console.log('total_val_string_currency',total_val_string_currency);
1054		total_price_txt.html(total_val_string_currency);
1055	}
1056
1057
1058
1059	// total_price_txt.html(subtotal-finalDiscount);
1060
1061	// total_price.attr('data-total', n_total-discount_total );
1062	// total_price.attr('data-total', total );
1063
1064	let amount = $this.siblings("input").val();
1065
1066	// console.log('dis_price', dis_price[0].dataset.disPrice);
1067
1068	$.ajax(base_url + "api/item_amount", {
1069		method: "GET",
1070		data: {
1071			token: token,
1072			data_index: data_index,
1073			amount: amount,
1074		},
1075		beforeSend: function () {
1076			// console.log('sent1456');
1077			//$('.loader').show();
1078		},
1079	}).done(function (data) {
1080		refreshTopCart($this);
1081	});
1082}
1083
1084function spinnerChange($this) {
1085	console.log("change");
1086}
1087
1088function loadOrder(token, order_summary_elem) {
1089	$.ajax(base_url + "api/load_order_summary", {
1090		method: "GET",
1091		data: {
1092			token: token,
1093		},
1094		beforeSend: function () {
1095			console.log("sent2");
1096			//$('.loader').show();
1097		},
1098	}).done(function (data) {
1099		var product_order_list_elem = order_summary_elem.siblings(
1100			".product-order-list"
1101		);
1102		product_order_list_elem.empty();
1103		product_order_list_elem.append(data);
1104	});
1105}
1106
1107function deleteShippingAddress($this) {
1108	var token = $this.closest(".wrapper").find("input[name=token]").val();
1109	popup_message_delete("ship", token, $this);
1110}
1111
1112function deleteBillingAddress($this) {
1113	var token = $this.closest(".wrapper").find("input[name=token]").val();
1114	popup_message_delete("bill", token, $this);
1115}
1116
1117function emailLogin($this) {
1118	var form = $this.closest("form");
1119	var wrapper = $this.closest(".wrapper");
1120	var ship_type_el = wrapper
1121		.find(".form-step.form-step-1")
1122		.find("input[name=transfer]:checked");
1123	var ship_type_val = ship_type_el.attr("data-trans");
1124
1125	form.find("input[name=ship_type]").val(ship_type_val);
1126	form.submit();
1127}
1128
1129function selDisFromProv($this) {
1130	var code = $this.find(":selected").attr("data-pro-id");
1131	var token = $this.closest("form").find("input[name=token]").val();
1132	if ($this.hasClass("dealer-dis")) {
1133		token = $this
1134			.closest(".dealer-filter-select")
1135			.find("form")
1136			.find("input[name=token]")
1137			.val();
1138	}
1139
1140	var return_data = "";
1141	$.ajax(window.location.origin + "/api/load_district", {
1142		method: "GET",
1143		async: false,
1144		data: {
1145			token: token,
1146			code: parseInt(code),
1147		},
1148		beforeSend: function () {
1149			console.log("sentx");
1150			//$('.loader').show();
1151		},
1152	}).done(function (data) {
1153		if (data != "") {
1154			var district = $this
1155				.closest(".select")
1156				.siblings(".district")
1157				.find(".selectpicker");
1158			district.empty();
1159			district.append(data);
1160			var subDistrict = $this
1161				.closest(".select")
1162				.siblings(".sub-district")
1163				.find(".selectpicker");
1164			subDistrict.empty();
1165			var zipcode = $this
1166				.closest(".select")
1167				.siblings(".zip-code")
1168				.find(".selectpicker");
1169			zipcode.empty();
1170			$("select").selectpicker("refresh");
1171		} else {
1172			//$('.btn-loadmore').hide();
1173			var district = $this
1174				.closest(".select")
1175				.siblings(".district")
1176				.find(".selectpicker");
1177			district.empty();
1178			var subDistrict = $this
1179				.closest(".select")
1180				.siblings(".sub-district")
1181				.find(".selectpicker");
1182			subDistrict.empty();
1183			var zipcode = $this
1184				.closest(".select")
1185				.siblings(".zip-code")
1186				.find(".selectpicker");
1187			zipcode.empty();
1188			$("select").selectpicker("refresh");
1189		}
1190	});
1191
1192	return return_data;
1193}
1194
1195function selDisFromProvDealer($this) {
1196	var code = $this.find(":selected").attr("data-pro-id");
1197	var token = $this.closest("form").find("input[name=token]").val();
1198	if ($this.hasClass("dealer-dis")) {
1199		token = $this
1200			.closest(".dealer-filter-select")
1201			.find("form")
1202			.find("input[name=token]")
1203			.val();
1204	}
1205
1206	var return_data = "";
1207	$.ajax(window.location.origin + "/api/load_district_dealer", {
1208		method: "GET",
1209		async: false,
1210		data: {
1211			token: token,
1212			code: parseInt(code),
1213		},
1214		beforeSend: function () {
1215			console.log("senta");
1216			//$('.loader').show();
1217		},
1218	}).done(function (data) {
1219		if (data != "") {
1220			var district = $this
1221				.closest(".select")
1222				.siblings(".district")
1223				.find(".selectpicker");
1224			district.empty();
1225			district.append(data);
1226			var subDistrict = $this
1227				.closest(".select")
1228				.siblings(".sub-district")
1229				.find(".selectpicker");
1230			subDistrict.empty();
1231			var zipcode = $this
1232				.closest(".select")
1233				.siblings(".zip-code")
1234				.find(".selectpicker");
1235			zipcode.empty();
1236			$("select").selectpicker("refresh");
1237		} else {
1238			var district = $this
1239				.closest(".select")
1240				.siblings(".district")
1241				.find(".selectpicker");
1242			district.empty();
1243			var subDistrict = $this
1244				.closest(".select")
1245				.siblings(".sub-district")
1246				.find(".selectpicker");
1247			subDistrict.empty();
1248			var zipcode = $this
1249				.closest(".select")
1250				.siblings(".zip-code")
1251				.find(".selectpicker");
1252			zipcode.empty();
1253			$("select").selectpicker("refresh");
1254			//$('.btn-loadmore').hide();
1255		}
1256	});
1257
1258	return return_data;
1259}
1260
1261function selDisFromProvDealer_Product($this) {
1262	var code = $this.find(":selected").attr("data-pro-id");
1263	var token = $this.closest("form").find("input[name=token]").val();
1264	if ($this.hasClass("dealer-dis")) {
1265		token = $this
1266			.closest(".dealer-filter-select")
1267			.find("form")
1268			.find("input[name=token]")
1269			.val();
1270	}
1271
1272	var return_data = "";
1273	$.ajax(window.location.origin + "/api/load_district_dealer", {
1274		method: "GET",
1275		async: false,
1276		data: {
1277			token: token,
1278			code: parseInt(code),
1279		},
1280		beforeSend: function () {
1281			console.log("sentg");
1282			//$('.loader').show();
1283		},
1284	}).done(function (data) {
1285		if (data != "") {
1286			var district = $this
1287				.closest(".select")
1288				.closest(".group-search-dealer")
1289				.find(".district")
1290				.find(".selectpicker");
1291			district.empty();
1292			district.append(data);
1293			var subDistrict = $this
1294				.closest(".select")
1295				.siblings(".sub-district")
1296				.find(".selectpicker");
1297			subDistrict.empty();
1298			var zipcode = $this
1299				.closest(".select")
1300				.siblings(".zip-code")
1301				.find(".selectpicker");
1302			zipcode.empty();
1303			$("select").selectpicker("refresh");
1304		} else {
1305			//$('.btn-loadmore').hide();
1306		}
1307	});
1308
1309	return return_data;
1310}
1311
1312function selSubDisFromDis($this) {
1313	var code = $this.find(":selected").attr("data-dis-id");
1314	var token = $this.closest("form").find("input[name=token]").val();
1315	var return_data = "";
1316	$.ajax(window.location.origin + "/api/load_sub_district", {
1317		method: "GET",
1318		async: false,
1319		data: {
1320			token: token,
1321			code: parseInt(code),
1322		},
1323		beforeSend: function () {
1324			console.log("senth");
1325			//$('.loader').show();
1326		},
1327	}).done(function (data) {
1328		if (data != "") {
1329			var subDistrict = $this
1330				.closest(".select")
1331				.siblings(".sub-district")
1332				.find(".selectpicker");
1333			subDistrict.empty();
1334			subDistrict.append(data);
1335			var zipcode = $this
1336				.closest(".select")
1337				.siblings(".zip-code")
1338				.find(".selectpicker");
1339			zipcode.empty();
1340			$("select").selectpicker("refresh");
1341		} else {
1342			//$('.btn-loadmore').hide();
1343			var subDistrict = $this
1344				.closest(".select")
1345				.siblings(".sub-district")
1346				.find(".selectpicker");
1347			subDistrict.empty();
1348			var zipcode = $this
1349				.closest(".select")
1350				.siblings(".zip-code")
1351				.find(".selectpicker");
1352			zipcode.empty();
1353			$("select").selectpicker("refresh");
1354		}
1355	});
1356
1357	return return_data;
1358}
1359
1360function selZipFromSubDis($this) {
1361	var code = $this.find(":selected").attr("data-sub-dis-id");
1362	var token = $this.closest("form").find("input[name=token]").val();
1363
1364	var return_data = "";
1365	$.ajax(window.location.origin + "/api/load_zipcode", {
1366		method: "GET",
1367		async: false,
1368		data: {
1369			token: token,
1370			code: parseInt(code),
1371		},
1372		beforeSend: function () {
1373			console.log("sentm");
1374			//$('.loader').show();
1375		},
1376	}).done(function (data) {
1377		if (data != "") {
1378			var zipcode = $this
1379				.closest(".select")
1380				.siblings(".zip-code")
1381				.find(".selectpicker");
1382			zipcode.empty();
1383			zipcode.append(data);
1384			$("select").selectpicker("refresh");
1385		} else {
1386			//$('.btn-loadmore').hide();
1387		}
1388	});
1389
1390	return return_data;
1391}
1392
1393function checkLoginMobile($this) {
1394	var lang = $("html").attr("lang");
1395	var form_el = $this.closest(".box-form").find("form");
1396	var frm = new FormData(form_el[0]);
1397	$.ajax({
1398		data: frm,
1399		type: "POST",
1400		url: window.location.origin + "/Login/check_login_phonenumber",
1401		cache: false,
1402		contentType: false,
1403		processData: false,
1404		dataType: "json",
1405		success: function (arresult) {
1406			if (arresult.rs) {
1407				popOtpBtn($this);
1408			} else {
1409				if (lang == "th") {
1410					popup_message(
1411						(type = "error"),
1412						(message = ""),
1413						(title =
1414							"คำเตือน !\nไม่มีเบอร์โทรศัพท์นี้อยู่ในระบบ\nกรุณาสมัครสมาชิก"),
1415						(timer = 3000),
1416						(timer_message = "ปิดหลังจาก 3 วินาที")
1417					);
1418				} else {
1419					popup_message(
1420						(type = "error"),
1421						(message = ""),
1422						(title =
1423							"Warning !\nthis phone number is not in the system\nplease subscribe member"),
1424						(timer = 3000),
1425						(timer_message = "Close after 3 seconds")
1426					);
1427				}
1428			}
1429		},
1430	});
1431}
1432
1433function checkLoginEmail(token, form_el) {
1434	var lang = $("html").attr("lang");
1435	var frm = new FormData(form_el[0]);
1436	$.ajax({
1437		data: frm,
1438		type: "POST",
1439		url: window.location.origin + "/Login/check_login_email",
1440		cache: false,
1441		contentType: false,
1442		processData: false,
1443		dataType: "json",
1444		success: function (arresult) {
1445			if (arresult.rs) {
1446				const queryString = window.location.search;
1447				const urlParams = new URLSearchParams(queryString);
1448				const goto = urlParams.get("goto");
1449				const sub = urlParams.get("sub");
1450				if (goto) {
1451					document.getElementById("goto_e").value = goto;
1452				}
1453				if (sub) {
1454					document.getElementById("sub_e").value = sub;
1455				}
1456				form_el.submit();
1457			} else {
1458				if (lang == "th") {
1459					popup_message(
1460						(type = "error"),
1461						(message = ""),
1462						(title = "คำเตือน !\nอีเมลหรือรหัสผ่านไม่ถูกต้อง"),
1463						(timer = 3000),
1464						(timer_message = "ปิดหลังจาก 3 วินาที")
1465					);
1466				} else {
1467					popup_message(
1468						(type = "error"),
1469						(message = ""),
1470						(title = "Warning !\nincorrect email or password"),
1471						(timer = 3000),
1472						(timer_message = "Close after 3 seconds")
1473					);
1474				}
1475			}
1476		},
1477	});
1478}
1479
1480function addBillAddress($this) {
1481	var frm = new FormData($this.closest("form")[0]);
1482	var pop_footer = $this.closest(".pop-footer");
1483	var pop_body = pop_footer.siblings(".popup-body");
1484	var box_tab_elem = pop_body.find(".box-tab");
1485	var active_tab = box_tab_elem.find(".tab-btn.active");
1486	var valid = true;
1487	var is_scroll = 0;
1488
1489	var address_name = pop_body.find("input[name=address_name]");
1490	address_name.closest(".address_name").removeClass("error");
1491	if (address_name.val() === "") {
1492		valid = false;
1493		address_name.closest(".address_name").addClass("error");
1494		if (is_scroll == 0) {
1495			is_scroll = 1;
1496			address_name.closest(".popup-body").animate(
1497				{
1498					scrollTop: address_name.offset().top - 350,
1499				},
1500				500
1501			);
1502		}
1503	}
1504
1505	if (active_tab.attr("data-tab-list") == 0) {
1506		var tab_body = pop_body.find(".tab-list.accor-ref-0");
1507		var id_card_elem = tab_body.find("input[name=id_card_number]");
1508		var first_name = pop_body.find("input[name=first_name]");
1509		var last_name = pop_body.find("input[name=last_name]");
1510		var personal_phone_number = pop_body.find(
1511			"input[name=personal_phone_number]"
1512		);
1513		var personal_address_detail = pop_body.find(
1514			"input[name=personal_address_detail]"
1515		);
1516		var personal_province = pop_body.find("select[name=personal_province]");
1517		var personal_district = pop_body.find("select[name=personal_district]");
1518		var personal_sub_district = pop_body.find(
1519			"select[name=personal_sub_district"
1520		);
1521		var personal_zip_code = pop_body.find("select[name=personal_zip_code");
1522
1523		first_name.closest(".first_name").removeClass("error");
1524		last_name.closest(".last_name").removeClass("error");
1525		id_card_elem.closest(".id_card_number").removeClass("error");
1526		personal_phone_number
1527			.closest(".personal_phone_number")
1528			.removeClass("error");
1529		personal_address_detail
1530			.closest(".personal_address_detail")
1531			.removeClass("error");
1532		personal_province.closest(".province").removeClass("error");
1533		personal_district.closest(".district").removeClass("error");
1534		personal_sub_district.closest(".sub-district").removeClass("error");
1535		personal_zip_code.closest(".zip-code").removeClass("error");
1536
1537		if (!thaiIdvalidate(id_card_elem) && id_card_elem.val() != "") {
1538			valid = false;
1539			id_card_elem.closest(".id_card_number").addClass("error");
1540			id_card_elem
1541				.closest(".id_card_number")
1542				.find(".validate")
1543				.html("รูปแบบเลขบัตรประชาชนไม่ถูกต้อง");
1544		} else if (!thaiIdvalidate(id_card_elem) && id_card_elem.val() == "") {
1545			valid = false;
1546			id_card_elem.closest(".id_card_number").addClass("error");
1547			id_card_elem
1548				.closest(".id_card_number")
1549				.find(".validate")
1550				.html("กรุณากรอกเลขบัตรประชาชน");
1551		} else if (
1552			thaiIdvalidate(id_card_elem) &&
1553			id_card_elem.val() != "" &&
1554			id_card_elem.val().length == 13 &&
1555			!checkThaiIdCorrectness(id_card_elem.val())
1556		) {
1557			valid = false;
1558			id_card_elem.closest(".id_card_number").addClass("error");
1559			id_card_elem
1560				.closest(".id_card_number")
1561				.find(".validate")
1562				.html("หมายเลขบัตรประชาชนไม่ถูกต้อง");
1563		}
1564
1565		if (first_name.val() === "") {
1566			valid = false;
1567			first_name.closest(".first_name").addClass("error");
1568			if (is_scroll == 0) {
1569				is_scroll = 1;
1570				first_name.closest(".popup-body").animate(
1571					{
1572						scrollTop: first_name.offset().top - 850,
1573					},
1574					500
1575				);
1576			}
1577		}
1578
1579		if (last_name.val() === "") {
1580			valid = false;
1581			last_name.closest(".last_name").addClass("error");
1582			if (is_scroll == 0) {
1583				is_scroll = 1;
1584				last_name.closest(".popup-body").animate(
1585					{
1586						scrollTop: last_name.offset().top - 850,
1587					},
1588					500
1589				);
1590			}
1591		}
1592
1593		if (personal_phone_number.val() === "") {
1594			personal_phone_number
1595				.closest(".personal_phone_number")
1596				.find(".validate")
1597				.html("กรุณากรอกเบอร์โทรศัพท์");
1598			personal_phone_number.closest(".personal_phone_number").addClass("error");
1599			valid = false;
1600			if (is_scroll == 0) {
1601				is_scroll = 1;
1602				personal_phone_number.closest(".popup-body").animate(
1603					{
1604						scrollTop: personal_phone_number.offset().top - 850,
1605					},
1606					500
1607				);
1608			}
1609		} else if (personal_phone_number.val().length != 10) {
1610			personal_phone_number
1611				.closest(".personal_phone_number")
1612				.find(".validate")
1613				.html("กรุณากรอกเบอร์โทรศัพท์ให้ครบ 10 หลัก");
1614			personal_phone_number.closest(".personal_phone_number").addClass("error");
1615			valid = false;
1616			if (is_scroll == 0) {
1617				is_scroll = 1;
1618				personal_phone_number.closest(".popup-body").animate(
1619					{
1620						scrollTop: personal_phone_number.offset().top - 850,
1621					},
1622					500
1623				);
1624			}
1625		}
1626
1627		if (personal_address_detail.val() === "") {
1628			valid = false;
1629			personal_address_detail
1630				.closest(".personal_address_detail")
1631				.addClass("error");
1632			if (is_scroll == 0) {
1633				is_scroll = 1;
1634				personal_address_detail.closest(".popup-body").animate(
1635					{
1636						scrollTop: personal_address_detail.offset().top - 850,
1637					},
1638					500
1639				);
1640			}
1641		}
1642
1643		if (personal_province.val() == 0) {
1644			valid = false;
1645			personal_province.closest(".province").addClass("error");
1646			if (is_scroll == 0) {
1647				is_scroll = 1;
1648				personal_province.closest(".popup-body").animate(
1649					{
1650						scrollTop: personal_province.offset().top - 850,
1651					},
1652					500
1653				);
1654			}
1655		} else {
1656			if (personal_district.val() == "") {
1657				valid = false;
1658				personal_district.closest(".district").addClass("error");
1659			} else {
1660				if (personal_sub_district.val() == "") {
1661					valid = false;
1662					personal_sub_district.closest(".sub-district").addClass("error");
1663				} else {
1664					if (personal_zip_code.val() == "") {
1665						valid = false;
1666						personal_zip_code.closest(".zip-code").addClass("error");
1667					}
1668				}
1669			}
1670		}
1671	} else if (active_tab.attr("data-tab-list") == 1) {
1672		var tab_body = pop_body.find(".tab-list.accor-ref-1");
1673		var jurastic_address_detail = pop_body.find(
1674			"input[name=jurastic_address_detail]"
1675		);
1676		var jurastic_province = pop_body.find("select[name=jurastic_province]");
1677		var jurastic_district = pop_body.find("select[name=jurastic_district]");
1678		var jurastic_sub_district = pop_body.find(
1679			"select[name=jurastic_sub_district"
1680		);
1681		var jurastic_zip_code = pop_body.find("select[name=jurastic_zip_code");
1682		var jurastic_phone_number = pop_body.find(
1683			"input[name=jurastic_phone_number]"
1684		);
1685		var jurastic_id = pop_body.find("input[name=jurastic_id");
1686		var jurastic_name = pop_body.find("input[name=jurastic_name");
1687
1688		jurastic_id.closest(".jurastic_id").removeClass("error");
1689		jurastic_name.closest(".jurastic_name").removeClass("error");
1690		jurastic_phone_number
1691			.closest(".jurastic_phone_number")
1692			.removeClass("error");
1693		jurastic_address_detail
1694			.closest(".jurastic_address_detail")
1695			.removeClass("error");
1696		jurastic_province.closest(".province").removeClass("error");
1697		jurastic_district.closest(".district").removeClass("error");
1698		jurastic_sub_district.closest(".sub-district").removeClass("error");
1699		jurastic_zip_code.closest(".zip-code").removeClass("error");
1700
1701		if (!thaiIdvalidate(jurastic_id) && jurastic_id.val() != "") {
1702			valid = false;
1703			jurastic_id.closest(".jurastic_id").addClass("error");
1704			jurastic_id
1705				.closest(".jurastic_id")
1706				.find(".validate")
1707				.html("รูปแบบหมายเลขเลขผู้เสียภาษีไม่ถูกต้อง");
1708		} else if (!thaiIdvalidate(jurastic_id) && jurastic_id.val() == "") {
1709			valid = false;
1710			jurastic_id.closest(".jurastic_id").addClass("error");
1711			jurastic_id
1712				.closest(".jurastic_id")
1713				.find(".validate")
1714				.html("กรุณากรอกหมายเลขเลขผู้เสียภาษี");
1715		}
1716
1717		if (jurastic_name.val() === "") {
1718			valid = false;
1719			jurastic_name.closest(".jurastic_name").addClass("error");
1720			if (is_scroll == 0) {
1721				is_scroll = 1;
1722				jurastic_name.closest(".popup-body").animate(
1723					{
1724						scrollTop: jurastic_name.offset().top - 850,
1725					},
1726					500
1727				);
1728			}
1729		}
1730
1731		if (jurastic_phone_number.val() === "") {
1732			jurastic_phone_number
1733				.closest(".jurastic_phone_number")
1734				.find(".validate")
1735				.html("กรุณากรอกเบอร์โทรศัพท์");
1736			jurastic_phone_number.closest(".jurastic_phone_number").addClass("error");
1737			valid = false;
1738			if (is_scroll == 0) {
1739				is_scroll = 1;
1740				jurastic_phone_number.closest(".popup-body").animate(
1741					{
1742						scrollTop: jurastic_phone_number.offset().top - 850,
1743					},
1744					500
1745				);
1746			}
1747		} else if (jurastic_phone_number.val().length != 10) {
1748			jurastic_phone_number
1749				.closest(".jurastic_phone_number")
1750				.find(".validate")
1751				.html("กรุณากรอกเบอร์โทรศัพท์ให้ครบ 10 หลัก");
1752			personal_phone_number.closest(".jurastic_phone_number").addClass("error");
1753			valid = false;
1754			if (is_scroll == 0) {
1755				is_scroll = 1;
1756				jurastic_phone_number.closest(".popup-body").animate(
1757					{
1758						scrollTop: jurastic_phone_number.offset().top - 850,
1759					},
1760					500
1761				);
1762			}
1763		}
1764
1765		if (jurastic_address_detail.val() === "") {
1766			valid = false;
1767			jurastic_address_detail
1768				.closest(".jurastic_address_detail")
1769				.addClass("error");
1770			if (is_scroll == 0) {
1771				is_scroll = 1;
1772				jurastic_address_detail.closest(".popup-body").animate(
1773					{
1774						scrollTop: jurastic_address_detail.offset().top - 200,
1775					},
1776					500
1777				);
1778			}
1779		}
1780
1781		if (jurastic_province.val() == 0) {
1782			valid = false;
1783			jurastic_province.closest(".province").addClass("error");
1784		} else {
1785			if (jurastic_district.val() == "") {
1786				valid = false;
1787				jurastic_district.closest(".district").addClass("error");
1788			} else {
1789				if (jurastic_sub_district.val() == "") {
1790					valid = false;
1791					jurastic_sub_district.closest(".sub-district").addClass("error");
1792				} else {
1793					if (jurastic_zip_code.val() == "") {
1794						valid = false;
1795						jurastic_zip_code.closest(".zip-code").addClass("error");
1796					}
1797				}
1798			}
1799		}
1800	}
1801
1802	if (valid) {
1803		$.ajax({
1804			data: frm,
1805			type: "POST",
1806			url: window.location.origin + "/api/add_bill_address",
1807			cache: false,
1808			contentType: false,
1809			processData: false,
1810			dataType: "json",
1811			success: function (arresult) {
1812				if (arresult.rs) {
1813					if ($this.hasClass("login")) {
1814						reloadBillAddressLogin($this);
1815					} else {
1816						reloadBillAddress($this);
1817					}
1818
1819					popout_name("popup-add-tax-invoice");
1820				}
1821			},
1822		});
1823	}
1824}
1825
1826function addBillAddressLogin($this) {
1827	var frm = new FormData($this.closest("form")[0]);
1828	var this_elem = $this;
1829	var pop_footer = $this.closest(".pop-footer");
1830	var pop_body = pop_footer.siblings(".popup-body");
1831	var box_tab_elem = pop_body.find(".box-tab");
1832	var active_tab = box_tab_elem.find(".tab-btn.active");
1833	var valid = true;
1834	if (active_tab.attr("data-tab-list") == 0) {
1835		var tab_body = pop_body.find(".tab-list.accor-ref-0");
1836		var id_card_elem = tab_body.find("input[name=id_card_number]");
1837		$(".form-group").removeClass("has_danger");
1838		if (!thaiIdvalidate(id_card_elem)) {
1839			valid = false;
1840			id_card_elem.parent().addClass("has_danger");
1841		}
1842	}
1843
1844	if (valid) {
1845		$.ajax({
1846			data: frm,
1847			type: "POST",
1848			url: window.location.origin + "/api/add_bill_address",
1849			cache: false,
1850			contentType: false,
1851			processData: false,
1852			dataType: "json",
1853			success: function (arresult) {
1854				if (arresult.rs) {
1855					reloadBillAddressLogin(this_elem);
1856				}
1857			},
1858		});
1859	}
1860}
1861
1862function addShipAddress($this) {
1863	var frm = new FormData($this.closest("form")[0]);
1864	var this_elem = $this;
1865	$.ajax({
1866		data: frm,
1867		type: "POST",
1868		url: window.location.origin + "/api/add_ship_address",
1869		cache: false,
1870		contentType: false,
1871		processData: false,
1872		dataType: "json",
1873		success: function (arresult) {
1874			if (arresult.rs) {
1875				reloadShipAddress(this_elem);
1876				if ($(".stp-2.btn-next").is(":disabled")) {
1877					$(".stp-2.btn-next").prop("disabled", false);
1878					$(".chk-ship-no-addr").hide();
1879				}
1880
1881				popout_name("popup-add-address");
1882			}
1883		},
1884	});
1885}
1886
1887function addShipAddressLogin($this) {
1888	var frm = new FormData($this.closest("form")[0]);
1889	var this_elem = $this;
1890	$.ajax({
1891		data: frm,
1892		type: "POST",
1893		url: window.location.origin + "/api/add_ship_address",
1894		cache: false,
1895		contentType: false,
1896		processData: false,
1897		dataType: "json",
1898		success: function (arresult) {
1899			if (arresult.rs) {
1900				reloadShipAddressLogin(this_elem);
1901				popout_name("popup-add-address-login");
1902			}
1903		},
1904	});
1905}
1906
1907function updateShipAddress($this) {
1908	var frm = new FormData($this.closest("form")[0]);
1909	$.ajax({
1910		data: frm,
1911		type: "POST",
1912		url: window.location.origin + "/api/update_ship_address",
1913		cache: false,
1914		contentType: false,
1915		processData: false,
1916		dataType: "json",
1917		success: function (arresult) {
1918			if (arresult.rs) {
1919				reloadShipAddressLogin($this);
1920				popout_name("popup-edit-address-login");
1921			}
1922		},
1923	});
1924}
1925
1926function reloadShipAddress($this) {
1927	$this.closest("form").find("input[name=address_name]").val("");
1928	$this.closest("form").find("input[name=first_name]").val("");
1929	$this.closest("form").find("input[name=last_name]").val("");
1930	$this.closest("form").find("input[name=email]").val("");
1931	$this.closest("form").find("input[name=phone_number]").val("");
1932	$this.closest("form").find("input[name=address_detail]").val("");
1933	$this.closest("form").find("select[name=province]").val(0);
1934	$this.closest("form").find("select[name=district]").empty();
1935	$this.closest("form").find("select[name=sub_district]").empty();
1936	$this.closest("form").find("select[name=zip_code]").empty();
1937	$("select").selectpicker("refresh");
1938
1939	var frm = new FormData($this.closest("form")[0]);
1940	var this_elem = $this;
1941	$.ajax({
1942		data: frm,
1943		type: "POST",
1944		url: window.location.origin + "/api/add_ship_address",
1945		cache: false,
1946		contentType: false,
1947		processData: false,
1948		dataType: "json",
1949		success: function (arresult) {
1950			if (arresult.rs) {
1951				reloadShipAddressLogin(this_elem);
1952			}
1953		},
1954	});
1955}
1956
1957function reloadShipAddressLogin($this) {
1958	var token = $this.closest("form").find("input[name=token]").val();
1959
1960	if ($this.hasClass("edit-addr-check-out")) {
1961		var wrapper_el = $this.closest("body").find(".wrapper");
1962		var delivery_detail_el = wrapper_el.find(".delivery-detail");
1963	} else if ($this.hasClass("edit-addr-profile")) {
1964		var wrapper_el = $this.closest("body").find(".wrapper");
1965		var step2_el = wrapper_el.find(".tab-info-address");
1966		var delivery_detail_el = step2_el.find(".delivery-detail");
1967	} else if ($this.hasClass("add-ship-add-log")) {
1968		var wrapper_el = $this.closest("body").find(".wrapper");
1969		var delivery_detail_el = wrapper_el
1970			.find(".tab-info-address")
1971			.find(".delivery-detail");
1972	} else if ($this.hasClass("delete-address-ship-button")) {
1973		var wrapper_el = $("body").find(".wrapper");
1974		var delivery_detail_el = wrapper_el
1975			.find(".delivery-detail-wrapper")
1976			.find(".delivery-detail");
1977	} else {
1978		var wrapper_el = $("body").find(".wrapper");
1979		var delivery_detail_el = wrapper_el
1980			.find(".delivery-detail-wrapper")
1981			.find(".delivery-detail");
1982	}
1983
1984	$this.closest("form").find("input[name=address_name]").val("");
1985	$this.closest("form").find("input[name=first_name]").val("");
1986	$this.closest("form").find("input[name=last_name]").val("");
1987	$this.closest("form").find("input[name=email]").val("");
1988	$this.closest("form").find("input[name=phone_number]").val("");
1989	$this.closest("form").find("input[name=address_detail]").val("");
1990	$this.closest("form").find("select[name=province]").val(0);
1991	$this.closest("form").find("select[name=district]").empty();
1992	$this.closest("form").find("select[name=sub_district]").empty();
1993	$this.closest("form").find("select[name=zip_code]").empty();
1994	$("select").selectpicker("refresh");
1995
1996	$.ajax(window.location.origin + "/api/load_ship_address", {
1997		method: "GET",
1998		async: false,
1999		data: {
2000			token: token,
2001		},
2002		beforeSend: function () {
2003			console.log("sent");
2004			//$('.loader').show();
2005		},
2006	}).done(function (data) {
2007		if (data != "") {
2008			if ($this.hasClass("edit-addr-check-out")) {
2009				var box_form_check_el = delivery_detail_el.find(
2010					".box-form-check.shipping"
2011				);
2012			} else if (
2013				$this.hasClass("edit-addr-profile") ||
2014				$this.hasClass("add-ship-add-log")
2015			) {
2016				delivery_detail_el.closest(".row").find(".ship-addr-first").hide();
2017				delivery_detail_el.closest(".row").find(".ship-addr-data").show();
2018				var box_form_check_el = delivery_detail_el.find(
2019					".box-form-check.shipping"
2020				);
2021			} else if ($this.hasClass("delete-address-ship-button")) {
2022				var box_form_check_el = delivery_detail_el.find(
2023					".box-form-check.shipping"
2024				);
2025			} else {
2026				var box_form_check_el = delivery_detail_el.find(".box-form-check");
2027			}
2028
2029			box_form_check_el.empty();
2030			box_form_check_el.append(data);
2031
2032			popout_name("popup-add-address-login");
2033		} else {
2034			//$('.btn-loadmore').hide();
2035		}
2036	});
2037}
2038
2039function reloadShipAddress($this) {
2040	var token = $this.closest("form").find("input[name=token]").val();
2041
2042	var wrapper_el = $this.closest("body").find(".wrapper");
2043	var step2_el = wrapper_el.find(".form-step.form-step-2");
2044	var delivery_detail_el = step2_el.find(".delivery-detail");
2045	$this.closest("form").find("input[name=address_name]").val("");
2046	$this.closest("form").find("input[name=first_name]").val("");
2047	$this.closest("form").find("input[name=last_name]").val("");
2048	$this.closest("form").find("input[name=email]").val("");
2049	$this.closest("form").find("input[name=phone_number]").val("");
2050	$this.closest("form").find("input[name=address_detail]").val("");
2051	$this.closest("form").find("select[name=province]").val(0);
2052	$this.closest("form").find("select[name=district]").empty();
2053	$this.closest("form").find("select[name=sub_district]").empty();
2054	$this.closest("form").find("select[name=zip_code]").empty();
2055	$("select").selectpicker("refresh");
2056
2057	$.ajax(window.location.origin + "/api/load_ship_address", {
2058		method: "GET",
2059		async: false,
2060		data: {
2061			token: token,
2062		},
2063		beforeSend: function () {
2064			console.log("sent");
2065			//$('.loader').show();
2066		},
2067	}).done(function (data) {
2068		if (data != "") {
2069			var box_form_check_el = delivery_detail_el.find(
2070				".box-form-check.shipping"
2071			);
2072			box_form_check_el.empty();
2073			box_form_check_el.append(data);
2074			popout_name("popup-add-address-login");
2075		} else {
2076			//$('.btn-loadmore').hide();
2077		}
2078	});
2079}
2080
2081function reloadBillAddress($this) {
2082	var token = $this.closest("form").find("input[name=token]").val();
2083
2084	$this.closest("form").find("input[name=address_name]").val("");
2085	$this.closest("form").find("input[name=first_name]").val("");
2086	$this.closest("form").find("input[name=last_name]").val("");
2087	$this.closest("form").find("input[name=email]").val("");
2088	$this.closest("form").find("input[name=personal_phone_number]").val("");
2089	$this.closest("form").find("input[name=personal_address_detail]").val("");
2090	$this.closest("form").find("select[name=personal_province]").val(0);
2091	$this.closest("form").find("select[name=personal_district]").empty();
2092	$this.closest("form").find("select[name=personal_sub_district]").empty();
2093	$this.closest("form").find("select[name=personal_zip_code]").empty();
2094	$this.closest("form").find("select[name=personal_country]").empty();
2095
2096	$this.closest("form").find("input[name=jurastic_id]").val("");
2097	$this.closest("form").find("input[name=jurastic_name]").val("");
2098	$this.closest("form").find("input[name=jurastic_country]").val("");
2099	$this.closest("form").find("input[name=jurastic_phone_number]").val("");
2100	$this.closest("form").find("input[name=jurastic_address_detail]").val("");
2101	$this.closest("form").find("select[name=jurastic_province]").val(0);
2102	$this.closest("form").find("select[name=jurastic_district]").empty();
2103	$this.closest("form").find("select[name=jurastic_sub_district]").empty();
2104	$this.closest("form").find("select[name=jurastic_zip_code]").empty();
2105	$("select").selectpicker("refresh");
2106
2107	$.ajax(window.location.origin + "/api/load_bill_address", {
2108		method: "GET",
2109		async: false,
2110		data: {
2111			token: token,
2112		},
2113		beforeSend: function () {
2114			console.log("sent");
2115			//$('.loader').show();
2116		},
2117	}).done(function (data) {
2118		if (data != "") {
2119			var box_form_check_el = $this
2120				.closest("body")
2121				.find(".wrapper")
2122				.find(".box-form-check.billing");
2123			box_form_check_el.empty();
2124			box_form_check_el.append(data);
2125		} else {
2126			//$('.btn-loadmore').hide();
2127		}
2128	});
2129}
2130
2131function reloadBillAddressLogin($this) {
2132	var token = $this.closest("form").find("input[name=token]").val();
2133
2134	var wrapper_el = $this.closest("body").find(".wrapper");
2135	var step2_el = wrapper_el.find(".tab-info-tax");
2136	var delivery_detail_el = step2_el.find(".delivery-detail");
2137
2138	$this.closest("form").find("input[name=address_name]").val("");
2139	$this.closest("form").find("input[name=first_name]").val("");
2140	$this.closest("form").find("input[name=last_name]").val("");
2141	$this.closest("form").find("input[name=email]").val("");
2142	$this.closest("form").find("input[name=personal_phone_number]").val("");
2143	$this.closest("form").find("input[name=personal_address_detail]").val("");
2144	$this.closest("form").find("select[name=personal_province]").val(0);
2145	$this.closest("form").find("select[name=personal_district]").empty();
2146	$this.closest("form").find("select[name=personal_sub_district]").empty();
2147	$this.closest("form").find("select[name=personal_zip_code]").empty();
2148	$this.closest("form").find("select[name=personal_country]").empty();
2149
2150	$this.closest("form").find("input[name=jurastic_id]").val("");
2151	$this.closest("form").find("input[name=jurastic_name]").val("");
2152	$this.closest("form").find("input[name=jurastic_country]").val("");
2153	$this.closest("form").find("input[name=jurastic_phone_number]").val("");
2154	$this.closest("form").find("input[name=jurastic_address_detail]").val("");
2155	$this.closest("form").find("select[name=jurastic_province]").val(0);
2156	$this.closest("form").find("select[name=jurastic_district]").empty();
2157	$this.closest("form").find("select[name=jurastic_sub_district]").empty();
2158	$this.closest("form").find("select[name=jurastic_zip_code]").empty();
2159	$("select").selectpicker("refresh");
2160
2161	$.ajax(window.location.origin + "/api/load_bill_address", {
2162		method: "GET",
2163		async: false,
2164		data: {
2165			token: token,
2166		},
2167		beforeSend: function () {
2168			console.log("sent");
2169			//$('.loader').show();
2170		},
2171	}).done(function (data) {
2172		if (data != "") {
2173			delivery_detail_el.closest(".row").find(".bill-addr-first").hide();
2174			delivery_detail_el.closest(".row").find(".bill-addr-data").show();
2175			var box_form_check_el = delivery_detail_el.find(
2176				".box-form-check.billing"
2177			);
2178			box_form_check_el.empty();
2179			box_form_check_el.append(data);
2180			popout_name("popup-add-tax-invoice-login");
2181		} else {
2182			//$('.btn-loadmore').hide();
2183		}
2184	});
2185}
2186
2187function checkThaiIdCorrectness(id) {
2188	// STEP 1 - get only first 12 digits
2189	for (i = 0, sum = 0; i < 12; i++) {
2190		// STEP 2 - multiply each digit with each index (reverse)
2191		// STEP 3 - sum multiply value together
2192		sum += parseInt(id.charAt(i)) * (13 - i);
2193	}
2194	// STEP 4 - mod sum with 11
2195	let mod = sum % 11;
2196	// STEP 5 - subtract 11 with mod, then mod 10 to get unit
2197	let check = (11 - mod) % 10;
2198	// STEP 6 - if check is match the digit 13th is correct
2199	if (check == parseInt(id.charAt(12))) {
2200		return true;
2201	}
2202	return false;
2203}
2204
2205function thaiIdvalidate($this) {
2206	var regexThaiID = new RegExp(/^[0-9]{13}$/);
2207	var data = $this.val();
2208	return regexThaiID.test(data);
2209}
2210
2211function passwordPattern($this) {
2212	var regex_password = /^[a-zA-Z0-9]*$/;
2213	$this.keypress(function (event) {
2214		var _event = event || window.event;
2215		var key = _event.keyCode || _event.which;
2216		key = String.fromCharCode(key);
2217		if (!regex_password.test(key)) {
2218			_event.returnValue = false;
2219			if (_event.preventDefault) _event.preventDefault();
2220		}
2221	});
2222}
2223
2224// function emailPattern($this) {
2225// 	var regex_password = /^[a-zA-Z0-9@.]*$/;
2226// 	$this.keypress(function (event) {
2227// 		var _event = event || window.event;
2228// 		var key = _event.keyCode || _event.which;
2229// 		key = String.fromCharCode(key);
2230// 		if (!regex_password.test(key)) {
2231// 			_event.returnValue = false;
2232// 			if (_event.preventDefault) _event.preventDefault();
2233// 		}
2234// 	});
2235// }
2236
2237function emailPattern($this) {
2238  var regex_password = /^[a-zA-Z0-9@._-]*$/; 
2239  $this.keypress(function (event) {
2240      var _event = event || window.event;
2241      var key = _event.keyCode || _event.which;
2242      key = String.fromCharCode(key);
2243      if (!regex_password.test(key)) {
2244          _event.returnValue = false;
2245          if (_event.preventDefault) _event.preventDefault();
2246      }
2247  });
2248}
2249
2250
2251function keypress_form() {
2252	var regexphone = /^[0-9]$/;
2253	$(
2254		'input[name="phone_number"],input[name="business_number"],input[name="ship_phone_number"], input[name="user_phone_number"], input[name="juristic_phone_number"], input[name="personal_phone_number"], input[name="phone_number_serial"]'
2255	).keypress(function (event) {
2256		var _event = event || window.event;
2257		var key = _event.keyCode || _event.which;
2258		// Allow backspace
2259		if (key === 8) {
2260			return;
2261		}
2262		key = String.fromCharCode(key);
2263		// Check if the key is a digit and the total length is less than 10
2264		if (!regexphone.test(key) || $(this).val().length >= 10) {
2265			_event.preventDefault();
2266		}
2267	});
2268}
2269
2270$(document).ready(function () {
2271	// Call the function when the document is ready
2272	keypress_form();
2273});
2274
2275function thaiKeyPress($this) {
2276	var thai_juras = /^[0-9\x08]$/;
2277	$this.keypress(function (event) {
2278		var _event = event || window.event;
2279		var key = _event.keyCode || _event.which;
2280		key = String.fromCharCode(key);
2281		if (!thai_juras.test(key)) {
2282			_event.returnValue = false;
2283			if (_event.preventDefault) {
2284				_event.preventDefault();
2285			}
2286
2287			if ($this.val().length == 1 && typeof key == "string") {
2288				$this.val("");
2289			}
2290		}
2291	});
2292}
2293
2294function validate_edit_profile($this) {
2295	var form = $this.closest("form");
2296	var pop_footer = $this.closest(".pop-footer");
2297	var pop_body = pop_footer.siblings(".popup-body");
2298	var email_elem = pop_body.find("input[name=user_email]");
2299	var first_name_elem = pop_body.find("input[name=user_first_name]");
2300	var last_name_elem = pop_body.find("input[name=user_last_name]");
2301
2302	var valid = true;
2303	$(".form-group").removeClass("has-danger");
2304	if (!validEmail(email_elem)) {
2305		valid = false;
2306		email_elem.parent().addClass("has-danger");
2307	}
2308
2309	if (first_name_elem.val() === "") {
2310		valid = false;
2311		first_name_elem.parent().addClass("has-danger");
2312	}
2313
2314	if (last_name_elem.val() === "") {
2315		valid = false;
2316		last_name_elem.parent().addClass("has-danger");
2317	}
2318
2319	if (valid) {
2320		form.submit();
2321	}
2322}
2323
2324function filterReview(star, pcode, token) {
2325	$.ajax(window.location.origin + "/api/load_filter_review", {
2326		method: "GET",
2327		async: false,
2328		data: {
2329			token: token,
2330			star: parseInt(star),
2331			pcode: parseInt(pcode),
2332		},
2333		beforeSend: function () {
2334			console.log("sent");
2335			//$('.loader').show();
2336		},
2337	}).done(function (data) {
2338		if (data != "") {
2339			$(".row.review-below").empty();
2340			$(".row.review-below").html(data);
2341			$(".row.review-below").find("span.stars").stars();
2342			$(".row.review-below").find("span.stars-count").starsCount();
2343		} else {
2344			$(".row.review-below").empty();
2345		}
2346	});
2347}
2348
2349function loadMoreReviewAjax(star, pcode, old_max_ind, token) {
2350	$.ajax(window.location.origin + "/api/load_load_more_review", {
2351		method: "GET",
2352		async: false,
2353		data: {
2354			token: token,
2355			star: parseInt(star),
2356			pcode: parseInt(pcode),
2357			oldmaxind: parseInt(old_max_ind),
2358		},
2359		beforeSend: function () {
2360			console.log("sent");
2361			//$('.loader').show();
2362		},
2363	}).done(function (data) {
2364		if (data != "") {
2365			$(".row.review-below .loadmore").remove();
2366			$(".row.review-below").append(data);
2367
2368			$(".row.review-below")
2369				.find(".lm-review-starcal")
2370				.find("span.stars")
2371				.stars();
2372			$(".row.review-below")
2373				.find(".lm-review-starcal")
2374				.find("span.stars-count")
2375				.starsCount();
2376			$(".row.review-below")
2377				.find(".lm-review-starcal")
2378				.removeClass("lm-review-starcal");
2379		}
2380	});
2381}
2382
2383function settimer(data_class, otp_class) {
2384	var timer = "59";
2385	interval = setInterval(function () {
2386		//by parsing integer, I avoid all extra string processing
2387		var seconds = parseInt(timer);
2388		--seconds;
2389		timer = "" + seconds;
2390		if (seconds == 0) {
2391			$(".count-end-resend").html(
2392				'<a data-class="' +
2393					data_class +
2394					'"otp-class="' +
2395					otp_class +
2396					'" onclick="resendOtp($(this))">ส่งรหัส</a>'
2397			);
2398			$(".countdown").html(seconds);
2399			clearInterval(interval);
2400		} else {
2401			$(".countdown").html(seconds);
2402		}
2403	}, 1000);
2404}
2405
2406function resendOtp($this) {
2407	var data_class = $this.attr("data-class");
2408	var otp_class = $this.attr("otp-class");
2409	var find_form_but = $("body").find("." + data_class);
2410	var otp_el = find_form_but.closest("body").find(".popup-otp");
2411	otp_el.find(".box-otp-form.inputs > input[type=number]").val("");
2412	$("p.otp-incorrect").removeClass("active");
2413	sendOtp(find_form_but.closest("form"), otp_el);
2414	settimer(data_class, otp_class);
2415	$(".count-end-resend").html("");
2416}
2417
2418function registerCheckExists($this) {
2419	var frm = new FormData($this.closest("form")[0]);
2420	var this_elem = $this;
2421	var lang = $("html").attr("lang");
2422	if (register_validate(this_elem)) {
2423		$.ajax({
2424			data: frm,
2425			type: "POST",
2426			url: window.location.origin + "/api/register_check_exists",
2427			cache: false,
2428			contentType: false,
2429			processData: false,
2430			dataType: "json",
2431			success: function (arresult) {
2432				if (arresult.rs) {
2433					var form_el = this_elem.closest("form");
2434					var email = form_el.find(".email");
2435					var phone_number = form_el.find(".phone_number");
2436					var phone_number_val = phone_number.find("input").val();
2437					var pass = form_el.find(".pass");
2438					var pass_re = form_el.find(".pass-re");
2439
2440					if (arresult.is_email_exist == 1 || arresult.is_phone_exist == 1) {
2441						if (arresult.is_email_exist == 1) {
2442							if (
2443								!email.find(".form-group").hasClass("error") &&
2444								!email.hasClass("form-group")
2445							) {
2446								email.find(".form-group").addClass("error");
2447							} else if (
2448								!email.hasClass("error") &&
2449								email.hasClass("form-group")
2450							) {
2451								email.addClass("error");
2452							}
2453							email.find(".validate").empty();
2454							if (lang != "en") {
2455								email.find(".validate").html("มี E-mail อยู่ในระบบ");
2456							} else {
2457								email.find(".validate").html("E-mail already exists");
2458							}
2459						} else {
2460							if (
2461								email.find(".form-group").hasClass("error") &&
2462								!email.hasClass("form-group")
2463							) {
2464								email.find(".form-group").removeClass("error");
2465							} else if (
2466								email.hasClass("error") &&
2467								email.hasClass("form-group")
2468							) {
2469								email.removeClass("error");
2470							}
2471						}
2472
2473						if (arresult.is_phone_exist == 1) {
2474							if (
2475								!phone_number.hasClass("error") &&
2476								!phone_number.hasClass("form-group")
2477							) {
2478								phone_number.find(".form-group").addClass("error");
2479							} else if (
2480								!phone_number.hasClass("error") &&
2481								phone_number.hasClass("form-group")
2482							) {
2483								phone_number.addClass("error");
2484							}
2485
2486							if (lang != "en") {
2487								phone_number
2488									.find(".validate")
2489									.html("มีเบอร์โทรศัพท์มือถือนี้อยู่ในระบบ");
2490							} else {
2491								phone_number
2492									.find(".validate")
2493									.html("Phone number already exists");
2494							}
2495						} else {
2496							if (
2497								phone_number.find(".form-group").hasClass("error") &&
2498								!phone_number.hasClass("form-group")
2499							) {
2500								phone_number.find(".form-group").removeClass("error");
2501							} else if (
2502								phone_number.hasClass("error") &&
2503								phone_number.hasClass("form-group")
2504							) {
2505								phone_number.removeClass("error");
2506							}
2507						}
2508					} else if (
2509						arresult.is_email_exist == 0 &&
2510						arresult.is_phone_exist == 0
2511					) {
2512						if (
2513							phone_number.find(".form-group").hasClass("error") &&
2514							!phone_number.hasClass("form-group")
2515						) {
2516							phone_number.find(".form-group").removeClass("error");
2517						} else if (
2518							phone_number.hasClass("error") &&
2519							phone_number.hasClass("form-group")
2520						) {
2521							phone_number.removeClass("error");
2522						}
2523
2524						if (
2525							email.find(".form-group").hasClass("error") &&
2526							!email.hasClass("form-group")
2527						) {
2528							email.find(".form-group").removeClass("error");
2529						} else if (
2530							email.hasClass("error") &&
2531							email.hasClass("form-group")
2532						) {
2533							email.removeClass("error");
2534						}
2535
2536						if (arresult.chk_nor_is_login != 0) {
2537							if (pass.find(".form-group").hasClass("error")) {
2538								pass.find(".form-group").removeClass("error");
2539							}
2540
2541							if (pass_re.find(".form-group").hasClass("error")) {
2542								pass_re.find(".form-group").removeClass("error");
2543							}
2544
2545							if (this_elem.hasClass("login-normal")) {
2546								if (register_validate(this_elem)) {
2547									this_elem
2548										.closest("body")
2549										.find(".popup-otp")
2550										.find(".otp-popup-form")
2551										.find("button.validate")
2552										.addClass("register-normal");
2553									var otp_el = this_elem.closest("body").find(".popup-otp");
2554									var otp_ti_el = otp_el.find(".otp-title");
2555									var otp_title_open = "<b>Please enter OTP sent to +66";
2556									if (lang == "th") {
2557										otp_title_open =
2558											"<b>กรุณากรอกรหัส OTP ที่ส่งไปยังเบอร์ +66";
2559									}
2560									var otp_title_close = "</b>";
2561									var otp_title =
2562										otp_title_open +
2563										phone_number_val[1] +
2564										phone_number_val[2] +
2565										" " +
2566										phone_number_val[3] +
2567										phone_number_val[4] +
2568										phone_number_val[5] +
2569										" " +
2570										phone_number_val[6] +
2571										phone_number_val[7] +
2572										phone_number_val[8] +
2573										phone_number_val[9] +
2574										otp_title_close;
2575									otp_ti_el.empty();
2576									otp_ti_el.html(otp_title);
2577									otp_button =
2578										'<input type="hidden" name="otp-phone" value="' +
2579										phone_number_val +
2580										'"></input>';
2581									otp_el.find("form").prepend(otp_button);
2582									sendOtp(this_elem.closest("form"), otp_el);
2583									popin_otp_name("popup-otp");
2584									settimer("login-normal", "register-normal");
2585								}
2586							} else if (this_elem.hasClass("prod-regis-otp")) {
2587								this_elem
2588									.closest("body")
2589									.find(".popup-otp")
2590									.find(".otp-popup-form")
2591									.find("button.validate")
2592									.addClass("product-register");
2593								var otp_el = this_elem.closest("body").find(".popup-otp");
2594								var otp_ti_el = otp_el.find(".otp-title");
2595								var otp_title_open = "<b>Please enter OTP sent to +66";
2596								if (lang == "th") {
2597									otp_title_open = "<b>กรุณากรอกรหัส OTP ที่ส่งไปยังเบอร์ +66";
2598								}
2599								var otp_title_close = "</b>";
2600								var otp_title =
2601									otp_title_open +
2602									phone_number_val[1] +
2603									phone_number_val[2] +
2604									" " +
2605									phone_number_val[3] +
2606									phone_number_val[4] +
2607									phone_number_val[5] +
2608									" " +
2609									phone_number_val[6] +
2610									phone_number_val[7] +
2611									phone_number_val[8] +
2612									phone_number_val[9] +
2613									otp_title_close;
2614								otp_ti_el.empty();
2615								otp_ti_el.html(otp_title);
2616								otp_button =
2617									'<input type="hidden" name="otp-phone" value="' +
2618									phone_number_val +
2619									'"></input>';
2620								otp_el.find("form").prepend(otp_button);
2621								sendOtp(this_elem.closest("form"), otp_el);
2622								popin_otp_name("popup-otp");
2623							} else if (this_elem.hasClass("popup-chkout-regis")) {
2624								if (register_validate(this_elem)) {
2625									this_elem
2626										.closest("body")
2627										.find(".popup-otp")
2628										.find(".otp-popup-form")
2629										.find("button.validate")
2630										.addClass("popup-chkout-regis");
2631									var otp_el = this_elem.closest("body").find(".popup-otp");
2632									var otp_ti_el = otp_el.find(".otp-title");
2633									var otp_title_open = "<b>Please enter OTP sent to +66";
2634									if (lang == "th") {
2635										otp_title_open =
2636											"<b>กรุณากรอกรหัส OTP ที่ส่งไปยังเบอร์ +66";
2637									}
2638									var otp_title_close = "</b>";
2639									var otp_title =
2640										otp_title_open +
2641										phone_number_val[1] +
2642										phone_number_val[2] +
2643										" " +
2644										phone_number_val[3] +
2645										phone_number_val[4] +
2646										phone_number_val[5] +
2647										" " +
2648										phone_number_val[6] +
2649										phone_number_val[7] +
2650										phone_number_val[8] +
2651										phone_number_val[9] +
2652										otp_title_close;
2653									otp_ti_el.empty();
2654									otp_ti_el.html(otp_title);
2655									otp_button =
2656										'<input type="hidden" name="otp-phone" value="' +
2657										phone_number_val +
2658										'"></input>';
2659									otp_el.find("form").prepend(otp_button);
2660									sendOtp(this_elem.closest("form"), otp_el);
2661									popin_otp_name("popup-otp");
2662								}
2663							}
2664						} else {
2665							this_elem
2666								.closest("body")
2667								.find(".popup-otp")
2668								.find(".otp-popup-form")
2669								.find("button.validate")
2670								.addClass("chk_nor_is_login");
2671							var otp_el = this_elem.closest("body").find(".popup-otp");
2672							var otp_ti_el = otp_el.find(".otp-title");
2673							var otp_title_open = "<b>Please enter OTP sent to +66";
2674							if (lang == "th") {
2675								otp_title_open = "<b>กรุณากรอกรหัส OTP ที่ส่งไปยังเบอร์ +66";
2676							}
2677							var otp_title_close = "</b>";
2678							var otp_title =
2679								otp_title_open +
2680								phone_number_val[1] +
2681								phone_number_val[2] +
2682								" " +
2683								phone_number_val[3] +
2684								phone_number_val[4] +
2685								phone_number_val[5] +
2686								" " +
2687								phone_number_val[6] +
2688								phone_number_val[7] +
2689								phone_number_val[8] +
2690								phone_number_val[9] +
2691								otp_title_close;
2692							otp_ti_el.empty();
2693							otp_ti_el.html(otp_title);
2694							otp_button =
2695								'<input type="hidden" name="otp-phone" value="' +
2696								phone_number_val +
2697								'"></input>';
2698							otp_el.find("form").prepend(otp_button);
2699							sendOtp(this_elem.closest("form"), otp_el);
2700							popin_otp_name("popup-otp");
2701						}
2702					}
2703				}
2704			},
2705		});
2706	}
2707}
2708
2709function register_validate($this) {
2710	validate = true;
2711	var form = $this.closest("form");
2712	var first_name = form.find("input[name=first_name]");
2713	var last_name = form.find("input[name=last_name]");
2714	var email = form.find("input[name=email]");
2715	var password = form.find("input[name=password]");
2716	var password_re = form.find("input[name=password_re]");
2717	var phone_number = form.find("input[name=phone_number]");
2718	var concent_1 = form.find("input[name=concent_1]");
2719	var concent_2 = form.find("input[name=concent_2]");
2720
2721	first_name.closest(".first_name").removeClass("error");
2722	last_name.closest(".last_name").removeClass("error");
2723	email.closest(".email").removeClass("error");
2724	concent_1.closest(".concent_1").removeClass("error");
2725	concent_2.closest(".concent_2").removeClass("error");
2726	password.closest(".pass").removeClass("error");
2727	password_re.closest(".pass-re").removeClass("error");
2728	phone_number.closest(".phone_number").removeClass("error");
2729
2730	var is_scroll = 0;
2731
2732	if (first_name.val() === "") {
2733		validate = false;
2734		first_name.closest(".first_name").addClass("error");
2735		if (is_scroll == 0) {
2736			is_scroll = 1;
2737			$(".box-form-scroll").animate(
2738				{
2739					scrollTop: first_name.offset().top - 350,
2740				},
2741				500
2742			);
2743		}
2744	}
2745
2746	if (last_name.val() === "") {
2747		validate = false;
2748		last_name.closest(".last_name").addClass("error");
2749		if (is_scroll == 0) {
2750			is_scroll = 1;
2751			$(".box-form-scroll").animate(
2752				{
2753					scrollTop: last_name.offset().top - 350,
2754				},
2755				500
2756			);
2757		}
2758	}
2759
2760	if (email.val() === "") {
2761		validate = false;
2762		var e_pat = email.closest(".email").find(".validate");
2763		e_pat.empty();
2764		e_pat.html("กรุณากรอก E-Mail");
2765		email.closest(".email").addClass("error");
2766		if (is_scroll == 0) {
2767			is_scroll = 1;
2768			$(".box-form-scroll").animate(
2769				{
2770					scrollTop: email.offset().top - 350,
2771				},
2772				500
2773			);
2774		}
2775	}
2776
2777	if (!validEmail(email)) {
2778		validate = false;
2779		if (is_scroll == 0) {
2780			is_scroll = 1;
2781			$(".box-form-scroll").animate(
2782				{
2783					scrollTop: email.offset().top - 350,
2784				},
2785				500
2786			);
2787		}
2788	}
2789
2790	if (!$this.hasClass("prod-regis-otp")) {
2791		if (password.val() !== "" && password_re.val() !== "") {
2792			if (password.val().length < 6 || password_re.val().length < 6) {
2793				if (password.val().length < 6) {
2794					password
2795						.closest(".pass")
2796						.find(".validate")
2797						.html("รหัสผ่านต้องมีมากกว่า 6 ตัว");
2798					password.closest(".pass").addClass("error");
2799				}
2800				if (password_re.val().length < 6) {
2801					password_re
2802						.closest(".pass-re")
2803						.find(".validate")
2804						.html("รหัสผ่านต้องมีมากกว่า 6 ตัว");
2805					password_re.closest(".pass-re").addClass("error");
2806				}
2807
2808				validate = false;
2809				if (is_scroll == 0) {
2810					is_scroll = 1;
2811					$(".box-form-scroll").animate(
2812						{
2813							scrollTop: password.offset().top - 350,
2814						},
2815						500
2816					);
2817				}
2818			} else {
2819				if (password.val() !== password_re.val()) {
2820					password.closest(".pass").find(".validate").html("รหัสผ่านไม่ตรงกัน");
2821					password_re
2822						.closest(".pass-re")
2823						.find(".validate")
2824						.html("รหัสผ่านไม่ตรงกัน");
2825					password.closest(".pass").addClass("error");
2826					password_re.closest(".pass-re").addClass("error");
2827					validate = false;
2828					if (is_scroll == 0) {
2829						is_scroll = 1;
2830						$(".box-form-scroll").animate(
2831							{
2832								scrollTop: password.offset().top - 350,
2833							},
2834							500
2835						);
2836					}
2837				}
2838			}
2839		} else {
2840			if (password.val() === "") {
2841				password.closest(".pass").find(".validate").html("กรุณากรอกรหัสผ่าน");
2842				password.closest(".pass").addClass("error");
2843				validate = false;
2844				if (is_scroll == 0) {
2845					is_scroll = 1;
2846					$(".box-form-scroll").animate(
2847						{
2848							scrollTop: password.offset().top - 350,
2849						},
2850						500
2851					);
2852				}
2853			}
2854
2855			if (password_re.val() === "") {
2856				password_re
2857					.closest(".pass-re")
2858					.find(".validate")
2859					.html("กรุณากรอกรหัสผ่าน");
2860				password_re.closest(".pass-re").addClass("error");
2861				validate = false;
2862				if (is_scroll == 0) {
2863					is_scroll = 1;
2864					$(".box-form-scroll").animate(
2865						{
2866							scrollTop: password_re.offset().top - 350,
2867						},
2868						500
2869					);
2870				}
2871			}
2872		}
2873	}
2874
2875	if (phone_number.val() === "") {
2876		phone_number
2877			.closest(".phone_number")
2878			.find(".validate")
2879			.html("กรุณากรอกเบอร์โทรศัพท์");
2880		phone_number.closest(".phone_number").addClass("error");
2881		validate = false;
2882		if (is_scroll == 0) {
2883			is_scroll = 1;
2884			$(".box-form-scroll").animate(
2885				{
2886					scrollTop: phone_number.offset().top - 350,
2887				},
2888				500
2889			);
2890		}
2891	} else if (phone_number.val().length != 10) {
2892		phone_number
2893			.closest(".phone_number")
2894			.find(".validate")
2895			.html("กรุณากรอกเบอร์โทรศัพท์ให้ครบ 10 หลัก");
2896		phone_number.closest(".phone_number").addClass("error");
2897		validate = false;
2898		if (is_scroll == 0) {
2899			is_scroll = 1;
2900			$(".box-form-scroll").animate(
2901				{
2902					scrollTop: phone_number.offset().top - 350,
2903				},
2904				500
2905			);
2906		}
2907	}
2908
2909	if (!concent_2.is(":checked")) {
2910		validate = false;
2911		concent_2.closest(".concent_2").addClass("error");
2912	}
2913
2914	return validate;
2915}
2916
2917function guestCheckoutCheckExists($this) {
2918	var frm = new FormData($this.closest("form")[0]);
2919	var lang = $("html").attr("lang");
2920	if (guest_checkout_validate($this)) {
2921		$.ajax({
2922			data: frm,
2923			type: "POST",
2924			url: window.location.origin + "/api/guest_check_exists",
2925			cache: false,
2926			contentType: false,
2927			processData: false,
2928			dataType: "json",
2929			success: function (arresult) {
2930				if (arresult.rs) {
2931					var form_el = $this.closest("form");
2932					var email = form_el.find(".email");
2933					var phone_number = form_el.find(".phone_number");
2934					var phone_number_val = phone_number.find("input").val();
2935					var is_scroll = 0;
2936
2937					if (arresult.is_email_exist == 1 || arresult.is_phone_exist == 1) {
2938						if (arresult.is_email_exist == 1) {
2939							if (
2940								!email.find(".form-group").hasClass("error") &&
2941								!email.hasClass("form-group")
2942							) {
2943								email.find(".form-group").addClass("error");
2944							} else if (
2945								!email.hasClass("error") &&
2946								email.hasClass("form-group")
2947							) {
2948								email.addClass("error");
2949							}
2950							email.find(".validate").empty();
2951							if (lang != "en") {
2952								email.find(".validate").html("มี E-mail อยู่ในระบบ");
2953							} else {
2954								email.find(".validate").html("E-mail already exists");
2955							}
2956							if (is_scroll == 0) {
2957								is_scroll = 1;
2958								$("html, body").animate(
2959									{
2960										scrollTop: email.offset().top - 200,
2961									},
2962									500
2963								);
2964							}
2965						} else {
2966							if (
2967								email.find(".form-group").hasClass("error") &&
2968								!email.hasClass("form-group")
2969							) {
2970								email.find(".form-group").removeClass("error");
2971							} else if (
2972								email.hasClass("error") &&
2973								email.hasClass("form-group")
2974							) {
2975								email.removeClass("error");
2976							}
2977						}
2978
2979						if (arresult.is_phone_exist == 1) {
2980							if (
2981								!phone_number.hasClass("error") &&
2982								!phone_number.hasClass("form-group")
2983							) {
2984								phone_number.find(".form-group").addClass("error");
2985							} else if (
2986								!phone_number.hasClass("error") &&
2987								phone_number.hasClass("form-group")
2988							) {
2989								phone_number.addClass("error");
2990							}
2991
2992							if (lang != "en") {
2993								phone_number
2994									.find(".validate")
2995									.html("มีเบอร์โทรศัพท์มือถือนี้อยู่ในระบบ");
2996							} else {
2997								phone_number
2998									.find(".validate")
2999									.html("Phone number already exists");
3000							}
3001							if (is_scroll == 0) {
3002								is_scroll = 1;
3003								$("html, body").animate(
3004									{
3005										scrollTop: phone_number.offset().top - 200,
3006									},
3007									500
3008								);
3009							}
3010						} else {
3011							if (
3012								phone_number.find(".form-group").hasClass("error") &&
3013								!phone_number.hasClass("form-group")
3014							) {
3015								phone_number.find(".form-group").removeClass("error");
3016							} else if (
3017								phone_number.hasClass("error") &&
3018								phone_number.hasClass("form-group")
3019							) {
3020								phone_number.removeClass("error");
3021							}
3022						}
3023					} else if (
3024						arresult.is_email_exist == 0 &&
3025						arresult.is_phone_exist == 0
3026					) {
3027						if (
3028							phone_number.find(".form-group").hasClass("error") &&
3029							!phone_number.hasClass("form-group")
3030						) {
3031							phone_number.find(".form-group").removeClass("error");
3032						} else if (
3033							phone_number.hasClass("error") &&
3034							phone_number.hasClass("form-group")
3035						) {
3036							phone_number.removeClass("error");
3037						}
3038
3039						if (
3040							email.find(".form-group").hasClass("error") &&
3041							!email.hasClass("form-group")
3042						) {
3043							email.find(".form-group").removeClass("error");
3044						} else if (
3045							email.hasClass("error") &&
3046							email.hasClass("form-group")
3047						) {
3048							email.removeClass("error");
3049						}
3050
3051						var is_notify = $(".form-taxinv-nolog");
3052						var tab_btn = is_notify.find(".tab-btn.active");
3053						var tab_index = parseInt(tab_btn.attr("data-tab-list"));
3054						if (tab_index == 0) {
3055							var tab = $(".tab-list.accor-ref-0");
3056						} else {
3057							var tab = $(".tab-list.accor-ref-1");
3058						}
3059
3060						var concent = tab.find(".concent_2").find("input");
3061						var is_tax = $("input[name=is_taxinv]").prop("checked");
3062
3063						if ((is_tax == 1 && concent.prop("checked")) || is_tax == 0) {
3064							$this
3065								.closest("body")
3066								.find(".popup-otp")
3067								.find(".otp-popup-form")
3068								.find("button.validate")
3069								.addClass("guest-chk-out");
3070							var otp_el = $this.closest("body").find(".popup-otp");
3071							var otp_ti_el = otp_el.find(".otp-title");
3072							var otp_title_open = "<b>Please enter OTP sent to +66";
3073							if (lang == "th") {
3074								otp_title_open = "<b>กรุณากรอกรหัส OTP ที่ส่งไปยังเบอร์ +66";
3075							}
3076							var otp_title_close = "</b>";
3077							var otp_title =
3078								otp_title_open +
3079								phone_number_val[1] +
3080								phone_number_val[2] +
3081								" " +
3082								phone_number_val[3] +
3083								phone_number_val[4] +
3084								phone_number_val[5] +
3085								" " +
3086								phone_number_val[6] +
3087								phone_number_val[7] +
3088								phone_number_val[8] +
3089								phone_number_val[9] +
3090								otp_title_close;
3091							otp_ti_el.empty();
3092							otp_ti_el.html(otp_title);
3093							otp_button =
3094								'<input type="hidden" name="otp-phone" value="' +
3095								phone_number_val +
3096								'"></input>';
3097							otp_el.find("form").prepend(otp_button);
3098							sendOtp($this.closest("form"), otp_el);
3099							popin_otp_name("popup-otp");
3100							settimer("checkout-regis", "");
3101						}
3102					}
3103				}
3104			},
3105		});
3106	}
3107}
3108
3109function guest_checkout_validate($this) {
3110	validate = true;
3111	var form = $this.closest("form");
3112	var first_name = form.find("input[name=ship_first_name]");
3113	var last_name = form.find("input[name=ship_last_name]");
3114	var email = form.find("input[name=ship_email]");
3115	var phone_number = form.find("input[name=ship_phone_number]");
3116	var address_detail = form.find("input[name=ship_address_detail]");
3117	var concent = form.find("input[name=concent]");
3118
3119	var is_tax = $("input[name=is_taxinv]");
3120	var province = form.find("select[name=ship_province]");
3121	var district = form.find("select[name=ship_district]");
3122	var sub_district = form.find("select[name=ship_sub_district");
3123	var zip_code = form.find("select[name=ship_zip_code");
3124
3125	first_name.closest(".first_name").removeClass("error");
3126	last_name.closest(".last_name").removeClass("error");
3127	email.closest(".email").removeClass("error");
3128
3129	district.closest(".district").removeClass("error");
3130	sub_district.closest(".sub-district").removeClass("error");
3131	province.closest(".province").removeClass("error");
3132	phone_number.closest(".phone_number").removeClass("error");
3133	address_detail.closest(".address_detail").removeClass("error");
3134	concent.closest(".concent_2").removeClass("error");
3135
3136	var is_scroll = 0;
3137	if (first_name.val() === "") {
3138		validate = false;
3139		first_name.closest(".first_name").addClass("error");
3140		if (is_scroll == 0) {
3141			is_scroll = 1;
3142			$("html, body").animate(
3143				{
3144					scrollTop: first_name.offset().top - 200,
3145				},
3146				500
3147			);
3148		}
3149	}
3150
3151	if (last_name.val() === "") {
3152		validate = false;
3153		last_name.closest(".last_name").addClass("error");
3154		if (is_scroll == 0) {
3155			is_scroll = 1;
3156			$("html, body").animate(
3157				{
3158					scrollTop: last_name.offset().top - 200,
3159				},
3160				500
3161			);
3162		}
3163	}
3164
3165	if (email.val() === "") {
3166		validate = false;
3167		var e_pat = email.closest(".email").find(".validate");
3168		e_pat.empty();
3169		e_pat.html("กรุณากรอก E-Mail");
3170		email.closest(".email").addClass("error");
3171		if (is_scroll == 0) {
3172			is_scroll = 1;
3173			$("html, body").animate(
3174				{
3175					scrollTop: email.offset().top - 200,
3176				},
3177				500
3178			);
3179		}
3180	}
3181
3182	if (!validEmail(email)) {
3183		validate = false;
3184		var e_pat = email.closest(".email").find(".validate");
3185		e_pat.empty();
3186		e_pat.html("รูปแบบ E-Mail ไม่ถูกต้อง");
3187		email.closest(".email").addClass("error");
3188		if (is_scroll == 0) {
3189			is_scroll = 1;
3190			$("html, body").animate(
3191				{
3192					scrollTop: email.offset().top - 200,
3193				},
3194				500
3195			);
3196		}
3197	}
3198
3199	if (phone_number.val() === "") {
3200		phone_number
3201			.closest(".phone_number")
3202			.find(".validate")
3203			.html("กรุณากรอกเบอร์โทรศัพท์");
3204		phone_number.closest(".phone_number").addClass("error");
3205		if (is_scroll == 0) {
3206			is_scroll = 1;
3207			$("html, body").animate(
3208				{
3209					scrollTop: phone_number.offset().top - 200,
3210				},
3211				500
3212			);
3213		}
3214	} else if (phone_number.val().length != 10) {
3215		phone_number
3216			.closest(".phone_number")
3217			.find(".validate")
3218			.html("กรุณากรอกเบอร์โทรศัพท์ให้ครบ 10 หลัก");
3219		phone_number.closest(".phone_number").addClass("error");
3220		if (is_scroll == 0) {
3221			is_scroll = 1;
3222			$("html, body").animate(
3223				{
3224					scrollTop: phone_number.offset().top - 200,
3225				},
3226				500
3227			);
3228		}
3229	}
3230
3231	if (address_detail.val() === "") {
3232		validate = false;
3233		address_detail.closest(".address_detail").addClass("error");
3234		if (is_scroll == 0) {
3235			is_scroll = 1;
3236			$("html, body").animate(
3237				{
3238					scrollTop: first_name.offset().top - 200,
3239				},
3240				500
3241			);
3242		}
3243	}
3244
3245	if (province.val() == 0) {
3246		province.closest(".province").addClass("error");
3247		validate = false;
3248	} else {
3249		if (district.val() == "") {
3250			district.closest(".district").addClass("error");
3251			validate = false;
3252		} else {
3253			if (sub_district.val() == "") {
3254				sub_district.closest(".sub-district").addClass("error");
3255				validate = false;
3256			} else {
3257				if (zip_code.val() == "") {
3258					zip_code.closest(".zip-code").addClass("error");
3259					validate = false;
3260				}
3261			}
3262		}
3263	}
3264
3265	if (is_tax.prop("checked")) {
3266		var tax_inv_wrap = $(".form-taxinv-nolog");
3267		var active_tab = tax_inv_wrap.find(".tab-btn.active");
3268
3269		if (active_tab.attr("data-tab-list") == 0) {
3270			var tab_body = tax_inv_wrap.find(".accor-ref-0");
3271			var id_card_elem = tab_body.find("input[name=personal_id_card_number]");
3272			var personal_first_name = tab_body.find(
3273				"input[name=personal_first_name]"
3274			);
3275			var personal_last_name = tab_body.find("input[name=personal_last_name]");
3276			var personal_phone_number = tab_body.find(
3277				"input[name=personal_phone_number]"
3278			);
3279			var personal_address_detail = tab_body.find(
3280				"input[name=personal_address_detail]"
3281			);
3282			var personal_province = tab_body.find("select[name=personal_province]");
3283			var personal_district = tab_body.find("select[name=personal_district]");
3284			var personal_sub_district = tab_body.find(
3285				"select[name=personal_sub_district"
3286			);
3287
3288			personal_first_name.parent().removeClass("error");
3289			personal_last_name.parent().removeClass("error");
3290			id_card_elem.parent().removeClass("error");
3291			personal_phone_number.parent().parent().removeClass("error");
3292			personal_address_detail.parent().removeClass("error");
3293			personal_province.closest(".province").removeClass("error");
3294			personal_district.closest(".district").removeClass("error");
3295			personal_sub_district.closest(".sub-district").removeClass("error");
3296
3297			if (!thaiIdvalidate(id_card_elem) && id_card_elem.val() != "") {
3298				valid = false;
3299				id_card_elem.parent().addClass("error");
3300				id_card_elem
3301					.parent()
3302					.find(".validate")
3303					.html("รูปแบบเลขบัตรประชาชนไม่ถูกต้อง");
3304			} else if (!thaiIdvalidate(id_card_elem) && id_card_elem.val() == "") {
3305				valid = false;
3306				id_card_elem.parent().addClass("error");
3307				id_card_elem.parent().find(".validate").html("กรุณากรอกเลขบัตรประชาชน");
3308			}
3309
3310			if (personal_first_name.val() === "") {
3311				valid = false;
3312				personal_first_name.parent().addClass("error");
3313				if (is_scroll == 0) {
3314					is_scroll = 1;
3315					$("html, body").animate(
3316						{
3317							scrollTop: personal_first_name.offset().top - 850,
3318						},
3319						500
3320					);
3321				}
3322			}
3323
3324			if (personal_last_name.val() === "") {
3325				valid = false;
3326				personal_last_name.parent().addClass("error");
3327				if (is_scroll == 0) {
3328					is_scroll = 1;
3329					$("html, body").animate(
3330						{
3331							scrollTop: personal_last_name.offset().top - 850,
3332						},
3333						500
3334					);
3335				}
3336			}
3337
3338			if (personal_phone_number.val() === "") {
3339				personal_phone_number
3340					.parent()
3341					.parent()
3342					.find(".validate")
3343					.html("กรุณากรอกเบอร์โทรศัพท์");
3344				personal_phone_number.parent().parent().addClass("error");
3345				valid = false;
3346				if (is_scroll == 0) {
3347					is_scroll = 1;
3348					$("html, body").animate(
3349						{
3350							scrollTop: personal_phone_number.offset().top - 850,
3351						},
3352						500
3353					);
3354				}
3355			} else if (personal_phone_number.val().length != 10) {
3356				personal_phone_number
3357					.parent()
3358					.parent()
3359					.find(".validate")
3360					.html("กรุณากรอกเบอร์โทรศัพท์ให้ครบ 10 หลัก");
3361				personal_phone_number.parent().parent().addClass("error");
3362				valid = false;
3363				if (is_scroll == 0) {
3364					is_scroll = 1;
3365					$("html, body").animate(
3366						{
3367							scrollTop: personal_phone_number.offset().top - 200,
3368						},
3369						500
3370					);
3371				}
3372			}
3373
3374			if (personal_address_detail.val() === "") {
3375				valid = false;
3376				personal_address_detail.parent().addClass("error");
3377				if (is_scroll == 0) {
3378					is_scroll = 1;
3379					$("html, body").animate(
3380						{
3381							scrollTop: personal_address_detail.offset().top - 200,
3382						},
3383						500
3384					);
3385				}
3386			}
3387			if (personal_province.val() == 0) {
3388				valid = false;
3389				personal_province.closest(".province").addClass("error");
3390				if (is_scroll == 0) {
3391					is_scroll = 1;
3392					$("html, body").animate(
3393						{
3394							scrollTop: personal_province.offset().top - 200,
3395						},
3396						500
3397					);
3398				}
3399			} else {
3400				if (personal_district.val() == "") {
3401					valid = false;
3402					personal_district.closest(".district").addClass("error");
3403					if (is_scroll == 0) {
3404						is_scroll = 1;
3405						$("html, body").animate(
3406							{
3407								scrollTop: personal_district.offset().top - 200,
3408							},
3409							500
3410						);
3411					}
3412				} else {
3413					if (personal_sub_district.val() == "") {
3414						valid = false;
3415						personal_sub_district.closest(".sub-district").addClass("error");
3416						if (is_scroll == 0) {
3417							is_scroll = 1;
3418							$("html, body").animate(
3419								{
3420									scrollTop: personal_sub_district.offset().top - 200,
3421								},
3422								500
3423							);
3424						}
3425					}
3426				}
3427			}
3428		} else if (active_tab.attr("data-tab-list") == 1) {
3429			var tab_body = pop_body.find(".accor-ref-1");
3430			var jurastic_address_detail = pop_body.find(
3431				"input[name=jurastic_address_detail]"
3432			);
3433			var jurastic_province = pop_body.find("select[name=jurastic_province]");
3434			var jurastic_district = pop_body.find("select[name=jurastic_district]");
3435			var jurastic_sub_district = pop_body.find(
3436				"select[name=jurastic_sub_district"
3437			);
3438			var jurastic_phone_number = pop_body.find(
3439				"input[name=jurastic_phone_number]"
3440			);
3441			var jurastic_id = pop_body.find("input[name=jurastic_id");
3442			var jurastic_name = pop_body.find("input[name=jurastic_name");
3443
3444			jurastic_id.closest(".jurastic_id").removeClass("error");
3445			jurastic_name.closest(".jurastic_name").removeClass("error");
3446			jurastic_phone_number
3447				.closest(".jurastic_phone_number")
3448				.removeClass("error");
3449			jurastic_address_detail
3450				.closest(".jurastic_address_detail")
3451				.removeClass("error");
3452			jurastic_province.closest(".province").removeClass("error");
3453			jurastic_district.closest(".district").removeClass("error");
3454			jurastic_sub_district.closest(".sub-district").removeClass("error");
3455
3456			if (!thaiIdvalidate(jurastic_id) && jurastic_id.val() != "") {
3457				valid = false;
3458				jurastic_id.closest(".jurastic_id").addClass("error");
3459				jurastic_id
3460					.closest(".jurastic_id")
3461					.find(".validate")
3462					.html("รูปแบบหมายเลขเลขผู้เสียภาษีไม่ถูกต้อง");
3463			} else if (!thaiIdvalidate(jurastic_id) && jurastic_id.val() == "") {
3464				valid = false;
3465				jurastic_id.closest(".jurastic_id").addClass("error");
3466				jurastic_id
3467					.closest(".jurastic_id")
3468					.find(".validate")
3469					.html("กรุณากรอกหมายเลขเลขผู้เสียภาษี");
3470			}
3471
3472			if (jurastic_name.val() === "") {
3473				valid = false;
3474				jurastic_name.closest(".jurastic_name").addClass("error");
3475				if (is_scroll == 0) {
3476					is_scroll = 1;
3477					$("html, body").animate(
3478						{
3479							scrollTop: jurastic_name.offset().top - 200,
3480						},
3481						500
3482					);
3483				}
3484			}
3485
3486			if (jurastic_phone_number.val() === "") {
3487				jurastic_phone_number
3488					.closest(".jurastic_phone_number")
3489					.find(".validate")
3490					.html("กรุณากรอกเบอร์โทรศัพท์");
3491				jurastic_phone_number
3492					.closest(".jurastic_phone_number")
3493					.addClass("error");
3494				valid = false;
3495				if (is_scroll == 0) {
3496					is_scroll = 1;
3497					jurastic_phone_number.closest(".popup-body").animate(
3498						{
3499							scrollTop: jurastic_phone_number.offset().top - 200,
3500						},
3501						500
3502					);
3503				}
3504			} else if (jurastic_phone_number.val().length != 10) {
3505				jurastic_phone_number
3506					.closest(".jurastic_phone_number")
3507					.find(".validate")
3508					.html("กรุณากรอกเบอร์โทรศัพท์ให้ครบ 10 หลัก");
3509				personal_phone_number
3510					.closest(".jurastic_phone_number")
3511					.addClass("error");
3512				valid = false;
3513				if (is_scroll == 0) {
3514					is_scroll = 1;
3515					$("html, body").animate(
3516						{
3517							scrollTop: jurastic_phone_number.offset().top - 200,
3518						},
3519						500
3520					);
3521				}
3522			}
3523
3524			if (jurastic_address_detail.val() === "") {
3525				valid = false;
3526				jurastic_address_detail
3527					.closest(".jurastic_address_detail")
3528					.addClass("error");
3529				if (is_scroll == 0) {
3530					is_scroll = 1;
3531					$("html, body").animate(
3532						{
3533							scrollTop: jurastic_address_detail.offset().top - 200,
3534						},
3535						500
3536					);
3537				}
3538			}
3539
3540			if (jurastic_province.val() == 0) {
3541				valid = false;
3542				$("html, body").addClass("error");
3543				if (is_scroll == 0) {
3544					is_scroll = 1;
3545					jurastic_province.closest(".popup-body").animate(
3546						{
3547							scrollTop: jurastic_province.offset().top - 200,
3548						},
3549						500
3550					);
3551				}
3552			} else {
3553				if (jurastic_district.val() == "") {
3554					valid = false;
3555					jurastic_district.closest(".district").addClass("error");
3556					if (is_scroll == 0) {
3557						is_scroll = 1;
3558						$("html, body").animate(
3559							{
3560								scrollTop: jurastic_district.offset().top - 200,
3561							},
3562							500
3563						);
3564					}
3565				} else {
3566					if (jurastic_sub_district.val() == 0) {
3567						valid = false;
3568						jurastic_sub_district.closest(".sub-district").addClass("error");
3569						if (is_scroll == 0) {
3570							is_scroll = 1;
3571							$("html, body").animate(
3572								{
3573									scrollTop: jurastic_sub_district.offset().top - 200,
3574								},
3575								500
3576							);
3577						}
3578					}
3579				}
3580			}
3581		}
3582	}
3583
3584	if (!concent.is(":checked")) {
3585		validate = false;
3586		concent.closest(".concent_2").addClass("error");
3587	}
3588
3589	return validate;
3590}
3591
3592function getMemberData($this) {
3593	var id = $this.attr("data-mem-id");
3594	var token = $this
3595		.closest(".row")
3596		.find("form")
3597		.find("input[name=token]")
3598		.val();
3599
3600	$.ajax(window.location.origin + "/api/load_mem_data_view_id", {
3601		method: "GET",
3602		async: false,
3603		data: {
3604			token: token,
3605			"data-id": parseInt(id),
3606		},
3607		beforeSend: function () {
3608			console.log("sent");
3609			//$('.loader').show();
3610		},
3611	}).done(function (data) {
3612		if (data != "") {
3613			var row_el = $this
3614				.closest("body")
3615				.find(".popup-edit-profile")
3616				.find(".popup-body .box-form .row");
3617			row_el.empty();
3618			row_el.html(data);
3619		}
3620	});
3621}
3622
3623function getShipAddress($this) {
3624	var id = $this.attr("data-addr-id");
3625	var token = $this.closest("form").find("input[name=token]").val();
3626
3627	$.ajax(window.location.origin + "/api/load_ship_addr_view_by_id", {
3628		method: "GET",
3629		async: false,
3630		data: {
3631			token: token,
3632			"data-id": parseInt(id),
3633		},
3634		beforeSend: function () {
3635			console.log("sent");
3636			//$('.loader').show();
3637		},
3638	}).done(function (data) {
3639		if (data != "") {
3640			var popup_elem = $this.closest("body").find(".popup-edit-address-login");
3641			var row_el = popup_elem.find(".popup-body .box-form .row");
3642			var update_but_elem = popup_elem.find(".edit-addr-ship");
3643			if ($this.hasClass("edit-addr-check-out")) {
3644				update_but_elem.addClass("edit-addr-check-out");
3645			} else if ($this.hasClass("edit-addr-profile")) {
3646				update_but_elem.addClass("edit-addr-profile");
3647			}
3648			row_el.empty();
3649			row_el.html(data);
3650			$("select").selectpicker("refresh");
3651		}
3652	});
3653
3654	$(
3655		"input[type=text],input[type=password],input[type=email],input[type=tel]"
3656	).on("cut copy paste", function (e) {
3657		e.preventDefault();
3658	});
3659}
3660
3661function getTaxData($this) {
3662	var id = $this.attr("data-addr-id");
3663	var token = $this
3664		.closest(".box-form")
3665		.siblings("form")
3666		.find("input[name=token]");
3667	if (token.length == 0) {
3668		var token_val = $this
3669			.closest(".box-form")
3670			.closest("form")
3671			.find("input[name=token]")
3672			.val();
3673	} else {
3674		var token_val = $this
3675			.closest(".box-form")
3676			.siblings("form")
3677			.find("input[name=token]")
3678			.val();
3679	}
3680
3681	$.ajax(window.location.origin + "/api/load_tax_addr_view_by_id", {
3682		method: "GET",
3683		async: false,
3684		data: {
3685			token: token_val,
3686			"data-id": parseInt(id),
3687		},
3688		beforeSend: function () {
3689			console.log("sent");
3690			//$('.loader').show();
3691		},
3692	}).done(function (data) {
3693		if (data != "") {
3694			var row_el = $this
3695				.closest("body")
3696				.find(".popup-edit-tax-invoice")
3697				.find(".popup-body .box-form");
3698			row_el.empty();
3699			row_el.html(data);
3700			$("select").selectpicker("refresh");
3701			$(
3702				"input[type=text],input[type=password],input[type=email],input[type=tel]"
3703			).on("cut copy paste", function (e) {
3704				e.preventDefault();
3705			});
3706		}
3707	});
3708}
3709
3710function updateTaxAddress($this) {
3711	var frm = new FormData($this.closest("form")[0]);
3712	var pop_footer = $this.closest(".pop-footer");
3713	var pop_body = pop_footer.siblings(".popup-body");
3714	var box_tab_elem = pop_body.find(".box-tab");
3715	var active_tab = box_tab_elem.find(".tab-btn.active");
3716	var valid = true;
3717	var is_scroll = 0;
3718
3719	var address_name = pop_body.find("input[name=address_name]");
3720	address_name.closest(".address_name").removeClass("error");
3721	if (address_name.val() === "") {
3722		valid = false;
3723		address_name.closest(".address_name").addClass("error");
3724		if (is_scroll == 0) {
3725			is_scroll = 1;
3726			address_name.closest(".popup-body").animate(
3727				{
3728					scrollTop: address_name.offset().top - 350,
3729				},
3730				500
3731			);
3732		}
3733	}
3734
3735	if (active_tab.attr("data-tab-list") == 0) {
3736		var tab_body = pop_body.find(".accor-ref-0");
3737		var id_card_elem = tab_body.find("input[name=id_card_number]");
3738		var first_name = pop_body.find("input[name=first_name]");
3739		var last_name = pop_body.find("input[name=last_name]");
3740		var personal_phone_number = pop_body.find(
3741			"input[name=personal_phone_number]"
3742		);
3743		var personal_address_detail = pop_body.find(
3744			"input[name=personal_address_detail]"
3745		);
3746		var personal_province = pop_body.find("select[name=personal_province]");
3747		var personal_district = pop_body.find("select[name=personal_district]");
3748		var personal_sub_district = pop_body.find(
3749			"select[name=personal_sub_district"
3750		);
3751
3752		first_name.closest(".first_name").removeClass("error");
3753		last_name.closest(".last_name").removeClass("error");
3754		id_card_elem.closest(".id_card_number").removeClass("error");
3755		personal_phone_number
3756			.closest(".personal_phone_number")
3757			.removeClass("error");
3758		personal_address_detail
3759			.closest(".personal_address_detail")
3760			.removeClass("error");
3761		personal_province.closest(".province").removeClass("error");
3762		personal_district.closest(".district").removeClass("error");
3763		personal_sub_district.closest(".sub-district").removeClass("error");
3764
3765		if (!thaiIdvalidate(id_card_elem) && id_card_elem.val() != "") {
3766			valid = false;
3767			id_card_elem.closest(".id_card_number").addClass("error");
3768			id_card_elem
3769				.closest(".id_card_number")
3770				.find(".validate")
3771				.html("รูปแบบเลขบัตรประชาชนไม่ถูกต้อง");
3772		} else if (!thaiIdvalidate(id_card_elem) && id_card_elem.val() == "") {
3773			valid = false;
3774			id_card_elem.closest(".id_card_number").addClass("error");
3775			id_card_elem
3776				.closest(".id_card_number")
3777				.find(".validate")
3778				.html("กรุณากรอกเลขบัตรประชาชน");
3779		}
3780
3781		if (first_name.val() === "") {
3782			valid = false;
3783			first_name.closest(".first_name").addClass("error");
3784			if (is_scroll == 0) {
3785				is_scroll = 1;
3786				first_name.closest(".popup-body").animate(
3787					{
3788						scrollTop: first_name.offset().top - 850,
3789					},
3790					500
3791				);
3792			}
3793		}
3794
3795		if (last_name.val() === "") {
3796			valid = false;
3797			last_name.closest(".last_name").addClass("error");
3798			if (is_scroll == 0) {
3799				is_scroll = 1;
3800				last_name.closest(".popup-body").animate(
3801					{
3802						scrollTop: last_name.offset().top - 850,
3803					},
3804					500
3805				);
3806			}
3807		}
3808
3809		if (personal_phone_number.val() === "") {
3810			personal_phone_number
3811				.closest(".personal_phone_number")
3812				.find(".validate")
3813				.html("กรุณากรอกเบอร์โทรศัพท์");
3814			personal_phone_number.closest(".personal_phone_number").addClass("error");
3815			valid = false;
3816			if (is_scroll == 0) {
3817				is_scroll = 1;
3818				personal_phone_number.closest(".popup-body").animate(
3819					{
3820						scrollTop: personal_phone_number.offset().top - 850,
3821					},
3822					500
3823				);
3824			}
3825		} else if (personal_phone_number.val().length != 10) {
3826			personal_phone_number
3827				.closest(".personal_phone_number")
3828				.find(".validate")
3829				.html("กรุณากรอกเบอร์โทรศัพท์ให้ครบ 10 หลัก");
3830			personal_phone_number.closest(".personal_phone_number").addClass("error");
3831			valid = false;
3832			if (is_scroll == 0) {
3833				is_scroll = 1;
3834				personal_phone_number.closest(".popup-body").animate(
3835					{
3836						scrollTop: personal_phone_number.offset().top - 850,
3837					},
3838					500
3839				);
3840			}
3841		}
3842
3843		if (personal_address_detail.val() === "") {
3844			valid = false;
3845			personal_address_detail
3846				.closest(".personal_address_detail")
3847				.addClass("error");
3848			if (is_scroll == 0) {
3849				is_scroll = 1;
3850				personal_address_detail.closest(".popup-body").animate(
3851					{
3852						scrollTop: personal_address_detail.offset().top - 850,
3853					},
3854					500
3855				);
3856			}
3857		}
3858
3859		if (personal_province.val() == 0) {
3860			valid = false;
3861			personal_province.closest(".province").addClass("error");
3862			if (is_scroll == 0) {
3863				is_scroll = 1;
3864				personal_province.closest(".popup-body").animate(
3865					{
3866						scrollTop: personal_province.offset().top - 850,
3867					},
3868					500
3869				);
3870			}
3871		}
3872
3873		if (personal_province.val() != 0 && personal_district.val() == -1) {
3874			valid = false;
3875			personal_district.closest(".district").addClass("error");
3876			if (is_scroll == 0) {
3877				is_scroll = 1;
3878				personal_district.closest(".popup-body").animate(
3879					{
3880						scrollTop: personal_district.offset().top - 850,
3881					},
3882					500
3883				);
3884			}
3885		}
3886
3887		if (
3888			personal_province.val() != 0 &&
3889			personal_district.val() != -1 &&
3890			personal_sub_district.val() == 0
3891		) {
3892			valid = false;
3893			personal_sub_district.closest(".sub-district").addClass("error");
3894			if (is_scroll == 0) {
3895				is_scroll = 1;
3896				personal_sub_districtt.closest(".popup-body").animate(
3897					{
3898						scrollTop: personal_sub_district.offset().top - 850,
3899					},
3900					500
3901				);
3902			}
3903		}
3904	} else if (active_tab.attr("data-tab-list") == 1) {
3905		var tab_body = pop_body.find(".accor-ref-1");
3906		var jurastic_address_detail = pop_body.find(
3907			"input[name=jurastic_address_detail]"
3908		);
3909		var jurastic_province = pop_body.find("select[name=jurastic_province]");
3910		var jurastic_district = pop_body.find("select[name=jurastic_district]");
3911		var jurastic_sub_district = pop_body.find(
3912			"select[name=jurastic_sub_district"
3913		);
3914		var jurastic_phone_number = pop_body.find(
3915			"input[name=jurastic_phone_number]"
3916		);
3917		var jurastic_id = pop_body.find("input[name=jurastic_id");
3918		var jurastic_name = pop_body.find("input[name=jurastic_name");
3919
3920		jurastic_id.closest(".jurastic_id").removeClass("error");
3921		jurastic_name.closest(".jurastic_name").removeClass("error");
3922		jurastic_phone_number
3923			.closest(".jurastic_phone_number")
3924			.removeClass("error");
3925		jurastic_address_detail
3926			.closest(".jurastic_address_detail")
3927			.removeClass("error");
3928		jurastic_province.closest(".province").removeClass("error");
3929		jurastic_district.closest(".district").removeClass("error");
3930		jurastic_sub_district.closest(".sub-district").removeClass("error");
3931
3932		if (!thaiIdvalidate(jurastic_id) && jurastic_id.val() != "") {
3933			valid = false;
3934			jurastic_id.closest(".jurastic_id").addClass("error");
3935			jurastic_id
3936				.closest(".jurastic_id")
3937				.find(".validate")
3938				.html("รูปแบบหมายเลขเลขผู้เสียภาษีไม่ถูกต้อง");
3939		} else if (!thaiIdvalidate(jurastic_id) && jurastic_id.val() == "") {
3940			valid = false;
3941			jurastic_id.closest(".jurastic_id").addClass("error");
3942			jurastic_id
3943				.closest(".jurastic_id")
3944				.find(".validate")
3945				.html("กรุณากรอกหมายเลขเลขผู้เสียภาษี");
3946		}
3947
3948		if (jurastic_name.val() === "") {
3949			valid = false;
3950			jurastic_name.closest(".jurastic_name").addClass("error");
3951			if (is_scroll == 0) {
3952				is_scroll = 1;
3953				jurastic_name.closest(".popup-body").animate(
3954					{
3955						scrollTop: jurastic_name.offset().top - 850,
3956					},
3957					500
3958				);
3959			}
3960		}
3961
3962		if (jurastic_phone_number.val() === "") {
3963			jurastic_phone_number
3964				.closest(".jurastic_phone_number")
3965				.find(".validate")
3966				.html("กรุณากรอกเบอร์โทรศัพท์");
3967			jurastic_phone_number.closest(".jurastic_phone_number").addClass("error");
3968			valid = false;
3969			if (is_scroll == 0) {
3970				is_scroll = 1;
3971				jurastic_phone_number.closest(".popup-body").animate(
3972					{
3973						scrollTop: jurastic_phone_number.offset().top - 850,
3974					},
3975					500
3976				);
3977			}
3978		} else if (jurastic_phone_number.val().length != 10) {
3979			jurastic_phone_number
3980				.closest(".jurastic_phone_number")
3981				.find(".validate")
3982				.html("กรุณากรอกเบอร์โทรศัพท์ให้ครบ 10 หลัก");
3983			personal_phone_number.closest(".jurastic_phone_number").addClass("error");
3984			valid = false;
3985			if (is_scroll == 0) {
3986				is_scroll = 1;
3987				jurastic_phone_number.closest(".popup-body").animate(
3988					{
3989						scrollTop: jurastic_phone_number.offset().top - 850,
3990					},
3991					500
3992				);
3993			}
3994		}
3995
3996		if (jurastic_address_detail.val() === "") {
3997			valid = false;
3998			jurastic_address_detail
3999				.closest(".jurastic_address_detail")
4000				.addClass("error");
4001			if (is_scroll == 0) {
4002				is_scroll = 1;
4003				jurastic_address_detail.closest(".popup-body").animate(
4004					{
4005						scrollTop: jurastic_address_detail.offset().top - 850,
4006					},
4007					500
4008				);
4009			}
4010		}
4011
4012		if (jurastic_province.val() == 0) {
4013			valid = false;
4014			jurastic_province.closest(".province").addClass("error");
4015			if (is_scroll == 0) {
4016				is_scroll = 1;
4017				jurastic_province.closest(".popup-body").animate(
4018					{
4019						scrollTop: jurastic_province.offset().top - 850,
4020					},
4021					500
4022				);
4023			}
4024		}
4025
4026		if (jurastic_province.val() != 0 && jurastic_district.val() == -1) {
4027			valid = false;
4028			jurastic_district.closest(".district").addClass("error");
4029			if (is_scroll == 0) {
4030				is_scroll = 1;
4031				jurastic_district.closest(".popup-body").animate(
4032					{
4033						scrollTop: jurastic_district.offset().top - 850,
4034					},
4035					500
4036				);
4037			}
4038		}
4039
4040		if (
4041			jurastic_province.val() != 0 &&
4042			jurastic_district.val() != -1 &&
4043			jurastic_sub_district.val() == 0
4044		) {
4045			valid = false;
4046			jurastic_sub_district.closest(".sub-district").addClass("error");
4047			if (is_scroll == 0) {
4048				is_scroll = 1;
4049				jurastic_sub_districtt.closest(".popup-body").animate(
4050					{
4051						scrollTop: jurastic_sub_district.offset().top - 850,
4052					},
4053					500
4054				);
4055			}
4056		}
4057	}
4058
4059	if (valid) {
4060		$.ajax({
4061			data: frm,
4062			type: "POST",
4063			url: window.location.origin + "/api/update_tax_address",
4064			cache: false,
4065			contentType: false,
4066			processData: false,
4067			dataType: "json",
4068			success: function (arresult) {
4069				if (arresult.rs) {
4070					reloadBillAddress($this);
4071					popout_name("popup-edit-tax-invoice");
4072				}
4073			},
4074		});
4075	}
4076}
4077
4078function sendOtp(form, $this) {
4079	var frm = new FormData(form[0]);
4080	var this_elem = $this;
4081	const searchParams = new URLSearchParams(window.location.search);
4082	var order = searchParams.get("o");
4083	$.ajax({
4084		data: frm,
4085		type: "POST",
4086		url: window.location.origin + "/api/send_otp",
4087		cache: false,
4088		contentType: false,
4089		processData: false,
4090		dataType: "json",
4091		success: function (arresult) {
4092			if (arresult.rs) {
4093				this_elem.find("input[name=otp-token]").val(arresult.token);
4094				this_elem.find("input[name=otp-ref]").val(arresult.ref_code);
4095				this_elem.find(".otp-ref-text").html(arresult.ref_code);
4096				this_elem.find("input[name=ordernum]").val(order);
4097			}
4098		},
4099	});
4100}
4101
4102function verifyOtp($this) {
4103	//otp-form-element
4104	var frm = new FormData($this.closest("form")[0]);
4105	var this_elem = $this;
4106	$.ajax({
4107		data: frm,
4108		type: "POST",
4109		url: window.location.origin + "/api/verify_otp",
4110		cache: false,
4111		contentType: false,
4112		processData: false,
4113		dataType: "json",
4114		success: function (arresult) {
4115			if (arresult.rs) {
4116				if (arresult.status) {
4117					$("p.otp-incorrect").removeClass("active");
4118					if ($this.hasClass("register-normal")) {
4119						//base form element
4120						var form = $this.closest("body").find(".register-normal-form");
4121						form.submit();
4122					} else if ($this.hasClass("login-mob-popup")) {
4123						$this.closest("body").find(".pop-login-mobile").submit();
4124					} else if ($this.hasClass("product-register")) {
4125						$this.closest("body").find(".product-register-form").submit();
4126					} else if ($this.hasClass("guest-chk-out")) {
4127						change_step($this);
4128						popout_name("popup-otp");
4129					} else if ($this.hasClass("chk_nor_is_login")) {
4130						change_step($this);
4131						popout_name("popup-otp");
4132					} else if ($this.hasClass("popup-chkout-regis")) {
4133						$this.closest("body").find(".popup-chkout-regis-form").submit();
4134					} else {
4135						const queryString = window.location.search;
4136						const urlParams = new URLSearchParams(queryString);
4137						const goto = urlParams.get("goto");
4138						const sub = urlParams.get("sub");
4139						if (goto) {
4140							document.getElementById("goto").value = goto;
4141						}
4142						if (sub) {
4143							document.getElementById("sub").value = sub;
4144						}
4145						$this.closest("form").submit();
4146					}
4147				} else {
4148					$("p.otp-incorrect").addClass("active");
4149				}
4150			}
4151		},
4152	});
4153}
4154
4155function articleFilter($this) {
4156	var frm = new FormData($this.closest("form")[0]);
4157	var this_elem = $this;
4158	$.ajax({
4159		data: frm,
4160		type: "POST",
4161		url: window.location.origin + "/api/load_article_filter",
4162		cache: false,
4163		contentType: false,
4164		processData: false,
4165		dataType: "html text",
4166		success: function (data) {
4167			this_elem.closest(".container").find(".article-data").empty();
4168			this_elem.closest(".container").find(".article-data").html(data);
4169		},
4170	});
4171}

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.