function BackstoryWidget()
{
	var xmlObject;
	var elementID;
	var itemMax;
	var trimmedXML;
	
	this.TrimXML = function ( xml, itemTag )
	{
		this.trimmedXML = StringToXML ( "<channel></channel>");
		var channel;
		var channels;
		var channelCount = 0;
		var element;

		channel = this.trimmedXML.getElementsByTagName ( "channel" ) [ 0 ];
		channels = xml.getElementsByTagName ( itemTag );
		channelCount = channels.length;

		for ( var index = 0; index < channelCount; index++ )
		{
			element = this.trimmedXML.createElement ( "item" );
			element.setAttribute ( "title", this.GetElementText ( channels [ index ].getElementsByTagName ( "title" ) [ 0 ] ) );
			element.setAttribute ( "link", this.GetElementText ( channels [ index ].getElementsByTagName ( "link" ) [ 0 ] ) );
			channel.appendChild ( element );
		}
	}

	this.GetElementText = function ( element )
	{
		var count = element.childNodes.length;
		var text = "";
		for ( var index = 0; index < count; index++ )
		{
			text += element.childNodes [ index ].data;
		}
		return text;
	}

	this.CreateWidgetUsingXML = function ( xml, elementID, itemMax )
	{
		var widgetXML = xml.getElementsByTagName ( "item" );
		var div = document.getElementById ( elementID );
		var widgetUL = document.createElement ( "ul" );
		
		for ( var index = 0; index < itemMax; index++ )
		{
			var itemXML = widgetXML [ index ];
			var widgetLI = document.createElement ( "li" );
			var widgetA = document.createElement ( "a" );
			widgetA.innerHTML = itemXML.attributes.getNamedItem ( "title" ).nodeValue;
			widgetA.setAttribute ( "href", itemXML.attributes.getNamedItem ( "link" ).nodeValue );
			widgetLI.appendChild ( widgetA );
			widgetUL.appendChild ( widgetLI );
		}
		div.appendChild ( widgetUL );
		var linkA = document.createElement ( "a" );
		linkA.setAttribute ( "href", "http://www.hrcbackstory.org" );
		linkA.innerHTML = "Read the Blog";
		div.appendChild ( linkA );
	}
	
	this.XMLCallback = function ( xml, userVar )
	{
		userVar.TrimXML ( xml, "item" );
		createCookie ( "backstory_enda", XMLToString ( userVar.trimmedXML ), 30 );
		userVar.CreateWidgetUsingXML ( userVar.trimmedXML, userVar.elementID, userVar.itemMax );
	}

	this.Startup = function ( xmlUrl, elementID, type )
	{
		var backstoryCookie;
		this.elementID = elementID;
		this.itemMax = 4;
		var element = document.getElementById ( elementID );
		if ( element.attributes.getNamedItem ( "maxPosts" ).nodeValue != "" ) this.itemMax = Number ( element.attributes.getNamedItem ( "maxPosts" ).nodeValue );
		element.innerHTML = "";
		
		backstoryCookie = readCookie ( "backstory_enda" );
		
		if ( backstoryCookie && backstoryCookie != "null" )
		{
			this.CreateWidgetUsingXML ( StringToXML ( backstoryCookie ), this.elementID, this.itemMax );
			return true;
		}
		else
		{
			XMLRequestAsync ( "proxy.asp?type=xml&url=" + xmlUrl, this.XMLCallback, this );
			return true;
		}
	}
}

var backstoryWidget = new BackstoryWidget();
