(function($) { 
	 
	$.fn.news_ticker = function(params) { 
 
		params = $.extend({articleWidth: 400,
			duration: 300,
			nextButton: null,
			prevButton: null,
			pauseButton: null,
			paused: true,
			pauseStyle: null,
			pageDisplay: null,
			easing: null,
			timeout: null},
		params); 

		this.each(function() { 
			
			var $t = $(this);
			var numArticles = 0;
			var currentArticle = 0;
			var inTransition = false;
			var interval;

			$t.find(".item").each(function(index) {
				numArticles++;
			});

			$t.bind('play', function(event) {
				intervalTrigger();
			});
			
			$t.bind('reset', function(event) {
				currentArticle = 0;
				$t.find("#items").css({"left":0});
			});
			
			$t.bind('stop', function(event) {
				clearInterval(interval);
			});

			function gotoArticle(articleNumber) {
				
				if((articleNumber>-1) && (articleNumber<=(numArticles-1))) {
					
					if(!inTransition) {
						
						inTransition = true;
						
						if(params.easing) {
							
							$t.find("#items").animate({
							left: -(articleNumber*params.articleWidth)
							}, params.duration, params.easing, function() {
								currentArticle = articleNumber;
								if(params.pageDisplay) {
									$t.find(params.pageDisplay).html("Article "+(currentArticle+1)+" / "+numArticles);
								}
								inTransition = false;
							});

						} else {
							
							$t.find("#items").animate({
							left: -(articleNumber*params.articleWidth)
							}, params.duration, function() {
								currentArticle = articleNumber;
								if(params.pageDisplay) {
									$t.find(params.pageDisplay).html("Article "+(currentArticle+1)+" / "+numArticles);
								}
								inTransition = false;
							});

						}

					}
					
					return true;
				
				} else {
					
					return false;
				
				}

			}

			function nextArticle() {
				if((currentArticle + 1) >= numArticles) {
					$t.find("#items").fadeOut((params.duration/2), function() {
						$(this).css({"left":0});
						$(this).fadeIn((params.duration/2));
						currentArticle = 0;
						$t.find(params.pageDisplay).html("Article 1 / "+numArticles);
					});
				} else {
					gotoArticle(currentArticle + 1);
				}
			}

			function prevArticle() {
				if((currentArticle - 1) < 0) {
					$t.find("#items").fadeOut((params.duration/2), function() {
						$(this).css({"left":-((numArticles-1)*params.articleWidth)});
						$(this).fadeIn((params.duration/2));
						currentArticle = numArticles-1;
						$t.find(params.pageDisplay).html("Article "+numArticles+" / "+numArticles);
					});
				} else {
					gotoArticle(currentArticle - 1);
				}
			}

			if(params.pauseButton) {
				$t.find(params.pauseButton).bind("click", function (e) {
					if(params.paused) { 
						params.paused = false;
						intervalTrigger();
						if(params.pauseStyle) {
							$t.find(params.pauseButton).removeClass(params.pauseStyle);
						}
					} else { 
						params.paused = true; 
						clearInterval(interval)
						if(params.pauseStyle) {
							$t.find(params.pauseButton).addClass(params.pauseStyle);
						}
					} 
					return false;
				});
			}

			if(params.nextButton) {
				$t.find(params.nextButton).bind("click", function (e) {
					clearInterval(interval);
					nextArticle();
					intervalTrigger();
					return false;
				});
			}

			if(params.prevButton) {
				$t.find(params.prevButton).bind("click", function (e) {
					clearInterval(interval);
					prevArticle();
					intervalTrigger();
					return false;
				});
			}

			if(params.pageDisplay) {
				$t.find(params.pageDisplay).html("Article "+(currentArticle+1)+" / "+numArticles);
			}

			if(params.timeout) {
				intervalTrigger();
			}

			function intervalTrigger() { 
				interval = setInterval( function() { 
					nextArticle();
				}, params.timeout ); 
			}; 

		});

		return this; 
	
	}; 
	 
})(jQuery); 
