function preg_replace (array_pattern, array_pattern_replace, my_string)
{
    var new_string = String(my_string);

    for (var i = 0; i < array_pattern.length; i++)
    {
        var reg_exp = RegExp(array_pattern[i], "gi");
        var val_to_replace = array_pattern_replace[i];
        new_string = new_string.replace (reg_exp, val_to_replace);
    }

    return new_string;
}

function vire_accents(a_acc)
{
    var a_accents = new Array("é", "è", "ê", "ë", "ç", "à", "â", "ä", "î", "ï", "ù", "ô", "ó", "ö");
    var s_accents = new Array("e", "e", "e", "e", "c", "a", "a", "a", "i", "i", "u", "o", "o", "o");

    return preg_replace(a_accents, s_accents, a_acc);
}

function kimahrieur()
{
    var texte = $('kimahrieur').elements["texte"].value;
    var trad = $('trad');

    var j = 0;
    var nb_s = 0;
    var gb_s = 0;

    var ponct = new Array();
    var gb = new Array();
    var gb2 = new Array();

    /* nb_s contiendra le nombre d'espaces. */

    for (var i = 0; i < texte.length; i++)
        if (texte[i] == ' ')
            nb_s++;

    /* On formate un peu le texte. */

    texte = vire_accents(texte.toLowerCase());

    /* On ne cherche une voyelle, puis une consonne, et ainsi de suite. */

    for (var i = 0; i <= texte.length; i++)
    {
        while (texte[i] != 'a' && texte[i] != 'e' && texte[i] != 'i' && texte[i] != 'o' && texte[i] != 'u' && texte[i] != 'y' && texte[i]) i++;

        if (!texte[i]) break;
        gb[j] = texte[i];
        i++; j++;

        while ((texte[i] == 'a' || texte[i] == 'e' || texte[i] == 'i' || texte[i] == 'o' || texte[i] == 'u' || texte[i] == 'y' || texte[i] < 'a' || texte[i] > 'z') && texte[i]) i++;

        if (!texte[i]) break;
        gb[j] = texte[i];
        j++;
    }

    /* L'algorithme secret. */

    if (nb_s > 2)
    {
        for (var i = (gb.length / nb_s).floor() + 3; gb_s <= gb.length / 2; i--)
        {
            for (j = 0; j < gb.length; j++)
                if (j % i == 0)
                    gb[j] = ' ';

            for (j = 0, gb_s = 0; j < gb.length; j++)
                if (gb[j] == ' ')
                    gb_s++;
        }

        for (j = 0; j < gb.length; j++)
            if (gb[j-1] == ' ' && (gb[j+1] == ' ' || gb[j+1] == 0))
                gb[j] = ' ';
    }

    /* Le reformatage. */

    for (var i = 0, j = 0; i < gb.length; i++)
    {
        if (gb[i] != ' ')
		{
            gb2[j] = gb[i];
            j++;

            if (j % 5 == 4)
            {
                gb2[j] = ' ';
                j++;
            }
        }
    }

    gb2.splice(j);

    if (j > 1)
    {
        if (j % 5 == 1 || j % 5 == 0)
            gb2.splice(j - (j % 5) - 1);

        gb2[0] = gb2[0].toUpperCase();

        for (var i = texte.length - 1; texte[i] == '.' || texte[i] == '!' || texte[i] == '?' || texte[i] == ' '; i--)
                ponct.push(texte[i]);

        gb2 = gb2.concat(ponct.reverse());
    }
    else if (j == 1)
    {
        gb2.splice(0);
    }

    trad.innerHTML = gb2.join("");
}