//i've finished writing this code, turn off debug mode (hopefully for good!)
var debugMode=false;
var debugWriteTo='debugDiv';
var defaultPrettyDateFormat='l jS F, Y';

var prepend = '<ul id="sidebar-blog-entries">';
var template = '<li class="title"><a href="@link@" class="title-text sidebar-blog-title-@newOrNot@">@title@</a></li><li class="excerpt"><div><div><span>@date@<br/>Category: <a href="@category-link@" class="category-text">@category@</a></span><p>@description@</p></div></div></li>';
var append ='</ul>';


function FeedPumper(feed, writeTo, noPosts) { 
	debugInfo('Getting a suitable XMLHttpRequest');
	//get a suitable XMLHttpRequest object
	var req = newSuitableXMLHttpRequest();

	//some status stuff
	debugInfo('XMLHttpRequest object is: ' + req);
	debugInfo( 'Feed is: ' + feed );
	debugInfo( 'writeTo is: ' + writeTo );
	debugInfo( 'noPosts is: ' + noPosts );

	//prepare the request
	debugInfo( 'Prepare the request...' ); 
	req.open("GET", feed , true);

	//get ready for when it comes back
	debugInfo( 'Set the onreadystatechange function...');
	req.onreadystatechange = function() {
		if( req.readyState == 4 ) {
			debugInfo( 'State of the request changed to ready, lets do it!');
			if ( req.responseXML != null ) {
				ReqChange(writeTo, noPosts, req);
			}
		}
	}

	//send the request
	debugInfo( 'Send...');
	req.send(null);

	debugInfo( 'Done' );

}

/*
* Returns an XMLHttpRequest suitable for the browser
*/
function newSuitableXMLHttpRequest() {
	//set up the RSSRequestObject
	if (window.XMLHttpRequest) // try to create XMLHttpRequest
		return new XMLHttpRequest();

	if (window.ActiveXObject) // if ActiveXObject use the Microsoft.XMLHTTP
		return new ActiveXObject("Microsoft.XMLHTTP");
}


/*
* onreadystatechange function
*/
function ReqChange(writeTo, noPosts, request) {

	var finalOutput = '';
	var content='';

	// If data received correctly
	if (request.readyState==4) {
	
		// if data is valid
		if (request.responseText.indexOf('invalid') == -1) 
		{ 	
			//status
			debugInfo( 'Number to get: ' + noPosts );
			debugInfo( 'Div to put into: ' + writeTo );

			// Parsing RSS
			var node = request.responseXML.documentElement; 

			// Get Channel information
			var channel = node.getElementsByTagName('channel').item(0);
			var title = channel.getElementsByTagName('title').item(0).firstChild.data;
			var link = channel.getElementsByTagName('link').item(0).firstChild.data;

			// Browse items
			var items = channel.getElementsByTagName('item');
			var howMany;
			if( noPosts == -1 )
				howMany = items.length;
			else
				howMany = Math.min(items.length, noPosts);

			for (var n=0; n < howMany; n++)
			{
				var itemTitle = items[n].getElementsByTagName('title').item(0).firstChild.data;
				var itemLink = items[n].getElementsByTagName('link').item(0).firstChild.data;
				var itemDescription = items[n].getElementsByTagName('description').item(0).firstChild.data;
				var itemDate = items[n].getElementsByTagName('pubDate').item(0).firstChild.data;
	
				try { 
					var itemPrettyDate = items[n].getElementsByTagName('prettyDate').item(0).firstChild.data;
					var itemNewOrNot = items[n].getElementsByTagName('newOrNot').item(0).firstChild.data;
					
					categories = items[n].getElementsByTagName('category');
					//document.getElementById('content').innerHTML += '[' + categories.length + ']<br/>';

					var category = 'unknown';
					for ( i=0; i<categories.length; i++ ) { 
						catname = categories[i].firstChild.data;
						//document.getElementById('content').innerHTML += '[' + catname + ']<br/>';
						if ( catname.substring(0,1).toUpperCase() == catname.substring(0,1) ) {
							category = catname;
							break;
						}
					
					}
					//document.getElementById('content').innerHTML += '[' + category + ']<br/>';
					var categoryLink = channel.getElementsByTagName('link').item(0).firstChild.data + '/category/' + category + '/';


				} 
				catch (e) { 
					var itemPrettyDate = '';
					var itemNewOrNot = '';
					var categoryLink = '';
					var category = '';
				}
				
				if( itemPrettyDate == '' ) itemPrettyDate = itemDate;

				content = template;

				content = content.replace( /@date@/g, itemPrettyDate );
				content = content.replace( /@title@/g, itemTitle );
				content = content.replace( /@link@/g, itemLink );
				content = content.replace( /@description@/g, itemDescription );
				content = content.replace( /@newOrNot@/g, itemNewOrNot );
				content = content.replace( /@category-link@/g, categoryLink );
				content = content.replace( /@category@/g, category );


				//output to the page
				finalOutput += content;
			}
			
			// Tell the reader the everything is done
			//document.getElementById(writeTo).innerHTML += "Done.";
			
		}
		else {
			// Tell the reader that there was error requesting data
			document.getElementById(writeTo).innerHTML = "Error requesting data.";
		}
		finalOutput = prepend + finalOutput + append;
		finalOutput = finalOutput.replace(/&lt;/g, '<');
		finalOutput = finalOutput.replace(/&gt;/g, '>');
		finalOutput = finalOutput.replace(/&amp;/g, '&');

		document.getElementById(writeTo).innerHTML = finalOutput;
	}
	
}

function debugInfo(info) {
	if ( debugMode ) document.getElementById(debugWriteTo).innerHTML += info + '<br/>';
}
