﻿(function($) {
	var name = 'newsTicker'; function runTicker(settings) {
		tickerData = $(settings.newsList).data('newsTicker'); if (tickerData.currentItem > tickerData.newsItemCounter) { tickerData.currentItem = 0; }
		else if (tickerData.currentItem < 0) { tickerData.currentItem = tickerData.newsItemCounter; }
		if (tickerData.currentPosition == 0) {
			if (tickerData.newsLinks[tickerData.currentItem].length > 0) { $(tickerData.newsList).empty().append('<li><a href="' + tickerData.newsLinks[tickerData.currentItem] + '"></a></li>'); }
			else { $(tickerData.newsList).empty().append('<li></li>'); } 
		}
		if (tickerData.animating) {
			if (tickerData.currentPosition % 2 == 0) { var placeHolder = tickerData.placeHolder1; }
			else { var placeHolder = tickerData.placeHolder2; }
			if (tickerData.currentPosition < tickerData.newsItems[tickerData.currentItem].length) {
				var tickerText = tickerData.newsItems[tickerData.currentItem].substring(0, tickerData.currentPosition); if (tickerData.newsLinks[tickerData.currentItem].length > 0) { $(tickerData.newsList + ' li a').text(tickerText + placeHolder); }
				else { $(tickerData.newsList + ' li').text(tickerText + placeHolder); }
				tickerData.currentPosition++; setTimeout(function() { runTicker(settings); settings = null; }, tickerData.tickerRate);
			}
			else {
				if (tickerData.newsLinks[tickerData.currentItem].length > 0) { $(tickerData.newsList + ' li a').text(tickerData.newsItems[tickerData.currentItem]); }
				else { $(tickerData.newsList + ' li').text(tickerData.newsItems[tickerData.currentItem]); }
				setTimeout(function() { if (tickerData.animating) { tickerData.currentPosition = 0; tickerData.currentItem++; runTicker(settings); settings = null; } }, tickerData.loopDelay);
			} 
		}
		else {
			var tickerText = tickerData.newsItems[tickerData.currentItem]; if (tickerData.newsLinks[tickerData.currentItem].length > 0) { $(tickerData.newsList + ' li a').text(tickerText); }
			else { $(tickerData.newsList + ' li').text(tickerText); } 
		} 
	}
	jQuery.fn[name] = function(options) {
		var settings = jQuery.extend({}, jQuery.fn.newsTicker.defaults, options); var newsItems = new Array(); var newsLinks = new Array(); var newsItemCounter = 0; $(settings.newsList + ' li').hide(); $(settings.newsList + ' li').each(function() {
			if ($(this).children('a').length) { newsItems[newsItemCounter] = $(this).children('a').text(); newsLinks[newsItemCounter] = $(this).children('a').attr('href'); }
			else { newsItems[newsItemCounter] = $(this).text(); newsLinks[newsItemCounter] = ''; }
			newsItemCounter++;
		}); var tickerElement = $(settings.newsList); tickerElement.data(name, { newsList: settings.newsList, tickerRate: settings.tickerRate, startDelay: settings.startDelay, loopDelay: settings.loopDelay, placeHolder1: settings.placeHolder1, placeHolder2: settings.placeHolder2, controls: settings.controls, ownControls: settings.ownControls, stopOnHover: settings.stopOnHover, newsItems: newsItems, newsLinks: newsLinks, newsItemCounter: newsItemCounter - 1, currentItem: 0, currentPosition: 0, firstRun: 1 }).bind({ stop: function(event) { tickerData = tickerElement.data(name); if (tickerData.animating) { tickerData.animating = false; } }, play: function(event) { tickerData = tickerElement.data(name); if (!tickerData.animating) { tickerData.animating = true; setTimeout(function() { runTicker(tickerData); tickerData = null; }, tickerData.startDelay); } }, resume: function(event) { tickerData = tickerElement.data(name); if (!tickerData.animating) { tickerData.animating = true; tickerData.currentPosition = 0; tickerData.currentItem++; runTicker(tickerData); } }, next: function(event) { tickerData = tickerElement.data(name); $(tickerData.newsList).trigger("stop"); tickerData.currentPosition = 0; tickerData.currentItem++; runTicker(tickerData); }, previous: function(event) { tickerData = tickerElement.data(name); $(tickerData.newsList).trigger("stop"); tickerData.currentPosition = 0; tickerData.currentItem--; runTicker(tickerData); } }); if (settings.stopOnHover) { tickerElement.bind({ mouseover: function(event) { tickerData = tickerElement.data(name); if (tickerData.animating) { $(tickerData.newsList).trigger("stop"); if (tickerData.controls) { $('.stop').hide(); $('.resume').show(); } } } }); }
		tickerData = tickerElement.data(name); if (tickerData.controls || tickerData.ownControls) {
			if (!tickerData.ownControls) { $('<ul class="ticker-controls"><li class="play"><a href="#play">Play</a></li><li class="resume"><a href="#resume">Resume</a></li><li class="stop"><a href="#stop">Stop</a></li><li class="previous"><a href="#previous">Previous</a></li><li class="next"><a href="#next">Next</a></li></ul>').insertAfter($(tickerData.newsList)); }
			$('.play').hide(); $('.resume').hide(); $('.play').click(function(event) { $(tickerData.newsList).trigger("play"); $('.play').hide(); $('.resume').hide(); $('.stop').show(); event.preventDefault(); }); $('.resume').click(function(event) { $(tickerData.newsList).trigger("resume"); $('.play').hide(); $('.resume').hide(); $('.stop').show(); event.preventDefault(); }); $('.stop').click(function(event) { $(tickerData.newsList).trigger("stop"); $('.stop').hide(); $('.resume').show(); event.preventDefault(); }); $('.previous').click(function(event) { $(tickerData.newsList).trigger("previous"); $('.stop').hide(); $('.resume').show(); event.preventDefault(); }); $('.next').click(function(event) { $(tickerData.newsList).trigger("next"); $('.stop').hide(); $('.resume').show(); event.preventDefault(); });
		}; $(tickerData.newsList).trigger("play");
	}; jQuery.fn[name].defaults = { newsList: "#news", tickerRate: 80, startDelay: 100, loopDelay: 3000, placeHolder1: " |", placeHolder2: "_", controls: true, ownControls: false, stopOnHover: true}
})(jQuery);
