-function Util()
-{
- jQuery("#info .fermer").click(function(){
- jQuery("#info").slideUp(50)
- })
-}
-
-/**
- * Affiche une boite de dialogue avec un message à l'intérieur.
- * @param message le message (string)\r
- * @param type voir 'messageType'. par défaut messageType.informatif\r
- * @param les boutons sous la forme d'un objet ou les clefs sont les labels des boutons\r
- * et les valeurs les fonctions executées lorsqu'un bouton est activé.
- */
-Util.prototype.messageDialogue = function(message, type, boutons)
-{
- if (type == undefined)
- type = messageType.informatif
-
- if (this.timeoutMessageDialogue != undefined)
- clearTimeout(this.timeoutMessageDialogue)
-
- var fermer = function(){jQuery("#info").slideUp(100)}
- fermer()
-
- jQuery("#info .message").html(message)
- switch(type)
- {
- case messageType.informatif : jQuery("#info #icone").attr("class", "information"); break
- case messageType.question : jQuery("#info #icone").attr("class", "interrogation"); break
- case messageType.erreur : jQuery("#info #icone").attr("class", "exclamation"); break
- }
- jQuery("#info .boutons").html("")
- for (var b in boutons)
- jQuery("#info .boutons").append("<div>" + b + "</div>").find("div:last").click(boutons[b]).click(fermer)
-
- jQuery("#info").slideDown(200)
- this.timeoutMessageDialogue = setTimeout(fermer, conf.tempsAffichageMessageDialogue)
-}
-
-var messageType = {informatif: 0, question: 1, erreur: 2}\r
-
-/**
- * Utilisé pour l'envoie de donnée avec la méthode ajax de jQuery.
- */
-Util.prototype.jsonVersAction = function(json)
-{
- return {action : JSON.stringify(json) }
-}
-\r
-Util.prototype.md5 = function(chaine)\r
-{\r
- return hex_md5(chaine)\r
-}
-\r
-// pompé de http://www.faqts.com/knowledge_base/view.phtml/aid/13562/fid/130\r
-Util.prototype.setSelectionRange = function(input, selectionStart, selectionEnd)
-{\r
- if (input.setSelectionRange)
- {\r
- input.focus()\r
- input.setSelectionRange(selectionStart, selectionEnd)\r
- }\r
- else if (input.createTextRange)
- {\r
- var range = input.createTextRange()\r
- range.collapse(true)\r
- range.moveEnd('character', selectionEnd)\r
- range.moveStart('character', selectionStart)\r
- range.select()\r
- }\r
-}
-\r
-Util.prototype.setCaretToEnd = function(input)
-{\r
- this.setSelectionRange(input, input.value.length, input.value.length)\r
-}\r
-Util.prototype.setCaretToBegin = function(input)
-{\r
- this.setSelectionRange(input, 0, 0)\r
-}\r
-Util.prototype.setCaretToPos = function(input, pos)
-{\r
- this.setSelectionRange(input, pos, pos)\r
-}\r
-Util.prototype.selectString = function(input, string)
-{\r
- var match = new RegExp(string, "i").exec(input.value)\r
- if (match)
- {\r
- this.setSelectionRange (input, match.index, match.index + match[0].length)\r
- }\r
-}\r
-Util.prototype.replaceSelection = function(input, replaceString) {\r
- if (input.setSelectionRange)
- {\r
- var selectionStart = input.selectionStart\r
- var selectionEnd = input.selectionEnd\r
- input.value = input.value.substring(0, selectionStart) + replaceString + input.value.substring(selectionEnd)
- \r
- if (selectionStart != selectionEnd) // has there been a selection\r
- this.setSelectionRange(input, selectionStart, selectionStart + replaceString.length)\r
- else // set caret\r
- this.setCaretToPos(input, selectionStart + replaceString.length)\r
- }\r
- else if (document.selection)
- {\r
- var range = document.selection.createRange();\r
- if (range.parentElement() == input)
- {\r
- var isCollapsed = range.text == ''\r
- range.text = replaceString\r
- if (!isCollapsed)
- {
- // there has been a selection\r
- // it appears range.select() should select the newly \r
- // inserted text but that fails with IE\r
- range.moveStart('character', -replaceString.length);\r
- range.select();\r
- }\r
- }\r
- }\r
-}
-
-Util.prototype.rot13 = function(chaine)
-{
- var ACode = 'A'.charCodeAt(0)
- var aCode = 'a'.charCodeAt(0)
- var MCode = 'M'.charCodeAt(0)
- var mCode = 'm'.charCodeAt(0)
- var ZCode = 'Z'.charCodeAt(0)
- var zCode = 'z'.charCodeAt(0)
-
- var f = function(ch, pos) {
- if (pos == ch.length)
- return ""
-
- var c = ch.charCodeAt(pos);
- return String.fromCharCode(
- c +
- (c >= ACode && c <= MCode || c >= aCode && c <= mCode ? 13 :
- (c > MCode && c <= ZCode || c > mCode && c <= zCode ? -13 : 0))
- ) + f(ch, pos + 1)
- }
- return f(chaine, 0)
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-function Pages()
-{
- this.pageCourante = null
- this.pages = {}
-}
-
-Pages.prototype.ajouterPage = function(page)
-{
- page.pages = this // la magie des langages dynamiques : le foutoire
- this.pages[page.nom] = page
-}
-
-Pages.prototype.afficherPage = function(nomPage, forcerChargement)
-{\r
- if (forcerChargement == undefined) forcerChargement = false\r
-
- var page = this.pages[nomPage]
- if (page == undefined || (!forcerChargement && page == this.pageCourante)) return
-
- if (this.pageCourante != null && this.pageCourante.decharger)
- this.pageCourante.decharger()
-
- jQuery("#menu div").removeClass("courante")
- jQuery("#menu div." + nomPage).addClass("courante")
-
- this.pageCourante = page
- jQuery("#page").html(this.pageCourante.contenu()).removeClass().addClass(this.pageCourante.nom)
-
- if (this.pageCourante.charger)
- this.pageCourante.charger()
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-function Formateur()
-{
- this.smiles = conf.smiles\r
- this.protocoles = "http|https|ed2k"\r
- \r
- this.regexUrl = new RegExp("(?:(?:" + this.protocoles + ")://|www\\.)[^ ]*", "gi")\r
- this.regexImg = new RegExp("^.*?\\.(gif|jpg|png|jpeg|bmp|tiff)$", "i")\r
- this.regexDomaine = new RegExp("^(?:(?:" + this.protocoles + ")://|www\\.).*?([^/.]+\\.[^/.]+)(?:$|/).*$", "i")\r
- this.regexTestProtocoleExiste = new RegExp("^(?:" + this.protocoles + ")://.*$", "i")\r
- this.regexNomProtocole = new RegExp("^(.*?)://")
-}
-
-/**
- * Formate un pseudo saise par l'utilisateur.
- * @param pseudo le pseudo brut
- * @return le pseudo filtré
- */
-Formateur.prototype.filtrerInputPseudo = function(pseudo)
-{
- return pseudo.replace(/{|}/g, "").trim()
-}
-\r
-Formateur.prototype.getSmilesHTML = function()\r
-{\r
- var XHTML = ""\r
- for (var sNom in this.smiles)\r
- {\r
- XHTML += "<img class=\"" + sNom + "\" src=\"img/smileys/" + sNom + ".gif\" />"\r
- }\r
- return XHTML\r
-}\r
-
-Formateur.prototype.traitementComplet = function(M, pseudo)
-{
- return this.traiterLiensConv(this.traiterSmiles(this.traiterURL(this.remplacerBalisesHTML(M), pseudo)))
-}
-
-/**
- * Transforme les liens en entités clickables.
- * Un lien vers une conversation permet d'ouvrire celle ci, elle se marque comme ceci dans un message :
- * "{5F}" ou 5F est la racine de la conversation.
- * Ce lien sera transformer en <span class="lienConv">{5F}</span> pouvant être clické pour créer la conv 5F.
- */
-Formateur.prototype.traiterLiensConv = function(M)
-{
- return M.replace(
- /\{\w+\}/g,
- function(lien)
- {
- return "<span class=\"lienConv\">" + lien + "</span>"