/**
 * Retourne un prix sans taxe sur base du prix avec tax
 *
 * @param priceWithTax
 * @param taxRate
 * @returns {string}
 */
function getPrice(priceWithTax, taxRate) {
    return parseFloat(parseFloat(priceWithTax) / ((taxRate/100) + 1)).toFixed(4);
}

/**
 * Retourne un prix avec taxe sur base du prix sans taxe
 *
 * @param priceWithoutTax
 * @param taxRate
 * @returns {string}
 */
function getPriceWithTax(priceWithoutTax, taxRate) {
    return parseFloat(parseFloat(priceWithoutTax) * ((taxRate/100) + 1)).toFixed(2);
}

function getMargin(price, buyingPrice){
        return parseFloat(price - buyingPrice).toFixed(2);
}

function getMarginPercent(price, buyingPrice){
    return parseFloat(((price - buyingPrice) / price) * 100).toFixed(2);
}

function applyReductionPercent(price, percentage)
{
    return applyPercent(price, -percentage);
}

function applyReductionAmount(price, amount)
{
    return parseFloat(price - amount).toFixed(2);
}

function applyPercent(price, percentage)
{
    return parseFloat(price * (percentage / 100 + 1)).toFixed(2);
}


function formatNumber(number, toFixed){
    if(number)return Number(number.replace(',', '.')).toFixed(toFixed);
    else return null;
}
function formatNumberWithoutFixed(number){
    if(typeof number == 'string')number = number.replace(',', '.');
    if(number)return Number(number);
    else return null;
}


var getUrlParameter = function getUrlParameter(sParam) {
    var sPageURL = window.location.search.substring(1),
        sURLVariables = sPageURL.split('&'),
        sParameterName,
        i;

    for (i = 0; i < sURLVariables.length; i++) {
        sParameterName = sURLVariables[i].split('=');

        if (sParameterName[0] === sParam) {
            return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
        }
    }
};

/**
 * Formate un prix en l'arrondissant et en ajoutant le sigle de la monnaie
 *
 * @param price
 * @returns {string}
 */
function formatPrice(price) {
    return Number(price).toFixed(2).replace('.', ',') + ' €';
}

/**
 * Formate une date au format jj/mm/yyyy
 * @param date
 * @returns {*}
 */
function formatDate(date) {
    if (date) {
        return ('0' + date.getDate()).slice(-2) + '/' + ('0' + (date.getMonth() + 1)).slice(-2) + '/' + date.getFullYear();
    }
    return false;
}

/**
 * Equivalent de console.log (ne déclenche pas d'erreur si la console est fermé)
 *
 * @param msg
 */

function log(msg) {
    try {
        console.log(msg);
    } catch (e) {

    }
}

/**
 * Convertit un formulaire ou un objet en JSON (utilisé pour l'envoie de donnée en ajax)
 */
$.fn.serializeObject = function () {
    var o = {};
    var a = this.serializeArray();
    $.each(a, function () {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};


function getDateFormatted(date, separator) {
    if(date) {
        var date = new Date(date);
        var _d = date.getDate(),
            d = _d > 9 ? _d : '0' + _d,
            _m = date.getMonth() + 1,
            m = _m > 9 ? _m : '0' + _m,
            formatted = d + separator + m + separator + date.getFullYear();
        return formatted;
    }else{
        return '';
    }
}

//Affiche une alert au click sur un bouton submit lorsqu'un utilisateur admin tente de modifer un Ã©tablissement
function userNotAllowToEdit() {
    alert('Vous n\'êtes pas autorisé à effectuer cette action');
    return false;
}



function setFlashMessages(flashMessages){
    for (var type in flashMessages) {
        for (var key in flashMessages[type]) {
            generateNotice(type, flashMessages[type][key]);
        }
    }
}

function generateNotice(type, text) {
    toastr.options.timeOut = 30000;
    toastr[type](text);

    /*var n = noty({
        text: text,
        type: type,
        dismissQueue: true,
        layout: 'topRight',
        closeWith: ['click'],
        autoHide: true,
        clickToHide: false,
        autoHideDelay: 50,
        maxVisible: 10,
        animation: {
            open: 'animated bounceInDown',
            close: 'animated bounceOutDown',
            easing: 'swing',
            speed: 500
        }
    });*/
}


function checkFormValidity(formId){
    if(!document.getElementById(formId.substr(1)).checkValidity()){
        document.getElementById(formId.substr(1)).reportValidity()
        return false;
    }else{
        return true;
    }
}


function arrayRemove(arr, value) { return arr.filter(function(ele){ return ele != value; });}

const scratchDiv = document.createElement('div');
function toPlainText(html) {
    scratchDiv.innerHTML = html;
    return scratchDiv.textContent;
}
