function Ajax()
{
	this.dataContainer = null;
	this.loadMessage = null;
	this.loadMessageContainer = null;
	this.parameters = new Object();
	this.url = null;
	
	this.getXmlHttp = function ()
	{
		var xml_http;
		
		try
		{
			xml_http = new XMLHttpRequest();
		}
		catch (e)
		{
			try
			{
				xml_http = new ActiveXObject('Msxml2.XMLHTTP');
			}
			catch (e)
			{
				try
				{
					xml_http = new ActiveXObject('Microsoft.XMLHTTP');
				}
				catch (e)
				{
					return false;
				}
			}
		}
		
		return xml_http;
	};
	
	this.request = function ()
	{
		var data_container = this.dataContainer;
		if (null == data_container)
		{
			this.throwError('No container specified.');
			
			return false;
		}
		
		var xml_http = this.getXmlHttp();
		if (false == xml_http)
		{
			this.throwError('No object available.');
			
			return false;
		}
		
		var parameters = '';
		for (var name in this.parameters)
		{
			parameters += (name + '=' + this.parameters[name] + '&');
		}
		
		if ('' == parameters)
		{
			var url = this.url;
		}
		else
		{
			var url = this.url + '?' + parameters.substring(0, parameters.length - 1);
		}
		
		var load_message_container = this.loadMessageContainer;
		var load_message = this.loadMessage;
		
		if (null != load_message_container && null != load_message)
		{
			document.getElementById(load_message_container).innerHTML = load_message;
		}
		
		xml_http.onreadystatechange = function ()
		{
			if (4 == xml_http.readyState)
			{
				if (200 == xml_http.status)
				{
					document.getElementById(data_container).innerHTML = xml_http.responseText;
					
					var matches = /<script[^>]*>([\S\s]*?)<\/script>/gim.exec(xml_http.responseText);
					if (matches)
					{
						eval(matches[1]);
					}
				}
				
				if (null != load_message_container && null != load_message)
				{
					document.getElementById(load_message_container).innerHTML = '&nbsp;';
				}
			}
		};
		
		xml_http.open('GET', url, true);
		xml_http.send(null);
		
		return true;
	};
	
	this.setDataContainer = function (container)
	{
		this.dataContainer = container;
		
		return true;
	};
	
	this.setLoadMessage = function (container, message)
	{
		this.loadMessageContainer = container;
		this.loadMessage = message;
		
		return true;
	}
	
	this.setParameter = function (name, value)
	{
		this.parameters[name] = value;
		
		return true;
	};
	
	this.setUrl = function (url)
	{
		this.url = url;
		
		return true;
	};
	
	this.throwError = function (message)
	{
		alert('Ajax Error:\nAn error occurred while retrieving data.\n\nDetails:\n' + message);
		
		return true;
	};
}

function listenForEnter(formId, event)
{
	if ((event && 13 == event.which) || (window.event && 13 == window.event.keyCode))
	{
		document.getElementById(formId).submit();
	}
}

var rss_container;
var rss_count;
var rss_index;
var rss_url;
var rss_timer;

function loadRss(url, container)
{
	if (rss_timer)
	{
		window.clearTimeout(rss_timer);
	}
	
	rss_url = url;
	rss_container = container;
	
	var ajax = new Ajax();
	xml_http = ajax.getXmlHttp();
	
	xml_http.onreadystatechange = function ()
	{
		if (4 == xml_http.readyState)
		{
			var content = '';
			var xml = xml_http.responseXML;
			
			rss_count = xml.getElementsByTagName('entry').length;
			
			if (!rss_count)
			{
				content += '<div style="color: #990000; font-weight: bold;">The RSS feed is unavailable.</div>';
			}
			else
			{
				for (var index = 0; index < 1; ++index)
				{
					if (!rss_index || rss_count <= rss_index)
					{
						rss_index = 0;
					}
					
					content +=	'<div style="margin-bottom: 12px;">';
					content += 		'<div>' + xml.getElementsByTagName('entry')[rss_index].getElementsByTagName('published')[0].firstChild.nodeValue + '</div>';
					content +=		'<div><a target="_blank" href="' + xml.getElementsByTagName('entry')[rss_index].getElementsByTagName('link')[0].getAttribute('href') + '" style="font-weight: bold;">' + xml.getElementsByTagName('entry')[rss_index].getElementsByTagName('title')[0].firstChild.nodeValue + '</a></div>';
					content +=		'<div>' + xml.getElementsByTagName('entry')[rss_index].getElementsByTagName('content')[0].firstChild.nodeValue.replace(/<br\/>[\S\s]*$/i, '') + '</div>';
					content +=	'</div>';
					
					++rss_index;
				}
				
				rss_timer = window.setTimeout(function () { loadRss(rss_url, rss_container); }, 12000);
			}
			
			document.getElementById(container).innerHTML = content;
		}
	};
	
	xml_http.open('GET', '/inc/rss.php?url=' + url, true);
	xml_http.send(null);
}