var data2;
//BASE AJAX function
function showData(datafile,datafile2){
	if (!datafile) { datafile = "newsfeed.xml"; }
	if (datafile2) { data2 = datafile2; }
	loadXmlDoc(datafile,handleData);
}

//MAIN UTILS - RSS parser and helper
function handleData(){				
	if (req.readyState == 4 || req.readyState == 0) {		
		var theFeed = req.responseXML;
		var feedDiv = document.getElementById('theFeed');
		var bigString = "";
		if (feedDiv.innerHTML.match('This page uses AJAX')) { bigString = "\n<h3>Latest updates</h3>\n<dl>\n"; }
		elem = theFeed.getElementsByTagName("item");
		var Aweek=0;
		var Lday = 10; // make it higher than possible to start with
		var Amonth = null;
		var Ayear  = null;
		var Nmonth = null;
		var Lmonth = null;
		var Lyear  = null;
		var Ldate  = null;
		var dDiff  = null;
		if (elem.length) {
			for (ii=0;ii<elem.length;ii++) {
				iTitle = iDesc = iDate = ""; // clear vars
				if (elem[ii].getElementsByTagName("title")[0]) {
					iTitle = elem[ii].getElementsByTagName("title")[0].firstChild.data;
				}
				if (elem[ii].getElementsByTagName("description")[0]) {
					iDesc  = elem[ii].getElementsByTagName("description")[0].firstChild.data;
				}
				if (elem[ii].getElementsByTagName("pubDate")[0]) {
					iDate  = elem[ii].getElementsByTagName("pubDate")[0].firstChild.data;
				}
	
				iDO = parseDate(iDate,1);
				Tday = iDO.getDay();
				Amonth = iDO.getMonth();
				Ayear  = iDO.getFullYear();
				if (Ldate) {
					dDiff = Ldate.getTime()/(1000*60*60*24) - iDO.getTime()/(1000*60*60*24); // epoch days since last
				}
				Nmonth = Months[Amonth];

				Lday = Tday;
				Ldate = iDO;
				if (!feedDiv.innerHTML.match('This page uses AJAX') && ii==0) { secondPass = 1 } else { secondPass = 0 }
				if ((Lmonth && Lmonth != Nmonth) || secondPass) { // start new month li + div and close off the last
					if (bigString.match('<ul')) {
						bigString += "\n</dl>\n</div>\n</li>\n";
					} else {
						bigString += "\n</dl>\n\n<ul>\n";
					}
					if ((Lyear && Lyear != Ayear) || secondPass) {
						bigString += "\n</ul>\n<h3>"+Ayear+"</h3>\n\n<ul>\n";
					}
					bigString += "<li><a href=\"#"+Mths[Amonth]+Ayear+"\" onclick=\"showdiv('"+Mths[Amonth]+Ayear+"')\">"+Nmonth+"</a>\n";
					bigString += "<div class=\"highlander\" name=\""+Mths[Amonth]+Ayear+"\" id=\""+Mths[Amonth]+Ayear+"\">\n<dl>\n";
				}
				Lmonth = Nmonth;
				Lyear = Ayear;

				bigString += "\n\t<dt id=\""+Ayear+Mths[Amonth]+Tday+"\">"+iTitle+"</dt>\n\t<dd><span class=\"articleDate\">"+parseDate(iDate)+"</span><br />\n\t\t"+iDesc+"\n\t</dd>\n";
			}
			if (bigString.match('<ul')) { bigString += "\n</dl>\n</div>\n</li>\n</ul>\n"; } // close divs and list
			iLbx();
		} else {
			bigString = "No updates found."			
		}
		if (feedDiv.innerHTML.match('This page uses AJAX')) {
			feedDiv.innerHTML = bigString;
		} else {
			feedDiv.innerHTML += "\n<h3>Even older updates</h3>\n"+ bigString;
		}
		// script ASSUMES you have a div with the id "theFeed" into which to insert the generated output
		if (data2) { whichF = data2; data2 = null; loadXmlDoc(whichF,handleData); }	
	}
}

// Date parser and useful arrays
function parseDate(dateStr,asDO) {
	/* ASSUMES RSS date, NOT ATOM
		e.g.
		Fri, 20 Nov 2009 10:00:00 +1000
		Tue, 3 Nov 2009 09:00:00 +1000
	*/
	dateStr = dateStr.replace(/[A-z]+\, /,''); // strip day name if there
	datearr = dateStr.split(" ");
	pdate	= datearr[0];
	pmonth	= datearr[1];
	pyear	= datearr[2];
	ptime   = datearr[3].split(":");
	phour   = ptime[0];
	pmin    = ptime[1];
	psec    = ptime[2];
	if (asDO) { // return Date object
		for (var mi=0;mi<Mths.length;mi++) {
			if (pmonth == Mths[mi]) { pmonth = mi; }
		}
		return new Date(pyear,pmonth,pdate,phour,pmin,psec);
	} else { // return cleaned string
		return pdate+" "+expMonth(pmonth)+" "+pyear;
	}
}
var Mths   = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
var Months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
function expMonth(wMth) { // return full month name from truncated version
	var retStr = wMth;
	for (var mi=0;mi<Mths.length;mi++) {
		if (wMth == Mths[mi]) { retStr = Months[mi]; }
	}
	return retStr;
}

// general AJAX utils
function getXmlHttpRequestObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest(); //Not IE
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP"); //IE
	} else {
		alert("Your browser doesn't support the XmlHttpRequest object.");
	}
}
function loadXmlDoc(url,callback){	
	if (req.readyState == 4 || req.readyState == 0) {		
		req.open("GET", url, true);			
		req.onreadystatechange = callback; 			
		req.send(null);		
	}
}
var req = getXmlHttpRequestObject();

var lastDiv = null;

function showdiv(divname) {
	divobj = document.getElementById(divname);
	if (lastDiv) { lastDiv.style.display = "none"; }
	divobj.style.display = "block";
	lastDiv = divobj;
}
