function AzkSlidershow(id, sizepx, duration, type, effect, files, autoplay, delay, id_infos, current_pos)
{
 this.id = id;
 this.pos = 0;
 this.elm = document.getElementById(id);
 this.sizepx = sizepx;
 this.duration = duration;
 this.type = type;
 this.effect = effect;
 this.autoplay = (autoplay && delay > 50)? delay : 0;
 this.prevsigne = 1;
 this.animate_timer = 0;
 this.id_infos = id_infos;
 this.delay = delay;
 document.getElementById(id).style.visibility = 'hidden';
 if (files != '')
 {
  this.addFiles(files);
  this.nb_file = files.length;
 }
 else
 {
  this.nb_file = this.elm.getElementsByTagName('div').length;
  if (!this.nb_file)
   this.nb_file = this.elm.getElementsByTagName('img').length;
 }
 
 if (autoplay && delay > 50)
 {
  var local_this = this;
  this.timer_auto = setInterval(function(){local_this.animate(local_this, 1, true)}, delay);
 }
 
  if (current_pos)
  {
  var local_this = this;
  local_this.duration = 50;
  while (current_pos--)
   {
   local_this.animate(local_this, 1, false);
   }
  local_this.duration = duration;
  setTimeout("document.getElementById('"+id+"').style.visibility = 'visible'", 500);
  }
  else
  {
   document.getElementById(id).style.visibility = 'visible';
  }
}

AzkSlidershow.prototype.addFiles = function (files)
{
 var class_name = 'Slide';
 class_name += (this.effect == 'fade')?' Fade':'';
 
 img = document.createElement("img");
 img.setAttribute("class", class_name);
 if (document.all)
 {
  img.setAttribute("className", class_name);
 }

 if (this.effect == 'fade')
 {
  for ( var i = files.length - 1; i >=0 ; i--)
  {
   img.setAttribute("src", files[i]['src']);
   img.setAttribute("id", "img"+i);
   img.setAttribute("info", files[i]['info']);
   img.setAttribute("link", files[i]['link']);
   
   if(files[i]['link'])
   {
    img.setAttribute("onclick", "top.location.href='"+files[i]['link']+"'");
   }
   
   this.elm.appendChild(img.cloneNode(true));
  }
  this.pos = files.length - 1;      
 }
 else
 {
  for ( var i = 0; i < files.length; i++)
  {
  img.setAttribute("src", files[i]['src']);
  img.setAttribute("info", files[i]['info']);
  img.setAttribute("link", files[i]['link']);
  this.elm.appendChild(img.cloneNode(true));
  }
 }                                                          
}

AzkSlidershow.prototype.showInfos = function (id_infos)
{                          
  var elm_infos = document.getElementById(id_infos);
  var i = elm_infos.className.indexOf('Hidden', 0);
  if (i > -1)
  {
   elm_infos.className = elm_infos.className.substring(0, i);
  }          
}

AzkSlidershow.prototype.hideInfos = function (id_infos)
{                            
  var elm_infos = document.getElementById(id_infos);
  if (!elm_infos.className.match(/Hidden.*?/))
  {
   elm_infos.className += ' Hidden';
  }     
}

AzkSlidershow.prototype.getFirstInfo = function (link)
{                            
 var images = document.getElementsByTagName('img');
 document.write(images[(this.effect == 'fade') ? (images.length - 1) : 0].getAttribute('info'));
 link.setAttribute("href", (images[(this.effect == 'fade') ? (images.length - 1) : 0].getAttribute('link')));
}

 var transitions = {
 linear: function(t, b, c, d){ return c*t/d + b; },
 elastic: function (t,b,c,d,a,p){
 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
 if (!a || a < Math.abs(c)) { a=c; var s=p/4; }
 else var s = p/(2*Math.PI) * Math.asin (c/a);
 return (a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b);
 },
 bounce: function(t,b,c,d){
 if((t/=d) < (1/2.75)) {
 return c*(7.5625*t*t) + b;
 }else if (t < (2/2.75)) {
 return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
 }else if (t < (2.5/2.75)) {
 return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
 }else{
 return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
 }
 },
 skid: function(t,b,c,d){
 var s = 1.70158;
 return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
 }
 };

AzkSlidershow.prototype.playPause = function (slider, a)
{
 if (slider.autoplay)
 {
  slider.autoplay = 0;
  clearInterval(slider.timer_auto);
  if (a)
    a.innerHTML = 'lecture';
 }
 else if (!slider.autoplay)
 {
  clearInterval(slider.timer_auto);
  slider.autoplay = slider.delay;
  slider.timer_auto = setInterval(function(){slider.animate(slider, 1, true)}, slider.delay);
  if (a)
   a.innerHTML = 'pause';
 }
}

AzkSlidershow.prototype.animate = function (slider, signe, flag_auto)
{
 if (slider.autoplay && !flag_auto)
 {
  clearInterval(slider.timer_auto);
 }
 if(slider.effect == 'fade')
 {
  images = $(slider.id).getElementsByTagName('img');
  if (signe < 0)
   {
    if (slider.pos == images.length - 1)
    {
      for (var i= (images.length - 1); i > 0; i--)
      {
       $(images[i].id).fade(0);
      }
      slider.pos = i;
    } 
    else
    {
     slider.pos++;
     $(images[slider.pos].id).fade(1);
    }
   }
  else
  {
   $(images[slider.pos].id).fade(0);
   slider.pos--;
  }
  if (slider.pos < 0)
  {
   //images[images.length - 1].fade(1);
   $(images[images.length - 1].id).fade(1);
   for (var i= (images.length - 2); i >= 0; i--)
   {
     setTimeout('images['+i+'].fade(1);', 500);
   }
   slider.pos = images.length - 1;
  }
  var elm_infos = document.getElementById(slider.id_infos) ;
  elm_infos.getElementsByTagName('span')[0].innerHTML = images[slider.pos].getAttribute('info');
  elm_infos.getElementsByTagName('span')[0].parentNode.setAttribute("href", images[slider.pos].getAttribute('link'));
  if (slider.autoplay && !flag_auto)
    {
     slider.timer_auto = setInterval(function(){slider.animate(slider, 1, true)}, slider.delay);
    }
  return;
 }
 // si precedente anim pas fini on la recommence pas
 if (slider.autoplay && !flag_auto)
 {
  clearInterval(slider.timer_auto);
 }
  
 if (slider.animate_timer)
 {
  clearInterval(slider.animate_timer);
  slider.pos += slider.sizepx * slider.prevsigne;
 }
 var sizepx = slider.sizepx;
 //si on doit revenir au debut ou a la fin
 if ((!slider.pos && signe < 0) ||
    ((((slider.pos+slider.sizepx) / slider.sizepx) == slider.nb_file) && signe > 0))
 {
  signe *= -1;
  var sizepx = slider.sizepx * (slider.nb_file - 1);
 }
 slider.prevsigne = signe ;
 var tmr = (1000/80); //assure une moyenne de 80 images par secondes
 var nbSteps = Math.round(slider.duration/tmr);
 var step = Math.abs(32 - sizepx)/nbSteps;
 var decal;
 var char_signe;
 var mapping = [];
 
 //On remplis un tableau contenant toutes les étapes de l'animation
 for(var i=1; i<=nbSteps; i++)
 {
  mapping.push(transitions[slider.effect](i*tmr, 32, sizepx - 32, slider.duration));
 }
 
 var currentStep = 0;
 slider.animate_timer = window.setInterval(function()
  {
   if(mapping[currentStep])
   {
    decal = slider.pos + (mapping[currentStep] * signe) ;
    char_signe = decal > 0 ? '-':'';
    if (slider.type == 'vertical')
     slider.elm.style.marginTop = char_signe + Math.abs(decal) + 'px';
    else
     slider.elm.style.marginLeft = char_signe + Math.abs(decal) + 'px';
    currentStep++;
   }
   else
   {
    slider.pos += sizepx * signe;
    clearInterval(slider.animate_timer);
    slider.animate_timer = 0;
    if (slider.id_infos != '')
    {
	    var img = document.getElementsByTagName('img')[slider.pos / slider.sizepx];
	    var elm_infos = document.getElementById(slider.id_infos) ;
	    elm_infos.getElementsByTagName('span')[0].innerHTML = img.getAttribute('info');
    }
    if (slider.autoplay && !flag_auto)
    {
     slider.timer_auto = setInterval(function(){slider.animate(slider, 1, true)}, slider.delay);
    }
    return;
   }
 }, tmr);
}

