/*	Simple Javascript RSS Reader Version 1.0
	Copyright (c) 2006 CS Truter
	Written by Christoff Truter
	email: Christoff@cstruter.com - (Please let me know if you intend to use the script) */

/* Replace all occurances of a string
  (Parameters) totalValue:'complete string' 
		oldValue:'value to be replaced' newValue:'value used for replace' */

function Replace(totalValue,oldValue,newValue)
{
	while(totalValue.indexOf(oldValue) > -1)
		totalValue=totalValue.replace(oldValue,newValue);
			return totalValue;
}

/* Get XML Node
   (Parameters) TagName:'XML Element' node:'Element row number' */

function getNode(TagName, node)
{
	var currentNode = (node == null) ? xmlDoc.getElementsByTagName(TagName) : 
					items[node].getElementsByTagName(TagName);
	if(currentNode.length > 0)
		return currentNode[0].firstChild.nodeValue;
}

/* Load XML Object
   (Parameters) rssFeed:'RSS File' Body:'Layer for RSS Body' Title:'Layer for RSS Title' */

function ReadRSS(maxItens, rssFeed, Body, Title, Loading) 
{
	rssTitle = document.getElementById(Title);	
	rssBody = document.getElementById(Body);
	
	try
	{
		if (document.all)
		{
			var errorHappendHere = "Check Browser and security settings";
			xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		}
		else
		{
			var errorHappendHere = "Apparently one cant read remote xml via firefox, please copy the file to your server";
			xmlDoc = document.implementation.createDocument("","",null);
		}
	
		xmlDoc.async=false;
		xmlDoc.load(rssFeed);
	
		items=xmlDoc.getElementsByTagName('item');
		SetRSSTemplates(maxItens);
		
	}
	catch(e)
	{
		rssTitle.innerHTML = 'Error occured';
		rssBody.innerHTML = 'Thrown Error:'+e.message+"<br/>Note: "+errorHappendHere;
	}
	
	document.getElementById(Loading).style.display = 'none';
	rssBody.style.display = '';
}

/* Set HTML Template
	Did it this way to make the look and feel of the feed easy customizable, dont like mixing
	layout with code. */

function SetRSSTemplates(maxItens)
{
	if (rssBody)
	{
		var buffer = "";
		if (!maxItens || maxItens == 0) maxItens = items.length;
		for(var i=0; i< items.length && i< maxItens; i++) 
		{
			var output = (document.all) ? Replace(rssBody.innerHTML,"(::Link::)",getNode('link',i)) 
									   : Replace(rssBody.innerHTML,"%28::Link::%29",getNode('link',i));
			
			var title = getNode('title',i); 
			var titleTrunc = title.length > 55 ? title.substring(0, 55) + "..." : title;

			var description = getNode('description',i); 
			var descriptionTrunc = description.length > 115 ? description.substring(0, 115) + "..." : description;

			output = Replace(output,"(::Title::)", title);
			output = Replace(output,"(::TitleTrunc::)", titleTrunc);
			output = Replace(output,"(::Pubdate::)", formatDate(getNode('dc:date',i)));
			output = Replace(output,"(::Description::)", description);
			output = Replace(output,"(::DescriptionTrunc::)", descriptionTrunc);
			buffer+=output;
		}
		rssBody.innerHTML = buffer;
	}

	if (rssTitle)
	{
		var output = Replace(rssTitle.innerHTML,"(::Title::)",getNode('title'));
		output = (document.all) ? Replace(output,"(::Link::)",getNode('link'))
							   : Replace(output,"%28::Link::%29",getNode('link'));		
		output = Replace(output,"(::Description::)",getNode('description'));
		rssTitle.innerHTML = output;
	}
}

function formatDate(dataStr) {
	if (!dataStr) return "";
	var curr_year = dataStr.substring(0, 4);
	var curr_month = dataStr.substring(5, 7);
	var curr_day = dataStr.substring(8, 10);
	var curr_hour = dataStr.substring(11, 16);
	
	var curr_date = new Date(new Number(curr_year), new Number(curr_month)-1, new Number(curr_day));
	
	var d_names = new Array("Domingo", "Segunda-feira", "Ter&ccedil;a-feira",
		"Quarta-feira", "Quinta-feira", "Sexta-feira", "S&aacute;bado");

	var m_names = new Array("Janeiro", "Fevereiro", "Mar&ccedil;o", 
		"Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", 
		"Outubro", "Novembro", "Dezembro");

	return (d_names[curr_date.getDay()] + ", " + curr_day  + " de " + m_names[curr_date.getMonth()] + " de " + curr_year + " - " + curr_hour);
}

