/*
 * 	author: 	http://jnesis.com
 *      version: 	1.0
 *      requires:	- prototype javascript library (prototype-1.6.0.3.js during dev)
 *			- scriptaculous javascript library
 *			
 *      changelog:
 *      		1.0 - jnesis.slideshow, tested on IE7, FF3
 *
 * 	example:
 *			var imgSrcTab = new Array(
 *				'01.png',
 *				'02.png',
 *				'03.png',
 *				'04.png',		
 *			);
 *			new JnesisSlideshow('my-element-id',imgSrcTab,6); 
 */


function JnesisSlideshow(elementId, imgSrcTab, speed)
{
	//tab containing img src for slideshow
	var _imgSrcTab = imgSrcTab;

	//seconds between each slide
	var _speed = speed;

	//current image index
	var _currentImgIndex = 0;

	//id of the element on which changing background image
	var _elementBack = $(elementId);
	var _elementFront = $$('#'+elementId+' div')[0];
	var _nextIsBack = true;

	_elementBack.setStyle({
				zIndex: '1'
	});
	_elementFront.setStyle({
				zIndex: '2'
	});
	
	//load the next image (should be the hidden one, based on double buffering principle)
	var loadNextImage = function() {

		if(_currentImgIndex >= _imgSrcTab.length)
		{
			_currentImgIndex = 0;
		}		

		if(_nextIsBack)
		{
			_elementFront.setStyle({
				background: 'url('+_imgSrcTab[_currentImgIndex]+')'
			});	
		}
		else
		{
			_elementBack.setStyle({
				background: 'url('+_imgSrcTab[_currentImgIndex]+')'
			});
		}
			
		_currentImgIndex ++;	
		_nextIsBack = !_nextIsBack;	
	}

	//show next slide using transition
	this.nextSlide = function() {
		if(_nextIsBack)
		{
			_elementFront.fade({afterFinish:loadNextImage});			
		}
		else
		{
			_elementFront.appear({afterFinish:loadNextImage});
		}						
	}

	//load the background and foreground images
	loadNextImage();
	loadNextImage();

	new PeriodicalExecuter(this.nextSlide, _speed);
}
	

