var CieNews = {
    timeout:    50,    // ms
    iterations: 0,      // as count
    iterMax:	100,
    direction:  0,	// 0 slide in, 1 slide out
    eleWidth:   90,     // element width in pixels
    enabled:    false,
    timer:      null,
    newsList:   null,
    newsText:	null,
    newsSlider: null,
    urgentNews: null,
    request:    null,
    newsCache:  [],

    init:   function() {
        /*
        if (/msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent)) {
            // MSIE 
            document.getElementById("marquee").style.display = 'none';
            return false;
        }
        */

        this.newsList = document.getElementById("news_content").children[0].children[1];
	
	this.newsText = document.getElementById("teaserNews").children[0];
	this.newsSlider = document.getElementById("teaserNews");
        this.urgentNews = document.getElementById("teaserText");
        
	this.newsSlider.style.display='none';
	this.urgentNews.style.display='block';

	this.newsCache = ['A', 'B', 'C', 'D', 'E', 'F', 'G' ];
        //this.continu();
        this.load();
    },

    velocity: function(t) {
	return 400 - t * 45;
    },
    // Marquee functionality...
    //
    slideIn: function() {
        // get news id
        var obj = this;
        var i = 0;
        while(obj.previousSibling) {
	    obj = obj.previousSibling;
	    if (obj.tagName == 'LI') i = i + 1;
        }

	CieNews.newsText.innerHTML = CieNews.newsCache[i];

	CieNews.newsSlider.style.marginLeft = '-400px';
        CieNews.urgentNews.style.display='none';
        CieNews.newsSlider.style.display='block';
	CieNews.direction = 1;
	CieNews.iterations = 1;
	CieNews.continu();
    },

    slideOut: function() {
	CieNews.iterations = CieNews.iterations - 1;
	CieNews.direction = -1;
	this.enabled = true;
	CieNews.continu();
    },

    slide: function() {
        if (! this.enabled) return;

	CieNews.newsSlider.style.marginLeft = "" + (-1 * CieNews.velocity(CieNews.iterations)) + "px";	

	if ((this.iterations < 0) || (this.iterations > this.iterMax)) {
		this.pause();
		return;
	}

	if (this.velocity(this.iterations) < 0) {
		this.pause();
		CieNews.newsSlider.style.marginLeft = '-2px'; // because of padding
		return;
	}

        if (CieNews.direction <= 0) {
		this.iterations = this.iterations - 1;
        } else {
		this.iterations = this.iterations + 1;
	}


    },

    pause:  function() {
        this.enabled = false;
        /*window.clearInterval(this.timer);
	delete this.timer;*/
    },

    continu: function () {
        var obj;
        if (typeof(CieNews) != 'undefined' ) {
            obj = CieNews;
        } else {
            /*alert("DROP");*/
            return;
        }

        obj.enabled = true;
 	if (obj.timer == null) {
		obj.timer = window.setInterval("CieNews.slide();", this.timeout);
	}
    },

    // loading functionality
    load:   function () {
        this.request = new XMLHttpRequest();
        this.request.open('GET', '/news.xml', true);
        this.request.onreadystatechange = this.onchange;
        this.request.send(null);
    },

    onload: function () {
        // parse and insert elements
        var resp = this.request.responseXML.documentElement;
        if (!resp) {
            /*alert(this.request.responseText);*/
        }
        var news = resp.getElementsByTagName("news");
        // foreach entry
        
	var entry;
        var title; 
        var dat;
        
	while (this.newsList.hasChildNodes()) {
	    this.newsList.removeChild(this.newsList.firstChild);
	}

	for (var i=0; i<news.length; i++) {
            entry = news[i];

            objLi = document.createElement("LI");

            var text = document.createTextNode(entry.getElementsByTagName("title")[0].firstChild.data);

            objLi.appendChild(text);
	    objLi.onmouseover = CieNews.slideIn;
	    objLi.onmouseout = CieNews.slideOut;

	    this.newsCache[i] = entry.getElementsByTagName("text")[0].firstChild.data;

            this.newsList.appendChild(objLi);
        }
        
        // Now we have one set of elements. However we have to copy some to get a seamless gap
        /*this.resize();*/
    },

    onchange: function() {
        if (this.readyState == 4) {
            if (this.status == 200) {
                CieNews.onload();
            } else {
                /*alert("Error Loading news.xml: rs=" + this.readyState + " http=" + this.status);*/
            }
        }
    },

    /*
     *      Getting visible width of elements
     *
     *      These functions are _very_ likely to fail - so check if values are feaseble and have
     *      backup-values ready ;)
     */

     width: function() {
        var w = document.getElementById("marquee").offsetWidth;
        var li = this.marquee.getElementsByTagName("li");

        if (li) {
            this.eleWidth = li[0].offsetWidth;
        }

        return w;
     }


};



