//	<JavaScript RSS Reader>				//
//      Modified to be Inserted Embedded Into a Site:	// 
//	Portability/Customization Features Added:	//
//	By Danny Garfield (13/03/04)			//
//	http://www.puuba.com				//
//	http://www.reploid9.com				//
//							//
// 	(c) 2003 Premshree Pillai			//
//	Core Code Written On: 07/06/03 (dd/mm/yy)	//
//	http://www.qiksearch.com/			//
//	http://premshree.resource-locator.com		//
//							//
//////////////////////////////////////////////////////////

/* 
Script Now Supports:
-Variable Number Of Entries Outputted
-Embedding in an HTML File
-Externally Customizable Font/Look

To Use This Script:
	Paste into the <head> section of the HTML page:
		<script src="http://www.puuba.com/team/translator.js"></script>
	
	Then, wherever you want the translated RSS feed to appear, paste:
		<script>
		try {readRSS(unescape("http://www.puuba.com/team/blog.rss"),5);}
		catch(e) {}
		</Script>

	Replace the URL with that of the RSS feed you want. Replace the number with
	The max number of entries you want displayed. (posts, on a blog)
	If the number is zero, it means to display ALL available posts.
	If the number is more than the available posts, all available posts will show.

Options:
	NOHR
	NODATE
	  SHOWTIME12
	  SHOWTIME24
	NOAUTHOR
	NODOUBLESPACE
	SHOWBODY
	  TILBR
	NOTITLE
	ALTDATEAUTH
	DATEFIRST


You can customize the colors/styles of the text outputted by this using
a standard style sheet from the outside.
The classes of the words are:
	.rsslink   - the links printed (the titles)
	.rssdate   - the date/time printed
	.rssauthor - the name of the poster.
Normal style declarations (color, size, text decoration, italics, bold, etc) can be
declared in the style sheet as usual. 

*/
var xmlDoc = new Array();
var hrSwitch = true, authorSwitch = true, dateSwitch = true, doubleSpace = true, showBody = false, showTime12 = false, showTime24 = false, showTitle = true, altform = false, datefirst = false;

function readRSS(URI, number) {

	if (arguments.length > 2)
		for (i=2; i<arguments.length; i++) {
			if (arguments[i] == "NOHR")
				hrSwitch = false;
			if (arguments[i] == "NOAUTHOR")
				authorSwitch = false;
			if (arguments[i] == "NODATE")
				dateSwitch = false;
			if (arguments[i] == "NODOUBLESPACE")
				doubleSpace = false;
			if (arguments[i] == "NOTITLE")
				showTitle = false;
			if (arguments[i] == "SHOWBODY")
				showBody = true;
			if (arguments[i] == "SHOWTIME12")
				showTime12 = true;
			if (arguments[i] == "SHOWTIME24")
				showTime24 = true;
			if (arguments[i] == "ALTDATEAUTH")
				altform = true;
			if (arguments[i] == "DATEFIRST")
				datefirst = true;
		}

        var xindex = xmlDoc.length;
	xmlDoc[xindex] = createXMLObj();	

        document.write('<div id="rssfeed'+xindex+'" class="rssfeed">Initializing rss feed...</div>');

	xmlDoc[xindex].onreadystatechange=function(){formatRSS(number,xindex)};
	
	getRSSFeedContent(URI,xindex);

}

function getRSSFeedContent( URI,xmlIndex) {
     xmlDoc[xmlIndex].open('GET', URI, true);
     xmlDoc[xmlIndex].send(null);
}

function createXMLObj(){
   var httprequest=false
   if (window.XMLHttpRequest){ // if Mozilla, Safari etc
      httprequest=new XMLHttpRequest()
      if (httprequest.overrideMimeType)
         httprequest.overrideMimeType('text/xml')
      }
      else if (window.ActiveXObject){ // if IE
         try {
            httprequest=new ActiveXObject("Msxml2.XMLHTTP");
         }
         catch (e){
         try{
            httprequest=new ActiveXObject("Microsoft.XMLHTTP");
         }
         catch (e){}
      }
   }
   return httprequest
}

function formatRSS(number,xmlIndex) {
   if (xmlDoc[xmlIndex].readyState == 4){ //if request of file completed


   if (xmlDoc[xmlIndex].status==200){ //if request was successful

	 var items_count;
       
	 var xmldata=xmlDoc[xmlIndex].responseXML;

	 if ((number == 0) || (number > xmldata.getElementsByTagName('item').length))
	    items_count=xmldata.getElementsByTagName('item').length;
	 else
	    items_count=number;
	 var date=new Array(), time=new Array(), link=new Array(), title=new Array(), description=new Array(), guid=new Array(), body=new Array(), temp, temp2;
		for(var i=0; i<items_count; i++) { 
                   if(xmldata.getElementsByTagName('item')[i].getElementsByTagName('dc:date').length==1)
		      date[i]=xmldata.getElementsByTagName('item')[i].getElementsByTagName('dc:date')[0];

                   if(xmldata.getElementsByTagName('item')[i].getElementsByTagName('pubDate').length==1)
		      date[i]=xmldata.getElementsByTagName('item')[i].getElementsByTagName('pubDate')[0];

                   if(xmldata.getElementsByTagName('item')[i].getElementsByTagName('link').length==1)
                      link[i]=xmldata.getElementsByTagName('item')[i].getElementsByTagName('link')[0];

                   if(xmldata.getElementsByTagName('item')[i].getElementsByTagName('guid').length==1)
                      guid[i]=xmldata.getElementsByTagName('item')[i].getElementsByTagName('guid')[0];

                   if(xmldata.getElementsByTagName('item')[i].getElementsByTagName('title').length==1)
                      title[i]=xmldata.getElementsByTagName('item')[i].getElementsByTagName('title')[0];

                   if(xmldata.getElementsByTagName('item')[i].getElementsByTagName('dc:creator').length==1)
                      description[i]=xmldata.getElementsByTagName('item')[i].getElementsByTagName('dc:creator')[0];

                   if(xmldata.getElementsByTagName('item')[i].getElementsByTagName('description').length==1)
                      body[i]=xmldata.getElementsByTagName('item')[i].getElementsByTagName('description')[0];

                   date[i] =  date[i].firstChild.nodeValue.substr(date[i].firstChild.nodeValue,22,1);

                   //Convert ISO 8601 Dates 
                   if ( date[i].indexOf('T')>0 ) { 
                      var myStringDate = date[i];
                      var myStringDate = myStringDate.replace(/\D/g, " ");
                      var dObj = myStringDate.split(" ");
                      var myDate = new Date(dObj[0], (dObj[1]-1), dObj[2], dObj[3], dObj[4]);
                      myStringDate = myDate.toString();
                      var mySubString = myStringDate.substring(0,22);
                      date[i]=mySubString;
                   } 

		}

		if((description.length==0)&&(title.length==0)) return false;

		var ws=/\S/;
		var innerHTML = '';

		for(var i=0; i<items_count; i++) {
			var title_w, link_w;
			if(document.all)
				title_w=(title.length>0)?title[i].text:"<i>Untitled</i>";
			else
				title_w=(title.length>0)?title[i].firstChild.nodeValue:"<i>Untitled</i>";

			link_w=(link.length>0)?link[i].firstChild.nodeValue:"";
			if(link.length==0) link_w=(guid.length>0)?guid[i].firstChild.nodeValue:"";
			if(title.length>0) title_w=(!ws.test(title_w))?"<i>Untitled</i>":title_w;
			if (showTitle) innerHTML+='<div style="word-wrap: break-word"><a href="'+link_w+'" class="rsslink" target="_blank">'+title_w+'</a></div>';
			if (datefirst ) {
				innerHTML+='<span class="rssdate">'+date[i];
				if (showTime12 || showTime24) innerHTML+=' - ' + time[i];
				innerHTML+='</span>&#xA0;';
			}


			if(showBody) innerHTML+='<span id="rssbody">'+body[i].firstChild.nodeValue+'</span>';

			if (dateSwitch & !altform & !datefirst & date[i]) {
				innerHTML+='<span class="rssdate">(' + date[i];
				if (showTime12 || showTime24) innerHTML+=' - ' + time[i];
				innerHTML+=')</span><br />';
			}
			if (authorSwitch && description.length>0 &!altform)
				innerHTML+='<a class="rssauthor"> by: '+description[i].firstChild.nodeValue+'</a><br />';
			if (altform) {
				if (description[i].firstChild)
					innerHTML+='- <a class="rssauthor">' +description[i].firstChild.nodeValue+ '</a> :: <a class="rssdate">(' +date[i]+ ')</a><br/>';
				else
					innerHTML+='- <a class="rssauthor">No Name In Profile</a> :: <a class="rssdate">(' +date[i]+ ')</a><br />';
			}
			if (hrSwitch) innerHTML+='<hr>'; if (doubleSpace) innerHTML+='<br/>';
			
		}
		document.getElementById('rssfeed'+xmlIndex).innerHTML = innerHTML ;

      }
    }

}
