(function($){
	$.fn.jReuters = function(options)
	{
		var defaults = {
			refreshRate: 50,
			URLs: [
				"/reuters.cfm?n=1",
				"/reuters.cfm?n=2",
				"/reuters.cfm?n=3",
				"/reuters.cfm?n=4"
				]
		};

		var options = $.extend(defaults, options);
		
		function init()
		{
			obj = $(this);
			
			var nb_elements = options.URLs.length;
			var first = true;
			var reuters_current_n = 1;
			var itl = 0;
			
			var firstLoading = function()
			{
				$('div#reuters-content-'+getCurrN()).load(
					options.URLs[0],
					function() { scrolling(getCurrN()); scheduleNext(); }
				);
				function scheduleNext()
				{
					showContent(1);
					loadContent(getNextN());
					nextN();
					itl = setInterval(next,options.refreshRate*100);
				}
			}
			
			var hideContent = function(n)
			{
				$('div#reuters-content-'+n).css({
					top: '50px',
					zIndex: 1
				}).find('table').css({
					left: 0
				});
			}
			
			var loadContent = function(n)
			{
				$('div#reuters-content-'+n).load(
					options.URLs[(n-1)],
					function() { scrolling(n); }
				);
			}
			
			var scrolling = function(n)
			{
				var divWidth = $('div#reuters-content-'+n).width();
				var tableWidth = $('div#reuters-content-'+n).find('table').width();
				var deltaWidth = divWidth - tableWidth;
				
				if(deltaWidth < 0)
				{
					$('div#reuters-content-'+n).find('table').css({
						position: 'absolute',
						left: 0
					});
				}
			}
			
			var showContent = function(n)
			{
				$('div#reuters-content-'+n)
					.css({
						top: '50px',
						zIndex: 3
					})
					.animate(
						{
							top: 0
						},
						'slow',
						scrolling
					);
				
				function scrolling()
				{
					var divWidth = $(this).width();
					var tableWidth = $(this).find('table').width();
					var deltaWidth = divWidth - tableWidth;
					
					$(this).css({ zIndex: 1 });
					hideContent(getPrevN(n));
					
					if(deltaWidth < 0)
					{
						clearInterval(itl);
						$(this).find('table')
							.delay(options.refreshRate*50)
							.animate(
								{
									left: deltaWidth+'px'
								},
								options.refreshRate*50
							)
							.delay(options.refreshRate*50)
							.animate(
								{
									left: 0
								},
								options.refreshRate*50,
								function() { itl = setInterval(next,options.refreshRate*100); }
							);
					}
				}
			}
			
			var next = function()
			{
				showContent(getCurrN());
				loadContent(getNextN());
				nextN();
			}
			
			var getPrevN = function(n)
			{
				var prev_n = nb_elements;
				if (!n) { n = reuters_current_n }
				if ((n-1) > 0)
				{
					prev_n = n-1;
				}
				return prev_n;
			}
			
			var getCurrN = function(n)
			{
				return reuters_current_n;
			}
			
			var getNextN = function(n)
			{
				var next_n = 1;
				if (!n) { n = reuters_current_n }
				if ((n+1) <= nb_elements)
				{
					next_n = n+1;
				}
				return next_n;
			}
			
			var nextN = function()
			{
				reuters_current_n = getNextN();
			}
			
			for (i=1; i<=nb_elements; i++)
			{
				obj.append('<div class="reuters-content" id="reuters-content-'+i+'">'+i+'</div>');
				$('div#reuters-content-'+i).css({
					top: '50px'
				});
			}
			firstLoading();
			
		}
		
		return this.each(init);
	};
})(jQuery);
