function CreateDiapo(InstName, DiapoMenuDiv, DiapoImagesDiv, FilteringMode, DiapoLevel, ViewParams)
{
	var i;

	this.nb=0;
	this.InstName=InstName;
	this.DiapoMenuDiv=DiapoMenuDiv;
	this.DiapoImagesDiv=DiapoImagesDiv;
	this.FilteringMode=FilteringMode;	// Si à true, affiche le menu des catégories
	this.DiapoLevel=DiapoLevel;			// Si = null affiche toutes les diapo du sous niveau, sinon affiche que les diapos du niveau DiapoLevel
	this.ViewParams=ViewParams;
	this.DiapoList=null;				// Liste des photo qui sont affichés dans le diaporama

	this.depth=0;
	this.MenuCaption = new Array();
	for (i=6; i<CreateDiapo.arguments.length; i++)
	{
		this.depth++;
		this.MenuCaption[i-6]=CreateDiapo.arguments[i];
	}
	this.PageContent = null;

	this.Add=FAddObject;
	this.Start=FStartDiapo;

	this.ShowMenus=FShowMenus;
	this.RefreshDiapo=FRefreshDiapo;

	this.GetSubItems=FGetSubItems;
	this.GetDiapoList=FGetDiapoList;
	this.DiapoMenuClicked=FDiapoMenuClicked;
	this.DiapoShowImage=FDiapoShowImage;
	this.DiapoHideImage=FDiapoHideImage;
	this.DiapoShowPrecImage=FDiapoShowPrecImage;
	this.DiapoShowNextImage=FDiapoShowNextImage;
	this.DiapoShowInfoBulle=FDiapoShowInfoBulle;
	this.DiapoHideInfoBulle=FDiapoHideInfoBulle;

	// Fabrication du contenu
	Content = '';

	if (FilteringMode)
	{	// Création du menu
		var tdWidth = ViewParams['DiapoTableWidth'] / this.depth;
		ContentMenu =
			'<form name="DiapoMenuForm">'+
				'<table id="DiapoMenuTable" border="0" cellspacing="0" cellpadding="0" width="'+ViewParams['DiapoTableWidth']+'px" style="padding: 3px;">'+
					'<tr>';
		for (i=0; i<this.depth; i++)
			ContentMenu +=	'<th>'+this.MenuCaption[i]+'</th>';

		ContentMenu +=	'</tr>'+
						'<tr align="center">';

		for (i=0; i<this.depth; i++)
			ContentMenu += '<td width="'+tdWidth+'">'+
								'<div id="DiapoMenu'+i+'">'+
									'<select size=3 name="DiapoMenuSelect'+i+'" onChange="'+this.InstName+'.DiapoMenuClicked('+i+')" style="width: '+eval(tdWidth-6)+'px"></select>'+
								'</div></td>';

		ContentMenu +=	'</tr></form></table>';
		document.getElementById(DiapoMenuDiv).innerHTML = ContentMenu;
	}
		
	document.getElementById(DiapoImagesDiv).innerHTML = '<table id="DiapoImagesTable" border="0" cellspacing="2" cellpadding="0" width="100%"></table>';
	document.getElementById(DiapoImagesDiv).style.display = 'none';
}

function FAddObject(depth, txt, desc, smallImg, largeImg)
{
	// Recherche du parent pour affichage de la hierarchie
	ParentHir = "";
	for (var i=(this.nb-1); i>=0; i--)
		if (this[i].depth<depth)
		{
			ParentHir = this[i].ParentHir;
			break;
		}

	if (desc=="")
		desc="Aucune description";

	var rub = new Object;
	rub.depth=depth;
	rub.txt=txt;
	rub.desc=desc;
	rub.IsImg=((smallImg!=null) && (largeImg!=null));
	rub.smallImg=smallImg;
	rub.largeImg=largeImg;
	rub.id=this.nb;
	if (depth>1)
		rub.ParentHir = ParentHir+' > '+txt;
	else
		rub.ParentHir = txt;
	this[this.nb]=rub;
	this.nb++;
}

function FStartDiapo()
{
	if (this.FilteringMode)
		this.ShowMenus();

	this.RefreshDiapo();
}

function FShowMenus()
{	// Affiche le 1er menu
	var i, j=0;
	var DiapoMenu1 = document.forms['DiapoMenuForm'].elements[0];

	for (i=1; i<this.depth; i++)
		SetDivVisible('DiapoMenu'+i, false);

	for (i=0; i<this.nb; i++)
		if (this[i].depth==1)
			DiapoMenu1.options[j++]=new Option(this[i].txt,i);
}

// Affiche le diaporama en fonction des paramètres et du menu sélectionné
function FRefreshDiapo()
{
	this.DiapoList = this.GetDiapoList();
	var newRow, newCell;
	var dpTable=document.getElementById('DiapoImagesTable');
	var i, j;

  	for (i=dpTable.rows.length-1; i>=0; i--)
		dpTable.deleteRow(i);

	i=0;
	while(i<this.DiapoList.length)
	{
		newRow = dpTable.insertRow(-1);
		for (j=0; (j<this.ViewParams['DiapoTableColCount']) && (i<this.DiapoList.length); i++,j++)
		{
			newCell = newRow.insertCell(-1);
    		newCell.innerHTML =
    			'<a href="#" onmousedown="'+this.InstName+'.DiapoShowImage('+i+')">'+
    			'<img src="'+this.ViewParams['PhotoDir']+this.DiapoList[i].smallImg+'" alt="'+this.DiapoList[i].txt+'" width="'+this.ViewParams['DiapoImageSize']+'px" border="0"/>'+
    			'</a>';
		}
	}
	
	if (this.DiapoList.length==0)
		document.getElementById(this.DiapoImagesDiv).style.display = 'none';
	else
		document.getElementById(this.DiapoImagesDiv).style.display = 'block';
}

// Retourne la liste des items enfants
function FGetSubItems(ItemIndex, SubLevelOnly)
{
	var i,j;
	var Result = new Array();
	var ParentLv = this[ItemIndex].depth;
	var ChildLv = ParentLv+1;

	for (i=eval(ItemIndex)+1,j=0; i<this.nb; i++)
	{
		if (this[i].depth==ParentLv)
			break;
		else if ((!SubLevelOnly) || (this[i].depth==ChildLv))
			Result[j++]=this[i];
	}
	return(Result);
}

// Retourne la liste des diapo à afficher en fonction
// des différents modes :
// ----------- this.FilteringMode=true --------------
// - Affichage que du dernier niveau this.DiapoLevel!=null
// - Affichage au fur et à mesure (this.DiapoLevel==null)
// ----------- this.FilteringMode=false -------------
// - Affichage de tout
function FGetDiapoList()
{
	var i, j=0;
	var iiSelected=null;
	var Result = new Array();

	if (this.FilteringMode)
	{
		dcForm = document.forms['DiapoMenuForm'];

		// Recherche l'élément le plus profond sélectionné
		for (i=dcForm.elements.length-1; i>=0; i--)
			if (dcForm.elements[i].selectedIndex>=0)
			{
				iiSelected = eval(dcForm.elements[i].options[dcForm.elements[i].selectedIndex].value);
				break;
			}

		if ((iiSelected==null) || (iiSelected>=(this.nb-1)) || ((this.DiapoLevel!=null) && (this[eval(iiSelected+1)].depth!=this.DiapoLevel)))
			return(Result);

		iiSelected++;

		// Affichage au fur et à mesure
		if (this.DiapoLevel==null)
		{
			var ParentLv=this[iiSelected-1].depth; // ParentLv = Level(ou depth) de l'élément cliqué
			for (i=iiSelected; (i<this.nb) && (this[i].depth>ParentLv); i++)
			{
				if (this[i].IsImg)
					Result[j++]=this[i];
			}
		}
		else // Affichage que du dernier niveau
		{
			for (i=iiSelected; (i<this.nb) && (this[i].depth==this.DiapoLevel); i++)
				if (this[i].IsImg)
					Result[j++]=this[i];
		}
	}
	else
	{
		// On affiche tout
		for (i=0; i<this.nb; i++)
			if (this[i].IsImg)
				Result[j++]=this[i];
	}

	return(Result);
}

function FDiapoMenuClicked(MenuIndex)
{
	var dcForm = document.forms['DiapoMenuForm'];
	var clSelect = dcForm.elements[MenuIndex];
	var ItemIndex = clSelect.options[clSelect.selectedIndex].value;

	if ((ItemIndex=="") || (ItemIndex==null))
		return;

	if ((MenuIndex+1)<this.depth)
	{
		SubClSelect = dcForm.elements[MenuIndex+1];//dcForm.elements["DiapoMenuSelect"+eval(MenuIndex+1)];
		SubClSelect.length=0;
		var si = this.GetSubItems(eval(ItemIndex), true);

		SetDivVisible('DiapoMenu'+eval(MenuIndex+1), si.length>0);
		for (i=MenuIndex+2; i<this.depth; i++)
		{
			dcForm.elements[i].length=0;
			SetDivVisible('DiapoMenu'+eval(i), false);
		}

		for (var i=0; i<si.length; i++)
			SubClSelect.options[i]=new Option(si[i].txt, si[i].id);
	}

	this.RefreshDiapo();
}

function FDiapoShowImage(ItemIndex)
{
	A = '<map name="PhotoBarMap">';
		A+= '<area href="#" onmousedown="'+this.InstName+'.DiapoHideImage()" shape="rect" coords="504, 0, 522, 19" />';
		A+= '<area href="#" onmousedown="'+this.InstName+'.DiapoShowPrecImage('+ItemIndex+')" shape="rect" coords="466, 0, 485, 19" />';
		A+= '<area href="#" onmousedown="'+this.InstName+'.DiapoShowNextImage('+ItemIndex+')" shape="rect" coords="485, 0, 504, 19" />';
		A+= '<area href="#" onmouseover="'+this.InstName+'.DiapoShowInfoBulle('+ItemIndex+')" onmouseout="'+this.InstName+'.DiapoHideInfoBulle()" shape="rect" coords="447, 0, 466, 19" />';
	A+= '</map>';

	A += '<img src="'+this.ViewParams['DiapoBarImage']+'" alt="" border="0" usemap="#PhotoBarMap" style="left:0px;top:0px;" />';
	A += '<img src="'+this.ViewParams['PhotoDir']+this.DiapoList[ItemIndex].largeImg+'" alt="'+this.DiapoList[ItemIndex].txt+'" border="0" style="position:relative;left:0px;top:0px;width:523px;" />';

	A += '<span style="position: absolute; left: 15px; top: 12px; font-family: Verdana, sans-serif; font-size: 11px; font-style: normal; font-weight: bold;">';
	A += this.DiapoList[ItemIndex].ParentHir;
	A += '</span>';
	A += '<div id="'+ViewParams['InfoBulleDivID']+'" style="position:fixed;display:none;"></div>';

	if (this.PageContent==null)
		this.PageContent = document.getElementById("content").innerHTML;
	document.getElementById(this.ViewParams['ContentDivID']).innerHTML = A;
}

function FDiapoShowPrecImage(ItemIndex)
{
	if (ItemIndex>0)
		this.DiapoShowImage(ItemIndex-1);
}

function FDiapoShowNextImage(ItemIndex)
{
	if (ItemIndex<(this.DiapoList.length-1))
		this.DiapoShowImage(ItemIndex+1);
}

function FDiapoHideImage()
{
	if (this.PageContent!=null)
		document.getElementById(this.ViewParams['ContentDivID']).innerHTML = this.PageContent;
	this.PageContent = null;
}


function FDiapoShowInfoBulle(ItemIndex)
{
	with (document.getElementById('DiapoInfoBulleDivID'))
	{
		innerHTML=this.DiapoList[ItemIndex].desc;
		style.position="absolute";
		style.display="block";
		style.left="300px";
		style.top="30px";
		style.width="200px";
		style.height="auto";
	}
}

function FDiapoHideInfoBulle()
{
	document.getElementById('DiapoInfoBulleDivID').style.display="none";
}

