// Time in ms
// Vars for FadeOut
var step = 15;
var speed = 80;
var startColor = '#0154A3';
var targetColor = '#FFFFFF';
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Vars for Ticker
var updateSpeed = 85;
var pauseBetween = 700;
var pauseBeforeFade = 1000;
var tickerLinkTarget = '_blank';
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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","http://www.gruene-niederdorfelden.de/phpFunctions/xmlReader.php",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('description').length; k++)
        {
            dataArray[k] = new Array();
            dataArray[k][0] = xmlhttp.responseXML.getElementsByTagName('link')[k].childNodes[0].data;
            dataArray[k][1] = xmlhttp.responseXML.getElementsByTagName('description')[k].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();
}

