/*	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' maxItems:'maximum number of feeds' */

function ReadRSS(rssFeed, Body, maxItems) 
{
	rssBody = document.getElementById(Body);

	try
	{				
		    try //Internet Explorer
        {
          xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
          xmlDoc.async=false;
		      xmlDoc.load(rssFeed);
		      items=xmlDoc.getElementsByTagName('item');
		      SetRSSTemplates(maxItems);
        }
        catch(e)
        {
          try //Firefox, Mozilla, Opera, etc.
          {
            try // feed from URL
            {
              var rssXML;
              xmlhttp = new XMLHttpRequest();
              xmlhttp.async=false;
              xmlhttp.open("GET", rssFeed,true);
              xmlhttp.onreadystatechange=function() 
              {
                if (xmlhttp.readyState==4) 
                {
                  rssXML = xmlhttp.responseText;
                  parser = new DOMParser();
                  xmlDoc = parser.parseFromString(rssXML,"text/xml");
                  items=xmlDoc.getElementsByTagName('item');
		              SetRSSTemplates(maxItems);
                }
              }
              xmlhttp.send(null);
            }
            catch(e)
            {            
              try // feed from physical file
              {
                xmlDoc=document.implementation.createDocument("","",null);
                xmlDoc.async=false;
		            xmlDoc.load(rssFeed);
	          		items=xmlDoc.getElementsByTagName('item');
		            SetRSSTemplates(maxItems);
              }
              catch(e)
              {
                rssBody.innerHTML = '';//'Thrown Error:'+e.message;
              }
            }
          }
          catch(e)
          {            
            rssBody.innerHTML = '';//'Thrown Error:'+e.message;
          }
        }
	}
	catch(e)
	{
		rssBody.innerHTML = '';//'Thrown Error:'+e.message;
	}
}

/* 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(maxItems)
{
	if (rssBody)
	{
		var buffer = "";
		if(maxItems < 0)
			count = items.length;
		else
		    count = maxItems < items.length ? maxItems : items.length;
		
		for(var i=0; i< count; i++) 
		{
			var output = (document.all) ? Replace(rssBody.innerHTML,"(::Link::)",getNode('link',i)) 
									   : Replace(rssBody.innerHTML,"%28::Link::%29",getNode('link',i));
			output = Replace(output,"(::Title::)",getNode('title',i));			
			buffer+=output;
		}
		rssBody.innerHTML = buffer;
	}
}


// Sample usage
/*window.onload = function()
			{
				ReadRSS('cnn_tech_rss.xml','rssBodyTemplate', 4);
			}*/
			
/*<div id="rssBodyTemplate">
		&raquo;&#32;<a href="(::Link::)"><b>(::Title::)</b></a> 
		<br/>
	</div>*/