(function($) { $.fn.newsScroller = function(options) {
		return this.each(function() {
			var opts 			= $.extend(true, {}, $.fn.newsScroller.defaults, options),			
				$ul 			= $(this),							
				autoInterval	= null,
				totalHeight=0,						
				direction		=  opts.direction=='up'?'next':"prev"; 
			var count=0;
			$("li", $ul).each(function(){totalHeight+=$(this).outerHeight();++count;});			
			opts.scrollCount=opts.scrollCount%count;
			if(opts.width==0)opts.width=$ul.outerWidth();
			if(opts.height==0)opts.height=$ul.parent().innerHeight();			
			$ul.css({	position	: "absolute"});
			$ul.wrap('<div class="newsScroller_wrapper" />');
			var tm={ 
				position	: "relative",
				overflow	: "hidden",
				width : opts.width+"px",
				height: opts.height+"px"
			};
			$ul.parent().css(tm);
			if(totalHeight<=opts.height)return;					
			$ul.bind("pause", function() {					
					if (autoInterval != null) {					
						clearTimeout(autoInterval);
						autoInterval=null;
					}
				}).bind("play", function(e, d) {
					if (opts.autoPlay) {
						if (d == null	||
							d == '' 	||
							typeof(d)	|| 'undefined'
						) {
							d = direction;
						}

						autoInterval = setTimeout(function() {
							$ul.trigger(d);
						}, opts.pauseDuration);
					}
				}).bind("next", function(e) {
					if ($ul.is(":animated")) return;
					var oldItems = $("li", $ul);
					var top=0;
					for (var a = 0; a < opts.scrollCount; a++) {
						top+=$(oldItems[a]).outerHeight();						
						$ul.append($(oldItems[a]).clone(true));						
					}				
					var pos='top';							
					var ani = {},
						cal = {};

					ani[pos] = $ul.offset()[pos]-oldItems.offset()[pos] || -top;
					cal[pos] = 0;

					$ul											
						.animate(ani, { 
							duration: opts.scrollSpeed,
							easing	: null,
							complete: function() {								
								$ul.css(cal).find("li:lt("+opts.scrollCount+")").remove();
							}
						});

					//	auto-play
					$ul.trigger("pause").trigger("play", "next");
				}).bind("prev", function(e) {
					if ($ul.is(":animated")) return;

					var oldItems = $("li", $ul);
					var len=oldItems.length;
					var top=0;
					for (var a = 0; a < opts.scrollCount; a++) {	
						$ul.prepend($(oldItems[len-1-a]).clone(true));
						top+=$(oldItems[len-1-a]).outerHeight();						
					}
					
					var pos = 'top';					
					var css = {},ani = {};

					css[pos] = $ul.offset()[pos]-oldItems.offset()[pos] || -top;
					ani[pos] = 0;
					
					$ul											
						.css(css)
						.animate(ani, { 
							duration: opts.scrollSpeed,							
							complete: function() {
								$ul.find("li:gt("+(len-1)+")").remove();
							}
						});

					//	auto-play
					$ul.trigger("pause").trigger("play", "prev");					
				});

			if (opts.pauseOnHover && opts.autoPlay) {
				$ul.hover(
					function() { $ul.trigger("pause"); },
					function() { $ul.trigger("play", direction); }
				);
			}

			//	via prev- en/of next-buttons
			
			if (opts.button.next != null) {
				opts.button.next.click(function() {					
					$ul.trigger("next");
					if(opts.autoPlay && opts.button.stop!=null)
					{
						opts.button.stop.click();
					}					
					return false;
				});				
			}
			if (opts.button.prev != null) {
				opts.button.prev.click(function() {
					$ul.trigger("prev");					
					if(opts.autoPlay && opts.button.stop!=null)
					{
						opts.button.stop.click();
					}					
					return false;
				});
			}

			if (opts.button.stop != null) {
				opts.button.stop.toggle(function() {
					opts.autoPlay=false;
					opts.button.stop.addClass('paused');
					$ul.trigger("pause");
					return false;
				},function() {
					opts.autoPlay=true;
					opts.button.stop.removeClass('paused');
					$ul.trigger("play", direction);
					return false;
				});
				if(!opts.autoPlay)opts.button.stop.addClass('paused');
			}
			//	via auto-play
			$ul.trigger("play", direction);
		});
	}
	
	$.fn.newsScroller.defaults = {		
		autoPlay			: true,
		direction			: "up",
		scrollCount			:2,
		scroolSpeed			:500,
		width:0,
		height:200,
		pauseOnHover:false,
		pauseDuration: 2500,
		button:{
			prev: null,
			next: null,
			stop: null,
		}
	}	
	
})(jQuery);