// JavaScript Document
/*
* @classe :  Anims
* @version : 0.1
* @auteur : Nazaries Emmanuel -  LibreSens
* @contact : emmanuel@libresens.com-- http://www.libresens.com
* @description : ouverture ou fermeture de div de façon animée (Flash like) 
*/
function animElements(element){
	this.element=element;
	this.pas;
	this.timeout=new Array();
}



/////// renvoie Hauteur Css si déja définie en js (si définie ds la feuille de style, renvoie 0)
animElements.prototype.getHeightCss = function (element){
if(element==undefined) var element=this.element;
var h=element.style.height;
h=h.split('px');
h = Number(h[0]);
return h;	
}


/// renvoie veritable Hauteur de l'élément (définie ou non ds la feuille de style, ou par du js)
animElements.prototype.getHeight = function(element){
if(element==undefined) var element=this.element;
var h=element.offsetHeight;
return h;	
}


animElements.prototype.getHeight2 = function(element){
if(element==undefined) var element=this.element;

var h;
if(getHeight(element)==0) h=getHeightCss(element);	
if(getHeightCss(element)==0) h=getHeight(element);	
return h;
}

/////// renvoie Largeur Css si déja définie en js (si définie ds la feuille de style, renvoie 0)
animElements.prototype.getWidthCss = function(element){
if(element==undefined) var element=this.element;
var w=element.style.width;
w=w.split('px');
w = Number(w[0]);
return w;	
}

/// renvoie veritable Largeur de l'élément (définie ou non ds la feuille de style, ou par du js)
animElements.prototype.getWidth = function(element){
if(element==undefined) var element=this.element;

var w=element.offsetWidth;
return w;	
}

////////////// Renvoie largeur et hauteur css dans un tableau (0 => largeur, 1=> hauteur)
animElements.prototype.getDimCss = function(element){
if(element==undefined) var element=this.element;

var tab = new Array();
tab[0] = this.getWidthCss(element);
tab[1] = this.getHeightCss(element);
return tab;	
}

////////////// Renvoie véritable largeur et hauteur dans un tableau (0 => largeur, 1=> hauteur)
animElements.prototype.getDim = function(element){
if(element==undefined) var element=this.element;

var tab = new Array();
tab[0] = this.getWidth(element);
tab[1] = this.getHeight(element);
return tab;	
}

//////// Donne une hauteur
animElements.prototype.setHeight = function(height, element){
if(element==undefined) var element=this.element;

element.style.height=height+'px';
}

//// Donne une largeur
animElements.prototype.setWidth = function(width, element){
if(element==undefined) var element=this.element;

element.style.width=width+'px';	
}


/* 
Donne une largeur et une hauteur, OU, une largeur ou une hauteur 
si w_or_h non spécifié lors de l'appel de la fonction => Donne une largeur et une hauteur;
si w_or_h=0, => donne une largeur
si w_or_h=1, => donne une hauteur
Ex : setDim('id_div', 100, 200) >> donne largeur=100 et hauteur=200
setDim('id_div', 100, 200,0) >> donne largeur=100
setDim('id_div', 100, 200, 1) >> donne hauteur=200
*/
animElements.prototype.setDim = function(width, height, element, w_or_h){
if(element==undefined) var element=this.element;

var w=width;	
var h=height;	
if(w_or_h==undefined){
	if(width==undefined) w_or_h=1;
	if(height==undefined) w_or_h=0;
}

var w_h=parseInt(w_or_h);

	switch (w_h){
		case undefined :
		this.setWidth(w, element);
		this.setHeight(h, element);
		break;
		
		case 0 :
		this.setWidth(w, element);
		break;
		
		case 1 :
		this.setHeight(h, element);
		break;
	}
}

////////// fonction qui anime le div
animElements.prototype.openDiv = function(taille_min, taille_max, pas_taille, w_or_h, element) {
if(element==undefined) var element=this.element;

var t_max = parseInt(taille_max);
var t_min = parseInt(taille_min);
var pas = parseInt(pas_taille);
var w_h=w_or_h;
	//alert(getHeight(id)+' css:'+getHeightCss(id));

var taille=this.getDimCss(element);
taille=parseInt(taille[w_h]); ///////////// recup hauteur ou largeur
//alert(taille+" tmin:"+t_min+" tmax:"+t_max);

if(taille>=t_max) { /////// si taille dépasse taille_max >> anim de fermeture
	pas= -pas; // on inverse le pas
	taille=t_max;
}
pas=parseInt(pas);
taille=parseInt(taille);

if(taille<=t_min) {/////// si taille dépasse taille_min >> anim d'ouverture
	taille=t_min;
}
pas=parseInt(pas);
taille=parseInt(taille);
taille=taille+pas;
//alert(taille+" pas:"+pas);

	//// si div n'a pas atteint la taille de fin
	//alert(taille+'<'+t_max+' && '+taille+'>'+t_min);
	if(taille<t_max && taille>t_min) {	
		this.setDim(taille, taille,element, w_h); /// on lui donne nouvelle taille
		var localThis = this;
		this.timeout[this.timeout.length]=window.setTimeout(function(){localThis.openDiv(t_min, t_max, pas, w_h, element)},0);	
	}
	else {
		taille=taille+pas;
		if(taille>t_max) { // si anim d'ouverture
			this.setDim(t_max, t_max,element, w_h); /// on lui mets taille max
		} /// si anim de fermeture
		if(taille<t_min) this.setDim(t_min, t_min, element, w_h); // on lui mets taille min
		
		this.clearAllTimeout();
		if(this.animFini) this.animFini();
	}
}


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