/*
 *
 * Copyright (c) 2006/2007 Sam Collett (http://www.texotela.co.uk)
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * Cambiado por Roger - LekuMultimedia
 *
 * Version 2.0
 * Demo: http://www.texotela.co.uk/code/jquery/newsticker/
 *
 * $LastChangedDate: 2007-05-29 11:31:36 +0100 (Tue, 29 May 2007) $
 * $Rev: 2005 $
 *
 */
 
(function($) {
/*
 * A basic news ticker.
 *
 * @name     newsticker (or newsTicker)
 * @param    param delay      
 * @author   Sam Collett (http://www.texotela.co.uk); modified by Roger (roger@leku.es)
 * @example  $("#news").newsticker(); // or $("#news").newsTicker( { delay: 5000 );
 *
 */
$.fn.newsTicker = $.fn.newsticker = function( params, effect, speed )
{
	if ( typeof params ==='object' ) {
		delay     = params.delay  || 4000;
		start     = params.start  || 0;
		effect    = params.effect || "fade";
		speed     = params.speed  || "slow";
		selector  = params.selector || "li";
		first     = params.first || 0;
	} else {		
		delay    = params || 4000;
		start    = 0;
		effect   = effect || "fade";
		speed    = speed  || 1000;
		selector = "li"
		first    = 0
	}

	if ( typeof speed == 'number' && isFinite(speed) ) {
		halfspeed = speed / 2;
	} else {
		halfspeed = "slow";
	}
	
	initTicker = function(el)
	{
		stopTicker(el);
		el.items = $( selector, el);
		
		if ( first < 0  || first=="random") {
			first = Math.floor ( Math.random()* el.items.length );
		}
		
		// hide all items (except first one)	
		if ( effect =="fade" ) {
			el.items.not(":eq("+ first +")").hide().end();			
		} else if  (effect =="horizontal" ) {
			el.desplazar = "-" +  ( parseInt( $(el.items[0]).css("width"))+ 		
								    parseInt( $(el.items[0]).css("padding-left"))+
								    parseInt( $(el.items[0]).css("padding-right"))) + "px";
			for(i=0; i <first ; i++ ){
				$(el.items[i]).css ( "margin-left" ,el.desplazar);
			}

		}
			
		el.delay  = delay;	
		el.start  = start;	
		el.effect = effect;
		el.speed  = speed;
		el.halfspeed= halfspeed;
		el.first  = first;
		// current item
		el.currentitem = first;
		if ( el.start <= 0 ){
			startTicker(el);		
		} else {
			runTicker(el);
		}
	};


	runTicker = function(el)
	{
		setTimeout(function() { startTicker(el) }, el.start)
	};

	
	startTicker = function(el)
	{
		el.tickfn = setInterval(function() { doTick(el) }, el.delay)
	};
	stopTicker = function(el)
	{
		clearInterval(el.tickfn);
	};
	pauseTicker = function(el)
	{
		el.pause = true;
	};
	resumeTicker = function(el)
	{
		el.pause = false;
	};
	doTick = function(el)
	{
		// don't run if paused
		if(el.pause) return;
		// pause until animation has finished
		el.pause = true;
		// hide current item
		if ( el.effect == "fade" ) {
			$(el.items[el.currentitem]).fadeOut( el.halfspeed)
			el.currentitem = ++el.currentitem % (el.items.size());
			$(el.items[el.currentitem]).fadeIn( el.speed,
						function()
						{
							el.pause = false;
						}
					);
		} else {
			// horizontal										
			if ( el.currentitem == (el.items.size() - 1) ){
				el.items.css("margin-left","0");
				el.currentitem= 0;
			}
			
			$(el.items[el.currentitem]).animate ( { "margin-left" : el.desplazar }, el.speed);
			el.currentitem = ++el.currentitem % (el.items.size());			
			el.pause= false;
		}

	};
	this.each(
		function()
		{
			if(this.nodeName.toLowerCase()!= "ul") return;
			initTicker(this);
		}
	)
	.addClass("newsticker")
	.hover(
		function()
		{
			// pause if hovered over
			pauseTicker(this);
		},
		function()
		{
			// resume when not hovered over
			resumeTicker(this);
		}
	);
	return this;
};

})(jQuery);

