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 (!xml_http)
		{
			this.throwError('No object available.');
			
			return false;
		}
		
		var parameters = '';
		for (var name in this.parameters)
		{
			parameters += (name + '=' + this.parameters[name] + '&');
		}
		
		var url = this.url;
		if ('' != parameters)
		{
			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 && load_message_container != data_container)
				{
					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();
	}
}

function rotate(html, container, count, delay)
{
	var index = 0;
	
	function load()
	{
		var output =	'<ul>';
		
		for (var i = 0; i < count; ++i)
		{
			if (index == html.length)
			{
				index = 0;
			}
			
			output +=		'<li' + (0 != i ? ' class="margin_top"' : '') + '>' + html[index] + '</li>';
			
			++index;
		}
		
		output +=	'</ul>';
		
		document.getElementById(container).innerHTML = output;
		
		return true;
	}
	
	load();
	setInterval(load, delay);
}