function setColapsavel(elemento, handler, dock, passo, deslocamento, expandido, callback){
			
	elemento.style.position = "absolute";

	if(deslocamento%passo != 0){
		alert("[setColapsavel: " + elemento.id + "] Deslocamento deve ser multiplo de passo");
		return;
	}
	
	// Propriedades encapsuladas no atributo "colapsavel"
	elemento.colapsavel = {
		dock: dock,
		passo: passo,
		deslocamento: deslocamento,
		expandido: expandido,
		expande: function(){expande(elemento);},
		callback: callback
	}
	
	elemento.colapsavel.colapsa = function(){
			slide(elemento, -(this.passo), -(this.deslocamento));
			this.expandido = false;
			if(this.callback != null){this.callback(this.expandido)};
			};
			
	elemento.colapsavel.expande = function(){
			slide(elemento, this.passo, 0);
			this.expandido = true;
			if(this.callback != null){this.callback(this.expandido)};
			};

	// Adicionando evento ao handler
	handler.onclick = function() {
			elemento.colapsavel.expandido ?
			elemento.colapsavel.colapsa() : elemento.colapsavel.expande();};
	
	// Posicionamento inicial
	if(expandido){
		elemento.style[dock] = "0px";
	} else {
		elemento.style[dock] = -deslocamento + "px";
	}
	
}


function slide(elemento, delta, posFinal){
	var posicao = parseInt(elemento.style[elemento.colapsavel.dock]) + delta;
	elemento.style[elemento.colapsavel.dock] = posicao + "px";
	
	if(posicao != posFinal){
		setTimeout( function(){slide(elemento, delta, posFinal);}, 1);
	}
}
