+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Représente l'ensemble des messages affichés.
+ */
+function Messages(client, formateur, util)
+{
+ this.client = client
+ this.formateur = formateur
+ this.util = util
+
+ this.conversations = new Array() // les conversations, la première représente la conversation principale
+ this.conversations[0] = new Conversation(0, this.formateur)
+
+ this.idDernierMesssage = null // l'id du dernier message connu
+
+ // l'objet XMLHttpRequest représentant la connexion d'attente
+ this.attenteCourante = null
+}
+
+/**
+ * Crée un document XML contenant le message demandant un rafraichissement.
+ */
+Messages.prototype.getXMLrafraichirMessages = function()
+{
+ var XMLDocument = this.util.creerDocumentXMLAction()
+ XMLDocument.documentElement.setAttribute("name", "refreshMessages")
+ \r
+ //alert(this.util.serializer.serializeToString(XMLDocument))\r
+
+ if (this.client.identifie())
+ {
+ var nodeCookie= XMLDocument.createElement("cookie")
+ nodeCookie.appendChild(XMLDocument.createTextNode(this.client.cookie))
+ XMLDocument.documentElement.appendChild(nodeCookie)
+ }
+
+ if (this.idDernierMesssage != null)
+ {
+ var nodeDernierMessageId = XMLDocument.createElement("dernierMessageId")
+ nodeDernierMessageId.appendChild(XMLDocument.createTextNode(this.idDernierMesssage))
+ XMLDocument.documentElement.appendChild(nodeDernierMessageId)
+ }
+
+ var nodeNombreMessage = XMLDocument.createElement("nombreMessage")
+ nodeNombreMessage.appendChild(XMLDocument.createTextNode(conf.nbMessageAffiche))
+ XMLDocument.documentElement.appendChild(nodeNombreMessage)
+
+ var nodePage = XMLDocument.createElement("page")
+ nodePage.appendChild(XMLDocument.createTextNode(this.conversations[0].page))
+ XMLDocument.documentElement.appendChild(nodePage)
+
+ // les conversations
+ for (var i = 1; i < this.conversations.length; i++)
+ {
+ var nodeConversation = XMLDocument.createElement("conversation")
+ XMLDocument.documentElement.appendChild(nodeConversation)
+
+ var nodeRacine = XMLDocument.createElement("racine")
+ nodeRacine.appendChild(XMLDocument.createTextNode(this.conversation.racine))
+ nodeConversation.appendChild(nodeRacine)
+
+ var nodePageConv = XMLDocument.createElement("page")
+ nodePageConv.appendChild(XMLDocument.createTextNode(this.conversation.page))
+ nodeConversation.appendChild(nodePageConv)
+ }
+
+ return XMLDocument;
+}
+
+/**
+ * Ajoute un ensemble de messages puis les affiches.
+ * @param elements un tableau d'éléments représentant les messages, voir protocole.txt
+ * @param numConversation le numéro de la conversation auquel appartiennent les messages
+ */
+Messages.prototype.ajouterMessages = function(elements, numConversation)
+{
+ for (var i = 0; i < elements.length; i++)
+ this.ajouterMessage(elements[i], numConversation)
+ this.flush(numConversation)
+}
+
+/**
+ * Création d'un nouveau message.
+ * Les message sont données dans l'ordre de leur id.
+ * @param element un element xml représentant le message
+ * @param numConversation le numéro de la conversation, 0 = principale
+ */
+Messages.prototype.ajouterMessage = function(element, numConversation)
+{
+ // pas d'utilisation de jquery pour des raisons de performance
+ this.idDernierMesssage = element.getAttribute("id")
+
+ var message = new Message(
+ this.idDernierMesssage, \r
+ jQuery("date", element).text(),\r
+ jQuery("pseudo", element).text(),\r
+ jQuery("contenu", element).text()
+ ) \r
+
+ message.appartientAuClient = jQuery("proprietaire", element).text() == "true"
+ message.clientARepondu = jQuery("repondu", element).text() == "true"
+ message.estUneReponse = jQuery("reponse", element).text() == "true"
+ message.systeme = jQuery("systeme", element).text() == "true"
+ message.setRepondA(jQuery("repondA", element))
+
+ if (this.conversations[numConversation] == null)
+ this.conversations[numConversation] = new Conversation(numConversation, this.formateur)
+ this.conversations[numConversation].ajouterMessage(message)
+}
+
+/**
+ * Demande à toutes les conversations de se flusher (afficher les messages non-affichés).
+ */
+Messages.prototype.flushAll = function()
+{
+ for (var i = 0; i < this.conversations.length; i++)
+ this.flush(i)
+}
+
+/**
+ * Demande à une conversation de se flusher.
+ */
+Messages.prototype.flush = function(numConv)
+{
+ this.conversations[numConv].flush()
+}
+