//Ce fichier javascript possède toutes les fonctions nécessaires à la création d'un slideshow avec fade.
//Il permet une gestion des images sélectionnées par date, par index ou sans filtre

//initialisation du slide show
var SlideShowSpeed = 5000;
var CrossFadeDuration = 1;
var jss = 1;
var tss = "null";
var iss;
var unArrayImageFiltreParDate = new Array();
var unArrayDateFiltreParDate = new Array();
var unArrayImageFiltreParIndex = new Array();
var preLoad;
var pss;
var slideShowEnCours=false;
var pageEstRafraichie=false;
var isPause=false;

function changeSlideSpeed(unForm)
{
	SlideShowSpeed = unForm.intervalle.options[unForm.intervalle.options.selectedIndex].value;
}
function detruireTimeout()
{
	if(tss=="null")
	{	
	}
	else
	{
		clearTimeout(tss);
		tss="null";
	}
}
	
function filtrerImageParDate(unForm)
{
	unArrayImageFiltreParDate=new Array();
	unArrayDateFiltreParDate=new Array();
	//construction de l'intervalle des photos à selectionner apartir des select box de dates
	var uneDateDebut = new Date();
	var uneDateFin = new Date();
		
	var uneDateDebutNonFormate = new String(unForm.date_debut.options[unForm.date_debut.options.selectedIndex].value);
	var uneDateFinNonFormate = new String(unForm.date_fin.options[unForm.date_fin.options.selectedIndex].value);
		
	uneDateDebut.setYear(uneDateDebutNonFormate.substring(0,4));
	uneDateDebut.setMonth(uneDateDebutNonFormate.substring(5,7) - 1);
	uneDateDebut.setDate(uneDateDebutNonFormate.substring(8,10));
	uneDateDebut.setSeconds("0");
	uneDateDebut.setMilliseconds("0");
		
	uneDateFin.setYear(uneDateFinNonFormate.substring(0,4));
	uneDateFin.setMonth(uneDateFinNonFormate.substring(5,7) - 1);
	uneDateFin.setDate(uneDateFinNonFormate.substring(8,10));	
	uneDateFin.setSeconds("0");
	uneDateFin.setMilliseconds("0");
	
	for(var i=0;i<unArrayDate.length;i++)
	{
		var uneDateImageEnTraitement = new Date();
		uneDateImageEnTraitement.setYear(unArrayDate[i].substring(0,4));
		uneDateImageEnTraitement.setMonth(unArrayDate[i].substring(5,7) - 1);
		uneDateImageEnTraitement.setDate(unArrayDate[i].substring(8,10));
		uneDateImageEnTraitement.setSeconds("0");
		uneDateImageEnTraitement.setMilliseconds("0");
		
		if(uneDateDebut.getTime() <= uneDateImageEnTraitement.getTime() && uneDateImageEnTraitement.getTime() <= uneDateFin.getTime())
		{
			if(unArrayImageFiltreParDate.length == 0)
			{
				unArrayImageFiltreParDate[unArrayImageFiltreParDate.length + 1] = unArrayImage[i];
				unArrayDateFiltreParDate[unArrayDateFiltreParDate.length + 1] = unArrayDate[i];
			}
			else
			{
				unArrayImageFiltreParDate[unArrayImageFiltreParDate.length] = unArrayImage[i];
				unArrayDateFiltreParDate[unArrayDateFiltreParDate.length] = unArrayDate[i];	
			}
		}
	}
	preloadImagesAvecDate();
}

function filtrerImageParIndex(unForm)
{
	unArrayImageFiltreParIndex=new Array();
	
	//construction de l'intervalle des photos à selectionner apartir des select box
	
	var unIndexDebut = unForm.index_debut.options[unForm.index_debut.options.selectedIndex].value;
	var unIndexFin = unForm.index_fin.options[unForm.index_fin.options.selectedIndex].value;
	
	for(var i=0;i<unArrayImage.length;i++)
	{
		if(unIndexDebut <= i && i <= unIndexFin)
		{
			if(unArrayImageFiltreParIndex.length == 0)
			{
				unArrayImageFiltreParIndex[unArrayImageFiltreParIndex.length + 1] = unArrayImage[i];
			}
			else
			{
				unArrayImageFiltreParIndex[unArrayImageFiltreParIndex.length] = unArrayImage[i];	
			}
		}
	}
	preloadImagesAvecIndex();
}

function pauseOuReprise(isSlideAvecDate)
{
	if(isPause)
	{	
		isPause=false;
		
	}
	else if(!isPause)
	{
		
		if(tss=="null")
		{	
		}
		else
		{
			isPause=true;
		}
		return;
	}
	runSlideShow(isSlideAvecDate);	
}

function populerSelectDate(isSelectDateDebut)
{
	var uneDateEnTraitement;
	var unArrayDatePourSelectBox = new Array();
    var flagDateExistante = false;
	
	for(var i=0; i<unArrayDate.length; i++)
	{
		uneDateEnTraitement = unArrayDate[i];
		flagDateExistante = false;
		for(var j=0; j<unArrayDatePourSelectBox.length && !(flagDateExistante); j++)
		{
			if(unArrayDatePourSelectBox[j] == uneDateEnTraitement)
			{
				flagDateExistante = true;
			}
		}
		if(!flagDateExistante)
		{
			unArrayDatePourSelectBox[unArrayDatePourSelectBox.length] = uneDateEnTraitement;
		}			
	}
		
	for(var i=0; i<unArrayDatePourSelectBox.length; i++)
	{
		
		if((isSelectDateDebut && i != 0) || (!isSelectDateDebut && i != (unArrayDatePourSelectBox.length - 1)))
		{
			document.writeln("<option value=" + unArrayDatePourSelectBox[i] + ">" + unArrayDatePourSelectBox[i] + "</option>" ); 			
		}
		else
		{
			document.writeln("<option value=" + unArrayDatePourSelectBox[i] + " selected>" + unArrayDatePourSelectBox[i] + "</option>" );
		}
	}
}

function populerSelectIndex(isSelectIndexDebut)
{	
	for(var i=0; i<unArrayImage.length; i++)
	{
		if((isSelectIndexDebut && i != 0) || (!isSelectIndexDebut && i != (unArrayImage.length - 1)))
		{
			document.writeln("<option value=" + i + ">" + i + "</option>" ); 			
		}
		else
		{
			document.writeln("<option value=" + i + " selected>" + i + "</option>" );
		}
	}
}
function preloadImagesAvecDate()
{
	pss = unArrayImageFiltreParDate.length-1;
	preLoad = new Array();
	for (iss = 1; iss < pss+1; iss++){
		preLoad[iss] = new Image();
		preLoad[iss].src = pathToImages + unArrayImageFiltreParDate[iss];
	}
	jss = 1;
}

function preloadImagesAvecIndex()
{
	pss = unArrayImageFiltreParIndex.length-1;
	preLoad = new Array();
	for (iss = 1; iss < pss+1; iss++){
		preLoad[iss] = new Image();
		preLoad[iss].src = pathToImages + unArrayImageFiltreParIndex[iss];
	}
	jss = 1;
}

function preloadImagesSansFiltre()
{	
	pss = unArrayImage.length-1;
	preLoad = new Array();
	for (iss = 1; iss < pss+1; iss++){
		preLoad[iss] = new Image();
		preLoad[iss].src = pathToImages + unArrayImage[iss-1];
	}
	jss = 1;
}

function runSlideShow(isSlideAvecDate)
{
	if(!isPause){
		if (document.all)
		{
			document.images.PictureBox.style.filter="blendTrans(duration=CrossFadeDuration)";
			document.images.PictureBox.filters.blendTrans.Apply();
		}
		document.images.PictureBox.src = preLoad[jss].src;
		if(isSlideAvecDate)
		{
			var dateContent = unArrayDateFiltreParDate[jss];	
			formateDateContentAndWrite(dateContent);	
		}
		if (document.all)document.images.PictureBox.filters.blendTrans.Play();
		jss = jss + 1;
		if (jss > (pss)) jss=1;
		tss = setTimeout('runSlideShow(' + isSlideAvecDate + ')', SlideShowSpeed);
	}
}
function genererPictureBox(height, width, borderSize){
	document.writeln("<IMG height=" + height + "alt=\"Image de la Webcam\" name=\"PictureBox\" width=" + width + " border=" + borderSize); 
	document.writeln("src=\"" + selectDerniereImage() +"\">");
}

function selectDerniereImage(){
	//ici on selectionne la derniere image du array pour montrer le stade courant de l'evolution
	var temp = ""; 
	if(unArrayImage.length != 0){
		temp =  pathToImages + unArrayImage[unArrayImage.length - 1];
	}
	return temp;
}
function startSlideAvecDate(unForm){
	isPause=false;
	detruireTimeout();
	if(validerDate(unForm)){
		filtrerImageParDate(unForm);
		runSlideShow(true);
	}
}

function startSlideAvecIndex(unForm){
	isPause=false;
	detruireTimeout();
	if(validerIndex(unForm)){
		filtrerImageParIndex(unForm);
		runSlideShow(false);
	}
}

function startSlideSansFiltre(){
	isPause=false;
	detruireTimeout();
	runSlideShow(false);
}

function validerDate(unForm){
	if(unForm.date_debut.options.selectedIndex > unForm.date_fin.options.selectedIndex){
		alert("Veuillez choisir une date de fin postérieure ou égale à la date de début");
		return(false);
	}
	return(true);
}

function validerIndex(unForm){
	if(unForm.index_debut.options.selectedIndex > unForm.index_fin.options.selectedIndex){
		alert("Veuillez choisir un index de fin postérieur ou égal à l'index de début");
		return(false);
	}
	return(true);
}

function formateDateContentAndWrite(dateContent){
	var content = "";

	if(!(obtenirProprieteFont() == ""))
	{
		content += "<font class=\"" + obtenirProprieteFont() + "\">" 
	}
	if(!(obtenirProprieteSpan() == ""))
	{
		content += "<span class=\"" + obtenirProprieteSpan() + "\">";
	}
	content += dateContent;
	if(!(obtenirProprieteSpan() == ""))
	{
		content += "</span>";	
	}
	if(!(obtenirProprieteFont() == ""))
	{
		content += " </font>";	
	}
		
	writeDateContent(content);	
}
function writeDateContent(content) {
	date.hide();
	date.html(content);
	date.show();
}	
