
(function($) {

$.fn.ticker=function(delay)
{
	delay = delay || 4000;
	init_ticker = function(el)
	{
		$.ticker.clear(el);
		$(el).children(':first').show();
                el.currentitem = 0;
		start_ticker(el);
	};
	start_ticker = function(el)
	{
		el.tickfn = setInterval(function() { doTick(el) }, delay)
	};
	doTick = function(el)
	{
		el.items = $(el).children();
                // don't run if paused
		if(el.pause) return;
		// pause until animation has finished
		$.ticker.pause(el);
		// hide current item
                if(el.items.length>1){
                    $(el.items[el.currentitem]).slideUp("slow",
                            function()
                            {
                                    // move to next item and show
                                    el.currentitem = ++el.currentitem % (el.items.size());
                                    $(el.items[el.currentitem]).slideDown("slow",
                                            function()
                                            {
                                                    $.ticker.resume(el);
                                            }
                                    );
                            }
                    );
                }
                else{
                   $.ticker.resume(el);
                }
	};
	this.each(
		function()
		{
			init_ticker(this);
		}
	).hover(
		function()
		{
			// pause if hovered over
			$.ticker.pause(this);
		},
		function()
		{
			// resume when not hovered over
			$.ticker.resume(this);
		}
	);
	return this;
};


$.ticker=
{
	pause: function(el)
	{
		(el.jquery ? el[0] : el).pause = true;
	},
	resume: function(el)
	{
		(el.jquery ? el[0] : el).pause = false;
	},
	clear: function(el)
	{
		el = (el.jquery ? el[0] : el);
		clearInterval(el.tickfn);
		el.tickfn = null;
		el.items = null;
		el.currentItem = null;
	}
}

})(jQuery);
