/*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|                                      Objet Post'it                                       |
|------------------------------------------------------------------------------------------|
|                                                                                          |
|          L'objet Post'it enregistre une liste d'éléments, retourné sous la forme         |
|                                  d'un post'it à l'écran.                                 |
|           Le code HTML correspondant au porst'it est construit en fonction des           |
|                    éléments ayant mené à la construction de l'objet.                     |
|                                                                                          |
|------------------------------------------------------------------------------------------|
|                                                                                          |
| Fonctions disponibles :                                                                  |
|    - Postit()                                                                            |
|    - afficher()                                                                          |
|    - masquer()                                                                           |
|    - chargerPostit()                                                                     |
|                                                                                          |
|                                                                                    1.5.0 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|                                                         Benjamin COIFFARD - janvier 2010 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/


/**
 * Constructeur de l'objet Post'it
 * 
 * Le constructeur du postit est appelée dès le chargement sur toutes les pages contenant
 * une occurence de l'objet. Il est déclaré invisible par CSS et ne perturbe donc pas
 * l'utilisateur.
 * Pour ouvrir un postit, il suffit d'appeler la fonction afficher, qui le rend visible,
 * et ajoute les éléments nécessaires.
 * 
 * @param none
 * @return void
 */
/*-----------------------------------------------------------------------------------------*/
function Postit()
{

// Initialisation des attributs de la boite
	var lui = this;
	lui.titre = null;
	lui.titreImg = null;
	lui.liste = null;
	lui.rubrique = null
	lui.estVisible = false;
	lui.noeud = document.createElement('div');
	lui.noeud.className = 'postit';
	ajouterAttribut('id', lui.noeud, 'postit');

// Ajout de l'élément au DOM
	document.getElementById('global').appendChild(lui.noeud);

// Barre de titre avec titre et bouton d'annulation
	ajouterTexte('h1', null, 'pti_titre', 'postit', 'titre du post-it', 'ajout');
	ajouterTexte('span', null, 'pti_x', 'postit', 'X', 'ajout');
	document.getElementById('pti_x').style.cursor = "pointer";

// Affectation de la méthode masquer() sur le clic de la croix
	document.getElementById('pti_x').onclick = function()
	{
		lui.masquer();
	}

// Programmation de changement de couleurs lors de l'évènement onMouseOver
	document.getElementById('pti_x').onmouseover = function()
	{
		this.style.color = "#69f";
	}

// Programmation de changement de couleurs lors de l'évènement onMouseOut
	document.getElementById('pti_x').onmouseout = function()
	{
		this.style.color = "#006";
	}

}


/**
 * Affichage du Post'it
 * 
 * Le postit est toujours présente sur la page, on joue simplement sur la propriété
 * "visibility" pour l'afficher ou la masquer.
 * Avant d'afficher le postit, on vérifie qu'il n'est pas déjà présent, et si oui,
 * on l'efface.
 * La construction du contenu du postit se fait en fonction de son type.
 * 
 * @param none
 * @return void
 */
/*-----------------------------------------------------------------------------------------*/
Postit.prototype.afficher = function ()
{
		
// Si le postit est déjà affichée, on la vide et on l'efface
	if(this.estVisible)
		this.masquer();

// Modification du titre de la fenêtre
	document.getElementById('pti_titre').innerHTML = this.titre;
	
// Affichage de chaque ligne
	for (var i=0; i<this.rubrique.length; i++)
	{
		ajouterTexte('span', 'rubrique', null, 'postit', this.rubrique[i], 'ajout');
		for (var j=0; j<this.info[this.rubrique[i]].length; j++)
			ajouterTexte('span', 'element', null, 'postit', '- '+this.info[this.rubrique[i]][j], 'ajout');
	}
	
// Paramètres d'affichages CSS
	this.noeud.style.display = "block";
	this.estVisible = true;

}


/**
 * Fermeture du Post'it
 * 
 * Le postit est toujours présente sur la page, on joue simplement sur la propriété
 * "visibility" pour l'afficher ou la masquer.
 * Lorsqu'on masque le postit, on en profite pour faire un peu de ménage, et supprimer
 * tous les éléments sauf le titre
 * 
 * @param none
 * @return void
 */
/*-----------------------------------------------------------------------------------------*/
Postit.prototype.masquer = function ()
{

// Toutes les propriétés de l'objet sont supprimées		
	this.type = null;
	this.info = null;
	this.place = null;
	this.res = null;
	this.nbCat = null;
	this.mode = null;

// Tous les points affichés sur le Post'it sont effacés, sauf la barre de titre
	var dernier = this.noeud.lastChild;
	while (dernier.getAttribute('id', false) != 'pti_x')
	{
		this.noeud.removeChild(dernier);
		dernier = this.noeud.lastChild;
	}
	
// On rend la fiche invisible, et on le dit
	this.estVisible = false;
	this.noeud.style.display = "none";

}


/**
 * Chargement de l'objet Post'it sur la page
 * 
 * Au moment du chargement de la page HTML, l'objet postit doit être créé, et le calque
 * ajouté à la page.
 * 
 * @param none
 * @return void
 */
/*-----------------------------------------------------------------------------------------*/
function chargerPostit()
{
	lePostit = new Postit();
}
