function Rotator(selector,rotateSpeed)
{
	var $items = $(selector), $container = $items.parent(), item_count = $items.length;
	var curr = 0, old = 0;
	var hidePos = $container.height() + 10;
	var pause, inProgress = false, scrollSpeed = 5000;

	//hide all but first item
	$items.css('top',hidePos);
	$items.eq(curr).css('top',0);
	
	//create fadeSlices
	var fadeHeight = $container.height() / 4;
	for (var yPos = 0; yPos < fadeHeight; yPos += 2)
	{ $('<div></div>').css({
			opacity: yPos / fadeHeight,
			top: $container.height() - fadeHeight + yPos
		}).addClass('fadeSlice').appendTo($container);
	}
	
	$container.hover(
		function() { clearTimeout(pause); pause = false; },
		function() { set_timeout(250); }
	);
	
	rotate = function() {
		if (!inProgress)
		{
			inProgress = true; pause = false;
			curr = (old + 1) % item_count;
			
			$items.eq(old).animate({top:-hidePos}, scrollSpeed, function() { $(this).css('top', hidePos); });
			$items.eq(curr).animate({top:0},scrollSpeed, function() { inProgress = false; if (!pause) { set_timeout(rotateSpeed); } });
			
			old = curr;
		}
	}
	
	set_timeout = function(spd) { if (!pause) { pause = setTimeout(rotate,spd); } }
	
	set_timeout(rotateSpeed);
	return;
}



function Accordion(selector)
{
	var $headers = $(selector + ' dt a');
	var $items = $(selector + ' dd');

	$items.hide();

	$headers.toggle(
		function () {$(this).addClass('open').parent().next('dd').slideDown(600);},
		function () {$(this).removeClass('open').parent().next('dd').slideUp(600);}
	);
	
	return;
}



function imageFader(selector, changeSpeed)
{
	var $imgs = $(selector).children('img'), curr = 0, old = 0, fadeSpeed = 2000;
	var numImages = $imgs.length;
	var pause;
	
	$imgs.hide();
	$imgs.eq(curr).show();
	
	var change = function() {
		curr = (old + 1) % numImages;
		$imgs.eq(old).fadeOut(fadeSpeed);
		$imgs.eq(curr).fadeIn(fadeSpeed, function(){pause = setTimeout(change,changeSpeed)});
		old = curr;
	}
	
	pause = setTimeout(change,changeSpeed);
	return;
}
