//
// jsDiaporama.js
//
// javascript animation tools for div
//
// © nui - loic berthelot - 2009
// contact@libnui.net
//

var jsRegisteredDiaporama = new Array();


function jsDiaporama(name, path, nbImages, width, height, format, timeout, delay)
{
  this.timeout = timeout;
  this.delay = delay;
  
  this.name = name;
  this.path = path;
  this.width = width;
  this.height = height;
  this.curIndex = 1;
  this.curIndexPostFade = 1;
  this.nbImages = nbImages;
  this.format = format;

  this.diapoADiv = null;
  this.diapoBDiv = null;
  this.diapoAImg = null;
  this.diapoBImg = null;
  
  this.images = new Array();
  this.imagesLoaded = new Array();
  
  
  this.isFading = false;
  
  this.MyInit = jsDiaporama_MyInit;
  this.Preload = jsDiaporama_Preload;
  this.OnLoad = jsDiaporama_OnLoad;
  this.IsLoaded = jsDiaporama_IsLoaded;
  this.Launch = jsDiaporama_Launch;
  this.Start = jsDiaporama_Start;
  
  this.FadeDiapo = jsDiaporama_FadeDiapo;
  
  this.Show = jsDiaporama_Show;
  
  this.diapoTimer = null;
  
  jsRegisteredDiaporama[this.name] = this;
}


function jsDiaporama_MyInit()
{
  this.diapoADiv = jsGetObject(this.name+"_A_div");
  this.diapoBDiv = jsGetObject(this.name+"_B_div");
  this.diapoAImg = jsGetImage(this.name+"_A_img");
  this.diapoBImg = jsGetImage(this.name+"_B_img");
  
  this.Preload();
  this.Launch(this.name);
}


function jsDiaporama_Preload()
{
  var i=0;
  
  for (i = 1; i <= this.nbImages; i++)
  {
    this.imagesLoaded[i] = false;
    
    this.images[i] = new Image(this.width, this.height); 
    this.images[i].onLoad = jsDiaporama_OnLoad(this.name, i);
    this.images[i].src = this.path+"/image_"+i+"."+this.format;
    
  }
}

function jsDiaporama_OnLoad(name, index)
{
  var obj = jsRegisteredDiaporama[name]; 
  obj.imagesLoaded[index] =true;
}

function jsDiaporama_IsLoaded()
{
  var i;
  for (i = 1; i <= this.nbImages; i++)
  {
    if (!this.imagesLoaded[i])
      return false;
  }
  
  return true;
}


function jsDiaporama_Launch(name)
{
  var obj = jsRegisteredDiaporama[name]; 
  clearTimeout(obj.diapoTimer);

  if (obj.IsLoaded())
    obj.Start();
  else
    obj.diapoTimer = setTimeout("jsDiaporama_Launch('"+obj.name+"')", 100);
}


function jsDiaporama_Start()
{
  this.diapoAImg.src = this.images[this.curIndex].src;
  this.diapoBImg.src = this.images[this.curIndex+1].src;
  
  jsHide(this.diapoBDiv);
  this.diapoTimer = setTimeout("jsDiaporama_DelayedStart('"+this.name+"')", this.delay);
}

function jsDiaporama_DelayedStart(name)
{
  var obj = jsRegisteredDiaporama[name]; 
  clearTimeout(obj.diapoTimer);
  obj.diapoTimer = setTimeout("jsDiaporama_Tick('"+obj.name+"')", obj.timeout);  
}


function jsDiaporama_Tick(name)
{
  var obj = jsRegisteredDiaporama[name];

  clearTimeout(obj.diapoTimer);
  
  obj.curIndex = obj.curIndex+1;
  if (obj.curIndex > obj.nbImages)
    obj.curIndex = 1;
  
  obj.FadeDiapo();
}

function jsDiaporama_FadeDiapo_Cbk(name)
{
  var obj = jsRegisteredDiaporama[name];
  
  obj.diapoAImg.src = obj.diapoBImg.src;
  jsHide(obj.diapoBDiv);
  
  obj.curIndexPostFade = obj.curIndex;

  obj.diapoTimer = setTimeout("jsDiaporama_Tick('"+obj.name+"')", obj.timeout);
}

function jsDiaporama_FadeDiapo()
{
  if (this.isFading)
  {
    ja_fadeStop(this.diapoBDiv.id);
    jsDiaporama_FadeDiapo_Cbk(this.name);
    this.isFading = false;
  }
  
  this.isFading = true;

  this.diapoBImg.src = this.images[this.curIndex].src;
  
  jsShow(this.diapoBDiv);
  jsSetOpacity(this.diapoBDiv, 0);

  ja_fadeIn(this.diapoBDiv.id, 0.1, "jsDiaporama_FadeDiapo_Cbk('"+this.name+"')");
}



function jsDiaporama_Show(index)
{
  clearTimeout(this.diapoTimer);
  if (this.isFading)
  {
    ja_fadeStop(this.diapoBDiv.id);
    this.isFading = false;
  }  
  
  this.curIndex = index
  if (this.curIndex > this.nbImages)
    this.curIndex = 1;
  
  this.diapoAImg.src = this.images[this.curIndex].src;
  
  jsSetOpacity(this.diapoADiv, 1);
  jsHide(this.diapoBDiv);
  
  
}



