/************************************************************

* 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= 2;  // 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;

 

}

