PageSourceSearch

https://www.toyota.co.th/shoppingtool/custom/js/libs.js?v=1178

js toyota.co.th collected 2026-10-02 07:42:49 UTC 20,451 bytes, 667 lines download raw bytes

1var tracking_store_data = tracking_store_data||{};
2(function(root, factory) {
3
4	if (typeof exports !== 'undefined') {
5	  if (typeof module !== 'undefined' && module.exports) {
6		exports = module.exports = factory(root, exports);
7	  }
8	} else if (typeof define === 'function' && define.amd) {
9	  define(['exports'], function(exports) {
10		root.Lockr = factory(root, exports);
11	  });
12	} else {
13	  root.Lockr = factory(root, {});
14	}
15  
16  }(this, function(root, Lockr) {
17	'use strict';
18  
19	if (!Array.prototype.indexOf) {
20	  Array.prototype.indexOf = function(elt /*, from*/)
21	  {
22		var len = this.length >>> 0;
23  
24		var from = Number(arguments[1]) || 0;
25		from = (from < 0)
26		? Math.ceil(from)
27		: Math.floor(from);
28		if (from < 0)
29		  from += len;
30  
31		for (; from < len; from++)
32		{
33		  if (from in this &&
34			  this[from] === elt)
35			return from;
36		}
37		return -1;
38	  };
39	}
40  
41	Lockr.prefix = "";
42  
43	Lockr._getPrefixedKey = function(key, options) {
44	  options = options || {};
45  
46	  if (options.noPrefix) {
47		return key;
48	  } else {
49		return this.prefix + key;
50	  }
51  
52	};
53  
54	Lockr.set = function (key, value, options) {
55	  var query_key = this._getPrefixedKey(key, options);
56  
57	  try {
58		localStorage.setItem(query_key, JSON.stringify({"data": value}));
59	  } catch (e) {
60		if (console) console.warn("Lockr didn't successfully save the '{"+ key +": "+ value +"}' pair, because the localStorage is full.");
61	  }
62	};
63  
64	Lockr.get = function (key, missing, options) {
65	  var query_key = this._getPrefixedKey(key, options),
66		  value;
67  
68	  try {
69		value = JSON.parse(localStorage.getItem(query_key));
70	  } catch (e) {
71			  if(localStorage[query_key]) {
72				value = {data: localStorage.getItem(query_key)};
73			  } else{
74				  value = null;
75			  }
76	  }
77	  
78	  if(!value) {
79		return missing;
80	  }
81	  else if (typeof value === 'object' && typeof value.data !== 'undefined') {
82		return value.data;
83	  }
84	};
85  
86	Lockr.sadd = function(key, value, options) {
87	  var query_key = this._getPrefixedKey(key, options),
88		  json;
89  
90	  var values = Lockr.smembers(key);
91  
92	  if (values.indexOf(value) > -1) {
93		return null;
94	  }
95  
96	  try {
97		values.push(value);
98		json = JSON.stringify({"data": values});
99		localStorage.setItem(query_key, json);
100	  } catch (e) {
101		console.log(e);
102		if (console) console.warn("Lockr didn't successfully add the "+ value +" to "+ key +" set, because the localStorage is full.");
103	  }
104	};
105  
106	Lockr.smembers = function(key, options) {
107	  var query_key = this._getPrefixedKey(key, options),
108		  value;
109  
110	  try {
111		value = JSON.parse(localStorage.getItem(query_key));
112	  } catch (e) {
113		value = null;
114	  }
115	  
116	  return (value && value.data) ? value.data : [];
117	};
118  
119	Lockr.sismember = function(key, value, options) {
120	  return Lockr.smembers(key).indexOf(value) > -1;
121	};
122  
123	Lockr.keys = function() {
124	  var keys = [];
125	  var allKeys = Object.keys(localStorage);
126  
127	  if (Lockr.prefix.length === 0) {
128		return allKeys;
129	  }
130  
131	  allKeys.forEach(function (key) {
132		if (key.indexOf(Lockr.prefix) !== -1) {
133		  keys.push(key.replace(Lockr.prefix, ''));
134		}
135	  });
136  
137	  return keys;
138	};
139  
140	Lockr.getAll = function (includeKeys) {
141	  var keys = Lockr.keys();
142  
143	  if (includeKeys) {
144		return keys.reduce(function (accum, key) {
145		  var tempObj = {};
146		  tempObj[key] = Lockr.get(key);
147		  accum.push(tempObj);
148		  return accum;
149		}, []);
150	  }
151  
152	  return keys.map(function (key) {
153		return Lockr.get(key);
154	  });
155	};
156  
157	Lockr.srem = function(key, value, options) {
158	  var query_key = this._getPrefixedKey(key, options),
159		  json,
160		  index;
161  
162	  var values = Lockr.smembers(key, value);
163  
164	  index = values.indexOf(value);
165  
166	  if (index > -1)
167		values.splice(index, 1);
168  
169	  json = JSON.stringify({"data": values});
170  
171	  try {
172		localStorage.setItem(query_key, json);
173	  } catch (e) {
174		if (console) console.warn("Lockr couldn't remove the "+ value +" from the set "+ key);
175	  }
176	};
177  
178	Lockr.rm =  function (key) {
179	  var queryKey = this._getPrefixedKey(key);
180	  
181	  localStorage.removeItem(queryKey);
182	};
183  
184	Lockr.flush = function () {
185	  if (Lockr.prefix.length) {
186		Lockr.keys().forEach(function(key) {
187		  localStorage.removeItem(Lockr._getPrefixedKey(key));
188		});
189	  } else {
190		localStorage.clear();
191	  }
192	};
193	return Lockr;
194  
195  }));
196  
197if(typeof btoa != 'function'){
198	function btoa(str) {return str};
199}
200if(typeof atob != 'function'){
201	function atob(str) {return str};
202}
203var tmttracker = tmttracker|| {
204	is_initialized: false,
205
206	// เฉพาะ 3 ฟิลด์นี้เท่านั้นที่เก็บลง cookie (ตัวเล็ก, server อ่านผ่าน $_COOKIE['tmtshpt'])
207	// ส่วน payload ที่เหลือทั้งหมด (utm, arrays, pageview ฯลฯ) เก็บใน localStorage
208	IDENTITY_KEYS: ['uid', 'tid', 'line_id'],
209
210	isLocalHost: function() {
211		return location.hostname === 'localhost'
212			|| location.hostname.indexOf('local') === 0
213			|| location.hostname === '127.0.0.1';
214	},
215
216	delCookie: function(key) {
217		var base = key + '= ; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT';
218		document.cookie = base;
219		if(!tmttracker.isLocalHost()){
220			document.cookie = base + '; domain=.toyota.co.th';
221		}
222		try { Lockr.rm(key); } catch(e){}
223	},
224
225	timestamp:(function() {
226		var now = new Date();
227		return now.getTime();
228	  })(),
229
230	// เก็บ identity (uid/tid/line_id) เป็น base64 JSON ลง cookie ให้ server อ่านได้เหมือนเดิม
231	// รูปแบบ cookie ไม่เปลี่ยน (base64 ของ JSON) แต่มีแค่ 3 ฟิลด์ จึงไม่มีทางชน limit 4KB
232	setCookie: function(key, value) {
233		tracking_store_data = value;
234
235		// 1) payload ก้อนใหญ่ -> localStorage (ไม่ติด size limit)
236		try { Lockr.set(key, value); } catch(e){
237			if (console) console.warn('tmttracker: localStorage save failed', e);
238		}
239
240		// 2) identity ตัวเล็ก -> cookie (ให้ฝั่ง PHP อ่าน uid/tid/line_id)
241		var identity = {};
242		tmttracker.IDENTITY_KEYS.forEach(function(k){
243			if (typeof value[k] !== 'undefined' && value[k] !== null) identity[k] = value[k];
244		});
245
246		var expires = new Date();
247		var days = 30;  //30 days
248		expires.setTime(expires.getTime()+(3600000*24*days));
249		var json_str = JSON.stringify(identity);
250		var str_store = window.btoa(unescape(encodeURIComponent(json_str)));
251
252		var attrs = '=' + str_store + ';path=/;expires=' + expires.toUTCString() + ';SameSite=Lax';
253		if(tmttracker.isLocalHost()){
254			document.cookie = key + attrs;
255		}else{
256			document.cookie = key + attrs + ';domain=.toyota.co.th;Secure';
257		}
258	},
259
260	// อ่าน payload เต็มจาก localStorage แล้ว merge identity จาก cookie (แหล่งความจริงร่วมกับ server)
261	getCookie: function(key) {
262		// payload เต็มจาก localStorage
263		var stored = null;
264		try { stored = Lockr.get(key, null); } catch(e){ stored = null; }
265		if (stored && typeof stored !== 'object') stored = null;
266
267		// identity จาก cookie (base64 JSON)
268		var cookieData = {};
269		var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');
270		if(keyValue){
271			try {
272				var crypted_str = decodeURIComponent(escape(window.atob(keyValue[2])));
273				cookieData = JSON.parse(crypted_str) || {};
274			} catch(e){ cookieData = {}; }
275		}
276
277		if (stored) {
278			// cookie เป็นตัวตัดสิน uid/tid ให้ client กับ server ตรงกัน
279			for (var k in cookieData) { if(cookieData[k]) stored[k] = cookieData[k]; }
280			return stored;
281		}
282		// localStorage ว่าง/ถูกล้าง แต่ cookie ยังมี uid -> กู้ตัวตนกลับมา
283		if (cookieData && cookieData.uid) return cookieData;
284		return {};
285	},
286	getUrlParameter: function() {
287		var sPageURL = decodeURIComponent(window.location.search.substring(1)),
288			sURLVariables = sPageURL.split('&'),
289			sParameterName,
290			i;
291		var	params = [];
292		for (i = 0; i < sURLVariables.length; i++) {
293			sParameterName = sURLVariables[i].split('=');
294			if(sParameterName.length == 2) params[sParameterName[0]] = sParameterName[1];
295			
296		}
297		return params;
298	},
299
300	getValueById: function(id){
301		if(document.getElementById(id))
302			return document.getElementById(id).value;
303		return '';
304	},
305	getCampaign: function(){
306		var Campaign_source = tmttracker.getValueById("Campaign_source");
307		var Campaign_medium = tmttracker.getValueById("Campaign_medium");
308		var Campaign_name = tmttracker.getValueById("Campaign_name");
309		var Campaign_content = tmttracker.getValueById("Campaign_content");
310		var Campaign_term = tmttracker.getValueById("Campaign_term");
311		var Campaign_code = tmttracker.getValueById("Campaign_code");
312		
313		if(typeof Campaign_source === 'undefined' && typeof Campaign_medium === 'undefined' && typeof Campaign_medium === 'undefined'){
314			if(Campaign_source === "" && Campaign_medium === "" && Campaign_medium === ""){
315				Campaign_source = 'direct'
316				Campaign_medium = 'direct'
317				Campaign_name = 'direct'
318				Campaign_content = 'direct'			
319				Campaign_term = 'direct'
320				Campaign_code = 'direct'			
321			}
322		}
323
324		tracking_store_data['utm_source'] = Campaign_source;
325		tracking_store_data['utm_medium'] = Campaign_medium;
326		tracking_store_data['utm_campaign'] = Campaign_name;
327		tracking_store_data['utm_content'] = Campaign_content;
328		tracking_store_data['utm_term'] = Campaign_term;
329
330		return {
331			utm_source: Campaign_source,
332			utm_medium:Campaign_medium,
333			utm_name: Campaign_name,
334			utm_content: Campaign_content,
335			utm_term: Campaign_term,
336			Campaign_code: Campaign_code
337		}
338
339	},
340	uniqueId : function() {
341		// desired length of Id
342		var idStrLen = 19;
343		var idStr = ((new Date()).getTime()-1500000000000).toString(36) ;
344		// similar to above, complete the Id using random, alphanumeric characters
345		do {
346			idStr += (Math.floor((Math.random() * 35))).toString(36);
347		} while (idStr.length < idStrLen);
348
349		return (idStr);
350	},
351	update_calculate_model: function($val){
352
353		tracking_store_data['calculate'] = 'Y';
354		if( tracking_store_data['calculate_model'].indexOf($val) === -1){
355			tracking_store_data['calculate_model'].push($val);
356		}
357	 
358		tmttracker.update();
359	},
360	update_brochure_model: function($val){
361		 
362		if( tracking_store_data['brochure_model'].indexOf($val) === -1){
363			tracking_store_data['brochure_model'].push($val);
364		}
365	 
366		tmttracker.update();
367	
368	},
369	pageview: function(){ 
370		if(tracking_store_data['lastpage'] != window.location.href){
371			tracking_store_data['lastpage'] = window.location.href;
372			tracking_store_data['pageview'] ++; 
373			tmttracker.update();
374		}
375	},
376	update: function(data){ 
377		if( data )
378			$.extend(tracking_store_data , data );
379		tmttracker.setCookie('tmtshpt',tracking_store_data);
380	},
381	save: function(data){
382
383		$.extend(tracking_store_data , data );
384		if ( tracking_store_data.step == 4){
385			tracking_store_data['total_register']++;
386		}
387		
388		tracking_store_data['timespent'] = (new Date()).getTime() - tracking_store_data['starttime'] ;
389		
390
391		$.post("/shoppingtool/index.php?app=shopping_tool&fnc=save_tracker",tracking_store_data,function(res){
392			// Todo after save tracker success (res == 'OK')
393			// if(res == "RESET_TID"){
394			// 	tmttracker.new_tracker_transaction();
395			// }
396			
397		});
398	},
399	event_click: function(data){
400
401		post_data = $.extend({
402			uid: tracking_store_data.uid,
403			tid: tracking_store_data.tid,
404			page_type:tracking_submit.submit_form,
405			dealer_code: '',
406			tel_type:'pin',
407			tel_no: ''
408		} , data );
409		$.post("/shoppingtool/index.php?app=shopping_tool&fnc=tracker_event_click",post_data,function(res){
410			
411		},'json');
412	},
413
414	init_tracking_fields: function (CampaignType){
415
416		var line_campaign_param = "";
417		var line_input_fields = "";
418		if(typeof line_liff_data != "undefined" && line_liff_data.channel ){
419			line_campaign_param = "&source="+line_liff_data.source+"&link="+CampaignType+"&channel="+line_liff_data.channel;
420			line_input_fields = `
421				<input type="hidden" name="un_id" value="`+line_liff_data.un_id+`" />
422				<input type="hidden" name="CampaignLocation" value="`+line_liff_data.source+`" />
423				<input type="hidden" name="channel" value="`+line_liff_data.source+`" />
424			`;
425
426		}
427		$.get("/shoppingtool/index.php?app=shopping_tool&fnc=init_tracking_fields&CampaignType="+CampaignType+line_campaign_param,function(res){
428			$("#main_form").prepend(res+line_input_fields);
429			tmttracker.getCampaign();
430			
431			tmttracker.save(tracking_submit); // step 1
432			if( typeof afterInitCampaign == 'function'){
433				afterInitCampaign();
434			}
435		});
436		
437	},
438	ischange_utm_campaign: function ( $querys){
439	 
440		if( $querys['utm_source'] && 
441				(
442					tracking_store_data['utm_source']
443					+ tracking_store_data['utm_medium']
444					+ tracking_store_data['utm_campaign']
445					+ tracking_store_data['utm_content']
446					+ tracking_store_data['utm_term']
447					!=
448					$querys['utm_source']
449					+ $querys['utm_medium']
450					+ $querys['utm_campaign']
451					+ $querys['utm_content']
452					+ $querys['utm_term']
453				)
454			){
455			
456				tracking_store_data['lead_source'] = $querys['utm_source'];
457				tracking_store_data['utm_source'] = $querys['utm_source'];
458				tracking_store_data['utm_medium'] = $querys['utm_medium'] ;
459				tracking_store_data['utm_campaign'] = $querys['utm_campaign'] ;
460				tracking_store_data['utm_content'] = $querys['utm_content'] ;
461				tracking_store_data['utm_term'] = $querys['utm_term'] ;
462				 return true;
463			}
464	
465	
466			if( $querys['Campaign_source'] && 
467				(
468					tracking_store_data['utm_source']
469					+ tracking_store_data['utm_medium']
470					+ tracking_store_data['utm_campaign']
471					+ tracking_store_data['utm_content']
472					+ tracking_store_data['utm_term']
473					+ tracking_store_data['campaign_code']
474					!=
475					$querys['Campaign_source']
476					+ $querys['Campaign_medium']
477					+ $querys['Campaign_name']
478					+ $querys['Campaign_content']
479					+ $querys['Campaign_term']
480					+ $querys['campaign_code']
481				)
482			){
483			
484				tracking_store_data['lead_source'] = $querys['Campaign_source'];
485				tracking_store_data['utm_source'] = $querys['Campaign_source'];
486				tracking_store_data['utm_medium'] = $querys['Campaign_medium'] ;
487				tracking_store_data['utm_campaign'] = $querys['Campaign_name'] ;
488				tracking_store_data['utm_content'] = $querys['Campaign_content'] ;
489				tracking_store_data['utm_term'] = $querys['Campaign_term'] ;
490				tracking_store_data['campaign_code'] = $querys['campaign_code'];
491				return true;
492				 
493			}
494		
495			return false;
496	
497	},
498	transaction_type: 'T',
499	newTID: function ( ){
500		if(typeof tmttracker_transaction_type != "undefined"){
501			tmttracker.transaction_type = tmttracker_transaction_type;
502		}
503		return  tmttracker.transaction_type + tmttracker.uniqueId();
504	},
505	empty_tracker_transaction: function ( $querys = null ){
506		$t_spt = {};
507		$t_spt['tid'] = '';
508		$t_spt['uid'] = tracking_store_data['uid'];
509		$t_spt['total_register'] = tracking_store_data['total_register'];
510		$t_spt['brochure_model'] = [];
511		$t_spt['calculate'] = 'N';
512		$t_spt['calculate_model'] = [];
513		$t_spt['dealer_search'] = 'N';
514		$t_spt['dealer_website_click'] = 'N';
515		$t_spt['career_visit'] = 'N';
516	
517		$t_spt['starttime'] = (new Date()).getTime();
518		$t_spt['mode'] = "renew";
519		
520		$t_spt['lead_source'] = tracking_store_data['lead_source'];
521		if($querys !=  null && $querys.length > 0){
522			
523			$t_spt['utm_source'] = $querys['utm_source'];
524			$t_spt['utm_medium'] = $querys['utm_medium'];
525			$t_spt['utm_campaign'] = $querys['utm_campaign'];
526			$t_spt['utm_content'] = $querys['utm_content'];
527			$t_spt['utm_term'] = $querys['utm_term'];
528			$t_spt['campaign_code'] = $querys['campaign_code'];
529		}
530		tracking_store_data = $t_spt;
531	
532		tmttracker.update($t_spt);
533	},
534	new_tracker_transaction: function ( $querys = null ){
535		if(typeof tmttracker_transaction_type != "undefined"){
536			tmttracker.transaction_type = tmttracker_transaction_type;
537		}
538
539		var current_transaction_type = tracking_store_data['tid'].substring(0,1);
540		if( tmttracker.transaction_type != current_transaction_type ){
541			tmttracker.reset_tracker_transaction();
542		}
543		
544	},
545	reset_tracker_transaction: function ( $querys = null ){
546
547		$t_spt = {};
548		$t_spt['tid'] = tmttracker.newTID();
549		$t_spt['uid'] = tracking_store_data['uid'];
550		$t_spt['total_register'] = tracking_store_data['total_register'];
551		$t_spt['brochure_model'] = [];
552		$t_spt['calculate'] = 'N';
553		$t_spt['calculate_model'] = [];
554		$t_spt['dealer_search'] = 'N';
555		$t_spt['dealer_website_click'] = 'N';
556		$t_spt['career_visit'] = 'N';
557	
558		$t_spt['starttime'] = (new Date()).getTime();
559		$t_spt['pageview'] = 0;
560		$t_spt['mode'] = "renew";
561		
562		$t_spt['lead_source'] = tracking_store_data['lead_source'];
563		if($querys !=  null && $querys.length > 0){
564			
565			$t_spt['utm_source'] = $querys['utm_source'];
566			$t_spt['utm_medium'] = $querys['utm_medium'];
567			$t_spt['utm_campaign'] = $querys['utm_campaign'];
568			$t_spt['utm_content'] = $querys['utm_content'];
569			$t_spt['utm_term'] = $querys['utm_term'];
570			$t_spt['campaign_code'] = $querys['campaign_code'];
571		}
572		tracking_store_data = $t_spt;
573	
574		tmttracker.update($t_spt);
575	},
576	get_tracking_stored: function (){
577		tracking_store_data = tmttracker.getCookie('tmtshpt');
578
579		if( typeof (tracking_store_data['uid']) == 'undefined' ){ 
580			old_tmtdl = tmttracker.getCookie('tmtdl');
581			if(typeof old_tmtdl.uid != 'undefined'){
582				tracking_store_data = old_tmtdl
583				tmttracker.delCookie('tmtdl');
584			}else{
585				tracking_store_data = {};
586			}
587	
588		}
589		var $querys = tmttracker.getUrlParameter();
590		$lead_source = '';
591		if ($querys['Campaign_source']) {
592			$lead_source = $querys['Campaign_source'];
593			
594			tracking_store_data['lead_source'] = $querys['Campaign_source'] ;
595			tracking_store_data['utm_source'] = $querys['Campaign_source'] ;
596			tracking_store_data['utm_medium'] = $querys['Campaign_medium'] ;
597			tracking_store_data['utm_campaign'] = $querys['Campaign_name'] ;
598			tracking_store_data['utm_content'] = $querys['Campaign_content'] ;
599			tracking_store_data['utm_term'] = $querys['Campaign_term'] ;
600			tracking_store_data['campaign_code'] = $querys['Campaign_code'] ;
601	
602		}else if(  $querys['utm_source'] ){
603			$lead_source = $querys['utm_source'];
604			
605			tracking_store_data['lead_source'] = $querys['utm_source'];
606			tracking_store_data['utm_source'] = $querys['utm_source'];
607			tracking_store_data['utm_medium'] = $querys['utm_medium'];
608			tracking_store_data['utm_campaign'] = $querys['utm_campaign'];
609			tracking_store_data['utm_content'] = $querys['utm_content'];
610			tracking_store_data['utm_term'] = $querys['utm_term'];
611			tracking_store_data['campaign_code'] = $querys['Campaign_code'] ;
612		}
613		else{
614			tracking_store_data['lead_source'] = 'direct';
615			delete tracking_store_data['utm_source'];
616			delete tracking_store_data['utm_medium'];
617			delete tracking_store_data['utm_campaign'];
618			delete tracking_store_data['utm_content'];
619			delete tracking_store_data['utm_term'];
620		}
621		
622		if(typeof line_liff_data != "undefined" && line_liff_data.channel ){
623			$lead_source = line_liff_data.source;
624			$channel = line_liff_data.channel;
625			$link = tracking_submit.submit_form;
626			
627			tracking_store_data['lead_source'] = $lead_source;
628			$querys = tmttracker.getCampaign();
629		}
630	
631		// new visit 
632		// todo make new uid + tid 
633	
634		if( tracking_store_data == null || typeof (tracking_store_data['uid']) == 'undefined' ){ 
635			
636			tracking_store_data['uid'] = 'U'+tmttracker.uniqueId();
637			tracking_store_data['tid'] = '';
638			tracking_store_data['mode'] = "new";
639			tracking_store_data['brochure_model'] = [];
640			tracking_store_data['calculate'] = 'N';
641			tracking_store_data['calculate_model'] = [];
642			tracking_store_data['dealer_search'] = 'N';
643			tracking_store_data['dealer_website_click'] = 'N';
644			tracking_store_data['career_visit'] = 'N';
645			tracking_store_data['total_register'] = 0;
646			tracking_store_data['pageview'] = 0;
647			tracking_store_data['lead_source'] = $lead_source || 'direct';
648			tracking_store_data['starttime'] = (new Date()).getTime();
649			
650			tracking_store_data['campaign_code'] = $querys['Campaign_code'] ;
651			
652			tmttracker.update();
653		}
654		tmttracker.pageview();
655	}
656
657	
658};
659
660var isGtagLoaded = (typeof isCustomGtagLoad != "undefined")?isCustomGtagLoad: false;
661if(!tmttracker.is_initialized ){
662	tmttracker.get_tracking_stored();
663	if( typeof custom_update_tmttracker == 'function'){
664		custom_update_tmttracker();
665	}
666	tmttracker.is_initialized = true;
667}

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.