/**
* Construtor da classe que representa cada item do conteiner
*
* @since 13/06/2006
* @author Erix Henrique Morato <emorato@unibh.br>
* @access public
*/
ListNode = function()
{
	this.arrNode = new Array();
}

/**
* Metodo para adicionar o nodo na listas de nodos filhos
*
* @since 13/06/2006
* @author Erix Henrique Morato <emorato@unibh.br>
* @access public
*/
ListNode.prototype.add = function(node)
{	
	if(!this.find(node.getId()))
	{
		this.arrNode[this.arrNode.length] = node;		
	}
}

/**
* Metodo para remover o nodo na listas de nodos filhos
*
* @since 13/06/2006
* @author Erix Henrique Morato <emorato@unibh.br>
* @access public
*/
ListNode.prototype.remove = function(node)
{
	var arrItens = new Array();
	for(var intI=0;intI<this.arrNode.length;intI++)
	{
		if(this.arrNode[intI].getId() != node.getId())
		{
			arrItens[arrItens.length] = this.arrNode[intI];
		}
	}
	this.arrNode = arrItens;
}

/**
* Metodo para buscar o node pelo id
*
* @param id - identificador do elemento que esta sendo buscado
* @since 13/06/2006
* @author Erix Henrique Morato <emorato@unibh.br>
* @access public
*/
ListNode.prototype.find = function(id)
{
	intPosicao = this.findPosicao(id);
	if(intPosicao!= -1)
		return this.arrNode[intPosicao];
	return false;
}
/**
* Metodo para a posicao do nodo da lista pelo id
*
* @param id - identificador do elemento que esta sendo buscado
* @since 13/06/2006
* @author Erix Henrique Morato <emorato@unibh.br>
* @access public
*/
ListNode.prototype.findPosicao = function(id)
{
	for(var intX=0;intX<this.arrNode.length;intX++)
	{
		if(this.arrNode[intX].getId() == id)
			return intX;
	}
	return -1;
}

/**
* Retorna a quantidade de itens da lista
*
* @since 13/06/2006
* @author Erix Henrique Morato <emorato@unibh.br>
* @access public
*/
ListNode.prototype.count = function()
{		
	var intI=0;
	for(var strNome in this.arrNode)
	{
		intI++;
	}
	return intI;
}

/**
* Retorna a quantidade de descendentes
*
* @since 27/07/2006
* @author Erix Henrique Morato <emorato@unibh.br>
* @access public
*/
ListNode.prototype.countDescendentes = function()
{
	var intDescendentes = 0;
	for(var intI=0;intI<this.arrNode.length;intI++)
	{
		if(this.arrNode[intI].isFilhos())
		{
			intDescendentes += this.arrNode[intI].countDescendentes();
		}
		intDescendentes+=1;
	}
	return intDescendentes;
}

/**
* Retorna se o node ? descendente
*
* @since 27/07/2006
* @author Erix Henrique Morato <emorato@unibh.br>
* @access public
*/
ListNode.prototype.isDescendente = function(objNode)
{
	var bolDescendente = false;
	for(var intI=0;intI<this.arrNode.length;intI++)
	{
		if(this.arrNode[intI].isFilhos())
		{
			bolDescendente = this.arrNode[intI].isDescendente(objNode);
		}
		if(this.arrNode[intI]==objNode)
		{
			bolDescendente = true;
		}
		if(bolDescendente)
			break;
	}
	return bolDescendente;
}

/**
* Retorna o node pela posicao
*
* @param intPosicao - Posicao do node buscado
* @since 13/06/2006
* @author Erix Henrique Morato <emorato@unibh.br>
* @access public
*/
ListNode.prototype.getNode = function(intPosicao)
{
	return this.arrNode[intPosicao];
}

/**
* Metodo para inserir o nodo antes ou depois do outro
*
* @param node - Node que esta sendo incluido ou movido
* @param nodeRef - node que serve como referencia
* @param bolAntes - Indica se o elemento vai ser colocado antes ou depois
* @since 13/06/2006
* @author Erix Henrique Morato <emorato@unibh.br>
* @access public
*/
ListNode.prototype.insert = function(node,nodeRef,bolAntes)
{
	var arrElementos = Array();
	if(bolAntes)
	{
		for(var intI=0;intI<this.count();intI++)
		{
			if(this.arrNode[intI].getId()==nodeRef.getId())
			{
				arrElementos[arrElementos.length] = node;
				arrElementos[arrElementos.length] = nodeRef;
			}
			else
			{
				arrElementos[arrElementos.length] = this.arrNode[intI];
			}
		}
	}
	else
	{
		for(var intI=0;intI<this.count();intI++)
		{
			if(this.arrNode[intI].getId()==nodeRef.getId())
			{
				arrElementos[arrElementos.length] = nodeRef;
				arrElementos[arrElementos.length] = node;
			}
			else
			{
				arrElementos[arrElementos.length] = this.arrNode[intI];
			}
		}
	}
	this.arrNode = arrElementos;
}

/**
* retorna os itens no formato de array
*
* @since 13/06/2006
* @author Erix Henrique Morato <emorato@unibh.br>
* @access public
*/
ListNode.prototype.getArray= function()
{
	var arrRetorno = new Array();
	for(var intI=0;intI<this.arrNode.length;intI++)
	{
		var arrTemp = new Array();
		arrTemp[0]= this.arrNode[intI].getId();
		arrTemp["ID"] = this.arrNode[intI].getId();
		arrTemp[1] = this.arrNode[intI].getNodePai().getId();
		arrTemp["IDPAI"] = this.arrNode[intI].getNodePai().getId();
		arrTemp[2] = this.arrNode[intI].getConteudo();
		arrTemp["CONTEUDO"] = this.arrNode[intI].getConteudo();
		arrTemp[3] = this.arrNode[intI].getEspacamento();
		arrTemp["ESPACAMENTO"] = this.arrNode[intI].getEspacamento();
		arrTemp[4] = this.arrNode[intI].getNivel();
		arrTemp["NIVEL"] = this.arrNode[intI].getNivel();
		arrTemp[5] = this.arrNode[intI].getEspacamentoDefinido();
		arrTemp["ESPACAMENTODEFINIDO"] = this.arrNode[intI].getEspacamentoDefinido();
		arrTemp[6] = this.arrNode[intI].getAberto();
		arrTemp["ABERTO"] = this.arrNode[intI].getAberto();
		
		if(this.arrNode[intI].isFilhos())
		{
			arrTemp[7] = this.arrNode[intI].getArray();
			arrTemp["FILHOS"] =arrTemp[7];
		}
		else
		{
			arrTemp[7] = new Array();
			arrTemp["FILHOS"] = new Array();
		}
		arrRetorno[intI] = arrTemp;
	}
	return arrRetorno;
}

/**
* Atualiza node pela posicao
*
* @param objNode - Node que esta sendo incluido na lista
* @param posicao - posicao onde esta incluindo o elemento
* @since 13/06/2006
* @author Erix Henrique Morato <emorato@unibh.br>
* @access public
*/
ListNode.prototype.setNode= function(objNode,posicao)
{
	this.arrNode[posicao] = objNode;	
}
