// Time in ms
// Vars for FadeOut
var step = 15;
var speed = 80;
var startColor = '#666666';
var targetColor = '#FFFFFF';
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Vars for Ticker
var updateSpeed = 85;
var pauseBetween = 700;
var pauseBeforeFade = 3000;
var tickerLinkTarget = '_parent';
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

var xmlhttp;

var i = 0;
var offset = 0;
var updateInterval;
var fadeInterval;
var tickerTimeout;
var xobj;
var txt;
var dataArray = new Array();
var tickerHeadline = 0;
var doNotStartFade = false;
var playStatus = 0;
var st = 0;
var steps;
var step_r;
var step_g;
var step_b;
var cl_int = false;
var sr;
var sg;
var sb;
var er;
var eg;
var eb;
var pauseBeforeFadeTimeout;
var dataFlag = 0;
var spacer = "   ";

function hex(n){
    if (n == 0) 
        return ("00");
    return (n.toString(16));
}

function debug(debugout){
    document.getElementById('debug').innerHTML = debugout + "<br>" + document.getElementById('debug').innerHTML;
}

function addEvent(obj, type, fn){
    if (obj.addEventListener) {
        obj.addEventListener(type, fn, false);
    }
    else 
        if (obj.attachEvent) {
            obj["e" + type + fn] = fn;
            obj[type + fn] = function(){
                obj["e" + type + fn](window.event);
            }
            obj.attachEvent("on" + type, obj[type + fn]);
            
        }
}

function setColor(){
    st++;
    col_r = Math.floor((sr * 1) + (st * step_r));
    col_g = Math.floor((sg * 1) + (st * step_g));
    col_b = Math.floor((sb * 1) + (st * step_b));
    
    if ((st) == Math.floor(steps)) {
        col_r = (er * 1);
        col_g = (eg * 1);
        col_b = (eb * 1);
        cl_int = true;
    }
    
    col = hex(col_r) + hex(col_g) + hex(col_b);
    xobj.childNodes[0].childNodes[0].style["color"] = "#" + col;
    
    if (cl_int) {
        window.clearInterval(fadeInterval);
        tickerTimeout = window.setTimeout("displayTickerHeadline()", pauseBetween);
    }
}

function calculateFadeData(){
    sr = parseInt(startColor.substr(1, 2), 16);
    sg = parseInt(startColor.substr(3, 2), 16);
    sb = parseInt(startColor.substr(5, 2), 16);
    er = parseInt(targetColor.substr(1, 2), 16);
    eg = parseInt(targetColor.substr(3, 2), 16);
    eb = parseInt(targetColor.substr(5, 2), 16);
    diff_r = Math.floor(er - sr);
    diff_g = Math.floor(eg - sg);
    diff_b = Math.floor(eb - sb);
    diff_max = Math.max(Math.abs(diff_r), Math.abs(diff_g));
    diff_max = Math.max(Math.abs(diff_max), Math.abs(diff_b));
    steps = (diff_max / step);
    step_r = diff_r / steps;
    step_g = diff_g / steps;
    step_b = diff_b / steps;
}

function startFade(){
    playStatus = 'fade';
    cl_int = false;
    st = 0;
    window.clearTimeout(pauseBeforeFadeTimeout);
    fadeInterval = window.setInterval("setColor()", speed);
}

function stopFade(){
    if (playStatus != 'fade') 
        doNotStartFade = true;
    return true;
}

function restartFade(){
    doNotStartFade = false;
    if (playStatus == 1) 
        startFade();
    return true;
}


function updateText(z){
    i++;
    a = z;
    playStatus = 0;
    //alert(xobj.childNodes[0].offsetWidth);
    if (xobj.childNodes[0].offsetWidth > (xobj.offsetWidth - 10)) {
        offset++;
    }
    txt = dataArray[z][1].substr(offset, i);
    
    if (!xobj.childNodes[0].childNodes[0]) {
        xobj.childNodes[0].appendChild(document.createElement("a"));
        xobj.childNodes[0].childNodes[0].href = dataArray[z][0];
        xobj.childNodes[0].childNodes[0].setAttribute("target", tickerLinkTarget);
        xobj.childNodes[0].childNodes[0].appendChild(document.createTextNode(txt));
        xobj.childNodes[0].childNodes[0].style["color"] = startColor;
        addEvent(xobj.childNodes[0].childNodes[0], "mouseover", stopFade);
        addEvent(xobj.childNodes[0].childNodes[0], "mouseout", restartFade);
    }
    else {
        xobj.childNodes[0].childNodes[0].innerHTML = txt;
        xobj.childNodes[0].childNodes[0].href = dataArray[z][0];
        if (i == 1) 
            xobj.childNodes[0].childNodes[0].style["color"] = startColor;
    }
    
    if (i == dataArray[z][1].length) {
        window.clearInterval(updateInterval);
        playStatus = 1;
        if (!doNotStartFade) 
            pauseBeforeFadeTimeout = window.setTimeout("startFade()", pauseBeforeFade);
    }
}

function getXML(){
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } 
    catch (e) {
        try {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } 
        catch (E) {
            xmlhttp = new XMLHttpRequest();
        }
    }
    
    xmlhttp.open("GET", "index.php?id=0&type=100", true);
    xmlhttp.onreadystatechange = function(){
        if (xmlhttp.readyState == 4) {
            loadData();
        }
    }
    xmlhttp.send(null);
    
}

function loadData(){
    xobj = document.getElementById('ticker');
    if (xobj = document.getElementById('ticker')) {
        aElements = xobj.getElementsByTagName("a");
        for (k = 0; k < xmlhttp.responseXML.getElementsByTagName('item').length; k++) {
            dataArray[k] = new Array();
            //dataArray[k][0] = xmlhttp.responseXML.getElementsByTagName('item')[k].childNodes[1].childNodes[0].data;
            //dataArray[k][1] = xmlhttp.responseXML.getElementsByTagName('item')[k].childNodes[0].childNodes[0].data;
            dataArray[k][0] = xmlhttp.responseXML.getElementsByTagName('item')[k].getElementsByTagName('link')[0].childNodes[0].data;
            dataArray[k][1] = xmlhttp.responseXML.getElementsByTagName('item')[k].getElementsByTagName('title')[0].childNodes[0].data;
        }
        
        dataFlag = 1;
        xobj.innerHTML = '';
        xobj.appendChild(document.createElement("div"));
        
    }
    displayTickerHeadline();
}

function displayTickerHeadline(){
    i = 0;
    window.clearInterval(tickerTimeout);
    offset = 0;
    if (xobj.childNodes[0].childNodes[0]) 
        xobj.childNodes[0].childNodes[0].innerHTML = ' ';
    updateInterval = window.setInterval("updateText(" + tickerHeadline + ")", updateSpeed);
    tickerHeadline++;
    if (tickerHeadline == dataArray.length) 
        tickerHeadline = 0;
}

function initTicker(){
    getXML();
    calculateFadeData();
}

