1document.addEventListener('DOMContentLoaded', function () { 2 const linkCall = document.querySelector('.fm-call'); 3 4 // à¸à¸£à¸§à¸à¸ªà¸à¸à¸§à¹à¸²à¹à¸à¹à¸à¸à¸¸à¸à¸à¸£à¸à¹à¸¡à¸·à¸à¸à¸·à¸à¸«à¸£à¸·à¸à¹à¸¡à¹ 5 const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); 6 7 if (!isMobile) { 8 // หาà¸à¹à¸à¹à¸ PC à¹à¸«à¹à¹à¸à¸¥à¸µà¹à¸¢à¸ tooltip à¹à¸à¹à¸à¸à¹à¸à¸à¸§à¸²à¸¡à¹à¸à¸à¸£à¹à¹à¸à¸£ 9 // owner 2026-09-25: keep the tel: link on PC too - a click dials through the computer's phone app 10 linkCall.setAttribute('title', '092-345-3681'); 11 const tooltipTrigger = new bootstrap.Tooltip(linkCall); 12 } 13 14 //if (getCookie('PolicyAccept') == '1') { 15 // $('#modal-policy-accept').modal('show'); 16 //} 17}); 18 19function Set_Toast(param, type) { 20 21 if (param.action == 'modal') { 22 var modalToast = new bootstrap.Modal(document.getElementById('modalToast'), { 23 }); 24 25 document.querySelector('#lblModalToast').innerText = GetCookieUtf8(param.body); 26 27 document.querySelector('#lblModalToast').className = ''; 28 document.querySelector('#btnCloasToast').className = 'btn rounded-pill btn-login mb-2'; 29 30 if (param.type === 'danger') { 31 document.querySelector('#lblModalToast').classList.add('text-red'); 32 document.querySelector('#btnCloasToast').classList.add('btn-red'); 33 } 34 else if (param.type === 'warning') { 35 document.querySelector('#lblModalToast').classList.add('text-yellow'); 36 document.querySelector('#btnCloasToast').classList.add('btn-yellow'); 37 } 38 else { 39 document.querySelector('#lblModalToast').classList.add('text-green'); 40 document.querySelector('#btnCloasToast').classList.add('btn-green'); 41 } 42 43 modalToast.show(); 44 45 } 46 else { 47 // ID 48 const toastLive = document.querySelector('#liveToast'); 49 50 toastLive.classList = 'toast'; 51 52 // Auto Hide 53 const toast = new bootstrap.Toast(toastLive, { 54 autohide: param.autohide 55 }); 56 57 /* let iconToast = '';*/ 58 59 // Position 60 switch (param.position) { 61 case 'TopLeft': document.querySelector('#divPosition').classList.add('top-0', 'start-0'); break; 62 case 'TopCenter': document.querySelector('#divPosition').classList.add('top-0', 'start-50', 'translate-middle-x'); break; 63 case 'TopRight': document.querySelector('#divPosition').classList.add('top-0', 'end-0'); break; 64 case 'MiddleLeft': document.querySelector('#divPosition').classList.add('top-50', 'start-0', 'translate-middle-y'); break; 65 case 'MiddleCenter': document.querySelector('#divPosition').classList.add('top-50', 'start-50', 'translate-middle'); break; 66 case 'MiddleRight': document.querySelector('#divPosition').classList.add('top-50', 'end-0', 'translate-middle-y'); break; 67 case 'BottomLeft': document.querySelector('#divPosition').classList.add('bottom-0', 'start-0'); break; 68 case 'BottomCenter': document.querySelector('#divPosition').classList.add('bottom-0', 'start-50', 'translate-middle-x'); break; 69 case 'BottomRight': document.querySelector('#divPosition').classList.add('bottom-0', 'end-0'); break; 70 } 71 72 if (type == 'alert') { 73 if (param.type === 'danger') { 74 document.querySelector('#liveToast').classList.add('liv-toast-alert-danger'); 75 } 76 } 77 else { 78 if (param.type === 'danger') { 79 document.querySelector('#liveToast').classList.add('bg-toast-danger'); 80 document.querySelector('#btn-toast-close').classList.add('text-toast-danger'); 81 //iconToast = '<i class="icon-toast uil uil-times-circle"></i>'; 82 } 83 else if (param.type === 'warning') { 84 document.querySelector('#liveToast').classList.add('bg-toast-warning'); 85 document.querySelector('#btn-toast-close').classList.add('text-toast-warning'); 86 //iconToast = '<i class="icon-toast uil uil-exclamation-triangle"></i>'; 87 } 88 else { 89 document.querySelector('#liveToast').classList.add('bg-toast-success'); 90 document.querySelector('#btn-toast-close').classList.add('text-toast-success'); 91 /* iconToast = '<i class="icon-toast uil uil-check-circle"></i>'; */ 92 } 93 } 94 95 let dataBody = GetCookieUtf8(param.body); 96 97 //// Icon 98 //document.querySelector('#divToastIcon').innerHTML = iconToast; 99 100 // Body 101 document.querySelector('#divToastBody').innerHTML = dataBody; 102 103 toast.show(); 104 } 105} 106 107function GetCookieUtf8(paramData) { 108 let dataBody = paramData; 109 try { 110 111 dataBody = decodeBase64ToUTF8(dataBody); 112 } catch (e) { 113 114 dataBody = encodeUTF8ToBase64(dataBody); 115 dataBody = decodeBase64ToUTF8(dataBody); 116 } 117 118 return dataBody; 119} 120
121function encodeUTF8ToBase64(utf8String) { 122 // Convert UTF-8 string to URI component 123 var uriComponent = unescape(encodeURIComponent(utf8String)); 124 125 // Encode URI component to base64 126 var base64String = btoa(uriComponent); 127 128 return base64String; 129} 130 131function decodeBase64ToUTF8(base64String) { 132 // Decode base64 string 133 var decodedString = atob(base64String); 134 135 // Convert decoded string to UTF-8 136 var utf8String = decodeURIComponent(escape(decodedString)); 137 138 return utf8String; 139} 140 141function OverlayShow(paramId, paramText) { 142 143 if (document.querySelectorAll('#' + paramId + '-panel-overlay').length === 0) { 144 145 var newNode = document.createElement('div'); 146 147 newNode.classList.add('panel-overlay'); 148 newNode.setAttribute('id', paramId + '-panel-overlay'); 149 newNode.innerHTML = '<div class="panel-overlay-content">\ 150 <div class="spinner-loader">\ 151 <div class="dot1"></div>\ 152 <div class="dot2"></div>\ 153 </div>\ 154 <h4 class="spinner-loader-text">' + paramText + '</h4>\ 155 </div>'; 156 157 document.querySelector('#' + paramId).after(newNode); 158 } 159} 160 161function ShowLoader(paramId, paramType) { 162 163 if (document.querySelectorAll('#' + paramId + '-panel-overlay').length === 0) { 164 165 var newNode = document.createElement('div'); 166 167 if (paramType == 'modal') { 168 newNode.classList.add('page-loader-custom-modal'); 169 } 170 else { 171 newNode.classList.add('page-loader-custom'); 172 } 173 newNode.setAttribute('id', paramId + '-page-loader'); 174 document.querySelector('#' + paramId).after(newNode); 175 } 176} 177 178function OverlayHide(paramId) { 179 if (document.querySelectorAll('#' + paramId + '-panel-overlay').length > 0) { 180 181 document.querySelectorAll('#' + paramId + '-panel-overlay').forEach( 182 event => { 183 event.remove(); 184 } 185 ); 186 } 187} 188 189function HideLoader(paramId) { 190 191 if (document.querySelectorAll('#' + paramId + '-page-loader').length > 0) { 192 193 document.querySelectorAll('#' + paramId + '-page-loader').forEach( 194 event => { 195 event.remove(); 196 } 197 ); 198 } 199} 200 201function SetformatNumber(input) { 202 203 var paramType = input.getAttribute('data-type'); 204 205 var input_val = input.value; 206 207 if (input_val === "") { return; } 208 209 var original_len = input_val.length; 210 211 var caret_pos = input.selectionStart; 212 213 if (paramType == 'currency') { 214 215 if (input_val.indexOf(".") >= 0) { 216 var decimal_pos = input_val.indexOf("."); 217 218 var left_side = input_val.substring(0, decimal_pos); 219 var right_side = input_val.substring(decimal_pos); 220 221 left_side = formatNumber(left_side); 222 223 right_side = formatNumber(right_side); 224 225 right_side = right_side.substring(0, 2); 226 227 input_val = left_side + "." + right_side; 228 } 229 else { 230 input_val = formatNumber(input_val); 231 input_val = input_val; 232 } 233 } 234 else if (paramType == 'floatNumOnly') { 235 236 if (input_val.indexOf(".") >= 0) { 237 238 var decimal_pos = input_val.indexOf("."); 239 240 var left_side = input_val.substring(0, decimal_pos); 241 var right_side = input_val.substring(decimal_pos); 242 243 left_side = formatNumberOnly(left_side); 244 245 right_side = formatNumberOnly(right_side); 246 247 input_val = left_side + "." + right_side; 248 } 249 else { 250 input_val = formatNumberOnly(input_val); 251 input_val = input_val; 252 } 253 } 254 else if (paramType == 'numberOnly') { 255 input_val = formatNumberOnly(input_val); 256 input_val = input_val; 257 } 258 else { 259 input_val = formatNumber(input_val); 260 input_val = input_val; 261 } 262 263 input.value = input_val; 264 265 var updated_len = input_val.length; 266 267 caret_pos = updated_len - original_len + caret_pos; 268 269 input.setSelectionRange(caret_pos, caret_pos); 270} 271 272function formatNumber(n) { 273 return n.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",") 274} 275 276function formatNumberOnly(n) { 277 return n.replace(/\D/g, "") 278} 279 280function Validate_Focus() { 281 var idFocus = ''; 282 try {
283 document.querySelectorAll('.invalid-feedback').forEach( 284 event => { 285 286 if (window.getComputedStyle(event).display === 'block') { 287 idFocus = '#' + event.getAttribute('data-for'); 288 throw BreakError; 289 } 290 } 291 ); 292 } catch (e) { 293 294 } 295 296 if (idFocus != '' && document.querySelector(idFocus) !== null) { 297 document.querySelector(idFocus).focus(); 298 } 299} 300 301function Get_Toast() { 302 if (getCookie("ToastData") != null && getCookie("ToastData") != '') { 303 var ToastData = JSON.parse(getCookie("ToastData")); 304 305 Set_Toast(ToastData); 306 deleteCookie("ToastData"); 307 } 308} 309 310function setCookie(cname, cvalue, exdays) { 311 if (cname == 'ToastData' && cvalue != '') { 312 313 let dataObj = JSON.parse(cvalue); 314 315 // Encode UTF-8 string to Latin-1 316 var latin1String = unescape(encodeURIComponent(dataObj.body)); 317 318 // Encode Latin-1 string to base64 319 dataObj.body = btoa(latin1String); 320 321 cvalue = JSON.stringify(dataObj); 322 } 323 324 var d = new Date(); 325 d.setTime(d.getTime() + ((exdays) * 24 * 60 * 60 * 1000)); 326 var expires = "expires=" + d.toUTCString(); 327 document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; 328} 329 330function getCookie(cname) { 331 var name = cname + "="; 332 var decodedCookie = decodeURIComponent(document.cookie); 333 var ca = decodedCookie.split(';'); 334 for (var i = 0; i < ca.length; i++) { 335 var c = ca[i]; 336 while (c.charAt(0) == ' ') { 337 c = c.substring(1); 338 } 339 if (c.indexOf(name) == 0) { 340 return c.substring(name.length, c.length); 341 } 342 } 343 return ""; 344} 345 346function deleteCookie(name) { 347 setCookie(name, "", -1); 348} 349 350function numberWithCommas(number) { 351 var parts = number.toString().split("."); 352 parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); 353 return parts.join("."); 354} 355 356function dateFormat(value, row, index) { 357 if (moment(value).isValid()) { 358 359 dataDay = moment(value).format('DD'); 360 dataMonth = moment(value).format('MM'); 361 dataYear = parseInt(moment(value).format('YYYY')) + 543; 362 363 return dataDay + '/' + dataMonth + '/' + dataYear; 364 } 365 else { 366 367 return ''; 368 } 369}
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.