/***********************************************************************
CONSTANTES POUR L'OBJET FEUILLE
***********************************************************************/
/***********************************************************
Types possibles pour une feuille :
- 0 : texte
- 1 : image
************************************************************/
var FEUILLE_TYPE_TEXTE = 0;
var FEUILLE_TYPE_IMAGE = 1;

/***********************************************************
Action possibles pour une feuille :
- 0 : pas d'action
- 1 : action onclick de l'arbre
	actions :
		- 1 : Switche le noeud en ouvert/fermé
		- 2 : Switche l'état visible ou invisible du noeud
		- 3 : Fais disparaitre le noeud et en donnes une copie
		à un autre arbre cible. Dans ce cas, le parametre est
		remplace par le nom de l'ancien arbre (la nouvelle cible
		donc), et l'action 3 par la 4.
		- 4 : Détruit un noeud de l'arbre et fais apparaitre
		un noeud dans l'arbre cible. C'est l'effet de retour
		de l'action 3.
		- 5 : Aucune action. Ce type d'action est mis en place quand
		un noeud est échangé (cf. 3)
- 2 : lien simple vers url vers target précisé dans parametre
- 3 : action onclick utilisateur
************************************************************/
var FEUILLE_TYPEACTION_NON = 0;
var FEUILLE_TYPEACTION_CLIC_EXISTANT = 1;
var FEUILLE_TYPEACTION_LIEN = 2;
var FEUILLE_TYPEACTION_CLIC_USER = 3;
var FEUILLE_TYPEACTION_OVER = 4;



function Feuille ()
/***********************************************************************
BUT : Crée un objet Feuille
ENTREE :
SORTIE :
Retourne un objet "feuille" non initialisé
Une feuille est
	constituée
		d'une "tige" qui fait référence à son "noeud" père
		d'un "myself" qui fait référence à elle-même
		d'un "type" qui définit le type de la feuille (texte simple, url, action, image, etc...)
		d'un "contenu" qui définit le contenu utilisé suivant le type de feuille
		d'une "classe" qui définit la feuille de style a utiliser sur la feuille
		d'un "typeaction" qui définit le type d'action à faire si la feuille en possède
		d'une "action" qui est le contenu de l'action à faire si la feuille en a une
		d'un "parametre" qui sert suivant l'action réalisée
		de méthodes
			Construire : Retourne le contenu HTML de la feuille suivant son type et ses options
	une partie d'un noeud
CONTRAINTES :
RISQUES :
************************************************************************/
{
	this.id = 0;
	this.myself = this;
	this.contenu = '';
	this.texte = '';
	this.tige = '';
	this.type = FEUILLE_TYPE_TEXTE;
	this.classe = '';
	this.typeaction = FEUILLE_TYPEACTION_NON;
	this.action = 0;
	this.parametre = '';



	this.Init = function (tige,noeud,k)
	/***********************************************************************
	BUT : Initialise l'objet Feuille
	ENTREE :
	- tige : Objet "noeud" qui contient cette feuille
	- noeud : Liste des feuilles du noeud
	- k : iterateur qui permet de reperer la bonne feuille  dans la liste 'noeud'
	SORTIE :
	Retourne l'objet "feuille" construit et prêt à être utilisé.
	Une feuille est
		constituée
			d'une "tige" qui fait référence à son "noeud" père
			d'un "myself" qui fait référence à elle-même
			d'un "type" qui définit le type de la feuille (texte simple, url, action, image, etc...)
			d'un "contenu" qui définit le contenu utilisé suivant le type de feuille
			d'une "classe" qui définit la feuille de style a utiliser sur la feuille
			d'un "typeaction" qui définit le type d'action à faire si la feuille en possède
			d'une "action" qui est le contenu de l'action à faire si la feuille en a une
			d'un "parametre" qui sert suivant l'action réalisée
			de méthodes
				Construire : Retourne le contenu HTML de la feuille suivant son type et ses options
		une partie d'un noeud
	CONTRAINTES :
	La liste des feuilles doit être un tableau de tableau,
	chacun de ces sous-tableaux est un noeud qui contient des feuilles.
	RISQUES :
	Si le tableau de feuilles est mal construit, risque de plantage pour le
	moment.
	************************************************************************/
	{
		this.tige = tige;
		this.type = noeud[k][0];
		this.texte = noeud[k][1];
		this.classe = noeud[k][2];
		this.typeaction = noeud[k][3];
		this.action = noeud[k][4];
		this.parametre = noeud[k][5];
	}



	this.Construire = function ()
	/***********************************************************************
	BUT : Construit le code HTML de la feuille suivant ses informations.
	ENTREE :
	SORTIE :
	Remplit le "contenus" de l'arbre avec les feuilles
	La feuille est un DIV HTML
	CONTRAINTES :
	RISQUES :
	Si la liste de feuilles est vide, le noeud sera vide. Si elle est mal
	construite, l'arbre peut planter.
	************************************************************************/
	{
		this.contenu = '<SPAN';

		if (this.classe!='')
		{
			this.contenu = this.contenu + ' class="' + this.classe + '"';
		}

		this.contenu = this.contenu + '>';

		switch (this.typeaction)
		{
			case 1 :
				switch (this.action)
				{
					case 1 :
						this.contenu = this.contenu + '<A';
						this.contenu = this.contenu + ' href="#"';
						this.contenu = this.contenu + ' onclick="' + this.tige.tronc.nom + '.ChangerNoeud(\'' + this.tige.id + '\')"';
						if (this.classe!='')
						{
							this.contenu = this.contenu + ' class="' + this.classe + '"';
						}
						this.contenu = this.contenu + '>';
						break;
					case 2 :
						this.contenu = this.contenu + '<A';
						this.contenu = this.contenu + ' href="#"';
						this.contenu = this.contenu + ' onclick="' + this.tige.tronc.nom + '.VoirNoeud(\'' + this.tige.id + '\');' + this.tige.tronc.nom + '.Afficher();"';
						if (this.classe!='')
						{
							this.contenu = this.contenu + ' class="' + this.classe + '"';
						}
						this.contenu = this.contenu + '>';
						break;
					case 3 :
						this.contenu = this.contenu + '<A';
						this.contenu = this.contenu + ' href="#"';
						this.contenu = this.contenu + ' onclick="' + this.tige.tronc.nom + '.EchangerNoeud(\'' + this.tige.id + '\',\'' + this.parametre[0] + '\',\'' + this.parametre[1] + '\');"';
						if (this.classe!='')
						{
							this.contenu = this.contenu + ' class="' + this.classe + '"';
						}
						this.contenu = this.contenu + '>';
						break;
					case 4 :
						this.contenu = this.contenu + '<A';
						this.contenu = this.contenu + ' href="#"';
						this.contenu = this.contenu + ' onclick="' + this.tige.tronc.nom + '.RetournerNoeud(\'' + this.tige.id + '\',\'' + this.parametre[0] + '\',\'' + this.parametre[1] + '\');"';
						if (this.classe!='')
						{
							this.contenu = this.contenu + ' class="' + this.classe + '"';
						}
						this.contenu = this.contenu + '>';
						break;
					default :
				}
				break;
			case 2 :
				this.contenu = this.contenu + '<A';
				this.contenu = this.contenu + ' href="' + this.action + '"';
				if (this.classe!='')
				{
					this.contenu = this.contenu + ' class="' + this.classe + '"';
				}
				if (this.parametre!='')
				{
					this.contenu = this.contenu + ' target="' + this.parametre + '"';
				}
				this.contenu = this.contenu + '>';
				break;
			case 3 :
				this.contenu = this.contenu + '<A';
				this.contenu = this.contenu + ' href="#"';
				this.contenu = this.contenu + ' onclick="' + this.click + '"';
				if (this.classe!='')
				{
					this.contenu = this.contenu + ' class="' + this.classe + '"';
				}
				this.contenu = this.contenu + '>';
				break;
			default :
		}

		if (this.type==1)
		{
			this.contenu = this.contenu + '<IMG';
			if (this.texte!='')
			{
				this.contenu = this.contenu + ' src="' + this.texte + '"';
			}
			this.contenu = this.contenu + '>';
		}
		else
		{
			this.contenu = this.contenu + this.texte;
		}

		if (this.typeaction>0)
		{
			this.contenu = this.contenu + '</A>';
		}

		this.contenu = this.contenu + '</SPAN>';
	}



	this.Afficher = function ()
	/***********************************************************************
	BUT : Construit le code HTML de la feuille suivant ses informations.
	ENTREE :
	SORTIE :
	Remplit le "contenus" de l'arbre avec les feuilles
	La feuille est un DIV HTML
	CONTRAINTES :
	RISQUES :
	Si la liste de feuilles est vide, le noeud sera vide. Si elle est mal
	construite, l'arbre peut planter.
	************************************************************************/
	{
		this.tige.tronc.contenu = this.tige.tronc.contenu + this.contenu;
	}



	return this;
}
