// rss.js
(function(){

if( window.addEventListener ) 
{
	window.addEventListener( "load", initRSS, false );
}
else if( window.attachEvent ) 
{
	window.attachEvent( "onload", initRSS );	// IE
}

var debug = false;
var debugWin;
if( !debugWin && debug )
{
	debugWin = window.open(null, "debugWin", "width=500,height=500,scrollbars=yes");
	debugWin.document.write('<html><head><title></title></head><body><div id="debug"></div></body>');
}
	
	
var numRebuilds = 0;

var ajaxrequests = 0;
var lastupdated = null;
var isIE6 = /msie|MSIE 6/.test(navigator.userAgent);

function initRSS()
{
	if( debug ) doDebug();
		
	var now = new Date();
	var now = now.getTime();
	
	if( document.getElementById('feed') )
	{
		sendRequest('/gogreen/chat/feed/feed.xml?t='+now,null,'feed', true);
	}
}

function doDebug(msg)
{
	if( msg && msg != "" )
	{
		debugWin.document.getElementById('debug').innerHTML += msg + '<br />';
		debugWin.focus();
	}
}

function $(id) { return document.getElementById(id); }

function sendRequest(filePath, params, resultDivName, async) 
{
	var resultDiv = document.getElementById(resultDivName);
	//resultDiv.innerHTML = '<p>Sorry, the Go Green Mini-Feed could not be retrieved at this time.</p>';
	
	if( window.XMLHttpRequest) 
  	{
   	var xmlhr = new XMLHttpRequest();
	} 
	else if( window.ActiveXObject ) 
	{
		var xmlhr = new ActiveXObject("Microsoft.XMLHTTP");
		if( !xmlhr )
		{
			var xmlhr = new ActiveXObject("Msxml2.XMLHTTP");
		}
	}
 
	xmlhr.open('GET', filePath, async);
	//xmlhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
	
	xmlhr.onreadystatechange = function() 
	{
		var resultDiv = document.getElementById(resultDivName);
		//resultDiv.innerHTML += xmlhr.readyState + '<br />';
		if (xmlhr.readyState == 1) {
			resultDiv.innerHTML = '<b>Loading...</b>'; 
		}
		else if( xmlhr.readyState == 4 && xmlhr.status == 200 )
		{
			if( xmlhr.responseXML )
			{
				//var html = decodeHTML(xmlhr.responseText);
				//$('feed').innerHTML = html;
				
				if( !isIE6 )
					document.getElementById('subscribe-div').style.display = 'block';
				else
					document.getElementById('subscribe-div').style.display = 'none';
				//displayMiniFeed(xmlhr.responseXML);

// *************************************************
// TEMPORARY FIX BEGIN ============================v
//

//				var now = new Date().getTime();
//				lastupdated = checkLastUpdated(xmlhr.responseXML);

//				if( lastupdated === null )
//				{
//					// no file ever written
//					//sendRequest('/cgi-bin/atomparser.pl?t='+now,null,'feed', true);
//					//doDebug('lastupdated === null' + numRebuilds++);
//					resultDiv.innerHTML = '<p>Sorry, the Go Green Mini-Feed could not be retrieved at this time.</p>';
//				}
//				else	if( Math.floor((now-lastupdated)/(1000*60*60)) >= 12 )	// rebuild feed.xml every 12 hours
//				{
//					//sendRequest('/cgi-bin/atomparser.pl?t='+now,null,'feed', true);
//					//doDebug(Math.floor((now-lastupdated)/(1000*60*60)));
//					resultDiv.innerHTML = '<p>Sorry, the Go Green Mini-Feed could not be retrieved at this time.</p>';
//				}
//				else
//				{
//					//doDebug('displayMiniFeed' + numRebuilds++);
					displayMiniFeed(xmlhr.responseXML);	
//				}

// TEMPORARY FIX END ==============================^
// *************************************************
			}
		} 
		else if( xmlhr.readyState == 4 )
		{
			resultDiv.innerHTML = '<p>Sorry, the Go Green Mini-Feed could not be retrieved at this time.</p>';
		}
	};
	xmlhr.send(params);
}

function checkLastUpdated(xmldoc)
{
	var lastup = null;
	
	var root = xmldoc.documentElement;
	if( root.hasChildNodes())
	{
		var nds = root.childNodes;
		for( var i = 0; i < nds.length; i++ )
		{
			if( nds[i].nodeName == 'updated' )
			{
				lastup = parseAtomTime(nds[i].firstChild.nodeValue, true);
				break;
			}
		}
	}
	else
	{
		lastup = null;	
	}
	
	return lastup;
}

var mfeeds = new Array();
	
function displayMiniFeed(xmldoc)
{
	$('feed').innerHTML = '';
	var root = xmldoc.documentElement;
	
	if( root.hasChildNodes())
	{
		//$('feed').innerHTML += '@ root node';
	
		var nds = root.childNodes;
		for( var i = 0; i < nds.length; i++ )
		{
			//$('feed').innerHTML += '<pre>nds['+i+'].nodeName = ' + nds[i].nodeName + '</pre>';
			if( nds[i].hasChildNodes() )
			{
				//$('feed').innerHTML += '<pre>nds['+i+'].nodeName = ' + nds[i].nodeName + '</pre>';
				if( nds[i].nodeName == 'entry' )
				{
					//$('feed').innerHTML += '<u>IN ENTRY &gt; '+i+' &lt;</u> <br />';
					
					var link = '';
					var updated = '';
					var content = '';
					var numcomments = 0;
					
					var ends = nds[i].childNodes;
					for( var j = 0; j < ends.length; j++ )
					{
						if( ends[j].nodeName == 'link' )
						{
							//$('feed').innerHTML += '&nbsp; &nbsp; &nbsp; <u>AT LINK &gt; ' + j + ' &lt;</u> <br />';
				
							var link = ends[j];
							if( link.attributes.length > 0 )
							{
								var oAttr = {};
								var found = false;
								var attrs = link.attributes;
								for( var k = 0; k < attrs.length; k++ )
								{
									var attr = attrs[k];
									
									if( attr.nodeName == "rel" && attr.nodeValue == "alternate" )
									{
										found = true;
									}
									
									if( found )
									{
										oAttr[attr.nodeName] = attr.nodeValue;
									}
								}
															
								if( found )
								{
									if( oAttr.title == '' )
										oAttr.title = 'Impact of Technology on the Environment';
									
//									var a = document.createElement('a');
//									a.href = oAttr.href;
//									a.target = '_blank';
//									a.appendChild(document.createTextNode(stripTags(oAttr.title)));
									
									link = '<a href="' + oAttr.href + '" target="_blank">'+oAttr.title+'</a>';
									
//'\n		attr = ' + attr + 
//'\n		attr.text = ' + attr.text + 
//'\n		attr.nodeName = ' + attr.nodeName +
//'\n		attr.nodeValue = ' + attr.nodeValue + '</pre>';
								}
							}
						}	// end if( ends[j].nodeName == 'link' )
						else if( ends[j].nodeName == 'updated' )
						{
							updated = parseAtomTime(ends[j].firstChild.nodeValue,true);
						}
						else if( ends[j].nodeName == 'content' )
						{
							content = stripTags(stripAnchors(decodeHTML(ends[j].firstChild.nodeValue)));
							content = content.substr(0,250);
							content = content.substring(0,content.lastIndexOf(' ')) + '...';
						}
						else if( ends[j].nodeName == 'thr:total' )
						{
							numcomments = ends[j].firstChild.nodeValue;	
						}
					}	// for( var j = 0; j < ends.length; j++ )
					
					mfeeds.push(
					{
						link:link,
						updated:updated, 
						content:content,
						numcomments:numcomments
					});
				}
			}
		}
	}
	
	if( mfeeds.length > 0 )
	{
		mfeeds.sort(sorter);
		
		$('feed').innerHTML += '';
		
		var tease = '';
		var html = '<ul>';
		for( var i = 0; i < mfeeds.length; i++ )
		{
			html += '<li>' + mfeeds[i].link + '<br />' + new Date(mfeeds[i].updated).toLocaleString() + '</li>';	
			tease += '<h3 class="teaser-title">' + mfeeds[i].link + '</h3>' +
						'<div class="teaser-subtitle">' + 
							'Posted on ' + new Date(mfeeds[i].updated).toLocaleString() + 
							' (' + mfeeds[i].numcomments + ' comments)' + 
						'</div>' +
						'<div class="teaser-content">' + mfeeds[i].content + '</div>';
		}
		
		$('feed').innerHTML += html + '</ul>';
		
		if( $('teaser') )
			$('teaser').innerHTML = tease;
	}
	
//	if( mfeeds.length > 0 )
//	{
//		mfeeds.sort(sorter);
//		
//		var tease = document.createElement('div');
//		var feed = document.createElement('ul');
//		for( var i = 0; i < mfeeds.length; i++ )
//		{
//			var li = document.createElement('li');
//			li.appendChild(mfeeds[i].link);
//			li.appendChild(document.createElement('br'));
//			li.appendChild(document.createTextNode(mfeeds[i].updated).toLocaleString()));
//			
//			feed.appendChild(li);
//			
//			var h3 = document.createElement('h3');
//			h3.className = 'teaser-title';
//			h3.appendChild(mfeeds[i].link);
//			
//			tease.appendChild(h3);
//			
//			var div = document.createElement('div');
//			div.className = 'teaser-subtitle';
//			div.appendChild(document.createTextNode('Posted on ' + new Date(mfeeds[i].updated).toLocaleString() + ' (' + mfeeds[i].numcomments + ' comments)'));
//			
//			tease.appendChild(div);
//			
//			div = document.createElement('div');
//			div.className = 'teaser-content';
//			div.appendChild(document.createTextNode(mfeeds[i].content));
//			
//			tease.appendChild(div);
//		}
//		
//		document.getElementById('feed').appendChild( feed );
//		
//		if( document.getElementById('teaser') )
//			document.getElementById('teaser').appendChild( tease );
//	}
}

function sorter(a,b)
{
	var ret = 0;
	
	var date1 = a.updated;
	var date2 = b.updated;
	
	if( date1 > date2 )
		ret = -1;
	else if( date1 == date2 )
		ret = 0;
	else if( date1 < date2 )
		ret = 1;
		
	return ret;
}

function stripAnchors(str)
{
	return str.replace(/<a[^>]+>[^<]+<\/a>/gi,'');	
}

function stripTags(str)
{
	return str.replace(/<\/?[^>]+>/gi, '');
}

function parseAtomTime(sTime,getSecs)
{
	// time is of the format: 2009-03-12T10:17:12.128-07:00
	var tparts = sTime.split('T');
	var date = tparts[0];
	var time = tparts[1];
	
	var dparts = date.split('-');
	var year = dparts[0];
	var month = dparts[1];
	var dom = dparts[2];
	
	var tparts = time.split('-');
	var hms = tparts[0];
	var tz = tparts[1];
	
	var hms2 = hms.split(':');
	var hours = hms2[0];
	var mins = hms2[1];
	var secs = hms2[2];
	
	var secms = secs.split('.');
	var scs = secms[0];
	var ms = secms[1];
	
	var ret = 0;
	
	if( !getSecs)
	{
		var dt = new Date(parseInt(year),parseInt(month)-1,parseInt(dom),hours,mins,scs,ms);
		ret = dt.toLocaleString();
	}
	else
	{
		var dt = new Date(parseInt(year),parseInt(month)-1,parseInt(dom),hours,mins,scs,ms);
		ret = dt.getTime();
	}
		
	return ret;
}

			//if( nds[i].hasChildNodes() )
				//$('results').innerHTML += nds[i].firstChild.nodeValue + "<br />";
		//	else
			//	$('results').innerHTML += 'EMPTY <br />';

// from newsfox source: file.js
/**
 * Return original HTML from encoding.
 */
function decodeHTML(s)
{
  s = s.replace(new RegExp('&amp;'  ,'gi'), '&');
  s = s.replace(new RegExp('&lt;'   ,'gi'), '<');
  s = s.replace(new RegExp('&gt;'   ,'gi'), '>');
  s = s.replace(new RegExp('&quot;' ,'gi'), '"');
  s = s.replace(new RegExp('&acute;','gi'), '´');
  return s;
}

})();
