notifimgon='<?php echo($notifs["imgon"]); ?>';
notifimgoff='<?php echo($notifs["imgoff"]); ?>';
function shidenotifs() {
	var notifc=document.getElementById('notifc');
	var ctrli=document.getElementById('bell');
	if (notifc.style.display=='block') {
		notifc.style.display='none';
		ctrli.src=notifimgoff;
		ctrli.title='Mostra le notifiche';
	} else {
		notifc.style.display='block';
		ctrli.src=notifimgon;
		ctrli.title='Nascondi le notifiche';
	}
}
function markread(notif) {
	let xhr=new XMLHttpRequest();
	xhr.open('GET','notifsh.php?act=markread&id='+notif.id.replace(/^notif-([0-9]+)$/,'$1'));
	xhr.responseType='json';
	xhr.send();
	xhr.onload=function() {
		let jarr=xhr.response;
		if (jarr['hmunseen']==0) {
			notifimgon='imgs/bell_on.svg';
			notifimgoff='imgs/bell_off.svg';
			bell.src=notifimgon;
		}

		if (notif.classList.contains("notifunseen")){
		    // Notifica nella navbar
            notif.className='notifseen';
		} else if (notif.classList.contains("unseen")) {
		    // Notifica nella pagina di gestione notifiche
            notif.classList.remove("unseen");
            notif.classList.add("seen");
        }
	};
	xhr.onerror=function() {
		alert('La richiesta è fallita.');
	};
}

function markdeleted(notif) {
    let xhr = new XMLHttpRequest();
    xhr.open('GET', 'notifsh.php?act=delete&id=' + notif.id.replace(/^notif-([0-9]+)$/, '$1'));
    xhr.responseType = 'json';
    xhr.send();
    xhr.onload = function () {
        if (xhr.response['deleted']) {
            notif.classList.add("deleted");
        } else {
            alert("Il server non ha potuto cancellare la notifica '" + notif.text + "'");
        }
    };
    xhr.onerror = function () {
        alert('La richiesta è fallita.');
    };
}

function getAliveNotifs(){
    let notifs = Array.from(document.querySelectorAll("div.notif"));
    return notifs.filter(n => {
        let classes = Array.from(n.classList);
        return !(classes.includes("deleted") || classes.includes("filtered"));
    })
}

function getAliveCheckboxes() {
    let notifs = getAliveNotifs();
    return notifs.map(n => n.querySelector("input.seen-checkbox"))
}

function readSelected() {
    let selected = getSelectedNotifs()
    let request = {
        "act": "massread",
        "ids": selected.map(div => div.id.replace(/^notif-([0-9]+)$/, '$1'))
    }
    let xhr = new XMLHttpRequest();
    xhr.open('POST', 'notifs.php');
    xhr.setRequestHeader('Content-type','application/json');
    xhr.responseType = 'json';
    xhr.send(JSON.stringify(request));
    xhr.onload = function () {
        if (xhr.response['done']) {
            selected.forEach(notif => {
                        notif.classList.remove("unseen");
                        notif.classList.add("seen");
                    })
        } else {
            alert("Il server non ha potuto completare la richiesta:\n" + xhr.response["error"]);
        }
    };
    xhr.onerror = function () {
        alert('La richiesta è fallita.');
    };
}

function deleteSelected() {
    let selected = getSelectedNotifs()
    let request = {
        "act": "massdelete",
        "ids": selected.map(div => div.id.replace(/^notif-([0-9]+)$/, '$1'))
    }
    let xhr = new XMLHttpRequest();
    xhr.open('POST', 'notifs.php');
    xhr.setRequestHeader('Content-type','application/json');
    xhr.responseType = 'json';
    xhr.send(JSON.stringify(request));
    xhr.onload = function () {
        if (xhr.response['done']) {
            selected.forEach(notif => notif.classList.add("deleted"));
        } else {
            alert("Il server non ha potuto completare la richiesta:\n" + xhr.response["error"]);
        }
    };
    xhr.onerror = function () {
        alert('La richiesta è fallita.');
    };
}

function getSelectedNotifs() {
    let notifs = getAliveNotifs();
    return notifs.filter(notif => notif.querySelector("input.seen-checkbox").checked)
}

lmt =<?php echo($notifs['lastmicrotime']); ?>;
chunk=0;
end=false;
loading=false;
function morenotifs() {
	if (!loading && !end && notifs.scrollHeight-notifs.clientHeight-notifs.scrollTop<20) {
		loading=true;
		chunk++;
		let xhr=new XMLHttpRequest();
		xhr.open('GET','notifsh.php?act=loadchunk&chunk='+chunk);
		xhr.responseType='json';
		xhr.send();
		xhr.onload=function() {
			let jarr=xhr.response;
			//console.log(jarr);
			let i=0, html='';
			for (i=0; i<jarr.length; i++)
				html+=jarr[i];
			notifs.innerHTML+=html;
			if (jarr.length<<?php echo($notifs['chunksize']); ?>)
				end=true;
			loading=false;
		};
		xhr.onerror=function() {
			alert('La richiesta è fallita.');
		};
	}
}
loadingupd=false;
function updnotifs() {
	if (!loadingupd) {
		loadingupd=true;
		let xhr=new XMLHttpRequest();
		xhr.open('GET','notifsh.php?act=loadnew&lmt='+lmt);
		xhr.responseType='json';
		xhr.send();
		xhr.onload=function() {
			let jarr=xhr.response;
			//console.log(jarr);
			let i=0, html='';
			for (i=0; i<jarr['buf'].length; i++)
				html+=jarr['buf'][i];
			notifs.innerHTML=html+notifs.innerHTML;
			lmt=jarr['newlmt'];
			if (jarr['newunread']) {
				notifimgoff='imgs/bell_act_on.svg';
				notifimgon='imgs/bell_act_off.svg';
				(notifc.style.display=='block') ? bell.src=notifimgoff : bell.src=notifimgon;
			}
			loadingupd=false;
		};
		xhr.onerror=function() {
			alert('La richiesta è fallita.');
		};
	} else {
		console.log('Già sto caricando...');
	}
}
updint=setInterval(updnotifs,3000);
