
(function($) {
	
	$.fn.zIndex = function(index)
	{
		return this.queue(function() {
			$(this).css('z-index', index);
			$(this).dequeue();
		});
	};
	
})(jQuery);


//-------------------------------------------------------------------------------------

(function($) {
	
	$.fn.crossFade = function(options)
	{
		var opts = $.extend({}, $.fn.crossFade.defaults, options);
		return this.each(function()
		{
			var $children = $(this).children();
			if ($children.length)
			{
				$.fn.crossFade.Prepare($children.first());
				$.fn.crossFade.Wait($children.first(), opts);
			}
		});
	};
	
	
	$.fn.crossFade.GetNext = function($this)
	{
		return $next = ($this.next().length > 0) 
			? $this.next() 
			: $this.parent().children().first();
	};
	
	
	$.fn.crossFade.Wait = function($this, opts)
	{
		window.setTimeout(function() {
			$.fn.crossFade.Cycle($this, opts)
		}, opts.pauseDuration);
		
		$this.zIndex(20);
		$.fn.crossFade.GetNext($this).zIndex(10).show();
	};
	
	
	$.fn.crossFade.Cycle = function($this, opts)
	{
		var $next = $.fn.crossFade.GetNext($this);
		$.fn.crossFade.Prepare($next);
		
		// Current slide caption
		$this.children('.caption')
			.fadeOut(opts.captionDuration);
		
		// Current slide container
		$this
			.zIndex(20);
		
		// Next slide container
		$next
			.hide()
			.delay(opts.captionDuration)
			.zIndex(30)
			.fadeIn(opts.fadeDuration, function() {
				$this.hide();
				window.setTimeout(function() {
					$.fn.crossFade.Wait($next, opts);
				}, opts.captionDuration);
			});
		
		// Next slide caption
		$next.children('.caption')
			.hide()
			.delay(opts.captionDuration + opts.fadeDuration)
			.fadeTo(opts.captionDuration, 1.0);
	};
	
	
	$.fn.crossFade.Prepare = function($this, opts)
	{
		Cufon.replace($this.find('.serif'));
	};
	
	
	$.fn.crossFade.defaults = {
		'captionDuration'	: 400, 
		'fadeDuration'		: 1000,
		'pauseDuration'		: 7000
	};
	
})(jQuery);


//-------------------------------------------------------------------------------------

$(document).ready(function() {
	
	$('ul.rollingHeader').crossFade();
	
});

