/*
 * jquery.marquee 0.1
 * GPL v3+
 * (c) 2011 F. Hoech
 * http://hoech.net
 */

jQuery.fn.marquee = function(settings) {
	settings = jQuery.extend({
		speed: 4
	}, settings);
	return this.each(function () {
		var marquee = jQuery(this);
		if (!marquee.is(':visible')) return;
		var items = marquee.find('li');
		marquee.css({
			'height': items.height() + 'px',
			'list-style': 'none',
			'overflow': 'hidden',
			'white-space': 'nowrap'
		});
		items.css({
			//'background': 'silver',
			'display': 'block',
			'float': 'left',
			'margin-left': 0,
			'visibility': 'visible',
			'white-space': 'nowrap'
		});
		items.css({
			'margin-left': marquee.width() + 'px'
		});
		//var offset_left = marquee.width(),
			//offset_top = items.height();
		//items.not(':first').each(function () {
			//var item = jQuery(this);
			//item.css({
				//'margin-left': offset_left + 'px',
				//'margin-top': -offset_top + 'px'
			//});
			//offset_left += item.outerWidth();
			//offset_top += item.height();
		//});
		function animate(i, element) {
			var item = jQuery(element),
				margin_left = parseFloat(item.css('margin-left')),
				item_width = item.outerWidth(),
				total_travel_distance = (/*i == 0 ?*/ marquee.width() /*: 0*/) + item_width,
				remaining_travel_distance = (total_travel_distance - (total_travel_distance - (margin_left > 0 ? margin_left + item_width : item_width - Math.abs(margin_left))));
			var marquee_status = 'Marquee width: ' + marquee.width() + ', item width: ' + item_width + ',total travel distance: ' + total_travel_distance + ', remaining: ' + remaining_travel_distance;
			//window.status = marquee_status;
			//jQuery('#marquee_status').html(marquee_status);
			item.animate({
				'margin-left': '-=' + remaining_travel_distance
			},
			(remaining_travel_distance / (settings.speed * 10)) * 1000,  /* n pixels per milliseconds */
			'linear',
			function () {
				if (i == items.length - 1) {
					items.css('margin-left', 0);
					items.first().css('margin-left', marquee.width() + 'px');
					i = -1;
				}
				//else if (i == 0) {
					//items.first().css('margin-left', marquee.width() + 'px');
					//if (parseFloat(items.last().css('margin-left')) + items.last().outerWidth() < marquee.width()) animate(0, items[0]);
				//}
				animate(i + 1, items[i + 1]);
			});
		};
		items.hover(function () {
			items.first().stop();
			jQuery(this).stop();
		},
		function () {
			animate(0, items[0]);
		});
		animate(0, items[0]);
	});
};


