// JavaScript Document
var lis; // ARRAY DI OGGETTI LI 
var delay = 0; // RITARDO INIZIALE
var sleep = 4; // ATTESA FRA IL FADEIN ED IL FADEOUT
var start_frame = 0; // FRAME INIZIALE (INDICE DI lis) SU INDICE 0
var end_frame = 0; // FRAME FINALE (INDICE DI lis) SU INDICE 0 
var duration = 4;  // DURATA DEL FADEIN / FADEOUT
var fps = 100; // FPS MAX 100
var left_slide_show = 0; // LEFT DIV slide-show
var top_slide_show = 0; // TOP DIV slide-show

function init_slideshow() {
	if (!$('slide-images'))
		return;
	var frame0;
	var y_offset = 0;
	lis = $('slide-images').getElementsByTagName('li');

	Position.absolutize($('foto'));
	Position.absolutize($('slide-show'));
	var p = Position.realOffset($('slide-show'));
	left_slide_show = p[0];
	top_slide_show = p[1];

	if (lis.length > 0) {
		for(var i = 0; i < lis.length; i++) {			
			Element.extend(lis[i]).setStyle({ position: 'absolute', left: left_slide_show, top: top_slide_show });	
		}
		end_frame = lis.length -1;
		start_slideshow();
	}
}


function start_slideshow() {
	setTimeout(animation(start_frame), delay*1000);
}


/*
	Animazione
	gestisce l'intera animazione, la temporizzazione e il ciclo fra gli oggetti
*/

function animation(frame) {
	return (
		function() {			
			setTimeout(fadeIn(lis[frame]), 0);
			setTimeout(fadeOut(lis[frame]), duration*1000 + sleep*1000);
			frame = (++frame % (end_frame + 1)); // indice di array circolare 
			setTimeout(animation(frame), duration*1000 + sleep*1000);
		}
	);
}


/*
	Effetto di fadein applicato a frame
	obj: HTMLObject
*/
function fadeIn(obj) {
	return (
		function() {
			var x_offset = (Element.extend(obj.parentNode).getWidth() - obj.getWidth()) / 2;
			new Effect.Parallel(
				[					
					new Effect.Move(obj.id, { y: 0, x: x_offset, sync: true }),
					new Effect.Appear(obj.id, { from: 0.0, to: 1.0, sync: true })
				],
				{ 
					duration: duration, fps: fps, 
					transition: Effect.Transitions.linear,
					beforeStart: onBeforeStartFadeIn
				}
			);
		}
	);
}

function onBeforeStartFadeIn(obj) {
	// obj[0] in quanto l'oggetto obj è un'array di effetti .. vedi Effect.Parallel
	Element.extend(obj.effects[0].element).setStyle({ left: left_slide_show, top: top_slide_show });
}


/*
	Effetto di fadein applicato a frame
	obj: HTMLObject
*/
function fadeOut(obj) {
	return (
		function() {
			var x_offset = (Element.extend(obj.parentNode).getWidth() - obj.getWidth()) / 2;
			new Effect.Parallel(
				[
					new Effect.Move(obj.id, { y: 0, x: x_offset, sync: true }),
					new Effect.Fade(obj.id, { sync: true })
				],
				{ 
					duration: duration, fps: fps, 
					transition: Effect.Transitions.linear,
					afterFinish: onAfterFinishFadeOut
				}
			);
		}
	);
}

function onAfterFinishFadeOut(obj) {
	// obj[0] in quanto l'oggetto obj è un'array di effetti .. vedi Effect.Parallel
	Element.extend(obj.effects[0].element).setStyle({ left: left_slide_show, top: top_slide_show });
}
