/*
** Javascript RSS parser
**
** copyright (c) Stas Verberkt (Legolas), 2001 - 2006
** Released under the GNU General Public License
**
** WWW: http://www.legolasweb.nl/
** E-mail: legolas@legolasweb.nl
**
** Using:
** Include this JS file in your page
** Make sure there's a div with id="rss"
** To change the feed edit the feed var at the bottom
** default it uses the query string
** (it prepends the query string with get.php?,
** because it isn't allowed to open extern sites using xmlHTTPRequest.
** get.php is a php file which servers the page.)
*/

/* Functions */
function init() {
	if (!feed) {
		var goal = document.getElementById('rss');
		goal.innerHTML = 'No feed specified';
	}
	else {
		getFeed();
	}
}

function createHTTPHandler() {
	var httphandler = false;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
		// JScript gives us Conditional compilation, we can cope with old IE versions.
		// and security blocked creation of the objects.
		try {
			httphandler = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e) {
			try {
				httphandler = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (E) {
				httphandler = false;
			}
		}
	@end @*/
	if (!httphandler && typeof XMLHttpRequest != 'undefined') {
		httphandler = new XMLHttpRequest();
	}
	return httphandler;
}

function getFeed() {
	xmlhttprequest.open('GET', feed, true);
	xmlhttprequest.onreadystatechange = parseFeed;
	xmlhttprequest.send(null);
}

function parseFeed() {
	if (xmlhttprequest.readyState == 4) {
		var error = null;
		if (xmlhttprequest.responseXML) {
			if (xmlhttprequest.responseXML.documentElement) {
				if (xmlhttprequest.responseXML.documentElement.tagName == 'parsererror') {
					error = 'Error parsing XML response:<br /> ' + xmlhttprequest.responseXML.documentElement.firstChild.nodeValue;
				}
				else if (xmlhttprequest.responseXML.documentElement.tagName == 'error') {
					error = 'Error retrieving XML response:<br /> ' + xmlhttprequest.responseXML.documentElement.firstChild.nodeValue;
				}
			}
			else {
				if (xmlhttprequest.responseXML.parseError) {
					error = 'Error parsing XML response:<br /> ' + xmlhttprequest.responseXML.parseError.reason + ' (' + url + ')';
				}
				else {
					error = 'No valid data in XML response';
				}
			}
		}
		else {
			error = 'The responseXML object was empty';
		}
		var goal = document.getElementById('rss');
		if (!error) {
			var rss = xmlhttprequest.responseXML;
			rssarray = parseRSS(rss);
			viewRSS();
			timeout = self.setInterval(viewRSS, miliseconds);
		}
		else {
			goal.innerHTML = error;
		}
	}
}

function parseRSS(rss) {
	var output = new Array();
	
	var roots = rss.getElementsByTagName('channel');
	for (var i = 0; i < roots.length; i++) {
		var items = new Array();
		var index = 0;
		
		for (var j = 0; j < roots[i].childNodes.length; j++) {
			if (roots[i].childNodes[j].tagName == 'item') {
				items[index] = parseElement(roots[i].childNodes[j]);
				index++;
			}
		}
		
		for (var j = 0; j < items.length; j++) {
			output[output.length] = new Array();
			
			for (var k = 0; k < items[j].length; k++) {
				if (items[j][k][0] == 'title') {
					output[(output.length - 1)][0] = items[j][k][1];
				}
				else if (items[j][k][0] == 'link') {
					output[(output.length - 1)][1] = items[j][k][1];
				}
			}
		}
	}
	
	return output;
}

function parseElement(root) {
	var element = new Array();
	for (var i = 0; i < root.childNodes.length; i++) {
		if (root.childNodes[i].tagName) {
			element[element.length] = new Array(root.childNodes[i].tagName, root.childNodes[i].firstChild.nodeValue);
		}
	}
	
	return element;
}

function viewRSS() {
	var goal = document.getElementById('rss');
	goal.innerHTML = "";
	
	var elink = document.createElement('a');
	elink.setAttribute('href', rssarray[actrss][1]);
	elink.setAttribute('title', rssarray[actrss][0]);
	elink.setAttribute('target', '_blank');
	elink.innerHTML = rssarray[actrss][0];
	goal.appendChild(elink);
	
	actrss++;
	if (actrss == rssarray.length) {
		actrss = 0;
	}
	
	/*timeout = self.setTimeout(viewRSS, miliseconds);*/
}

function moveRSS(move) {
	timeout = self.clearInterval(timeout);
	
	move -= 1;
	var newrss = actrss;
	newrss += move;
	
	while (newrss < 0) {
		newrss = rssarray.length + newrss;
	}
	
	while (newrss >= rssarray.length) {
		newrss -= rssarray.length;
	}
	
	actrss = newrss;
	
	viewRSS();
	timeout = self.setInterval(viewRSS, miliseconds);
}



/* Onload */
var feed = 'getfeed.php?faq';
var xmlhttprequest = createHTTPHandler();
var rssarray = new Array();
var actrss = 0;
var miliseconds = 15000;
var timeout = null;
window.onload = init;

