/**
 *
 * Dependencies: Httpclient
 */

function RSSBlogFeedParser(inBlogMetadataCallback, inFeedURL, inBlogCategoryName, inTransformer)
{

	function extractBlogMetadataFromRss(inXml)
	{
		var theRootNode = inXml.documentElement;
		var theBlogMetadata = new Array();
		var theChannels, theItems, theCategories, theTitle, theLink, thePubDateString, thePubDate;
		var i, j, k, l;

		l = 0;
		theChannels = theRootNode.getElementsByTagName('channel');
		for(i = 0; i < theChannels.length; i++)
		{
			theItems = theChannels[i].getElementsByTagName('item');
			for(j = 0; j < theItems.length; j++)
			{
				theCategories = theItems[j].getElementsByTagName('category');
				for(k = 0; k < theCategories.length; k++)
                {
                    if (inBlogCategoryName)
                    {
                        var transformedCategoryName = theCategories[k].firstChild.data;
                        if(inTransformer === undefined)
                        {
                            transformedCategoryName = theCategories[k].firstChild.data;
                        }
                        else
                        {
                            transformedCategoryName = inTransformer(theCategories[k].firstChild.data);
                        }
                        if(inBlogCategoryName == transformedCategoryName)
                        {
                            theTitle = theItems[j].getElementsByTagName('title')[0].firstChild.data ;
                            theLink = theItems[j].getElementsByTagName('link')[0].firstChild.data ;
                            thePubDateString = theItems[j].getElementsByTagName('pubDate')[0].firstChild.data;
                            thePubDate = parseDate(thePubDateString);
                            theBlogMetadata[l] = new Array();
                            theBlogMetadata[l]['pubDate'] = thePubDate;
                            theBlogMetadata[l]['title'] = theTitle;
                            theBlogMetadata[l]['link'] = theLink;
                            l++;
                            break;
                        }
                    }

                }
            }
		}

		return theBlogMetadata;
	}


	function httpResponseCallback(inHttpRequest)
	{
		var theBlogMetadata = extractBlogMetadataFromRss(inHttpRequest.responseXML);
		inBlogMetadataCallback(theBlogMetadata);
	}


 	this.parse = function()
	{
		var theHttpClient = new HttpClient();
		theHttpClient.get(inFeedURL, httpResponseCallback);
	}


	//todo: this does not belong here
	function parseDate(inDateString)
	{
		var theDate = new Date();
		theDate.setTime(Date.parse(inDateString));
		return theDate;
	}

}