/**
* 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: 'galery',
			elemTag: 'div',
			insertPuce : false
		};
		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;
		if(options.elemTag && Object.isString(options.elemTag))
			this.elemTag = options.elemTag;
		if(options.insertPuce)
			this.insertPuce = options.insertPuce;

		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(this.elemTag);
		this.NumberImages = this.aImgSlide.length;		

		if(this.insertPuce){new Insertion.After(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);
		}
		if(this.aImgSlide[0]){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){
		if(this.insertPuce){
			var elems = $$('li.puce_this');
			for(var i=0, iM=elems.length;i<iM; i++){
				elems[i].className = 'puce';
			}
		}
	},

	AffichePuce:function(y){
		if(this.insertPuce){
			this.RazPuces();
			if($('puce_'+y+'_'+this.idContentGd)){
				$('puce_'+y+'_'+this.idContentGd).className = 'puce_this';
			}
		}
	},

	InsertPuce:function(num){
		if(this.insertPuce){
			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;
		}	
	}	
}

