$(function()
{
	var switchTime = 5000; // Time between announcements auto-rotation
	var switchAnimationTime = 500; // Time for announcement transition animation
	var switchSuspendTime = 30000; // Time to suspend auto-rotation after manual selection of announcement
	var pickerAnimationTime = 400; // Time for announcement picker show/hide animation
	var pickerDelayFadeoutTime = 100; // Delay announcement hide time

	var container = $('#announcement');
	var picker = $('#announcement_picker');
	var announcements = $('div', container);
	var l = announcements.length;
	if ( l < 2 )
		return;
	
	var state = 0; // 0 - invisible, 1 - fading in, 2 - visible, 3 - fading out
	var fadeouttimeout = null;
	function MouseOver()
	{
		if ( fadeouttimeout )
		{
			window.clearTimeout(fadeouttimeout);
			fadeouttimeout = null;
		}
		if ( state == 0 || state == 3 )
		{
			state = 1;
			picker.stop(true).fadeTo(pickerAnimationTime, 1, function() { state = 2; });
		}
	}
	function MouseOut()
	{
		if ( fadeouttimeout || state == 0 || state == 3)
			return;
		fadeouttimeout = window.setTimeout(function()
		{
			state = 3;
			picker.stop(true).fadeTo(pickerAnimationTime, 0, function() { state = 0; });
		}, pickerDelayFadeoutTime);
	}
	
	container.mouseover(MouseOver);
	container.mouseout(MouseOut);
	picker.mouseover(MouseOver);
	picker.mouseout(MouseOut);
	
	
	var current = 0;
	function SwitchToNext()
	{
		var next = current+1;
		if ( next >= l )
			next = 0;
		$(announcements[current].id.replace('announcement', '#picker')).removeClass('active');
		$(announcements[current]).fadeTo(switchAnimationTime, 0, function() { $(this).css('display','none'); });
		$(announcements[next]).fadeTo(switchAnimationTime, 1);
		current = next;
		$(announcements[current].id.replace('announcement', '#picker')).addClass('active');
	}
	var switcherinterval = window.setInterval(SwitchToNext, switchTime);
	var switchsuspendtimeout = null;

	$('span', picker).click(function(e)
	{
		var targetID = e.target.id.replace('picker', 'announcement');
		
		if ( announcements[current].id == targetID )
			return;
		if ( switchsuspendtimeout )
		{
			window.clearTimeout(switchsuspendtimeout);
			switchsuspendtimeout = null;
		}
		if ( switcherinterval )
		{
			window.clearInterval(switcherinterval);
			switcherinterval = null;
		}
		$(announcements[current]).stop(true).fadeTo(0, 0, function() { $(this).css('display','none'); });
		$(announcements[current].id.replace('announcement', '#picker')).removeClass('active');
		var i;
		for ( i = 0; i < l; i++ )
			if ( announcements[i].id == targetID )
			{
				current = i;
				break;
			}
		$(announcements[current]).stop(true).fadeTo(0, 1);
		$(announcements[current].id.replace('announcement', '#picker')).addClass('active');
		
		switchsuspendtimeout = window.setTimeout(function()
		{
			switcherinterval = window.setInterval(SwitchToNext, switchTime);
		}, switchSuspendTime);
	});
});

