/*  Album control, version 1.0.0
 *
 *  (c) 2007 Sven Rymenants - Byteworks - www.byteworks.be
 *
/*--------------------------------------------------------------------------*/

var albumCtrl = Class.create();

albumCtrl.prototype = {
  initialize: function(element, images) {
    var options = Object.extend({
      period: 5,
      startImage: 0,
      basepath: '',
      effect: 'fade'
    }, arguments[2] || {});

    this._images = images;
    this._element = $(element).parentNode;
    this._imageIndex = options.startImage;
    this._basepath = options.basepath;
    this._period = options.period;
    this._effect = options.effect;
    this._executer = null;
    this._width = $(element).getAttribute('width');
    this._height = $(element).getAttribute('height');
    
		var objContainer = document.createElement("div");
		objContainer.setAttribute('id', 'albumContainer');
		objContainer.setAttribute('width', 2*this._width + 'px');
		objContainer.setAttribute('height', this._height + 'px');
		objContainer.style.overflow = 'hidden';
		objContainer.style.position = 'relative';
		this._element.appendChild(objContainer);
    
		var objAlbumImage = document.createElement("img");
		objAlbumImage.setAttribute('id','albumImage');
		objAlbumImage.setAttribute('width', this._width);
		objAlbumImage.setAttribute('height', this._height);
		objAlbumImage.setAttribute('src', this._basepath + this._images[this._imageIndex]);
		objContainer.appendChild(objAlbumImage);

    if (this._effect == 'slide')
    {
  		var objAlbumImageHelp = document.createElement("img");
  		objAlbumImageHelp.setAttribute('id','albumBackImage');
  		objAlbumImageHelp.setAttribute('width', this._width);
  		objAlbumImageHelp.setAttribute('height', this._height);
  		objAlbumImageHelp.style.position = 'absolute';
  		objAlbumImageHelp.style.top = '0px';
  		objAlbumImageHelp.style.left = '0px';
  		objAlbumImageHelp.style.display = '';
  		objAlbumImageHelp.style.zIndex = '-1';
  		objAlbumImageHelp.setAttribute('src', this._basepath + this._images[this._imageIndex+1]);
  		objContainer.appendChild(objAlbumImageHelp);
    }
		this._element.removeChild($(element));
  },

  start: function() {
    switch(this._effect)
    {
      case 'fade':
        this._executer = new PeriodicalExecuter(myAlbum.cycleFader, this._period);
        break;
        
      case 'slide':
        this._executer = new PeriodicalExecuter(myAlbum.cycleSlider, this._period);
        break;
    }
  },

  stop: function() {
    if (this._executer !== null) {
      this._executer.stop();
      this._executer = null;
    }
  },
  
  cycleSlider: function() {
    new Effect.MoveBy('albumImage', 0, -myAlbum._width, { duration: 1, fps: 50,
      afterFinish: function() {
        var nextImage = myAlbum._imageIndex;
        if (myAlbum._images.length-1 > nextImage)
          nextImage++;
        else
          nextImage=0;

  			$('albumImage').src = myAlbum._basepath + myAlbum._images[nextImage];
  			$('albumImage').style.left = '0px';
        $('albumBackImage').style.display = 'none';

    		imgPreloader = new Image();
    		imgPreloader.onload=function(){
          $('albumBackImage').src = myAlbum._basepath + myAlbum._images[nextImage];
          $('albumBackImage').style.display = '';
    		}

        myAlbum._imageIndex = nextImage;

        if (myAlbum._images.length-1 > nextImage)
          nextImage++;
        else
          nextImage=0;
    		imgPreloader.src = myAlbum._basepath + myAlbum._images[nextImage];
      }
    });
  },
  
  cycleFader: function() {
    new Effect.Fade('albumContainer', {
      duration: 1, fps: 50,
      afterFinish: function() {
        var nextImage = myAlbum._imageIndex;
        if (myAlbum._images.length-1 > nextImage)
          nextImage++;
        else
          nextImage=0;

        $('albumImage').src = myAlbum._basepath + myAlbum._images[nextImage];
        $('albumImage').setAttribute('src', myAlbum._basepath + myAlbum._images[nextImage]);

    		imgPreloader = new Image();
        
        myAlbum._imageIndex = nextImage;
        
        new Effect.Appear('albumContainer', {
          duration: 1, fps: 50,
          queue:'end',
          afterFinish: function() {
            if (myAlbum._images.length-1 > nextImage)
              nextImage++;
            else
              nextImage=0;
            imgPreloader.src = myAlbum._basepath + myAlbum._images[nextImage];
            }
          });
      }
    })
  }
}
function initAlbum(element, images, arguments) { myAlbum = new albumCtrl(element, images, arguments); myAlbum.start(); }
