// Domain setup - EDIT THIS to the server you're getting the files from
var domName = "http://www.advance.com.au/";
function fixGuid(theLink) { // insert the domain name if it's missing
	if (theLink.indexOf('http')<0) { theLink = domName+theLink; }
	return theLink;
}
var podFrequency = "";
//BASE AJAX function
function showData(datafile,regular){
	if (!datafile) {
		datafile = "/rss/weekly-markets-review.xml";
		regular='weekly';
	}
	podFrequency = regular;
	loadXmlDoc(datafile,handleData);
}

//MAIN UTILS - RSS parser and helper
function podData() { //helper util to indicate weeks/months should be split
	handleData("yes");
}
function handleData(){				
	var isTimed = podFrequency;
	if (req.readyState == 4) {		
		var theFeed = req.responseXML;		
		var bigString = "";
		if (isTimed == 'daily') { bigString = "\n<h3>This week</h3>\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 Ldate  = null;
		var dDiff  = null;
		
		for (ii=0;ii<elem.length;ii++) {
			iTitle = iDesc = iLink = iPDF = iTime = ""; // 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("guid")[0]) {
				iLink  = fixGuid(elem[ii].getElementsByTagName("guid")[0].firstChild.data);
			}
			if (elem[ii].getElementsByTagName("pubDate")[0]) {
				iDate  = elem[ii].getElementsByTagName("pubDate")[0].firstChild.data;
			}
			if (elem[ii].getElementsByTagName("itunes:duration")[0]) {
				iTime  = elem[ii].getElementsByTagName("itunes:duration")[0].firstChild.data;
			} else if (elem[ii].getElementsByTagName("duration")[0]) { // Opera uses just the local name, not the namespace
				iTime  = elem[ii].getElementsByTagName("duration")[0].firstChild.data;
			}
			if (elem[ii].getElementsByTagName("link")[0]) {
				iPDF   = fixGuid(elem[ii].getElementsByTagName("link")[0].firstChild.data);
				littleString = " | <a href=\""+iPDF+"\" target=\"_blank\" class=\"PDFlink\">Read the transcript</a>";
			} else { littleString = "" }

			if (isTimed) {
				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];

				if (Lday<=Tday && isTimed == 'daily') { // must be a different week
					if (Aweek == 0 && dDiff < 5.9) {
						bigString += "\n<h3>Last week</h3>\n";
						Aweek++;
					} else if (Aweek != 9) { // start the monthly divs
						bigString += "\n<h3>Older podcasts</h3>\n\n<ul>\n";
						bigString += "<li><a href=\"#"+Mths[Amonth]+Ayear+"\" onclick=\"showdiv('"+Mths[Amonth]+Ayear+"')\"><b>"+Nmonth+" "+Ayear+"</b></a>\n";
						bigString += "<div class=\"highlander\" name=\""+Mths[Amonth]+Ayear+"\" id=\""+Mths[Amonth]+Ayear+"\">\n";
						Lmonth = Nmonth;
						Aweek = 9;
					}
				}
				if (isTimed == 'weekly' && Lday != Tday) { Aweek++; }
				Lday = Tday;
				Ldate = iDO;
				if (Aweek>1 && Lmonth != Nmonth) { // start new month li + div and close off the last
					Lmonth = Nmonth;
					if (bigString.match('<ul')) {
						bigString += "\n</div>\n</li>\n";
					} else {
						bigString += "\n<h3>Older podcasts</h3>\n\n<ul>\n";
					}
					bigString += "<li><a href=\"#"+Mths[Amonth]+Ayear+"\" onclick=\"showdiv('"+Mths[Amonth]+Ayear+"')\"><b>"+Nmonth+" "+Ayear+"</b></a>\n";
					bigString += "<div class=\"highlander\" name=\""+Mths[Amonth]+Ayear+"\" id=\""+Mths[Amonth]+Ayear+"\">\n";
				}
			}
			bigString += "\n<p><b>"+iTitle+"</b><br /><span class=\"articleDate\">"+parseDate(iDate)+"</span><br />\n"+iDesc+"<br /><a href=\""+iLink+"\" target=\"_blank\" class=\"audioLink\">Listen to podcast ("+iTime+")</a>"+littleString+"</p>\n";
		}
		if (isTimed && bigString.match('<ul')) { bigString += "\n</div>\n</li>\n</ul>\n"; } // close divs and list
		document.getElementById('theFeed').innerHTML = bigString;
		// script ASSUMES you have a div with the id "theFeed" into which to insert the generated output
	}
}

// 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
	*/
	datearr = dateStr.split(" ");
	pdate	= datearr[1];
	pmonth	= datearr[2];
	pyear	= datearr[3];
	ptime   = datearr[4].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();
