var NEWS = {
    bgcolor : "#FFFFFF",
    //"#FCF9F6",
    fcolor  : "#005800",
    //"#660000",
    steps   : 8,
    show    : 3000,
    sleep   : 300,
    loop    : true,
    colors  : '',
    color   : 0,                          // color index in the array
    text    : -1,                           // index in the text array
    step    : 1,
    text_out : '',
    url     : '',
    espera  : false,
    texts   : false,
    links   : false,
    titles  : false,

    // IntToHex: converts integers between 0-255 into a two digit hex string.
    IntToHex : function (n) {
        var result = n.toString(16);
        if (result.length==1) result = "0"+result;
        return result;
    },

    // HexToInt: converts two digit hex strings into integer.
    HexToInt : function (hex) {
        return parseInt(hex, 16);
    },

    getFadeColors : function (ColorA, ColorB) {
        var len = NEWS.colors.length;

        // strip '#' signs if present
        if (ColorA.charAt(0)=='#') ColorA = ColorA.substring(1);
        if (ColorB.charAt(0)=='#') ColorB = ColorB.substring(1);

        // substract rgb components from hex string
        var r  = NEWS.HexToInt(ColorA.substring(0,2));
        var g  = NEWS.HexToInt(ColorA.substring(2,4));
        var b  = NEWS.HexToInt(ColorA.substring(4,6));
        var r2 = NEWS.HexToInt(ColorB.substring(0,2));
        var g2 = NEWS.HexToInt(ColorB.substring(2,4));
        var b2 = NEWS.HexToInt(ColorB.substring(4,6));

        // calculate size of step for each color component
        var rStep = Math.round((r2 - r) / len);
        var gStep = Math.round((g2 - g) / len);
        var bStep = Math.round((b2 - b) / len);

        // fill this.colors array with fader this.colors
        for (i = 1; i < len-1; i++) {
            NEWS.colors[i] = "#" + NEWS.IntToHex(r) + NEWS.IntToHex(g) + NEWS.IntToHex(b);
            r += rStep;
            g += gStep;
            b += bStep;
        }
        NEWS.colors[len-1] = NEWS.fcolor; // make sure we finish exactly at ColorB
        NEWS.colors[0] = NEWS.bgcolor;
    },

    linkto : function (){
        if(this.url.length){
            var re = new RegExp(location.hostname);
            if(this.url.match(re)) window.location = this.url;
            else window.open(this.url);
        }
        return true;
    },

    suspende : function (){
        this.espera = true;
        this.color = (this.colors.length-1);
    },

    continua : function (){
        this.espera = false;
    },

    fade_real : function () {
        if(!NEWS.texts.length){
            // nada a mostrar ...
            return;
        }
        NEWS.colors = new Array(NEWS.steps);
        NEWS.getFadeColors(NEWS.bgcolor,NEWS.fcolor);   // getFadeColors: fills Colors (predefined Array)
                                            // with color hex strings fading from ColorA to ColorB

        // completely faded in?
        if (NEWS.color == (NEWS.colors.length-1)) {
            NEWS.step = -1; // traverse colors array backward to fade out

            // stop at last message if loop=false
            if (!NEWS.loop && NEWS.text == NEWS.texts.length) return; // loop should be defined in user script, e.g.: var loop=true;
        }

        // completely faded out?
        if (NEWS.color == 0) {
            NEWS.step = 1; // traverse colors array forward to fade in again

            // select next message
            NEWS.text += 1;
            if (NEWS.text == NEWS.texts.length) NEWS.text = 0; // loop back to first message

            NEWS.url = NEWS.links[NEWS.text];
            NEWS.text_out = NEWS.texts[NEWS.text];

            if (document.getElementById ){   //NS6
                document.getElementById("fader").style.lineHeight = ''
                if(NEWS.text_out.length > 70){document.getElementById("fader").style.lineHeight = '95%';}
                document.getElementById("fader").innerHTML = NEWS.text_out;
                NEWS.title = NEWS.titles[NEWS.text];
                document.getElementById("fader").setAttribute('title',NEWS.title);
            } else if (document.all){               // document.all = IE only
                fader.style.lineHeight = '';
                if(NEWS.text_out.length > 80){fader.style.lineHeight = '95%';}
                fader.innerHTML = NEWS.text_out;
            } else if (document.layers) {          // document.layers = Netscape only
                document.layers.fader.document.open();
                document.layers.fader.document.write(NEWS.text_out);
                document.layers.fader.document.close();
            }
        }

        if(!NEWS.espera)
            NEWS.color += NEWS.step;

        if (document.getElementById )   //NS6
            document.getElementById("fader").style.color = NEWS.colors[NEWS.color];

        else if (document.all)               // document.all = IE only
            fader.style.color = NEWS.colors[NEWS.color];

        else if (document.layers)           // document.layers = Netscape only
            document.layers.fader.style.color = NEWS.colors[NEWS.color];

        setTimeout(NEWS.fade_real, (NEWS.colors[NEWS.color] == NEWS.fcolor) ? NEWS.show : ((NEWS.colors[NEWS.color] == NEWS.bgcolor) ? NEWS.sleep : 50));
    }
};
function fade(){
    if(!document.getElementById('fader')) return;
    if(document.getElementById('box_fader')) document.getElementById('box_fader').style.display = 'block';
    if(typeof(NEWS.links)!='undefined' && NEWS.links.length && typeof(NEWS.texts)!='undefined' && NEWS.texts.length) NEWS.fade_real();
}
//function suspende(){NEWS.suspende()}
//function continua(){NEWS.continua()}
//function linkto(){NEWS.linkto()}

