/*
 * ADDPLUS JS Random Text
 * Copyright 2007 ADDPLUS
 * Developed by Yuri D'Elia
 */


// conversion tables
var rndTable = new Array();

var rndChr = new Array
(
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'X',
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'x', 'y', 'z', '0', '1', '2', '3',
'4', '5', '6', '7', '8', '9'
);


// global initialization
function rndInit()
 {
    for (var i = 0; i != rndChr.length; ++i)
    rndTable[rndChr[i]] = i;
}

rndInit();


function RndText(obje, pool, delay)
 {
    // defaults
    this.speed = 10;
    // character update delay
    this.chrSpeed = 5;
    // character reveal speed per update
    // initialization
    var obje;
    var orig;
    var len;
    var rnd;
    var poolIdx = 0;
    var speed = this.speed;
    var chrSpeed = this.chrSpeed;
    var intId;


    function reset()
    {
        //	console.log("pool: " + pool);
        //	console.log("obje: " + obje);
        //	console.log("poolIdx: " + poolIdx);	
        //	console.log("getcat: " + nls.getCat(pool[poolIdx++ % pool.length]));
        orig = (pool ? nls.getCat(pool[poolIdx++%pool.length]) :
        trimWs(obje.innerHTML));
        len = 0;

        //	console.log("orig: " + orig);
        // randomize all text
        var text = "";
        for (var i = 0; i != orig.length; ++i)
        {
            if (rndTable[orig.charAt(i)] === undefined)
            text += orig.charAt(i);
            else
            text += rndChr[parseInt(Math.random() * rndChr.length)];
        }

        // save and register
        rnd = text;
        obje.innerHTML = "";
        intId = setInterval(anim, speed);
    }


    function anim()
    {
        len = Math.min(len += chrSpeed, orig.length);
        var done = true;

        // alter the string
        var text = "";
        for (var i = 0; i != len; ++i)
        {
            if (rnd.charAt(i) != orig.charAt(i))
            {
                text += rndChr[(rndTable[rnd.charAt(i)] + 1) % rndChr.length];
            }
            else
            {
                text += orig.charAt(i);
            }
        }

        // save and register
        obje.innerHTML = text ;
        text += rnd.slice(len);
        if (text != orig)
        rnd = text;
        else
        {
            clearInterval(intId);
            if (delay !== undefined)
            setTimeout(reset, delay);
        }
    }


    reset();
    return this;
}

