var slideshows = new Array();

var SLIDESHOW_STATE_LOADING    = 0;
var SLIDESHOW_STATE_FADING_IN  = 1;
var SLIDESHOW_STATE_WAIT       = 2;
var SLIDESHOW_STATE_PROCESS    = 3;

var SLIDESHOW_GLOBAL_STATE_FADING_IN  = 0;
var SLIDESHOW_GLOBAL_STATE_WAITING    = 1;
var SLIDESHOW_GLOBAL_STATE_FADING_OUT = 2;

var SLIDESHOW_FADING_IN_TIME  = 25;
var SLIDESHOW_FADING_OUT_TIME = 15;
var SLIDESHOW_WAITING_TIME    = 300;
var SLIDESHOW_ANTI_BLINK_TIME = 50;

var slideshow_global_state = SLIDESHOW_GLOBAL_STATE_FADING_IN;
var slideshow_time = 0;

// Загружаем все фотки под оперой :(

function load_slideshows_on_opera()
{
	if ( get_browser_name() == "opera" )
	{
		for ( var i in slideshows )
		{
			for ( var j = 0; j < slideshows[i]["photos_states"].length; j++ ) slideshow_photo_on_load(i, j);
		}
	}
}

//////////////////////////////////////////////////////////////////////////
// Превью загружено                                                     //
//////////////////////////////////////////////////////////////////////////

function slideshow_photo_on_load( slideshow_index, photo_number )
{
	//console.log(slideshow_index + "-" + photo_number + " загрузилась");
	
	for ( var index in slideshows )
	{
		if ( index == slideshow_index )
		{
			slideshows[index]["photos_states"][photo_number] = true;
			
			//console.log(slideshow_index + "-" + photo_number + " установлено состояние");
			
			// Если это первая фотка...
			
			if ( slideshows[index]["state"] == SLIDESHOW_STATE_LOADING )
			{
				slideshows[index]["current_photo_number"] = photo_number;
				
				//console.log(slideshow_index + " загрузилась первая фотография");
				
				// Если хватит времени - появляемся
				
				if ( slideshow_global_state == SLIDESHOW_GLOBAL_STATE_FADING_IN || (slideshows[index]["state"] == SLIDESHOW_GLOBAL_STATE_WAITING && SLIDESHOW_WAITING_TIME - slideshow_time >= SLIDESHOW_FADING_IN_TIME + SLIDESHOW_ANTI_BLINK_TIME) )
				{
					slideshows[index]["state"] = SLIDESHOW_STATE_FADING_IN;
					
					//console.log(slideshow_index + " времени хватает, включаем режим появления");
					
					document.getElementById("slideshow_" + slideshow_index + "_loading").style.display = "none";
				}
				
				// Ждем появления по общему циклу
				
				else
				{
					slideshows[index]["state"] = SLIDESHOW_STATE_WAIT;
					//console.log(slideshow_index + " времени не хватает, переходим в ожидание");
				}
			}
			
			break;
		}
	}
}

//////////////////////////////////////////////////////////////////////////
// Отработка слайдшоу                                                   //
//////////////////////////////////////////////////////////////////////////

function process_slideshows()
{
	// Появление фоток по своему собственному циклу
	
	for ( var index in slideshows )
	{
		if ( slideshows[index]["state"] == SLIDESHOW_STATE_FADING_IN )
		{
			slideshows[index]["fade_in_time"]++;
						
			var photo = document.getElementById("slideshow_" + index + "_photo_" + slideshows[index]["current_photo_number"]);
			var photo_opacity = slideshows[index]["fade_in_time"] / SLIDESHOW_FADING_IN_TIME;
			
			photo.style.opacity = photo_opacity;
			photo.style.filter = "alpha(opacity=" + Math.round(100 * photo_opacity) + ")";
			photo.style.display = "block";				
			
			if ( slideshows[index]["fade_in_time"] == SLIDESHOW_FADING_IN_TIME ) slideshows[index]["state"] = SLIDESHOW_STATE_PROCESS;
		}
	}
	
	// Появление по общему циклу
	
	if ( slideshow_global_state == SLIDESHOW_GLOBAL_STATE_FADING_IN )
	{
		slideshow_time++;
		
		for ( var index in slideshows )
		{
			if ( slideshows[index]["state"] == SLIDESHOW_STATE_WAIT )
			{
				slideshows[index]["state"] = SLIDESHOW_STATE_PROCESS;
				slideshows[index]["is_swapping"] = true;
				document.getElementById("slideshow_" + index + "_loading").style.display = "none";
				
				//console.log(index + " выходим из ожидания в общий цикл (" + slideshows[index]["current_photo_number"] + ")");
			}
			
			if ( slideshows[index]["state"] != SLIDESHOW_STATE_PROCESS ) continue;
			if ( !slideshows[index]["is_swapping"] ) continue;
			
			var photo = document.getElementById("slideshow_" + index + "_photo_" + slideshows[index]["current_photo_number"]);
			var photo_opacity = slideshow_time / SLIDESHOW_FADING_IN_TIME;
			
			photo.style.opacity = photo_opacity;
			photo.style.filter = "alpha(opacity=" + Math.round(100 * photo_opacity) + ")";
			photo.style.display = "block";		
		}
		
		if ( slideshow_time == SLIDESHOW_FADING_IN_TIME )
		{
			slideshow_time = 0;
			slideshow_global_state = SLIDESHOW_GLOBAL_STATE_WAITING;
		}
		
		return;
	}
	
	// Ожидание по общему циклу
	
	if ( slideshow_global_state == SLIDESHOW_GLOBAL_STATE_WAITING )
	{
		slideshow_time++;
		
		if ( slideshow_time == SLIDESHOW_WAITING_TIME )
		{
			slideshow_time = 0;
			slideshow_global_state = SLIDESHOW_GLOBAL_STATE_FADING_OUT;
			
			// Проверяем кто может исчезать, а кто нет
			
			for ( var index in slideshows )
			{
				if ( slideshows[index]["state"] != SLIDESHOW_STATE_PROCESS ) continue;
			
				var new_photo_number = -1;
				
				for ( var i = slideshows[index]["current_photo_number"] + 1; i < slideshows[index]["photos_states"].length; i++ )
				{
					if ( slideshows[index]["photos_states"][i] )
					{
						new_photo_number = i;
						break;
					}
				}
				
				if ( new_photo_number == -1 )
				{
					for ( var i = 0; i < slideshows[index]["photos_states"].length; i++ )
					{
						if ( slideshows[index]["photos_states"][i] )
						{
							new_photo_number = i;
							break;
						}					
					}
				}
				
				if ( new_photo_number != -1 )
				{
					slideshows[index]["new_photo_number"] = new_photo_number;
					slideshows[index]["is_swapping"] = true;
				}
				
				else
				{
					slideshows[index]["is_swapping"] = false;
				}	
			}
		}
		
		return;
	}
	
	// Исчезание по общему циклу
	
	if ( slideshow_global_state == SLIDESHOW_GLOBAL_STATE_FADING_OUT )
	{
		slideshow_time++;
	
		for ( var index in slideshows )
		{
			if ( slideshows[index]["state"] != SLIDESHOW_STATE_PROCESS ) continue;
			if ( !slideshows[index]["is_swapping"] ) continue;
			
			var photo = document.getElementById("slideshow_" + index + "_photo_" + slideshows[index]["current_photo_number"]);
			var photo_opacity = 1.0 - slideshow_time / SLIDESHOW_FADING_OUT_TIME;
			
			photo.style.opacity = photo_opacity;
			photo.style.filter = "alpha(opacity=" + Math.round(100 * photo_opacity) + ")";
			photo.style.visibility = "visible";					
		}
	
		if ( slideshow_time == SLIDESHOW_FADING_OUT_TIME )
		{
			slideshow_time = 0;
			slideshow_global_state = SLIDESHOW_GLOBAL_STATE_FADING_IN;
			
			for ( var index in slideshows )
			{
				if ( slideshows[index]["state"] != SLIDESHOW_STATE_PROCESS ) continue;
				if ( !slideshows[index]["is_swapping"] ) continue;
				
				var photo = document.getElementById("slideshow_" + index + "_photo_" + slideshows[index]["current_photo_number"]);
				photo.style.display = "none";				
				
				slideshows[index]["current_photo_number"] = slideshows[index]["new_photo_number"];
			}
		}
		
		return;
	}
}