const MSP_URL='https://mda.weup.dev';const MSP_API_URL=`${MSP_URL}/v1`;let MSP_CONTENT_KEYWORDS=[];let startTimeMap={};document.addEventListener("DOMContentLoaded",async function(){(async function MSP_checkSite(){if(window.matchMedia("(min-width: 1025px)").matches){console.log('== Mda not working on PC ==');document.querySelectorAll('.mda-zone').forEach(e=>{e.remove()});return}
if(window.matchMedia("(min-width: 769px) and (max-width: 1024px)").matches){console.log('== Mda not working on Tablet ==');document.querySelectorAll('.mda-zone').forEach(e=>{e.remove()});return}
console.log('== Mda on Mobile ==');await MSP_callApi(url=`${MSP_API_URL}/mda/check-site`).then(res=>{const positions=res.data?.positions;const positionCode=positions?positions.map(x=>x.code):[];document.querySelectorAll('.mda-zone').forEach(e=>{if(!positionCode.includes(e.getAttribute('data-position'))){console.log(`Mda - remove because position "${e.getAttribute('data-position')}" is invalid`);e.remove()}})});if(!document.querySelectorAll('.mda-zone').length)return;MSP_CONTENT_KEYWORDS=MSP_getKeywordDensity();localStorage.setItem('MSP_CONTENT_KEYWORDS',MSP_CONTENT_KEYWORDS);MSP_render();window.addEventListener('scroll',MSP_render)})()});function MSP_checkDivVisibility(){var divs=document.querySelectorAll('.mda-zone.loaded');var windowHeight=window.innerHeight||document.documentElement.clientHeight;divs.forEach(function(div){var rect=div.getBoundingClientRect();var divCode=div.getAttribute('data-position');if(rect.top>=0&&rect.bottom<=windowHeight){if(!startTimeMap[divCode]){startTimeMap[divCode]=performance.now();console.log(`Thời gian bắt đầu xuất hiện của div ${divCode}: ${startTimeMap[divCode]}`)}
return}
if(startTimeMap[divCode]){var endTime=performance.now();var timeOnScreen=endTime-startTimeMap[divCode];console.log(`Thời gian hiển thị của div ${divCode}: ${timeOnScreen} milliseconds`);delete startTimeMap[divCode]}})}
async function MSP_render(){const mdaZones=document.querySelectorAll('.mda-zone[data-loaded="0"]');if(!mdaZones.length){window.removeEventListener('scroll',MSP_render);return}
mdaZones.forEach(function(zone){if(!MSP_isElementInViewport(zone)||zone.getAttribute('data-loaded')=='1')return;if(!zone.getAttribute('data-position'))zone.remove();const p=zone.getAttribute('data-position');const payload={'p':p,'text_seo':`${document.title}. ${MSP_getMeta('description')}`,'keywords':MSP_CONTENT_KEYWORDS,'parent_url':window.location.origin+window.location.pathname}
const url=MSP_genUrl(`${MSP_URL}/mda`,payload);zone.innerHTML=`<iframe class="mda-iframe" src="${url}" width="100%" height="0" style="border: 0; overflow: hidden; margin: 0 auto; display: block;" scrolling="no"></iframe>`;zone.setAttribute('data-loaded',1);zone.classList.add('loaded');const iframe=zone.querySelector('iframe');window.addEventListener('message',function(event){if(!['resize','remove'].includes(event.data.type)||event.source!==iframe.contentWindow)return;if('remove'==event.data.type){console.log(event.data.message||`Mda - ${p} - Remove by click`);zone.remove();return}
if(event.data.height==0||event.data.width==0){console.log(`Mda - ${p} - Remove because no-content`);zone.remove();return}
iframe.style.height=`${event.data.height}px`;iframe.style.width=`${event.data.width}px`})})}
function MSP_genUrl(url,params={}){if(!Object.keys(params).length)return url;queryString=MSP_objToQueryString(params);if(queryString)url+='?'+queryString;return url}
function MSP_objToQueryString(params){if(!Object.keys(params).length)return'';return Object.keys(params).map(key=>{if(Array.isArray(params[key])){return params[key].map(value=>`${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join('&')}
return `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`}).join('&')}
function MSP_isElementInViewport(el){var rect=el.getBoundingClientRect();return(rect.top>=0&&rect.left>=0&&rect.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&rect.right<=(window.innerWidth||document.documentElement.clientWidth))}
function MSP_getQueryParams(url){if(!url)url=window.location.href;const queryString=url.split('?')[1];if(!queryString)return{};let queryParams={};const params=queryString.split('&');for(let i=0;i<params.length;i++){let param=params[i].split('=');let paramName=decodeURIComponent(param[0]);let paramValue=decodeURIComponent(param[1]);queryParams[paramName]=paramValue}
return queryParams}
function MSP_getMeta(t){let e=document.getElementsByTagName('meta');for(let n=0;n<e.length;n++){if(e[n].getAttribute("name")===t)return e[n].getAttribute('content')}
return""}
function MSP_getAttributes(element,keys=[]){var attributes={};Array.from(element.attributes).forEach(attr=>{if(keys.length&&!keys.includes(attr.name))return;attributes[attr.name]=attr.value});return attributes}
function MSP_callApi(url,payload={},method='GET'){return new Promise((resolve,reject)=>{if(method.toLowerCase()=='get'){url=MSP_genUrl(url,payload)}
const xhr=new XMLHttpRequest();xhr.open(method,url,!0);xhr.setRequestHeader('Content-Type','application/json; charset=UTF-8');xhr.onload=function(){resolve(JSON.parse(xhr.responseText))};xhr.onerror=function(){console.log('=========== Error: ',xhr.statusText);reject(new Error(xhr.statusText))};xhr.send(method.toLocaleLowerCase()=='post'?JSON.stringify(payload):null)})}
function MSP_getKeywordDensity(dens=10,limit=40){let elements=document.querySelectorAll('.entry, .entry-content');if(!elements.length){elements=document.querySelectorAll('body')}
let keywordDensity={};elements.forEach(function(element){const words=element.textContent.split(/\s+/);for(let n=2;n<=5;n++){for(let i=0;i<words.length-n+1;i++){const w=words.slice(i,i+n).join(' ').replaceAll(',','').replaceAll('.','').replaceAll('?','');if(!w.length)continue;if(!(w in keywordDensity)){keywordDensity[w]=1}
keywordDensity[w]++}}});let thickKeywordDensity={};for(let w in keywordDensity){if(keywordDensity[w]>=dens){thickKeywordDensity[w]=keywordDensity[w]}}
const listKeyWords=Object.keys(thickKeywordDensity);if(!limit||limit>=listKeyWords.length)return listKeyWords;const sortedKeywordDensity=listKeyWords.sort(function(a,b){return thickKeywordDensity[b]-thickKeywordDensity[a]});return sortedKeywordDensity.slice(0,limit)}
function MSP_findAncestorWithClasses(element,classNames){var ancestor=element.parentElement;while(ancestor){var hasAllClasses=classNames.every(className=>ancestor.classList.contains(className));if(hasAllClasses){return ancestor}
ancestor=ancestor.parentElement}
return null}