# Source: fonctions_annexes.js

    /* Fonctions Annexes */

    /**
     * @function isEmptyValue
     * @description Vérifie si une valeur est vide.
     * @param {string} value
     * @returns {boolean}
     * @example isEmptyValue(null) → true
     */
    function isEmptyValue(value) {
        return value === '' || value === null || value === undefined;
    }

    /**
     * @function formatNumberResult
     * @description Formate un nombre avec des espaces.
     * @param {number} num
     * @returns {(number|string)} - Le nombre formaté soit en nombre ou soit en string si supérieur à 1000 car pour 1000 par exemple formatNumberResult renvoie '1 000'
     * @example formatNumberResult(76120) → '76 120'
     */
    function formatNumberResult(num) {
        if(!isNaN(num) && num >= 1000) {
            return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1 ');
        }
        else {
            return num;
        }
    }

    /**
     * @function isFloat
     * @description Vérifie si une string est un float (integer exclu).
     * @param {number} value
     * @returns {boolean}
     * @example isFloat(76120.474) → true
     */
    function isFloat(value) {
        return !isNaN(value) && value.toString().includes('.');
    }

    /**
     * @function capitalize
     * @description Majuscule à la 1ère lettre d'une string.
     * @param {string} s
     * @returns {string}
     * @example capitalize('hello world!') → 'Hello world!'
     */
    function capitalize(s) {
        if (typeof s !== 'string') return ''
        return s.charAt(0).toUpperCase() + s.slice(1)
    }

    /**
     * @function dateTimeUTC
     * @description Donne la date et l'heure selon l'UTC (Universal Time Coordinated).
     * @requires {@link fonctions_annexes.js: showDateTime}
     * @requires {@link variables.js: timeNow, utcOffset, timeNow.setMinutes(timeNow.getMinutes() + utcOffset)}
     * @param {string} utc Heure de décalage par rapport à l'UTC
     * @returns {function} → showDateTime(enteredOffset) → Retourne l'exécution de la fonction showDateTime
     * @example dateTimeUTC('0')
     */
    function dateTimeUTC(utc) {
        const enteredOffset = parseFloat(utc)*60;
        timeNow.setMinutes(timeNow.getMinutes() + enteredOffset);
        return showDateTime(enteredOffset);
    }

    /**
     * @function showDateTime
     * @description Affiche la date et l'heure (format : dd/mm/yyyy - 00:00:00).
     * @requires {@link fonctions_annexes.js: showDateTime}
     * @param {string} utc Heure de décalage par rapport à l'UTC
     * @returns {object} Retourne un objet contenant l'année, le mois, le jour, l'heure, les minutes, les secondes et la date formaté
     * @example dateTimeUTC('0') → dateTimeUTC vous renvoie l'exécution de showDateTime
     */
    function showDateTime(enteredOffset) {
        const year    = timeNow.getFullYear();
        const month   = ('0'+(timeNow.getMonth()+1)).slice(-2);
        const day     = ('0'+timeNow.getDate()).slice(-2);
        const hour    = ('0'+timeNow.getHours()).slice(-2);
        const minute  = ('0'+timeNow.getMinutes()).slice(-2);
        const second  = ('0'+timeNow.getSeconds()).slice(-2);

        const showDateTimeValue = day + "/" + month + "/" + year + " - " + hour + ":" + minute + ":" + second;
        const objectDateTime = {
            year: year,
            month: month,
            day: day,
            hour: hour,
            minute: minute,
            second: second,
            showDateTimeValue: showDateTimeValue
        };
        timeNow.setMinutes(timeNow.getMinutes() - enteredOffset)

        return objectDateTime;
    }

    /**
     * @function realDateTime
     * @description Affiche l'heure en temps réel.
     * @param {string} id
     * @returns {boolean} true → Toujours true
     * @example window.onload = realDateTime('realDateTime') → va afficher l'heure en temps réel au chargement de la page dans la balise avec l'id realDateTime
     */
    function realDateTime(id) {
        const realDateTimeNow = new Date;
        // const year    = realDateTimeNow.getFullYear();
        // const month   = ('0'+(realDateTimeNow.getMonth()+1)).slice(-2);
        // const day     = ('0'+realDateTimeNow.getDate()).slice(-2);
        const hour    = ('0'+realDateTimeNow.getHours()).slice(-2);
        const minute  = ('0'+realDateTimeNow.getMinutes()).slice(-2);
        const second  = ('0'+realDateTimeNow.getSeconds()).slice(-2);

        const resultat = hour + ":" + minute + ":" + second;

        document.getElementById(id).innerHTML = resultat;
        setTimeout('realDateTime("'+id+'");','1000');
        return true;
    }

    /**
     * @function isValidDate
     * @description Vérifie si une date est valide (si la variable verifyDate a déjà exister avant la variable currentDate).
     * @param {string} verifyDate (format : dd/mm/yyyy) sachant qu'il faut faire -1 au mois car de 0 à 11 donc par exemple 14/12/2019 sera le 14 novembre 2019
     * @param {string} currentDate (format : dd/mm/yyyy) pas besoin de faire -1 au mois donc par exemple 14/12/2019 sera le 14 décembre 2019
     * @returns {boolean}
     * @example
     * isValidDate('10/11/2019', '11/11/2019') → false → Comparaison entre le 10 décembre 2019 et le 11 novembre 2019
     * isValidDate('10/10/2019', '11/11/2019') → true → Comparison entre le 10 novembre 2019 et le 11 novembre 2019
     */
    function isValidDate(verifyDate, currentDate) {
        // Date à vérifier
        const toVerifyDate = verifyDate.split('/');
        const splitedToVerifyDate = toVerifyDate[2] + '-' + (parseInt(toVerifyDate[1]) + 1) + '-' + toVerifyDate[0];
        const msToVerifyDate = Date.parse(splitedToVerifyDate);

        // Date courante
        currentDate = currentDate.substr(0,10);
        const currentDateSplited = currentDate.split('/');
        const currentDateFormat = currentDateSplited[2] + '-' + currentDateSplited[1] + '-' + currentDateSplited[0];
        const msCurrentDate = Date.parse(currentDateFormat);

        if(msToVerifyDate <= msCurrentDate) {
            return true;
        } else if(msToVerifyDate > msCurrentDate) {
            return false;
        } else {
            return messageError;
        }
    }

    /**
     * @function createSessionCookie
     * @description Créer un cookie de session.
     * @param {string} name Nom du cookie
     * @param {string} value Valeur du cookie
     */
    function createSessionCookie(name, value) {
        document.cookie = escape(name) + "=" + escape(value) + " ; path=/";
    }