function echanger() {
    if(document.getElementById('pageTexte').style.display=='none') {
        document.getElementById('pageTexte').style.display='block';
        document.getElementById('pageFormulaire').style.display='none';
    } else {
        document.getElementById('pageTexte').style.display='none';
        document.getElementById('pageFormulaire').style.display='block';
    }
}

var timer = new Array();
var timers = new Array();
var attentes = new Array();
var textes = new Array();

function id_mot(id, i)
{
    return (id + "_mot_" + i);
}

function opacite(id, i, o)
{
    document.getElementById(id_mot(id, i)).style.opacity = o;
    document.getElementById(id_mot(id, i)).style.filter = "alpha(opacity=" + (o*100) + ")";

    if(o >= 1)
    {
        clearTimeout(timers[id][i]);
    }
    else
    {
        timers[id][i] = setTimeout(opacite, 100, id, i, o + 0.05);
    }
}

function declancheur(id, n, i)
{
    if(i == n)
    {
        clearTimeout(timer[id]);
    }
    else
    {
        if(attentes[id].length > 0 && attentes[id][0][0] == i)
        {
            var t = attentes[id].shift();
            timer[id] = setTimeout(declancheur, t[1], id, n, i);
        }
        else
        {
            opacite(id, i, 0);
            timer[id] = setTimeout(declancheur, 200, id, n,i + 1);
        }
    }
}

function nouveau_mot(doc, id, i, t)
{
    var m = document.createElement('span');
    m.setAttribute("id", id_mot(id, i));
    m.setAttribute("class", "transparent");
    m.appendChild(document.createTextNode(t));
    doc.appendChild(m);
}

function espace(doc)
{
    doc.appendChild(document.createTextNode(" "));
}

function nouvelleligne(doc)
{
    doc.appendChild(document.createElement('br'));
}

function calculer_temps(c)
{
    switch(c)
    {
        case ':' :
        case ',' : return 500; break;
        case ';' : return 750; break;
        case '!' :
        case '?' :
        case '.' : return 1000; break;
        default : return 0;
    }
}

function analyse(id)
{
    doc = document.getElementById(id);
    /*if(textes[id])
    {
        var texte = textes[id];
    }
    else
    {
        var texte = doc.innerHTML;
        textes[id] = texte;
    }*/
    var texte = document.getElementById("texte").value;
    doc.innerHTML = "";

    var n = texte.length;
    var j = 0;
    var buff = "";
    var buff_tps = "";
    var accolades = false;

    function add_buff(c)
    {
        if(accolades)
        {
            buff_tps = buff_tps + c;
        }
        else
        {
            buff = buff + c;
        }
    }

    function vider_buff(esp)
    {
        if(buff != "")
        {
            nouveau_mot(doc, id, j, buff);
            j++;
            buff = "";
            if(esp) espace(doc);
        }
    }

    function add_attente(t, mot_actuel)
    {
        if(mot_actuel)
        {
            cible = j;
        }
        else
        {
            cible = j + 1;
        }
        attentes[id].push([cible, t]);
    }

    for(var i = 0; i < n; i++)
    {
        var c = texte.charAt(i);
        if(c == " ")
        {
            vider_buff(true);
        }
        else if(c == "," || c == ";" || c == "." || c == "!" || c == "?" || c == ":")
        {
            add_attente(calculer_temps(c), false);
            add_buff(c);
        }
        else if(c == "\n")
        {
            vider_buff(false);
            nouvelleligne(doc);
        }
        else if(c == "{" && !accolades)
        {
            accolades = true;
        }
        else if(c == "}" && accolades)
        {
            accolades = false;
            var l = buff_tps.length;
            var t = parseInt(buff_tps);
            if(l > 0 && !isNaN(t))
            {
                vider_buff(false);

                if(l > 1 && buff_tps.substr(l - 2, 2) == "ms")
                {
                    add_attente(t, true);
                }
                else if(buff_tps.charAt(l - 1) == "m" || (l > 2 && buff_tps.substr(l - 3, 3) == "min"))
                {
                    add_attente(t * 1000 * 60, true);
                }
                else if(buff_tps.charAt(l - 1) == "h")
                {
                    add_attente(t * 1000 * 60 * 60, true);
                }
                else
                {
                    add_attente(t * 1000, true);
                }
            }
            else
            {
                add_buff("{" + buff_tps + "}");
            }

            buff_tps = "";
        }
        else if(c == "|")
        {
            vider_buff(false);
            add_attente(500, true);
        }
        else
        {
            add_buff(c);
        }
    }

    vider_buff(false);

    return j;
}

function lecture()
{
    var id = "textelu";
    attentes[id] = new Array();
    timers[id] = new Array();
    timer[id] = null;

    var n = analyse(id);
    declancheur(id, n, 0);
}

function lire()
{
    echanger();
    lecture();
}