// constants
var MAXMSG= 10;				// how many messages in server XML files
var RELOADINTV= 25000;		// how many millisecs between reloads of server XML files
var ROLLINTV= 2500;			// how many millisecs each message is displayed
var XMLFILEURL="/cont2/en/webhp/recent.xml";	// URL of server XML file containing recent messages 
//var XMLFILEURL="/cont/recent.xml";	// URL of server XML file containing recent messages 

// global flag
var isIE = false;

// global request and XML document objects
var req;

// flag to wait for data before starting roll
var firstrun=true;

// array of message HTML chunks
var messages= new Array(MAXMSG);

// index to display item of array
var itemnum;

// timers
var reloadTimer=null, rollTimer=null;

// launch function
function startrolling()	{
	itemnum=0;
	getnewdata();		// load recent messages from server
	reloadTimer= setInterval("getnewdata()", RELOADINTV); // start the periodic timer for data reload
}
// cleanup function
function stoprolling()	{
	url=null;
	messages=null;
	req=null;
	reloadTimer= clearInterval(reloadTimer);
	if(rollTimer) rollTimer= clearInterval(rollTimer);
}

function getnewdata()	{
//	url = (url=="recent.xml") ? "recent.xml" : "recent.xml";
	loadXMLDoc(XMLFILEURL);
}

function roll()	{
	showMessage(itemnum);
	itemnum = (itemnum==MAXMSG-1) ? 0 : (itemnum+1);
}

// display message event retrieved from XML document
function showMessage(i) {
    var div = document.getElementById("details");
    div.innerHTML = "";
    // blast new HTML content into "details" <div>
    div.innerHTML = messages[i];
    // div = document.getElementById("debug");
    // div.innerHTML = "";
    // div.innerHTML = "<p>" + itemnum + "</p>";    
}

// display placeholder
function showDummy() {
    var div = document.getElementById("details");
    div.innerHTML = "";
    div.innerHTML = "<p></p>";
    // div = document.getElementById("debug");
    // div.innerHTML = "";
    // div.innerHTML = "<p>Not available</p>";   
}

// retrieve XML document (reusable generic function);
// parameter is URL string (relative or complete) to
// an .xml file whose Content-Type is a valid XML
// type, such as text/xml; XML source must be from
// same domain as HTML file
function loadXMLDoc(url) {
    // branch for IE/Windows ActiveX version		// **MC: Swapped test order to force ActiveX on IE7 
    if (window.ActiveXObject) {
        isIE = true;
        // req = new ActiveXObject("Microsoft.XMLHTTP");
        req = new ActiveXObject("MSXML2.XMLHTTP.3.0");
        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        }
    } else if (window.XMLHttpRequest) { // branch for native XMLHttpRequest object
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open("GET", url, true);
        req.send(null);
    }
}

// handle onreadystatechange event of req object
function processReqChange() {
    // only if req shows "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
        	loadMessages();
        	if(firstrun)	{
        		rollTimer= setInterval("roll()", ROLLINTV);	// start the periodic timer for message display
        		firstrun = false;
        	}        	
         } else {
            	// alert("There was a problem retrieving the XML data:\n" + req.statusText);
            	if(rollTimer) rollTimer=clearInterval(rollTimer);
 				showDummy();
         }
         req=null;	// dealloc XML object
    }
}

// preload HTML chunks representing messages in messages array
function loadMessages() {
    var item;
    // copy <content:encoded> element text for all items
    for (i=0; i<MAXMSG; i++)	{
    	item = req.responseXML.getElementsByTagName("item")[i];
    	messages[i] = getElementTextNS("content", "encoded", item, 0);
    }
}

// retrieve text of an XML document element, including
// elements using namespaces
function getElementTextNS(prefix, local, parentElem, index) {
    var result = "";
    if (prefix && isIE) {
        // IE/Windows way of handling namespaces
        result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
    } else {
        // the namespace versions of this method 
        // (getElementsByTagNameNS()) operate
        // differently in Safari and Mozilla, but both
        // return value with just local name, provided 
        // there aren't conflicts with non-namespace element
        // names
        result = parentElem.getElementsByTagNameNS("*", local)[index];
    }
    if (result) {
        // get text, accounting for possible
        // whitespace (carriage return) text nodes 
        if (result.childNodes.length > 1) {
            return result.childNodes[1].nodeValue;
        } else {
            return result.firstChild.nodeValue;    		
        }
    } else {
        return "n/a";
    }
}
