// JavaScript Document

function Number_clss( valor ) {
	var self = this;
	var value = 0;
	this.maximo = 255;
	this.minimo = 0;
	this.extremo = 0;
	this.passo = 1;
	this.loop = false;
	
	this.set = function( valor ) {
		if( valor > self.maximo ) {
			if( self.loop ) {
				self.value = valor - ( self.maximo - self.minimo + 1);
			} else {
				self.value = self.maximo;
			}
		} else if ( valor < self.minimo ) {
			if( self.loop ) {
				self.value = valor + ( self.maximo - self.minimo + 1);
			} else {
				self.value = self.minimo;
			}
		} else {
			self.value = valor;
		}
		if( valor >= self.maximo ) {
			self.extremo = 1;
		} else if ( valor <= self.minimo ) {
			self.extremo = -1;
		} else {
			self.extremo = 0;
		}
	}
	
	if( typeof( valor ) != "undefined" ) {
		self.set( valor );
	}
	
	this.get = function() {
		return self.value;
	}
	
	this.inc = function( valor ) {
		if( typeof( valor ) != "undefined" ) {
			self.set( self.value + valor );
		} else {
			self.set( self.value + self.passo );
		}
		return self.value;
	}
	
	this.dec = function( valor ) {
		if( typeof( valor ) != "undefined" ) {
			self.set( self.value - valor );
		} else {
			self.set( self.value - self.passo );
		}
		return self.value;
	}
}

function sanfona_clss() {
	var self = this;
	var intervalId = null;
	var velocidade = 1;
	var unlock = true;
	var divs = new Array();
	this.aberto = -2;
	
	this.minHeight = 0;
	this.maxHeight = 200;
	this.ease = 1;
	this.tempo = 20;
	
	this.dts = null;
	
	this.addDiv = function( id ) {
		var s = divs.length;
		if( typeof( id ) == "string" ) {
			divs[s] = document.getElementById( id );
		} else {
			divs[s] = id;
		}
		divs[s].style.height = "auto";
		divs[s].altura = new Number_clss();
		divs[s].altura.maximo = divs[s].offsetHeight;
		divs[s].altura.minimo = self.minHeight;
		divs[s].style.overflow = "hidden";
		if( self.aberto != s ) {
			divs[s].style.height = divs[s].altura.minimo + "px";
		}
	}

	
	function mover() {
		velocidade = velocidade + ( self.ease - 1 );
		var parar = true;
		var posicao = 0;
		var distancia = 0;
		var destino = 0;
		for( var i=0; i < divs.length; i++ ) {
			divs[i].altura.set( divs[i].offsetHeight );
			if( self.ease <= 1 ) {
				posicao = divs[i].offsetHeight;
				if( i== self.aberto ) {
					distancia = (divs[i].altura.maximo - posicao );
					destino = posicao + Math.floor(( distancia ) * self.ease)+2;
				} else {
					distancia = (divs[i].altura.minimo - posicao );
					destino = posicao + Math.floor(( distancia ) * self.ease)-2;
				}
				divs[i].altura.set( destino );
			} else {
				posicao = divs[i].offsetHeight;
				if( i== self.aberto ) {
					distancia = (posicao - divs[i].altura.minimo  ) + 1;
					destino = divs[i].altura.minimo + Math.round( distancia * self.ease);
				} else {
					distancia = (posicao - divs[i].altura.maximo ) - 10;
					destino = divs[i].altura.maximo + Math.round( distancia * self.ease);
				}
				divs[i].altura.set( destino );
			}
			parar = parar && ( divs[i].altura.extremo != 0 );	
			divs[i].style.height = divs[i].altura.get() + "px";
		}
		if( parar ) {
			clearInterval( intervalId );
			unlock = true;
		}		
	}
	
	this.abrir = function( idx ) {
		if( unlock ) {
			unlock = false;
			velocidade = 1;
			if( idx == self.aberto ) {
				self.aberto = -1;
			} else {
				self.aberto = idx;
			}
			
			var dts = this.dts;
			var aux = "";
			for( var i=0; i < dts.length; i++ ) {
				aux = "";
				if( i == self.aberto ) { aux = "aberto"; }
				dts[i].getElementsByTagName("a")[0].className = aux;
			}
			
			intervalId = setInterval( mover, this.tempo );
		}
	}
}

function sanfonar( id ){
	var sanf = new sanfona_clss();
	sanf.aberto = -1;
	sanf.ease = 0.5;
	var dl = getById( id );
	var dts = getByTag( dl, "dt" );
	sanf.dts = dts;
	var dds = getByTag( dl, "dd" );
	for( var i=0; i < dts.length; i++ ){
		sanf.addDiv( dds[i] );
		var a = dts[i].getElementsByTagName('a')[0];
		if( !a ) {
			var inner = dts[i].innerHTML;
			dts[i].innerHTML = "";
			var a = newElement("a", dts[i]);
			a.innerHTML = inner;
		}
		a.style.cursor = "pointer";
		a.indiceSanfona = i;
		a.sanf = sanf;
		addEventLis( a, "click", function(e){
			var evt = new ev(e);
			var a = evt.e.target
			a.sanf.abrir( a.indiceSanfona );
		});
	}
	return sanf;
}