/**
 * @constructor
 */
compono.TabStrip = new compono.Object("TabStrip");

/**
 * active
 * Ativa uma tab;
 * Verifica se ha a referencia de 'active' no UL, se nao, cria;
 * Verifica se ha alguma tab ativa e a desativa;
 * @argument {Node} anchor Link dentro do LI;
 * @argument {Event} event Evento que foi gerado pelo click;
 * @argument {Function}	callback Funcao a ser executada no click, tendo o UL como escopo e recebendo o LI pai do anchor clicado e o evento como parametros
 */
compono.TabStrip.active = function(a, e, callback){
	var ul, li;
	
	ul = a.parentNode.parentNode;
	li = a.parentNode;
	
	if(!ul.active){
		ul.active = this.getByClassName("li", "current", ul);
	}
	if(ul.active && ul.active !== li){
		this.removeClassName("current", ul.active)
		this.appendClassName("current", li)
	}
	ul.active = li;

	this.initStorage(ul);

	if(!ul.containers){
		ul.containers = this.getContainers(ul);
	}
	if(ul.containers.active !== li.container){
		this.appendClassName("tabs-region-closeup", ul.containers.active);
		this.removeClassName("tabs-region-actived", ul.containers.active);
		
		this.appendClassName("tabs-region-actived", li.container);
		this.removeClassName("tabs-region-closeup", li.container);
		
		ul.containers.active = li.container;
		this.saveState(li, ul);
	}
	
	if(callback && typeof(callback) == "function"){
		callback.apply(ul, [li, e]);
	}
	
	return true;
}

/**
 * getTargets
 * Retorna a coleo de itens que estao ligados as tabs;
 * Guarda o item que for ativo;
 */
compono.TabStrip.getContainers = function(ul){
	var lis, containers;
	
	containers = new Array();
	lis = this.getAnyByAttribute("li", "contentid", null, ul)
	
	for(var i=0, element; element = lis[i]; i++){
		if(element && element.getAttribute("contentid")){
			o = this.getByID(	element.getAttribute("contentid")	);
			containers.push(	o	)
			element.container = o;
			if(!this.hasClassName("tabs-region-closeup",o)){
				containers.active = o;
			}
		}
	}
	
	return containers;
}

/**
 * initStorage
 * Guarda no UL a referncia de um hidden que serve como storage;
 */
compono.TabStrip.initStorage = function(ul){
	if(!ul.storage){
		ul.storage = this.getByID(ul.getAttribute("id") + "_SelectedIndex");
	}
	if(!this.indexed){
		var lis = this.getAnyByTagName("li", ul);
		for(var i=0, li; li = lis[i]; i++){
			li.index = i;
		}		
		this.indexed = true;
	}
}

/**
 * saveState
 * Guarda em um hidden o INDEX da tab clicada
 */
compono.TabStrip.saveState = function(li, ul){
	if(ul.storage){
		ul.storage.value = li.index;
		return true;
	}
	return false;
}
