/**
* Classe permettant la mise en place d'une galerie d'images
* @author Erase
* @version 1.0.0
*
*/
TerraGalery = Class.create();
TerraGalery.prototype = {
	initialize:function(){
		var defaults = {
			effetName: 'Fade',
			wait: 2500,
			idContentGd: 'slide',
		};
		var options = Object.extend(defaults, arguments[0] || { });
		if(options.effetName && Object.isString(options.effetName))
			this.effetName = options.effetName;
		if(options.wait && Object.isNumber(options.wait))
			this.wait = options.wait;
		if(options.idContentGd && Object.isString(options.idContentGd))
			this.idContentGd = options.idContentGd;

		this.icr = 0;
		this.NumberImages =  0;
		this.bol = true;
		this.aImgSlide = [];
		this.play;
		this.go = 'false';

		this.InitGalery();
	},
	
	InitGalery:function(){
		var elem = $(this.idContentGd);
		this.aImgSlide = elem.getElementsByTagName('div');
		this.NumberImages = this.aImgSlide.length;		
		
		new Insertion.Bottom(elem, '<ul id="puces_'+this.idContentGd+'"></ul>');
		for(var i=0; i<this.NumberImages; i++){
			this.aImgSlide[i].style.display = 'none';
			this.aImgSlide[i].style.zIndex = '48';
			this.InsertPuce(i);
		}
		this.aImgSlide[0].style.display = 'block';
		this.AffichePuce(0);
		var t = this;
		this.play = setInterval(function(){t.PlayGalery();}, this.wait);
	},	
	
	EventMouseClick:function(e,elem){
		var elems = elem.id.split('_');
		this.AffichePuce(elems[1]);
		this.AfficheThis(elems[1]);		
	},
	
	RazPuces:function(y){
		var elems = $$('li.puce_this');
		for(var i=0, iM=elems.length;i<iM; i++){
			elems[i].className = 'puce';
		}
	},
	
	AffichePuce:function(y){
		this.RazPuces();
		if($('puce_'+y+'_'+this.idContentGd)){
			$('puce_'+y+'_'+this.idContentGd).className = 'puce_this';
		}
	},
	
	InsertPuce:function(num){
		var t = this;
		new Insertion.Bottom("puces_"+this.idContentGd, '<li class="puce" id="puce_'+num+'_'+this.idContentGd+'"></li>')
		$('puce_'+num+'_'+this.idContentGd).observe('click', this.EventMouseClick.bindAsEventListener(this, $('puce_'+num+'_'+this.idContentGd)));
	},
	
	StopGalery:function(){
		if(this.play){
			clearInterval(this.play);	
		}	
	},
	
	PlayGalery:function(){
		var imageShow, imageHide;
		if(this.go != 'false'){
			if(this.go-1 < 0){
				this.icr = this.NumberImages-1;
			}else{
				this.icr = this.go-1;
			}
			this.go = 'false';
		}
		imageShow = this.icr+1;
		imageHide = this.icr;
	
		if(imageShow == this.NumberImages) {
			this.ChangePics(0,imageHide);	
			this.icr = 0;					
		} else {
			this.ChangePics(imageShow,imageHide);			
			this.icr++;
		}
	},
	
	ChangePics:function(x, y){
		if(this.aImgSlide[x] && this.aImgSlide[y]){
			this.aImgSlide[x].style.zIndex = '48';
			this.aImgSlide[x].style.display='block';
			this.AffichePuce(x);
			this.SwitchEffect(y);
		}
	},
	
	AfficheThis:function(y){
		if(this.bol==true){
			for(var i=0; i<this.NumberImages; i++){
				if(this.aImgSlide[i]){
					this.aImgSlide[i].style.display = 'none';
					this.aImgSlide[i].style.zIndex = '48';
				}
			}
			this.StopGalery();
			if(this.aImgSlide[y]){
				this.aImgSlide[y].style.display = 'block';
				this.aImgSlide[y].style.zIndex = '48';
			}
			this.go=y;
			var t = this;
			this.play = setInterval(function(){t.PlayGalery();}, this.wait);
			
		}else{
			this.AfficheThis(y);
		}
	},
	
	SwitchEffect:function(y){
		var elemPict = this.aImgSlide[y];
		switch(this.effetName){
			case 'Shrink':
				new Effect.Shrink(elemPict, {duration: 2, beforeStart: function(){this.bol = false; elemPict.style.zIndex = '99';}, afterFinish:function(){this.bol = true}});
			break;
			case 'Fold':
				new Effect.Fold(elemPict, {duration: 2, beforeStart: function(){this.bol = false; elemPict.style.zIndex = '99';}, afterFinish:function(){this.bol = true}});
			break;
			case 'DropOut':
				new Effect.DropOut(elemPict, {duration: 2, beforeStart: function(){this.bol = false; elemPict.style.zIndex = '99';}, afterFinish:function(){this.bol = true}});
			break;
			case 'BlindUp':
				new Effect.BlindUp(elemPict, {duration: 2, beforeStart: function(){this.bol = false; elemPict.style.zIndex = '99';}, afterFinish:function(){this.bol = true}});
			break;
			case 'Fade':
				new Effect.Fade(elemPict, {duration: 1, beforeStart: function(){this.bol = false; elemPict.style.zIndex = '99';}, afterFinish:function(){this.bol = true}});
			break;
			default:
				new Effect.Fade(elemPict, {duration: 1, beforeStart: function(){this.bol = false; elemPict.style.zIndex = '99';}, afterFinish:function(){this.bol = true}});
			break;
		}	
	}	
}


