/**
* k3slideshow.js
*
* Dynamic Slide Show width Fade In - Fade Out
*
* Copyright (C) 2008 K3 Media <mlamontagne@k3media.com>
*
*/

var k3SlideShow = Class.create();


k3SlideShow.prototype = { 
	defaultImg:null,
	elemTarget:null,
	imagesSrc:null,
	imagesId:null,
	imagePosition:null,
	imagesInTransition:null,
	nbImages:null,
	nextOne:null,
	periodInterval:null,
	globalEffect:null,
	isAnim:null,
	isLoaded:null,
	initable:null,

	opt: function(v)
	{
		return this.options.get(v);
	},

	initialize: function(elementId,options) 
	{ 	this.isAnim = false;
		this.nbImages = 0;
		this.imagePosition = 0;
		this.nextOne = 0;
		this.elemTarget = $(elementId);
		this.defaultImg = 1;
		this.isLoaded = false;
		this.initable = false;		

		this.imagesSrc = new Array();
		this.imagesId = new Array();

		this.optionsDefault = $H(
		{
			menu:null,
			timeInterval:7, //seconde
			timeTransition:3, //seconde
			timeClickTransition:1,  //seconde
			linkTarget:"_blank",
			fps:30, //framePerSeconde
			zIndexDisplay:900,
			zIndexDisplayTransition:800,
			zIndexHidden:700
		});

		this.options=this.optionsDefault.merge(options);
		
  	},

	cycle: function(period)
	{ 	
	
		if (this.globalEffect)
			this.globalEffect.cancel();
		
		$(this.imagesId[this.imagePosition]).setStyle({ zIndex: this.options.get('zIndexDisplay'), visibility:'visible', display:'block'});



		$(this.imagesId[this.nextOne]).setStyle({ zIndex: this.options.get('zIndexDisplayTransition'), visibility:'visible', display:'block'});

		this.hideOtherImg();
		
		
		this.isAnim = true;
		
			
		
		this.globalEffect = new Effect.Fade(this.imagesId[this.imagePosition], { duration: this.options.get('timeTransition'), fps: this.options.get('fps'), afterFinish: function(e){ this.ajustPositions() }.bind(this) });


		this.ajustMenu();
		
		if (this.isLoaded == 'firstTime')
		{	
			if($('firstlinkslideshow')){
				$('firstlinkslideshow').setStyle({display: 'none'});
			}
			this.isLoaded = true;

		}

  	},
  	
  	cycleHome: function()
  	{
		if (this.globalEffect)
			this.globalEffect.cancel();
		
		$(this.imagesId[this.imagePosition]).setStyle({ zIndex: this.options.get('zIndexDisplay'), visibility:'visible', display:'block'});



		$(this.imagesId[this.nextOne]).setStyle({ zIndex: this.options.get('zIndexDisplayTransition'), visibility:'visible', display:'block'});

		this.hideOtherImg();
		
		
		this.isAnim = true;
		
	},

	ajustMenu: function()
	{	
		if ( this.options.get('menu') )
		{
			for (i=0; i<this.imagesId.length; i++)
			{	if ( i != this.nextOne )
				{	
					if ($('amenuelemslideshow_'+parseInt(i+1)).hasClassName('activeslide'))
					$('amenuelemslideshow_'+parseInt(i+1)).removeClassName('activeslide');
				}
			}
			$('amenuelemslideshow_'+parseInt(this.nextOne+1)).addClassName('activeslide');
		}
	},

	hideOtherImg: function()
	{
		for (i=0; i<this.imagesId.length; i++)
		{	if ( i != this.nextOne && i != this.imagePosition )
				$(this.imagesId[i]).setStyle({ zIndex: this.options.get('zIndexDisplayHidden'), visibility:'visible', display:'block'});
			
		}
	},

	ajustPositions: function()
	{	
		this.imagePosition = this.nextOne;

		if (this.nextOne + 1 >= this.nbImages)
			this.nextOne = 0;
		else
			this.nextOne ++;

		this.imagesInTransition = null;
		this.isAnim = false;
		
	},

	addImg: function(src,link)
	{	
		var theImg;
		this.nbImages ++;


		if (this.nbImages == 2) 
		{	if ( this.options.get('menu') )
			{
				new Insertion.Bottom(this.options.get('menu'), '<ul id="ulmenuslideshow" class="ulmenuslideshow"></ul>');
				this.addMenu(1) 
			}
		}
		if (this.nbImages >= 2)
		{	if ( this.options.get('menu') )
				this.addMenu(this.nbImages);
			
			this.initable = true;
		}
		
		this.imagesSrc.push(src);
		
		var imgFile = src.split('/').last();
		var imgSerial = imgFile.replace(/[^a-zA-Z0-9_]/g, "");
		
		
		this.imagesId.push(imgSerial);


	
		if (typeof(link) != 'undefined')
		{	
			new Insertion.Bottom(this.elemTarget.id, '<a href="'+link+'" target="'+this.options.get("linkTarget")+'" class="alinkslideshow"><img id="'+imgSerial+'" class="imgslideshow" style="visibility:visible; display:none;" alt=""/></a>');
		}
		else
		{
			new Insertion.Bottom(this.elemTarget.id, '<img id="'+imgSerial+'" class="imgslideshow" style="visibility:visible; display:none;" alt=""/>');
		}
		$(imgSerial).src=src;
		
	},
	
	addMenu: function(imageOrder)
	{	
		if(imageOrder == this.defaultImg)
			var aclass = ' class="activeslide"';
		else
			var aclass = '';

		new Insertion.Bottom('ulmenuslideshow', '<li id="limenuelemslideshow_'+imageOrder+'" class="limenuelemslideshow"><a href="javascript:;" id="amenuelemslideshow_'+imageOrder+'"'+aclass+'>'+imageOrder+'</a></li>');
		$('amenuelemslideshow_'+imageOrder).observe('click',function(e){ this.showImage(imageOrder) }.bind(this));

	},
	
	showImage: function(imageOrder)
	{	
		if ( this.imagePosition != imageOrder-1 && this.imagesInTransition != this.nextOne && !this.isAnim )
		{	this.isLoaded = true;
			this.stopInterval();
			this.nextOne = imageOrder -1 ;
			
			if(this.globalEffect)
				this.globalEffect.cancel();

			$(this.imagesId[this.nextOne]).setStyle({ zIndex: '900', visibility:'visible', display:'block', opacity:'0'});
			$(this.imagesId[this.imagePosition]).setStyle({ zIndex: '800', visibility:'visible', display:'block'});

			this.hideOtherImg();
			
			this.imagesInTransition = this.nextOne;
			this.globalEffect = Effect.Appear(this.imagesId[this.nextOne], { duration: this.options.get('timeClickTransition'), fps: this.options.get('fps'), afterFinish: function(e){ this.ajustPositions() }.bind(this)});
			
			this.ajustMenu();

			this.startUp();

		}
	},
	
	startUp: function()
	{	if (this.initable)
		{
			var timeInterval = this.options.get('timeInterval');
	
			if (!this.isLoaded)
			{	this.isLoaded = 'firstTime';
			 
				if (this.nbImages >= 2)
				{	this.nextOne = 1;
				}
			}
	
			this.periodInterval = new PeriodicalExecuter(function(e){this.cycle()}.bind(this), timeInterval);
		}
	},

	stopInterval: function()
	{	if(this.periodInterval)
			this.periodInterval.stop();
	}

}

