/*
News ticker plugin (BBC news style)
Bryan Gullan,2007-2009
version 1.2.2
updated 2009-02-15
http://www.makemineatriple.com/jquery
Use and distrubute freely with this header

Options (defaults shown):
newsList: "#news" 	// assumes unordered list; specify the ul holding the news items
tickerRate: 80 		// time gap between display of each letter (ms)
startDelay: 100 	// delay before first run of the ticker (ms)
loopDelay: 3000 	// time for which full text of each item is shown at end of print-out (ms)
placeHolder1: " |"	// character placeholder shown on even loops
placeHolder2: "_"	// character placeholder shown on odd loops

Sample usage:
$(document).ready(function() {
	var options = {
  		newsList: "#news",
 		startDelay: 10,
 		placeHolder1: " []"
	}
	$().newsTicker(options);
});

for markup as follows:

<ul id="news">
<li><a href="http://www.makemineatriple.com">MakeMineATriple.com</a></li>
<li><a href="http://www.jquery.com">jQuery</a></li>
</ul>

Underline text decoration on the link is not recommended! :-)

*/

(function($) {
	
	function getHTMLTAGclose(htmltag){
	
		lowerhtmltag = htmltag.toLowerCase();

			if(lowerhtmltag.indexOf("span") != -1){
				return "</span>";
			}else if(lowerhtmltag.indexOf("a") != -1){
				return "</a>";
			}else if(lowerhtmltag.indexOf("div") != -1){
				return "</div>";
			}else if(lowerhtmltag.indexOf("font") != -1){
				return "</font>";
			}else if(lowerhtmltag.indexOf("img") != -1){
				return "";
			}else if(lowerhtmltag.indexOf("br") != -1){
				return "";
			}else if(lowerhtmltag.indexOf("strong") != -1){
				return "</strong>";
			}		
		
			//alert(htmltag+" - TAG Not Allowed");
			return "";
		}
	
	function runTicker(settings) {
		if(settings.firstRun == 1){
			currentLength = settings.currentLength;
			currentItem = settings.currentItem;
			settings.firstRun = 0;
		}
		
		if(currentItem == settings.newsItemCounter + 1){
			currentItem = 0;
		}
		
		
		if(currentLength == 0) {
				$(settings.newsList).empty().append('<li></li>');
		}
		
		if( currentLength % 2 == 0) {
				placeHolder = settings.placeHolder1;
		}
		else {
				placeHolder = settings.placeHolder2;
		}

		if(currentLength <= settings.newsItems[currentItem].length + 1) {
			
			if(settings.newsItems[currentItem].substring(currentLength-1,currentLength) == "&"){
			
				var temp_substring = settings.newsItems[currentItem].substring(currentLength-1,settings.newsItems[currentItem].length);	
				var htmp_sc_end = temp_substring.indexOf(";");
				var html_specialchar = temp_substring.substring(0,htmp_sc_end+1);
				var tickerText = settings.newsItems[currentItem].substring(0,currentLength-1)+html_specialchar;
				$(settings.newsList + ' li').html(tickerText + settings.html_end + placeHolder);
				currentLength = currentLength + html_specialchar.length +1;

				
			}else if(settings.newsItems[currentItem].substring(currentLength-1,currentLength) == "<"){
				
	
				var temp_substring = settings.newsItems[currentItem].substring(currentLength-1,settings.newsItems[currentItem].length);	
				var htmp_sc_end = temp_substring.indexOf(">");
				var html_specialchar = temp_substring.substring(0,htmp_sc_end+1);

				if(html_specialchar.indexOf("/") != -1){
					settings.html_end = "";	
				}else{
					settings.html_end = getHTMLTAGclose(html_specialchar);
				}

				var tickerText = settings.newsItems[currentItem].substring(0,currentLength-1)+html_specialchar;
			
				$(settings.newsList + ' li').html(tickerText + settings.html_end +  placeHolder);	
				currentLength = currentLength + html_specialchar.length;
			}
			else{
					
				var tickerText = settings.newsItems[currentItem].substring(0,currentLength);
					
				$(settings.newsList + ' li').html(tickerText  + settings.html_end + placeHolder);
				currentLength ++;
			}
			
			setTimeout(function(){runTicker(settings); settings = null;},settings.tickerRate);
			
		}
		else {
	
			$(settings.newsList + ' li').html(settings.newsItems[currentItem]);
			currentLength = 0;
			currentItem ++;
			setTimeout(function(){runTicker(settings); settings = null;},settings.loopDelay);	
		}	
	}
	
	$.fn.extend({
		newsTicker: function(settings) {
			settings = jQuery.extend({
		 	  	newsList: "#news",
		   		tickerRate: 80,
		    	startDelay: 100,
		    	loopDelay: 3000,
				html_end: "",
		    	placeHolder1: " |",
		    	placeHolder2: "_"
			}, settings);
			
			var newsItems = new Array();
			var newsLinks = new Array();
			var newsItemCounter = 0;
			
			$(settings.newsList + ' li').hide();
			
			$(settings.newsList + ' li').each(function(){

					newsItems[newsItemCounter] = $(this).html();
					newsLinks[newsItemCounter] = '';

				newsItemCounter ++;
			});
			
			settings = jQuery.extend(settings,{
				newsItems: newsItems,
				newsLinks: newsLinks,
				newsItemCounter: newsItemCounter - 1,
				currentItem: 0,
				currentLength: 0,
				firstRun:1
			});
			
			setTimeout(function(){runTicker(settings); settings = null;},settings.startDelay);
		}
	
	});
	

})(jQuery);