  function replaceSubString(originalString, searchForString, replaceWithString) {
        var objRegExp = eval("/" + searchForString + "/g");
        return originalString.replace(objRegExp, replaceWithString);
    }


    function contient(str1, str2) {
        return str1.indexOf(str2) != -1;
    }


    function Text2Float(x) {
        x = x + "";
        Expression = new RegExp("[,]", "gi");
        x = x.replace(Expression, ".");
        if (x == "") {
            x = 0;
        }
        return parseFloat(x);
    }


    function getRandom(min, max) {
        var randomNum = Math.random() * (max - min);
        return Math.round(randomNum) + min;
    }


    function isNumber(item, min, max) {
        item.value = replaceSubString(item.value, ",", ".");
        item.value = replaceSubString(item.value, " ", "");
        if (item.value.length == 0) {
            alert("Calcul interrompu : vous devez renseigner ce champ !");
            item.focus();
            return false;
        }
        if (!isNaN(item.value)) {
            if (min != null) {
                if (parseFloat(item.value) < min) {
                    item.value = min;
                }
            }
            if (max != null) {
                if (parseFloat(item.value) > max) {
                    item.value = max;
                }
            }
            return true;
        }
        alert("Calcul interrompu :\n\n\"" + item.value + "\" n'est pas un nombre valide !");
        item.focus();
        return false;
    }


    function round(number, decimal) {
        var factor = Math.pow(10, decimal);
        return Math.round(number * factor) / factor;
    }


    function goRepartir() {
        var form = document.forms.actuelle;
        var Actions = 0;
        var Obligations = 0;
        var Immobilier = 0;
        var Monetaire = 0;
        var ActionsCible = 0;
        var ObligationsCible = 0;
        var ImmobilierCible = 0;
        var MonetaireCible = 0;
        var ActionsPC = 0;
        var ObligationsPC = 0;
        var ImmobilierPC = 0;
        var MonetairePC = 0;
        var total = 0;
        var formCible = document.forms.cible;
        if (!isNumber(form.Montant, 0, 9999999)) {
            return false;
        }
        var Montant = form.Montant.value;
        if (!isNumber(form.Actions, 0, 9999999)) {
            return false;
        }
        if (!isNumber(form.Obligations, 0, 9999999)) {
            return false;
        }
        if (!isNumber(form.Immobilier, 0, 9999999)) {
            return false;
        }
        if (!isNumber(form.Monetaire, 0, 9999999)) {
            return false;
        }
        if (!isNumber(form.ActionsPC, 0, 100)) {
            return false;
        }
        if (!isNumber(form.ObligationsPC, 0, 100)) {
            return false;
        }
        if (!isNumber(form.ImmobilierPC, 0, 100)) {
            return false;
        }
        if (!isNumber(form.MonetairePC, 0, 100)) {
            return false;
        }
        Montant = Text2Float(form.Montant.value);
        Actions = Text2Float(form.Actions.value);
        Obligations = Text2Float(form.Obligations.value);
        Immobilier = Text2Float(form.Immobilier.value);
        Monetaire = Text2Float(form.Monetaire.value);
        ActionsPC = Text2Float(form.ActionsPC.value);
        ObligationsPC = Text2Float(form.ObligationsPC.value);
        ImmobilierPC = Text2Float(form.ImmobilierPC.value);
        MonetairePC = Text2Float(form.MonetairePC.value);
        if (ActionsPC + ObligationsPC + ImmobilierPC + MonetairePC != 100) {
            alert("La r\xE9partition cible doit faire 100% !");
            return false;
        }
        total = Actions + Obligations + Immobilier + Monetaire + Montant;
        ActionsCible = round(total * ActionsPC / 100, 0);
        ObligationsCible = round(total * ObligationsPC / 100, 0);
        ImmobilierCible = round(total * ImmobilierPC / 100, 0);
        MonetaireCible = round(total * MonetairePC / 100, 0);
        formCible.Actions.value = ActionsCible;
        formCible.Obligations.value = ObligationsCible;
        formCible.Immobilier.value = ImmobilierCible;
        formCible.Monetaire.value = MonetaireCible;
        formCible.ActionsAjust.value = ActionsCible - Actions;
        formCible.ObligationsAjust.value = ObligationsCible - Obligations;
        formCible.ImmobilierAjust.value = ImmobilierCible - Immobilier;
        formCible.MonetaireAjust.value = MonetaireCible - Monetaire;
        var myData = new Array(["Actions", ActionsCible], ["Obligations", ObligationsCible], ["Immobilier", ImmobilierCible], ["Mon\xE9taire", MonetaireCible]);
        var colors = ["#FF0000", "#FFD300", "#6A48D7", "#00CC00"];
        var myChart = new JSChart("graphCible", "pie");
        myChart.setDataArray(myData);
        myChart.colorizePie(colors);
        myChart.resize(250, 250);
        myChart.setTitleColor("#000000");
        myChart.setTitle("Allocation cible");
        myChart.setPieUnitsColor("#000000");
        myChart.setPieValuesColor("#000000");
        myChart.draw();
        var myData2 = new Array(["Actions", Actions], ["Obligations", Obligations], ["Immobilier", Immobilier], ["Mon\xE9taire", Monetaire]);
        var colors2 = ["#FF0000", "#FFD300", "#6A48D7", "#00CC00"];
        var myChart2 = new JSChart("graphActuelle", "pie");
        myChart2.setDataArray(myData2);
        myChart2.colorizePie(colors2);
        myChart2.resize(250, 250);
        myChart2.setTitleColor("#000000");
        myChart2.setTitle("Allocation actuelle");
        myChart2.setPieUnitsColor("#000000");
        myChart2.setPieValuesColor("#000000");
        myChart2.draw();
    }
