
// Update period in seconds
var UpdatePeriod = 3; 

// Updates between RSS checks
var RSSCheckCount = 10; 

var countUpdates = 0;

var reqURL = 'http://champignon.net/feedMe.php?feed=bbcWorldNews';

var initialised = false;

// For xmlhttp
var req;

// Various html elements..
var myDiv;

var pTag; // para containing dynamic text

var pTagTextNode = null;

var codeImg;

// Manage set of links
var links;
var titles;
var nItems;
var nextItem = 0;
var maxLinks = 5;
var oldFirstTitle;

function initialiseFeedDisplay() 
{
	myDiv = document.getElementById("mainContent");
	ptag = document.getElementById("titlePara"); // document.createElement("p");
	codeImg = document.getElementById("qrImg");
	setParaText("Loading RSS feed...");
	//setCode("", "Loading RSS feed...");
	//ptag.appendChild(document.createTextNode("Loading RSS feed..."));
	//myDiv.appendChild(ptag);
	
	links = null;
	titles = null;
	nItems = 0;
	nextItem = 0;
	
	getRSS();
}

function setParaText(newText)
{
	if (pTagTextNode != null)
		ptag.removeChild(pTagTextNode);
	pTagTextNode = document.createTextNode(newText)
	ptag.appendChild(pTagTextNode);
}

function setCode(url, title)
{
	codeImg.src = "http://ma2.me/QR/qr_img.php?s=7&d=" +
		escape(url) + "%0d" + escape(title);
    //var ptag2 = document.createElement("p");
    //ptag2.appendChild(document.createTextNode(foo));
	//myDiv.appendChild(ptag2);
}

function getRSS() 
{
    window.status = "Checking for RSS from " + reqURL;
   	if (window.XMLHttpRequest) 
   	{  	// Firefox etc.
       	req = new XMLHttpRequest();
   	} 
   	else // IE
   		if (window.ActiveXObject) 
   		{
       		req = new ActiveXObject("Microsoft.XMLHTTP");
    	}
    if (req)
    {
	    req.onreadystatechange = requestComplete;
	    req.open("GET", reqURL, true);
	    req.send(null);
	}
	else
	{
		window.status = "Unable to make XmlHttp request object";
	}
}

function displayNextFeedItem()
{

	if (links != null && nextItem < nItems)
	{
		setCode(links[nextItem].firstChild.nodeValue, titles[nextItem].firstChild.nodeValue);
		setParaText(titles[nextItem].firstChild.nodeValue);
	}
	
	if (++nextItem == nItems)
		nextItem = 0;
}

function requestComplete() 
{
	window.status = "readystate is " + req.readyState + " returned status is " + req.status;
    if (req.readyState == 4) 
    {
        if (req.status == 200) 
        {
  			xmlDoc = req.responseXML;
  			processRSS();
  			if (!initialised)
  			{
  				initialised = true;
  				//myDiv.removeChild(ptag);
  				displayNextFeedItem();
        		setTimeout("doTimeout()", UpdatePeriod*1000);
  			}
        } 
        else 
        {
            window.status = "returned status = " + req.status;
        }
    }
}

function processRSS()
{
	nItems = xmlDoc.getElementsByTagName('item').length;
	window.status = "processRSS nItems = " + nItems;
	if (nItems == 0) 
	{
    	//ptag = document.createElement("p");
        //ptag.appendChild(document.createTextNode("Empty RSS feed or unsupported feed format (Atom is not supported!)"));
		//myDiv.appendChild(ptag);
		setParaText("Empty RSS feed or unsupported feed format (Atom is not supported!)");
		return;
	}
	else
	{
		//setParaText("found " + nItems + " items");
		//setCode("", "found " + nItems + " items");
		if (nItems > maxLinks)
			nItems = maxLinks;
	}

	if (links != null)
	{
		oldFirstTitle = titles[0].firstChild.nodeValue;
	}
	
	links = new Array();
	titles = new Array()
	for (var i=0; i < nItems; i++) 
	{
		if (xmlDoc.getElementsByTagName('item')[i].getElementsByTagName('link').length==1)
			links[i]=xmlDoc.getElementsByTagName('item')[i].getElementsByTagName('link')[0];
		if (xmlDoc.getElementsByTagName('item')[i].getElementsByTagName('title').length==1)
			titles[i]=xmlDoc.getElementsByTagName('item')[i].getElementsByTagName('title')[0];
	}
	
	if (oldFirstTitle != titles[0].firstChild.nodeValue)
		nextItem = 0;
	
	if(titles.length==0) 
		return false;
		
	/*
	ul = document.createElement("ul");
	myDiv.appendChild(ul);
	for (var i=0; i < nItems; i++) 
	{
		var title_w, link_w;
		title_w = (title.length>0)?title[i].firstChild.nodeValue:"<i>Untitled</i>";
		link_w = (link.length>0)?link[i].firstChild.nodeValue:"";
		litag = document.createElement("li");
		linktag = document.createElement("a");
		linktag.setAttribute("href", link_w);
		linktag.appendChild(document.createTextNode(title_w));
		
		litag.appendChild(linktag);
		ul.appendChild(litag);
	}
	*/
}

function doTimeout()
{
	displayNextFeedItem();
	if (++countUpdates == RSSCheckCount)
	{
		getRSS();
		countUpdates = 0;
	}
	setTimeout("doTimeout()", UpdatePeriod*1000);
}
