function pageAccessibility() {
    const contrastButtons = document.querySelectorAll(`.accessibility-high-contrast`);
    const audioButtons = document.querySelectorAll(`.accessibility-audio`);
    const fontUpButtons = document.querySelectorAll(`.accessibility-font-up`);
    const fontDownButtons = document.querySelectorAll(`.accessibility-font-down`);
    const readArticleButtons = document.querySelectorAll(`.read-article`);
    let currentFontSize;

    bindButtonEvents();

    initCurrentFontSize();

    initContrast();

    initAudioMode();

    let stopReadButtons = document.querySelectorAll('.stop-reading');

    for (const stopButton of stopReadButtons) {
        stopButton.onclick = () => {
            speechSynthesis.cancel();
            stopButton.classList.add('d-none')
        };
    }

    function bindButtonEvents() {
        for (const button of contrastButtons) {
            button.onclick = () => {toggleContrast()};
        }
        for (const button of audioButtons) {
            button.onclick = () => {toggleAudioMode()};
        }
        for (const button of fontUpButtons) {
            button.onclick = () => {fontUp()};
        }
        for (const button of fontDownButtons) {
            button.onclick = () => {fontDown()};
        }
        for (const button of readArticleButtons) {
            button.onclick = () => {readArticle()};
        }
        document.body.onkeyup = function(e){
            if(document.body.classList.contains("audio-mode")) {
                if (e.keyCode == 9) {
                    speechSynthesis.cancel();
                    readThis(e);
                }
            }
        }
    }

    function toggleContrast() {
        document.body.classList.toggle("high-contrast");

        if(document.body.classList.contains("high-contrast")) {
            localStorage.setItem('contrast', 1);
        }
        else {
            localStorage.removeItem('contrast');
        }
    }

    function toggleAudioMode() {
        document.body.classList.toggle("audio-mode");

        if(document.body.classList.contains("audio-mode")) {
            localStorage.setItem('audio', 1);
        }
        else {
            localStorage.removeItem('audio');
        }
    }

    function fontUp() {
        document.body.setAttribute('data-fontsize', setNewFontSize(currentFontSize+1))
    }

    function fontDown() {
        document.body.setAttribute('data-fontsize', setNewFontSize(currentFontSize-1))
    }

    function setNewFontSize(newFontSize)
    {
        if(newFontSize < -2) newFontSize = -2;
        else if(newFontSize > 2) newFontSize = 2;

        currentFontSize = newFontSize;

        localStorage.setItem('currentFontSize', newFontSize);

        return parseInt(currentFontSize);
    }

    function initCurrentFontSize() {
        const fontSize = localStorage.getItem('currentFontSize');

        if(fontSize === null) currentFontSize = 0;
        else currentFontSize = parseInt(fontSize);

        document.body.setAttribute('data-fontsize', currentFontSize)
    }

    function initContrast() {
        const contrast = localStorage.getItem('contrast');

        if(contrast !== null) document.body.classList.add("high-contrast");
    }

    function initAudioMode() {
        const contrast = localStorage.getItem('audio');

        if(contrast !== null) document.body.classList.add("audio-mode");
    }

    async function readArticle() {
        let text = "";

        const voices = await window.speechSynthesis.getVoices();

        speechSynthesis.cancel();

        let readSections = document.querySelectorAll('.read-aloud');

        let i = 0;
        let pre = '';

        for (const read of readSections) {
            if(i === 0)
                pre = '. ! . ! . !';
            else pre = '';

            let type = read.getAttribute('data-read');
            if (type !== null) {
                if (type === 'alt') {
                    if(read.getAttribute('alt')!='')
                        text += pre +  read.getAttribute('alt');
                }
            } else {
                if(read.textContent!='')
                    text += pre + read.textContent + ' . ! . ! . ! . ! . ! . !';
            }

            i++;
        }

        let message = new SpeechSynthesisUtterance(text);
        message.voice = voices[0];

        speechSynthesis.speak(message);

        let stopReadButtons = document.querySelectorAll('.stop-reading');

        for (const stopButton of stopReadButtons) {
            stopButton.classList.remove('d-none')
        }
    }

    function readThis(e) {
        let text = e.target.textContent + ' . ! . ! . ! . ! . ! . !';
        let message = new SpeechSynthesisUtterance(text);

        if(e.target.textContent != '')
            speechSynthesis.speak(message);
    }

}
