
/**
 * Objeto QCollapsePanel - expande/contrai uma div
 * 
 * @param args {
 * 		name 	- nome/id da div (obrigatorio)
 * 		opened 	- cria o elemento expandido (default false)
 * 		speed	- velocidade da animação para expandir/contrair (default 300)
 * 		label	- texto no top do painel (default '')
 * }
 * 
 * @since 1.0 24/07/2009
 * @author Inacio Gomes Klassmann
 */
function QCollapsePanel(args) {
	var name 		= args.name;
	var opened 		= args.opened ? args.opened : false;
	var speed 		= args.speed ? args.speed : 300;
	var label 		= args.label ? args.label : '';
	var div 		= null;
	var me			= this;
	me.collapse 	= null;
	
	
	/**
	 * Altera a velocidade da animação
	 */
	this.setSpeed = function(s) {
		speed = s;
	}


	/**
	 * Retorna a velocidade da animação
	 */
	this.getSpeed = function() {
		return speed;
	}


	/**
	 * Altera o texto do topo
	 */
	this.setLabel = function(s) {
		label = s;
		if (me.collapse)
			;// colocar o texto no html
	}


	/**
	 * Retorna o texto do topo do painel
	 */
	this.getLabel = function() {
		return label;
	}
	
	
	/**
	 * Retorna o nome do painel
	 */
	this.getName = function() {
		return name;
	}
	
	
	/**
	 * Retorna o painel
	 */
	this.get = function() {
		return me.collapse;
	}


	/**
	 * Cria o painel na tela
	 */
	this.makeCollapse = function() {
		me.collapse = $j('#' + name);
		me.collapse.after('<div class="COLLAPSED" id="div' + name + '"></div>');

		div = $j('#div' + name);
		me.collapse.children().remove().appendTo('#div' + name);

		if (!opened) {
			div.hide();
			me.collapse.addClass('COLLAPSECLOSE');
		} else {
			me.collapse.addClass('COLLAPSEOPEN');
		}
		
		me.collapse.prepend('<span class="PADDINGRIGHT">&nbsp;</span> ' + label);
		me.collapse.click(function() { me.slideToggle(); });

		return true;
	}

	
	/**
	 * Realiza a animação de slide do painel
	 */
	this.slideToggle = function() {
		me.collapse.toggleClass("COLLAPSECLOSE");
		me.collapse.toggleClass("COLLAPSEOPEN");
		div.slideToggle(speed);
	}
	
	
	/**
	 * Realiza a animação de slide do painel
	 */
	this.slideUp = function() {
		if (me.isOpened()) {
			me.collapse.toggleClass("COLLAPSECLOSE");
			me.collapse.toggleClass("COLLAPSEOPEN");
			div.slideUp(speed);
		}
	}
	
	
	/**
	 * Realiza a animação de slide do painel
	 */
	this.slideDown = function() {
		if (!me.isOpened()) {
			me.collapse.toggleClass("COLLAPSECLOSE");
			me.collapse.toggleClass("COLLAPSEOPEN");
			div.slideDown(speed);
		}
	}
	
	
	/**
	 * Abre o painel se ele estiver fechado
	 */
	this.open = function() {
		if (me.isOpened() == false) {
			this.slideToggle();
		}
	}
	
	
	/**
	 * Verifica se o painel está aberto
	 */
	this.isOpened = function() {
		return me.collapse ? me.collapse.hasClass('COLLAPSEOPEN') : false;
	}


	/**
	 * Verifica se o painel está na tela
	 */
	this.isCreated = function() {
		return me.collapse ? true : false;
	}


	/**
	 * Desabilia/Habilita o collapse
	 */
	this.disabled = function(bool) {
		if (bool || typeof bool == 'undefined') {
			me.slideUp();
			me.collapse.unbind('click');
		} else {
			me.collapse.click(function() { me.slideToggle(); });
		}

		return true;
	}


	/**
	 * Mostra/esconde o collapse
	 */
	this.hidden = function(bool) {
		if (bool || typeof bool == 'undefined') {
			me.slideUp();
			$j(me.collapse).hide();
		} else {
			$j(me.collapse).show();
		}

		return true;
	}
}
