// JavaScript Document
/*
* @classe :  Opacity fondu
* @version : 0.1
* @auteur : Nazaries Emmanuel -  LibreSens
* @contact : emmanuel@libresens.com -- http://www.libresens.com
* @description : fondu d'éléments
*/
function Opacity(id,opa){
	this.id=id;
	this.pas;
	
	if(opa==undefined) this.opa=1;
	else this.opa=opa;
	this.setOpacity(this.opa);
	
	this.global_play=true;
	this.i_img=0;
	
	this.o_min;
	this.o_max;
	this.o_depart;
	this.delai;
	this.fin_aller;
	this.fin_retour;
	this.timeout=new Array();
}


/// Attribut une opacité
Opacity.prototype.setOpacity = function (opacity){
this.opa=opacity;
var opa_ie=this.opa*100;
	if(document.getElementById(this.id)){
		document.getElementById(this.id).style.opacity=this.opa; /// pr navigateurs qui supportent css 3
		document.getElementById(this.id).style.MozOpacity =this.opa; /// pr vieux firefox
		document.getElementById(this.id).style.filter = "alpha(opacity=" + (opa_ie) + ")"; /// pr IE
		document.getElementById(this.id).style.KhtmlOpacity =this.opa; /// pr Konqueror et safari
	}
}


// Recupere et renvoie l'opacité d'un élément
Opacity.prototype.getOpacity = function (){
if(document.getElementById(this.id)){
	this.opa=document.getElementById(this.id).style.opacity;
	//alert(typeof(opa));
	if((this.opa==undefined | this.opa=='') & (typeof(this.opa)=="string" | typeof(this.opa)=="undefined")) {
		this.opa=undefined;
	}
	return this.opa;
}
else return 0;
//return this.opa;
}

Opacity.prototype.getPas = function (){
	return this.pas;	
}


////// fonction qui fait le fondu ////////////////
////// opa depart : borne de départ => 'min' ou 'max'
////// opa_min & opa_max => bornes entre lesquelles l'opacité varie
////// id => id de l'élément dont l'opacité doit varier
////// pas_opacity => degres d'incrémentation de l'opacité
Opacity.prototype.fondu = function (pas_opacity, opa_min, opa_max, opa_depart){
if(this.global_play==true){
	//document.getElementById('testeuh').innerHTML=document.getElementById('testeuh').innerHTML+' pouet';
	this.pas=parseFloat(pas_opacity);
	this.o_max = opa_max;
	this.o_min = opa_min;
	this.o_depart = opa_depart;
	
	if(this.o_max==undefined) this.o_max=1; /// par défaut opacité max = 1
	if(this.o_min==undefined) this.o_min=0; /// par défaut opacité min = 0
	
	this.o_max = parseFloat(this.o_max);
	this.o_min = parseFloat(this.o_min);
	
	this.opa=this.getOpacity();
	if(this.opa==undefined) {
		if(this.o_depart==undefined) this.opa=this.o_min; //si indéfinie on mets par défaut à opacité min
		else {
			if(this.o_depart=='min') this.opa=this.o_min;
			if(this.o_depart=='max') this.opa=this.o_max;
		}
	}
	
	if(this.opa>=this.o_max) { /////// si opacité = opacité max >> anim de fermeture
		Localpas=parseFloat(-Math.abs(this.pas));
		this.pas=parseFloat(-Math.abs(this.pas));// on inverse le pas
		this.opa=parseFloat(this.o_max);
	}
	if(this.opa<=this.o_min) {/////// si opacité = opacité_min >> anim d'ouverture
		this.opa=this.o_min;
		Localpas=parseFloat(Math.abs(this.pas));
		this.pas=parseFloat(Math.abs(this.pas));
		//ouvre_ferme_inline(id_obj);
		//ouvre_ferme_visibility(id_obj);
	}
	
		this.opa=parseFloat(this.opa);
		this.opa=Math.round (parseFloat(this.opa+Localpas)*100)/100;
		/////////// si img pas completement transparente ou completement opaque 
		if(this.opa<this.o_max & this.opa>this.o_min) {
			this.setOpacity(this.opa);
			var localThis = this;
  			this.timeout[this.timeout.length]=window.setTimeout(function(){localThis.fondu(localThis.pas,localThis.o_min,localThis.o_max)}, 0);
			return false;
		}
		else { 
			this.opa=this.opa+Localpas;
			if(this.opa<this.o_min) { //////////////// si opacité dépasse le minimum, on la cache et mets opacité au minimum
				this.setOpacity(this.o_min)
				//ouvre_ferme_inline(id_obj);
				//ouvre_ferme_visibility(id_obj);
			}
			if(this.opa>this.o_max){ //////////////// si opaque on mets opacité au max
				this.setOpacity(this.o_max);
			}
			this.clearAllTimeout();
			if(this.fonduAllerFini) this.fonduAllerFini();
			
			return true;
		}
} else return false;
}


////// fonction qui fait 2 fondus à la suite ////////////////
////// fondus => transparence >> opaque, pause, puis opaque >> transparence ; mettre opa_depart='min'
///// OU opaque >> transparence, pause, puis transparence >> opaque ; mettre opa_depart='max'
////// opa depart : borne de départ => 'min' ou 'max'
////// opa_min & opa_max => bornes entre lesquelles l'opacité varie
////// par défaut opa_min=0, opa_max=1, opa_depart='min'
////// id => id de l'élément dont l'opacité doit varier
////// pas_opacity => degres d'incrémentation de l'opacité
////// tps_pause => tps de pause en millisecondes entre les 2 fondus

Opacity.prototype.fondu_aller_retour = function (tps_pause, pas_opacity, opa_min, opa_max, opa_depart){
this.pas=parseFloat(pas_opacity);
this.delai=tps_pause;
this.o_max = opa_max;
this.o_min = opa_min;
if(this.o_max==undefined) this.o_max=1; /// par défaut opacité max = 1
if(this.o_min==undefined) this.o_min=0; /// par défaut opacité min = 0
var o_fin;

this.o_depart = opa_depart;
if(this.o_depart==undefined | this.o_depart=='min') {
	o_fin=this.o_max;
}
else {
	if(this.o_depart=='max') {
		o_fin=this.o_min;
	}
}
	
	this.fondu(this.pas, this.o_min, this.o_max, this.o_depart); /// on apelle fondu aller
	this.fonduAllerFini=function(){ /// on redéfinit le callback qui sera déclenché lors de la fin du fondu aller
		var localThis = this;
		this.timeout[this.timeout.length]=window.setTimeout(function(){localThis.fondu(localThis.pas, localThis.o_min, localThis.o_max, o_fin)}, localThis.delai);
		this.fonduAllerFini=this.fonduRetourFini;
	}
}

Opacity.prototype.clearAllTimeout = function (){
	for(var i=0; i<this.timeout.length; i++){
		window.clearTimeout(this.timeout[i]);
	}
	
	//alert(i+' '+this.timeout.length);
	this.timeout.splice(0,i);
	
}



