/* S T A R T    ========================================================================= */
var slideNumber = 4;

// Determino il browser
var navAgent = navigator.userAgent,
	navName  = navigator.appName,
	d = document,
	Firefox = navAgent.substring(navAgent.indexOf("Firefox")),
	FirefoxVersion = Firefox.split("/")[1].split(".")[0],
	Opera   = navAgent.substring(navAgent.indexOf("Version")).split("/")[1],
	lastSlideIntervall = 0,
	nowTime = 0,
	// Motore javascript che attiva le animazioni Javascript delle slide usato per IE e Firefox 
	tasksOne = [engineSlidePartTwoFirefox, engineSlidePartThreeFirefox],
	tasksTwo = [engineSlidePartTwoIE, engineSlidePartThreeIE];
	
var opacitySlide = 1;       // Serve per la dissolvenza
var IdSlide      = 1;       // Id delle slide
var endSlide     = 0;

// A seconda della posizione data a ogni posizione viene indicato il tipo di browser usato
// 0 - (CSS3 Animation/CSS3 Transitions), 1 - CSS3 Transitions, 3 - Nada
var arrayProcess = [startSafariChromeOpera10, startSafariChromeOpera10, slideFirefox, slideIE];

/* END S T A R T  B O N T O N ====================================================================== */

/* D E C O D E    B R O W S E R ==================================================================== */
// Determina il browser utilizzato e il parametro arrayProcess contiene le funzioni da avviare a 
// seconda del browser adoperato dall'utente.
function decodeBrowser (arrayProcess){
	if (navName == 'Netscape'){ // Con Netscape si intende Firefox, Safari o Chrome
		if (Firefox.split("/")[0] != "Firefox") { // Caso 1 - Safari o Chrome
			process(arrayProcess[0]);
		} else { 
			if (FirefoxVersion == "4") { // Caso 2 - Firefox 4
				process(arrayProcess[1]);
			} else { // Caso 3 - Firefox 3
				process(arrayProcess[2]);
			}
		}
	} else if (navName == 'Opera') {
		if (Opera.split(".")[1] > 49) { // Caso 4 - Opera 10.5+
			process(arrayProcess[1]);
		} else { // Siamo dentro Opera 10.1-
			process(arrayProcess[2]);
		}
	} else { // Siamo dentro IE o altra robaccia
		process(arrayProcess[3]);
	}
}
// Torna utile in diverse situazio che devo eseguire più funzioni contenute in un array di funzioni
function process (value){
	value();
}
/* END D E C O D E    B R O W S E R ================================================================ */





/* I N T R O ======================================================================================= */ 
/* Questa funzione è fantastica perchè mi permette di eseguire 1000 funzioni contemporaneamente 
 * in modalità asincrona, in modo tale che sono eseguite REALMENTE sequenzialmente, eliminando gli spazi vuoti. */
function engineTask(tasks, process) {	
	var task = tasks.concat(); // creo un clone dell'originale
	setTimeout(function() {
		process(task.shift());
		//  do {
		//	  process(task.shift());
		//  } while (task.lenght > 0 && (+new Data() - start < 50));
		if (task.length > 0) {
			setTimeout(arguments.callee, 25);
		} 
	}, 25);
}
function slideFirefox() {
	var s  = d.getElementById('slide1');
	var sp = d.getElementById('span1');
	d.getElementById('slide1').style.zIndex = '99';
	d.getElementById('slide2').style.zIndex = '10';
	d.getElementById('slide3').style.zIndex = '10';
	d.getElementById('slide4').style.zIndex = '10';
	s.style.opacity = opacitySlide;
	s.style.MozOpacity = opacitySlide;
	sp.style.opacity = opacitySlide;
	sp.style.MozOpacity = opacitySlide;
	lastSlideIntervall = new Date().getTime();
	setInterval(function() {
		nowTime = new Date().getTime();	
        if(nowTime - lastSlideIntervall > 8500) {
			lastSlideIntervall = nowTime;
			engineTask(tasksOne, process);
		}
    }, 3000);
}
// La slide successiva aumenta la propria opacity a 1 
function engineSlidePartTwoFirefox() {
	IdNextSlide = IdSlide + 1;
	IdNextSlide = IdNextSlide > slideNumber ? 1 : IdNextSlide;
	if (IdNextSlide == 1) {
		opacitySlide = 1;
		var s  = d.getElementById('slide1');
		var sp = d.getElementById('span1');
		d.getElementById('slide1').style.zIndex = '99';
		s.style.opacity = 1;
		s.style.MozOpacity = 1;
		sp.style.opacity = 1;
		sp.style.MozOpacity = 1;
		var s2  = d.getElementById('slide'+slideNumber);
		var sp2 = d.getElementById('span'+slideNumber);
		d.getElementById('slide'+slideNumber).style.zIndex = '10';
		slidePartTwoInterval = setInterval(function(){
			opacitySlide -= 0.05;
			s2.style.opacity = opacitySlide;
			s2.style.MozOpacity = opacitySlide;
			sp2.style.opacity = opacitySlide;
			sp2.style.MozOpacity = opacitySlide;
			if (opacitySlide < -0.05) { 
				endSlide = 1;
				clearInterval(slidePartTwoInterval);
			}
		}, 25);
	} else {
		opacitySlide = 0;
		var s2  = d.getElementById('slide'+IdNextSlide);
		var sp2 = d.getElementById('span'+IdNextSlide);
		d.getElementById('slide'+IdNextSlide).style.zIndex = '99';
		slidePartTwoInterval = setInterval(function(){
			opacitySlide += 0.05;
			s2.style.opacity = opacitySlide;
			s2.style.MozOpacity = opacitySlide;
			sp2.style.opacity = opacitySlide;
			sp2.style.MozOpacity = opacitySlide;
			if (opacitySlide > 1) { 
				var s  = d.getElementById('slide'+IdSlide);
				var sp = d.getElementById('span'+IdSlide);
				s.style.opacity = 0;
				s.style.MozOpacity = 0;
				sp.style.opacity = 0;
				sp.style.MozOpacity = 0;
				d.getElementById('slide'+IdSlide).style.zIndex = '10';
				endSlide = 1;
				clearInterval(slidePartTwoInterval);
			}
		}, 25);
	}

}
function engineSlidePartThreeFirefox() {
	slidePartThreeInterval = setInterval(function(){
		if (endSlide == 1) {
			endSlide = 0;
			IdSlide = IdNextSlide;
			clearInterval(slidePartThreeInterval);
		}
	}, 1000);
}


function slideIE(){
	var s  = d.getElementById('slide1');
	var sp = d.getElementById('span1');
	d.getElementById('slide1').style.zIndex = '99';
	d.getElementById('slide2').style.zIndex = '10';
	d.getElementById('slide3').style.zIndex = '10';
	d.getElementById('slide4').style.zIndex = '10';
	s.style.opacity = opacitySlide;
	s.style.filter = 'alpha(opacity= '+opacitySlide*100+')';
	sp.style.opacity = opacitySlide;
	sp.style.filter = 'alpha(opacity= '+opacitySlide*100+')';
	lastSlideIntervall = new Date().getTime();
	setInterval(function() {
		nowTime = new Date().getTime();	
        if(nowTime - lastSlideIntervall > 8500) {
			lastSlideIntervall = nowTime;
			engineTask(tasksTwo, process);
		}
    }, 3000);
}
// La slide successiva aumenta la propria opacity a 1 
function engineSlidePartTwoIE() {
	IdNextSlide = IdSlide + 1;
	IdNextSlide = IdNextSlide > slideNumber ? 1 : IdNextSlide;
	if (IdNextSlide == 1) {
		opacitySlide = 1;
		var s  = d.getElementById('slide1');
		var sp = d.getElementById('span1');
		d.getElementById('slide1').style.zIndex = '99';
		s.style.opacity = 1;
		s.style.filter = 'alpha(opacity=100)';
		sp.style.opacity = 1;
		sp.style.filter = 'alpha(opacity=100)';
		var s2  = d.getElementById('slide'+slideNumber);
		var sp2 = d.getElementById('span'+slideNumber);
		d.getElementById('slide'+slideNumber).style.zIndex = '10';
		slidePartTwoInterval = setInterval(function(){
			opacitySlide -= 0.05;
			s2.style.opacity = opacitySlide;
			s2.style.filter = 'alpha(opacity= '+opacitySlide*100+')';
			sp2.style.opacity = opacitySlide;
			sp2.style.filter = 'alpha(opacity= '+opacitySlide*100+')';
			if (opacitySlide < 0) { 
				endSlide = 1;
				clearInterval(slidePartTwoInterval);
			}
		}, 25);
	} else {
		opacitySlide = 0;
		var s2  = d.getElementById('slide'+IdNextSlide);
		var sp2 = d.getElementById('span'+IdNextSlide);
		d.getElementById('slide'+IdNextSlide).style.zIndex = '99';
		slidePartTwoInterval = setInterval(function(){
			opacitySlide += 0.05;
			s2.style.opacity = opacitySlide;
			s2.style.filter = 'alpha(opacity= '+opacitySlide*100+')';
			sp2.style.opacity = opacitySlide;
			sp2.style.filter = 'alpha(opacity= '+opacitySlide*100+')';
			if (opacitySlide > 1) { 
				var s  = d.getElementById('slide'+IdSlide);
				var sp = d.getElementById('span'+IdSlide);
				s.style.opacity = 0;
				s.style.filter = 'alpha(opacity=0)';
				sp.style.opacity = 0;
				sp.style.filter = 'alpha(opacity=0)';
				d.getElementById('slide'+IdSlide).style.zIndex = '10';
				endSlide = 1;
				clearInterval(slidePartTwoInterval);
			}
		}, 25);
	}

}
function engineSlidePartThreeIE() {
	slidePartThreeInterval = setInterval(function(){
		if (endSlide == 1) {
			endSlide = 0;
			IdSlide = IdNextSlide;
			clearInterval(slidePartThreeInterval);
		}
	}, 1000);
}





// Uso il javascript per inserire la classe opacity nei vari div e l'animazione viene svolta dal CSS3
function startSafariChromeOpera10() {
	d.getElementById('slide1').setAttribute('class', 'slide-item current');
	d.getElementById('slide1').style.zIndex = '99';
	d.getElementById('slide2').style.zIndex = '10';
	d.getElementById('slide3').style.zIndex = '10';
	d.getElementById('slide4').style.zIndex = '10';
	slideSafariChromeOpera10();
}
function slideSafariChromeOpera10() {
	var lastStartTimeIntervall = new Date().getTime();
	setInterval(function() {
		var nowStart = new Date().getTime();
        if(nowStart - lastStartTimeIntervall > 8500) {
			lastStartTimeIntervall = nowStart;
			engineSlide();
		}
    }, 3000);
}
function engineSlide() {
	d.getElementById('slide'+IdSlide).setAttribute('class', 'slide-item');
	d.getElementById('slide'+IdSlide).style.zIndex = '10';
	IdSlide++;
	IdSlide = IdSlide > slideNumber ? 1 : IdSlide;
	d.getElementById('slide'+IdSlide).style.zIndex = '99';
	d.getElementById('slide'+IdSlide).setAttribute('class', 'slide-item current');
}


