+ delete this.messagesParId[this.messages.shift().id]
+}
+
+Conversation.prototype.viderMessages = function()
+{
+ this.messages = new Array()
+ jQuery("#conversations " + this.getId()).empty()
+}
+
+/**
+ * Après l'ajout d'un ou plusieurs message cette méthode est appelée afin
+ * d'afficher les messages non-affichés.
+ */
+Conversation.prototype.flush = function()
+{
+ var thisConversation = this
+
+ var idDernierMessageAffiche = jQuery("#conversations " + this.getId() + " div:first").attr("id")
+ if (idDernierMessageAffiche == undefined) idDernierMessageAffiche = "0"
+
+ var XHTML = ""
+ for (var i = this.messages.length - 1; i >= 0; i--)
+ if (parseInt(this.messages[i].id, 36) > parseInt(idDernierMessageAffiche, 36))
+ {
+ var message = this.messages[i]
+ var XHTMLrepondA = ""
+ for (var id in message.repondA)
+ XHTMLrepondA += this.formateur.traitementComplet(message.repondA[id].pseudo) + "> "
+ XHTMLrepondA = "<div class=\"repondA\">" + XHTMLrepondA + "</div>"
+
+ XHTML +=
+ "<div id=\"" + message.id + "\" class=\"" + (parseInt(message.id, 36) % 2 == 0 ? "messagePair" : "messageImpair") + " message" +
+ (this.messages[i].appartientAuClient ? " proprietaire" : "") + (this.messages[i].clientARepondu ? " repondu" : "") + (this.messages[i].estUneReponse ? " reponse" : "") + (this.messages[i].systeme ? " systeme" : "") +
+ "\" >" +
+ "[<div class=\"date\">" + message.date + "</div>]" +
+ "<div class=\"pseudo\">" + this.formateur.traitementComplet(message.pseudo) + "</div>:" +
+ XHTMLrepondA +
+ "<div class=\"contenu\">" + (message.systeme ? this.formateur.remplacerBalisesHTML(message.contenu) : this.formateur.traitementComplet(message.contenu, message.pseudo))+ "</div>" +
+ "</div>"
+ }
+ jQuery("#conversations " + this.getId()).prepend(XHTML)
+
+ if (myLightbox != null)
+ myLightbox.updateImageList()
+
+ var nbMessagesAffiche = jQuery("#conversations " + this.getId() + " .message").size()
+ if (nbMessagesAffiche > this.nbMessageMax)
+ jQuery("#conversations " + this.getId() + " .message").slice(this.nbMessageMax, nbMessagesAffiche).empty();
+
+ jQuery("#conversations " + this.getId() + " .message").filter(function(){return parseInt(jQuery(this).attr("id"), 36) > parseInt(idDernierMessageAffiche, 36)}).each(
+ function()
+ {
+ jQuery(this).click(
+ function(event)
+ {
+ if (jQuery(event.target).is("a")) return
+
+ var valCourant = jQuery("input.message").val()
+ if (valCourant == undefined) valCourant = ""
+ var tag = jQuery(".pseudo", this).text() + "{" + jQuery(this).attr("id") + "}" + ">"
+ if (valCourant.indexOf(tag, 0) == -1)
+ jQuery("input.message").val(tag + " " + valCourant)
+ thisConversation.util.setCaretToEnd(jQuery("form input.message")[0])
+ }
+ )
+ // Q : pourquoi pas un .hover ?
+ // R : simplement pour éviter que lorsqu'un message arrive cela n'affecte la conversation actuellement mise en évidence (uniquement pour Firefox)
+ .mousemove(
+ function(e)
+ {
+ if (this !== thisConversation.messageOver)
+ {
+ thisConversation.afficherConversation(this)
+ thisConversation.messageOver = this
+ }
+ }
+ )
+ }
+ )
+}
+
+/**
+ * Etablit une liste des messages à mettre en evidence et des messages à cacher.
+ * Puis applique un plan diabolique.
+ * @param element un message de la liste des messages
+ */
+Conversation.prototype.afficherConversation = function(element)
+{
+ // cherche le message selectionné
+ var id = jQuery(element).attr("id")
+ var message = this.messagesParId[id]
+ if (message == undefined) return
+
+ mess = message.afficherConversation(this)
+
+ // FIXME : cet appel est très lent
+ jQuery("#conversations " + this.getId() + " .message").each(
+ function()
+ {
+ var jq = jQuery(this)
+ if (!mess.hasOwnProperty(jq.attr("id")))
+ jq.addClass("cache")
+ else
+ jq.removeClass("cache")
+ }
+ )