(function($) {
	
	function runTicker(settings) {		
	    if(settings.newsItems.length == 0) {
	        setTimeout(function(){runTicker(settings); settings = null;},settings.tickerRate)
	    } else {
	        if(settings.firstRun == 1){
		        currentLength = settings.currentLength;
		        currentMoreDotLength = settings.currentMoreDotLength;			    
		        currentMoreTextLength = settings.currentMoreTextLength;			    			    
		        currentItem = settings.currentItem;
		        settings.firstRun = 0;
	        }
	        if(currentItem == settings.newsItemCounter + 1){
		        currentItem = 0;
	        }
    		
	        if(currentLength == 0) {
		        $(settings.newsList).empty().append('<li style="display:list-item;"><a href="'+ settings.newsLinks[currentItem] +'"></a></li>');
	        }
    		
	        if( currentLength % 2 == 0) {
			        placeHolder = settings.placeHolder1;
	        }
	        else {
		        placeHolder = settings.placeHolder2;
	        }
    	    
	        var currentWidth = $(settings.newsList + ' li a').width();	
	        var moreText = new Array();
	        moreText[0] = "... ";
	        moreText[1] = "more";		    	    

	        if(currentLength <= (settings.newsItems[currentItem].length + 1) && currentWidth < 850) {
                var tickerText = settings.newsItems[currentItem].substring(0,currentLength);
                
		        $(settings.newsList + ' li a').html(tickerText + placeHolder);
                currentLength ++;
		        setTimeout(function(){runTicker(settings); settings = null;},settings.tickerRate);
	        } 
	        else if(currentMoreDotLength < moreText[0].length || currentMoreTextLength < moreText[1].length) {
		        if(currentMoreDotLength <= 3) {
		            $(settings.newsList + ' li a').html(settings.newsItems[currentItem].substring(0,currentLength) + moreText[0].substring(0,currentMoreDotLength) + placeHolder);			    			    
		            currentMoreDotLength++;
		        } else if(currentMoreTextLength <= 3) {
		            $(settings.newsList + ' li a').html(settings.newsItems[currentItem].substring(0,currentLength) + moreText[0].substring(0,currentMoreDotLength) + "<span style='color:#ffffff;font-weight:bold;'>" + moreText[1].substring(0,currentMoreTextLength) + placeHolder + "</span>");
                    currentMoreTextLength ++;
                }		 
		        setTimeout(function(){runTicker(settings); settings = null;},settings.tickerRate);                      
	        }
	        else {
		        $(settings.newsList + ' li a').html(settings.newsItems[currentItem].substring(0,currentLength) + moreText[0].substring(0,currentMoreDotLength) + "<span style='color:#ffffff;font-weight:bold;'>" + moreText[1].substring(0,currentMoreTextLength) + "<span style='position:relative;top:-1px;left:1px;font-weight:bold;'>&#155;</span></span>");			    
		        currentMoreDotLength = 0;                
		        currentMoreTextLength = 0;  			    
		        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,
		    	placeHolder1: " |",
		    	placeHolder2: "_"
			}, settings);
			var newsItems = new Array();
			var newsLinks = new Array();
			var newsItemCounter = 0;
			
			$(settings.newsList + ' li a').each(function(){
				newsItems[newsItemCounter] = $(this).text();
				newsLinks[newsItemCounter] = $(this).attr('href');
				newsItemCounter ++;
			});
				
			settings = jQuery.extend(settings,{
				newsItems: newsItems,
				newsLinks: newsLinks,
				newsItemCounter: newsItemCounter - 1,
				currentItem: 0,
				currentLength: 0,
				firstRun:1,
				currentMoreDotLength: 0,
				currentMoreTextLength: 0				
			});
			
			setTimeout(function(){runTicker(settings); settings = null;},settings.startDelay);
		}		
	
	});
	

})(jQuery);
