/************************************************************
* Ultimate RollOver v3.4
* Auteur : Xavier CANY & Robin CASTANIER
* Started on 6/nov/1998 - Last Update on 10/mar/2000
* 9 Mars 2000 - Ajout de la gestion Layer et Series
* 10 Mars 2000 - Ajout des RollOver a images communes
*
* function ro_Change( bImgId, vMode)
* function ro_Load( bImgId, vNbState, bRollSerie, bLayerName )
* function ro_LoadDifferentName( bImgId, bImgImgFileName, vNbState, bRollSerie, bLayerName )
* function ro_ResetSerie( bRollSerie )
* function ro_Reset()
* function ro_Lock( bImgId, vState )
*
*
**************************************************************/
MAX_ROLLS = 50; // Nombre max de rolls dans la page
MAX_STATES_IN_IMAGE= 4; // Nombre d'etats par defaut par Roll si pas de ro_Load.
NONE = "";
// Tableau des RollOvers
var vRollsCount = 0;
var aRolls = new Array( MAX_ROLLS );
ROLLID = 0; // ID du rollover
ROLLSERIE = 1; // Nom de la serie du rollover
ROLLLAYER = 2; // Nom du layer du rollover
ROLLOFFSET = 3; // Offset de demmarage des images des etats du rollover
// Tableau des Series/Locks
var vSeriesCount = 0;
var aSeries = new Array( MAX_ROLLS );
LOCKSERIE = 0; // Nom de la serie
LOCKIMG = 1; // ID de l'image lockee de la serie
LOCKSTATE = 2; // Valeur de reinitialisation de l'image lockee


/************************************************************
Nom : ro_Change
Fonction : Change une image dans un "roll over"
Variable : bImgId = nom de l'image
vMode = indice de l'image
Date : 6 Novembre 1998
22 Janvier 1999 - probleme explorer (var i)
**************************************************************/
function ro_Change( bImgId, vMode)
{
var i, j;
for (i=0; i<vRollsCount; i++)
if (aRolls[i][ROLLID] == bImgId)
{
// Si c 'est locke je me casse
j = 0; while (aSeries[j][LOCKSERIE] != aRolls[i][ROLLSERIE]) j++;

if (bImgId == aSeries[j][LOCKIMG]) return;
if (aRolls[i][ROLLLAYER] != "" && document.layers)
oSource = eval('document.layers[aRolls[i][ROLLLAYER]].document.images[bImgId]');
else
oSource = eval('document.images[bImgId]');
oSource.src = aRolls[i][vMode+ROLLOFFSET].src;
return;
}
ro_Load( bImgId, MAX_STATES_IN_IMAGE, NONE, NONE );
document.images[bImgId].src = aRolls[vRollsCount-1][vMode+ROLLOFFSET].src;
}


/************************************************************
Nom : ro_Load
Fonction : Precharge les images d'un "roll over"
NB: A appeler APRES la declaration des images.
Variable : bImgId = nom de l'image
vNbState = nombre d'etats du Roll
bRollSerie = nom de la serie de Rolls, permet les ro_Lock multiples
bLayerName = nom du layer, laisser vide si aucun
Date : 10 Novembre 1999
**************************************************************/
function ro_Load( bImgId, vNbState, bRollSerie, bLayerName )
{
ro_LoadDifferentName( bImgId, bImgId, vNbState, bRollSerie, bLayerName );
}


/************************************************************
Nom : ro_LoadDifferentName
Fonction : Precharge les images d'un "roll over"
NB: A appeler APRES la declaration des images.
Variable : bImgId = nom de l'image
vNbState = nombre d'etats du Roll
bRollSerie = nom de la serie de Rolls, permet les ro_Lock multiples
bLayerName = nom du layer, laisser vide si aucun
Date : 10 Mars 2000
**************************************************************/
function ro_LoadDifferentName( bImgId, bImgFileName, vNbState, bRollSerie, bLayerName )
{
var i;
var bFound = false;
if (bRollSerie == "") bRollSerie = 'DEFAULT';
// Cherche et cre une nouvelle serie
for (i = 0; i < vSeriesCount; i++)
if (aSeries[i][LOCKSERIE] == bRollSerie) { bFound = true; break; }
if (!bFound)
{
aSeries[i] = new Array(3);
aSeries[i][LOCKSERIE] = bRollSerie;
aSeries[i][LOCKIMG] = NONE;
aSeries[i][LOCKSTATE] = -1;
vSeriesCount++;
}
if (bLayerName != "" && document.layers)
oSource = eval( 'document.layers[bLayerName].document.images[bImgId]' );
else
oSource = eval( 'document.images[bImgId]' );
aRolls[vRollsCount] = new Array(vNbState-1 + ROLLOFFSET);
aRolls[vRollsCount][ROLLID] = bImgId;
aRolls[vRollsCount][ROLLSERIE] = bRollSerie;
aRolls[vRollsCount][ROLLLAYER] = bLayerName;

for (i = 0; i < vNbState; i++)
{
aRolls[vRollsCount][i+ROLLOFFSET] = new Image;
aRolls[vRollsCount][i+ROLLOFFSET].src =
oSource.src.substring( 0, oSource.src.lastIndexOf("/") )
+ "/" + bImgFileName + "_" + i + ".gif";
}
if (++vRollsCount >= MAX_ROLLS) alert( "OverFlow! Augmenter MAX_ROLLS" );
}



/************************************************************
Nom : ro_ResetSerie
Variable :
bRollSerie = nom de la serie de Rolls, permet les ro_Lock multiples
Fonction : Reset un roll-over dans son etat initial
Date : 9 Mars 2000
**************************************************************/
function ro_ResetSerie( bRollSerie )
{
var i;

for (i=0; i<vSeriesCount; i++)
if (aSeries[i][LOCKSERIE] == bRollSerie)
{
if (aSeries[i][LOCKIMG] != NONE)
{
bTemp = aSeries[i][LOCKIMG];
aSeries[i][LOCKIMG] = NONE;
ro_Change( bTemp, aSeries[i][LOCKSTATE] );
}
return;
}

alert( "Mauvais nom de Serie: " + bRollSerie );
}
/************************************************************
Nom : ro_Reset
Fonction : Reset un roll-over dans son etat initial
Date : 2 Decembre 1998
**************************************************************/
function ro_Reset()
{
var i;

for (i=0; i<vSeriesCount; i++)
ro_ResetSerie( aSeries[i][LOCKSERIE] );
}
/************************************************************
Nom : ro_Lock
Fonction : Bloque une image dans un "roll over"
Variable : bImgId = nom de l'image
vNb = indice de l'image pour l'unlock
Date : 10 Novembre 1998
**************************************************************/
function ro_Lock( bImgId, vState )
{
var i;

// Quelle est la serie associee
for (i=0; i<vRollsCount; i++)
if (aRolls[i][ROLLID] == bImgId)
{
mySerie = aRolls[i][ROLLSERIE];
break;
}

// si c'est pas NONE ni moi qui suis locke, je reset la serie
i = 0;
while (aSeries[i][LOCKSERIE] != mySerie) i++;
if (aSeries[i][LOCKIMG] != NONE && aSeries[i][LOCKIMG] != bImgId)
ro_ResetSerie( mySerie );
// Je me locke
aSeries[i][LOCKIMG] = bImgId;
aSeries[i][LOCKSTATE] = vState;

}
