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