Premier commit
[euphorik.git] / js / euphorik.js
1 // coding: utf-8
2
3 /**
4 * Auteur : GBurri
5 * Date : 6.11.2007
6 */
7
8 /**
9 * La configuration.
10 * Normalement 'const' à la place de 'var' mais non supporté par IE7.
11 */
12 var conf = {
13 nbMessageAffiche : 80, // (par page)
14 pseudoDefaut : "<nick>",
15 tempsAffichageMessageDialogue : 4000, // en ms
16 smiles : {
17 "smile" : [/:\)/g, /:-\)/g],
18 "bigsmile" : [/:D/g, /:-D/g],
19 "clin" : [/;\)/g, /;-\)/g],
20 "cool" : [/8\)/g, /8-\)/g],
21 "eheheh" : [/:P/g, /:-P/g],
22 "oh" : [/:o/g, /:O/g],
23 "pascontent" : [/>\(/g, /&gt;\(/g],
24 "sniff" : [/:\(/g, /:-\(/g],
25 "argn" : [/\[:argn\]/g],
26 "bunny" : [/\[:lapin\]/g],
27 "chat" : [/\[:chat\]/g],
28 "renne" : [/\[:renne\]/g],
29 "lol" : [/\[:lol\]/g],
30 "spliff" : [/\[:spliff\]/g],
31 "star" : [/\[:star\]/g],
32 "triste" : [/\[:triste\]/g],
33 "kirby" : [/\[:kirby\]/g]
34 }
35 }
36
37 ///////////////////////////////////////////////////////////////////////////////////////////////////
38
39 String.prototype.trim = function()
40 {
41 return this.replace(/^\s+|\s+$/g,"");
42 }
43 String.prototype.ltrim = function()
44 {
45 return this.replace(/^\s+/,"");
46 }
47 String.prototype.rtrim = function()
48 {
49 return this.replace(/\s+$/,"");
50 }
51
52 String.prototype.dump = function()
53 {
54 if (typeof dump != "undefined")
55 {
56 dump("\n--- EUPHORIK.CH ---\n")
57 dump(this)
58 dump("\n------\n")
59 }
60 }
61
62 ///////////////////////////////////////////////////////////////////////////////////////////////////
63
64 function Util(serializer)
65 {
66 if(typeof XMLSerializer != "undefined")
67 this.serializer = new XMLSerializer()
68
69 jQuery("#info .fermer").click(function(){
70 jQuery("#info").slideUp(50)
71 })
72 }
73
74 /**
75 * Affiche une boite de dialogue avec un message à l'intérieur.
76 *
77 */
78 Util.prototype.messageDialogue = function(message, type, boutons)
79 {
80 if (type == undefined)
81 type = messageType.informatif
82
83 if (this.timeoutMessageDialogue != undefined)
84 clearTimeout(this.timeoutMessageDialogue)
85
86 var fermer = function(){jQuery("#info").slideUp(100)}
87 fermer()
88
89 jQuery("#info .message").html(message)
90 switch(type)
91 {
92 case messageType.informatif : jQuery("#info #icone").attr("class", "information"); break
93 case messageType.question : jQuery("#info #icone").attr("class", "interrogation"); break
94 case messageType.erreur : jQuery("#info #icone").attr("class", "exclamation"); break
95 }
96 jQuery("#info .boutons").html("")
97 for (var b in boutons)
98 jQuery("#info .boutons").append("<div>" + b + "</div>").find("div:last").click(boutons[b]).click(fermer)
99
100 jQuery("#info").slideDown(200)
101 this.timeoutMessageDialogue = setTimeout(fermer, conf.tempsAffichageMessageDialogue)
102 }
103 var messageType = {informatif: 0, question: 1, erreur: 2}
104
105 /* obsolète
106 Util.prototype.log = function(str)
107 {
108 }*/
109
110 Util.prototype.serializeXML = function(documentXML)
111 {
112 if (this.serializer)
113 return this.serializer.serializeToString(documentXML)
114 else
115 return documentXML.xml
116 }
117
118 Util.prototype.creerDocumentXMLAction = function()
119 {
120 if (document.implementation && document.implementation.createDocument)
121 {
122 return document.implementation.createDocument("", "action", null)
123 }
124 else if (window.ActiveXObject)
125 {
126 var doc = new ActiveXObject("MSXML2.DOMDocument") //("Microsoft.XMLDOM")
127 doc.appendChild(doc.createElement("action"));
128 //doc.loadXML("<action></action>")
129 //alert(doc.documentElement)
130 //doc.createElement("action")
131 return doc
132 }
133 }
134
135 Util.prototype.xmlVersAction = function(xml)
136 {
137 return {action: this.to_utf8(this.serializeXML(xml /*, "UTF-8"*/))}
138 }
139
140 // voir : http://homepage3.nifty.com/aokura/jscript/utf8.html
141 // et : http://www1.tip.nl/~t876506/utf8tbl.html
142 Util.prototype.to_utf8 = function(s)
143 {
144 if (!s) return ""
145
146 var c, d = ""
147 for (var i = 0; i < s.length; i++)
148 {
149 c = s.charCodeAt(i);
150 if (c <= 0x7f) {
151 d += s.charAt(i);
152 } else if (c >= 0x80 && c <= 0x7ff) {
153 d += String.fromCharCode(((c >> 6) & 0x1f) | 0xc0);
154 d += String.fromCharCode((c & 0x3f) | 0x80);
155 } else {
156 d += String.fromCharCode((c >> 12) | 0xe0);
157 d += String.fromCharCode(((c >> 6) & 0x3f) | 0x80);
158 d += String.fromCharCode((c & 0x3f) | 0x80);
159 }
160 }
161 return d;
162 }
163
164 Util.prototype.md5 = function(chaine)
165 {
166 return hex_md5(chaine)
167 }
168
169 // pompé de http://www.faqts.com/knowledge_base/view.phtml/aid/13562/fid/130
170 Util.prototype.setSelectionRange = function(input, selectionStart, selectionEnd)
171 {
172 if (input.setSelectionRange)
173 {
174 input.focus()
175 input.setSelectionRange(selectionStart, selectionEnd)
176 }
177 else if (input.createTextRange)
178 {
179 var range = input.createTextRange()
180 range.collapse(true)
181 range.moveEnd('character', selectionEnd)
182 range.moveStart('character', selectionStart)
183 range.select()
184 }
185 }
186
187 Util.prototype.setCaretToEnd = function(input)
188 {
189 this.setSelectionRange(input, input.value.length, input.value.length)
190 }
191 Util.prototype.setCaretToBegin = function(input)
192 {
193 this.setSelectionRange(input, 0, 0)
194 }
195 Util.prototype.setCaretToPos = function(input, pos)
196 {
197 this.setSelectionRange(input, pos, pos)
198 }
199 Util.prototype.selectString = function(input, string)
200 {
201 var match = new RegExp(string, "i").exec(input.value)
202 if (match)
203 {
204 this.setSelectionRange (input, match.index, match.index + match[0].length)
205 }
206 }
207 Util.prototype.replaceSelection = function(input, replaceString) {
208 if (input.setSelectionRange)
209 {
210 var selectionStart = input.selectionStart
211 var selectionEnd = input.selectionEnd
212 input.value = input.value.substring(0, selectionStart) + replaceString + input.value.substring(selectionEnd)
213
214 if (selectionStart != selectionEnd) // has there been a selection
215 this.setSelectionRange(input, selectionStart, selectionStart + replaceString.length)
216 else // set caret
217 this.setCaretToPos(input, selectionStart + replaceString.length)
218 }
219 else if (document.selection)
220 {
221 var range = document.selection.createRange();
222 if (range.parentElement() == input)
223 {
224 var isCollapsed = range.text == ''
225 range.text = replaceString
226 if (!isCollapsed)
227 {
228 // there has been a selection
229 // it appears range.select() should select the newly
230 // inserted text but that fails with IE
231 range.moveStart('character', -replaceString.length);
232 range.select();
233 }
234 }
235 }
236 }
237
238 ///////////////////////////////////////////////////////////////////////////////////////////////////
239
240 function Pages()
241 {
242 this.pageCourante = null
243 this.pages = {}
244 }
245
246 Pages.prototype.ajouterPage = function(page)
247 {
248 page.pages = this // la magie des langages dynamiques : le foutoire
249 this.pages[page.nom] = page
250 }
251
252 Pages.prototype.afficherPage = function(nomPage, forcerChargement)
253 {
254 if (forcerChargement == undefined) forcerChargement = false
255
256 var page = this.pages[nomPage]
257 if (page == undefined || (!forcerChargement && page == this.pageCourante)) return
258
259 if (this.pageCourante != null && this.pageCourante.decharger)
260 this.pageCourante.decharger()
261
262 jQuery("#menu div").removeClass("courante")
263 jQuery("#menu div." + nomPage).addClass("courante")
264
265 this.pageCourante = page
266 jQuery("#page").html(this.pageCourante.contenu()).removeClass().addClass(this.pageCourante.nom)
267
268 if (this.pageCourante.charger)
269 this.pageCourante.charger()
270 }
271
272 ///////////////////////////////////////////////////////////////////////////////////////////////////
273
274 function Formateur()
275 {
276 this.smiles = conf.smiles
277 this.protocoles = "http|https|ed2k"
278
279 this.regexUrl = new RegExp("(?:(?:" + this.protocoles + ")://|www\\.)[^ ]*", "gi")
280 this.regexImg = new RegExp("^.*?\\.(gif|jpg|png|jpeg|bmp|tiff)$", "i")
281 this.regexDomaine = new RegExp("^(?:(?:" + this.protocoles + ")://|www\\.).*?([^/.]+\\.[^/.]+)(?:$|/).*$", "i")
282 this.regexTestProtocoleExiste = new RegExp("^(?:" + this.protocoles + ")://.*$", "i")
283 this.regexNomProtocole = new RegExp("^(.*?)://")
284 }
285
286 /**
287 * Formate un pseudo saise par l'utilisateur.
288 * @param pseudo le pseudo brut
289 * @return le pseudo filtré
290 */
291 Formateur.prototype.filtrerInputPseudo = function(pseudo)
292 {
293 return pseudo.replace(/{|}/g, "").trim()
294 }
295
296 Formateur.prototype.getSmilesHTML = function()
297 {
298 var XHTML = ""
299 for (var sNom in this.smiles)
300 {
301 XHTML += "<img class=\"" + sNom + "\" src=\"img/smileys/" + sNom + ".gif\" />"
302 }
303 return XHTML
304 }
305
306 Formateur.prototype.traitementComplet = function(M, pseudo)
307 {
308 return this.traiterSmiles(this.traiterURL(this.remplacerBalisesHTML(M), pseudo))
309 }
310
311 /**
312 * FIXME : Cette méthode est attrocement lourde !!
313 */
314 Formateur.prototype.traiterSmiles = function(M)
315 {
316 for (var sNom in this.smiles)
317 {
318 ss = this.smiles[sNom]
319 for (var i = 0; i < ss.length; i++)
320 M = M.replace(ss[i], "<img src=\"img/smileys/" + sNom + ".gif\" />")
321 }
322 return M
323 }
324
325 Formateur.prototype.remplacerBalisesHTML = function(M)
326 {
327 return M.replace(/</g, "&lt;").replace(/>/g, "&gt;")
328 }
329
330 Formateur.prototype.traiterURL = function(M, pseudo)
331 {
332 thisFormateur = this
333
334 if (pseudo == undefined)
335 pseudo = ""
336
337 var traitementUrl = function(url)
338 {
339 // si ya pas de protocole on rajoute "http://"
340 if (!thisFormateur.regexTestProtocoleExiste.test(url))
341 url = "http://" + url
342 var extension = thisFormateur.getShort(url)
343 return "<a " + (extension[1] ? "title=\"" + thisFormateur.traiterPourFenetreLightBox(pseudo, url) + ": " + thisFormateur.traiterPourFenetreLightBox(M, url) + "\"" + " rel=\"lightbox[groupe]\"" : "") + " href=\"" + url + "\" >[" + extension[0] + "]</a>"
344 }
345 return M.replace(this.regexUrl, traitementUrl)
346 }
347
348 /**
349 * Renvoie une version courte de l'url.
350 * par exemple : http://en.wikipedia.org/wiki/Yakov_Smirnoff devient wikipedia.org
351 */
352 Formateur.prototype.getShort = function(url)
353 {
354 var estUneImage = false
355 var versionShort = null
356 var rechercheImg = this.regexImg.exec(url)
357 //alert(url)
358 if (rechercheImg != null)
359 {
360 versionShort = rechercheImg[1].toLowerCase()
361 if (versionShort == "jpeg") versionShort = "jpg" // jpeg -> jpg
362 estUneImage = true
363 }
364 else
365 {
366 var rechercheDomaine = this.regexDomaine.exec(url)
367 if (rechercheDomaine != null && rechercheDomaine.length >= 2)
368 versionShort = rechercheDomaine[1]
369 else
370 {
371 var nomProtocole = this.regexNomProtocole.exec(url)
372 if (nomProtocole != null && nomProtocole.length >= 2)
373 versionShort = nomProtocole[1]
374 }
375 }
376
377 return [versionShort == null ? "url" : versionShort, estUneImage]
378 }
379
380 /**
381 * Traite les pseudo et messages à être affiché dans le titre d'une image visualisé avec lightbox.
382 */
383 Formateur.prototype.traiterPourFenetreLightBox = function(M, urlCourante)
384 {
385 thisFormateur = this
386 var traitementUrl = function(url)
387 {
388 return "[" + thisFormateur.getShort(url)[0] + (urlCourante == url ? ": image courante" : "") + "]"
389 }
390
391 return this.remplacerBalisesHTML(M).replace(this.regexUrl, traitementUrl)
392 }
393
394
395 ///////////////////////////////////////////////////////////////////////////////////////////////////
396
397 var statutType = {enregistre: 0, identifie: 1, non_identifie: 2}
398
399 function Client(util)
400 {
401 this.util = util
402
403 this.cookie = null
404 this.regexCookie = new RegExp("^cookie=([^;]*)")
405
406 // Obsolète
407 //this.captchaCrypt = null
408
409 // données personnels
410 this.resetDonneesPersonnelles()
411
412 this.setStatut(statutType.non_identifie)
413
414 // le dernier message d'erreur recut du serveur (par exemple une connexion foireuse : "login impossible")
415 this.dernierMessageErreur = ""
416 }
417
418 Client.prototype.resetDonneesPersonnelles = function()
419 {
420 this.pseudo = conf.pseudoDefaut
421 this.login = ""
422 this.password = ""
423 this.email = ""
424 this.css = jQuery("link#cssPrincipale").attr("href")
425 }
426
427 Client.prototype.setCss = function(css)
428 {
429 if (this.css == css)
430 return
431
432 this.css = css
433 jQuery("link#cssPrincipale").attr("href", this.css)
434 this.majMenu()
435
436 /* enregistement automatique..
437 if (!this.identifie())
438 if (!this.enregistrement())
439 return
440 */
441 if (this.identifie())
442 this.flush()
443 }
444
445 Client.prototype.getXMLlogin = function(login, password)
446 {
447 var XMLDocument = this.util.creerDocumentXMLAction()
448 XMLDocument.documentElement.setAttribute("name", "login")
449
450 var nodeLogin = XMLDocument.createElement("login")
451 nodeLogin.appendChild(XMLDocument.createTextNode(login))
452 XMLDocument.documentElement.appendChild(nodeLogin)
453
454 var nodePassword = XMLDocument.createElement("password")
455 nodePassword.appendChild(XMLDocument.createTextNode(password))
456 XMLDocument.documentElement.appendChild(nodePassword)
457
458 return XMLDocument
459 }
460
461 Client.prototype.getXMLloginCookie = function()
462 {
463 var XMLDocument = this.util.creerDocumentXMLAction()
464 XMLDocument.documentElement.setAttribute("name", "login")
465
466 var nodeCookie = XMLDocument.createElement("cookie")
467 nodeCookie.appendChild(XMLDocument.createTextNode(this.cookie))
468 XMLDocument.documentElement.appendChild(nodeCookie)
469
470 return XMLDocument
471 }
472
473 /* Obsolète
474 Client.prototype.getXMLloginCaptcha = function(captchaCrypt, captchaInput)
475 {
476 var XMLDocument = this.util.creerDocumentXMLAction()
477 XMLDocument.documentElement.setAttribute("name", "loginCaptcha")
478
479 var nodecaptchaCrypt = XMLDocument.createElement("captchaCrypt")
480 nodecaptchaCrypt.appendChild(XMLDocument.createTextNode(captchaCrypt))
481 XMLDocument.documentElement.appendChild(nodecaptchaCrypt)
482
483 var nodecaptchaInput = XMLDocument.createElement("captchaInput")
484 nodecaptchaInput.appendChild(XMLDocument.createTextNode(captchaInput))
485 XMLDocument.documentElement.appendChild(nodecaptchaInput)
486
487 return XMLDocument
488 }*/
489
490 /* Obsolète
491 Client.prototype.getXMLgenerationCaptcha = function()
492 {
493 var XMLDocument = this.util.creerDocumentXMLAction()
494 XMLDocument.documentElement.setAttribute("name", "generationCaptcha")
495
496 return XMLDocument
497 }*/
498
499 Client.prototype.getXMLEnregistrement = function(login, password)
500 {
501 var XMLDocument = this.util.creerDocumentXMLAction()
502 XMLDocument.documentElement.setAttribute("name", "register")
503
504 var nodeLogin = XMLDocument.createElement("login")
505 nodeLogin.appendChild(XMLDocument.createTextNode(login))
506 XMLDocument.documentElement.appendChild(nodeLogin)
507
508 var nodePassword = XMLDocument.createElement("password")
509 nodePassword.appendChild(XMLDocument.createTextNode(password))
510 XMLDocument.documentElement.appendChild(nodePassword)
511
512 return XMLDocument
513 }
514
515 Client.prototype.getXMLProfile = function()
516 {
517 var XMLDocument = this.util.creerDocumentXMLAction()
518 XMLDocument.documentElement.setAttribute("name", "profile")
519
520 var nodeCookie = XMLDocument.createElement("cookie")
521 nodeCookie.appendChild(XMLDocument.createTextNode(this.cookie))
522 XMLDocument.documentElement.appendChild(nodeCookie)
523
524 var nodeLogin = XMLDocument.createElement("login")
525 nodeLogin.appendChild(XMLDocument.createTextNode(this.login))
526 XMLDocument.documentElement.appendChild(nodeLogin)
527
528 var nodePassword = XMLDocument.createElement("password")
529 nodePassword.appendChild(XMLDocument.createTextNode(this.password))
530 XMLDocument.documentElement.appendChild(nodePassword)
531
532 var nodePseudo = XMLDocument.createElement("pseudo")
533 nodePseudo.appendChild(XMLDocument.createTextNode(this.pseudo))
534 XMLDocument.documentElement.appendChild(nodePseudo)
535
536 var nodeEmail = XMLDocument.createElement("email")
537 nodeEmail.appendChild(XMLDocument.createTextNode(this.email))
538 XMLDocument.documentElement.appendChild(nodeEmail)
539
540 var nodeCSS = XMLDocument.createElement("css")
541 nodeCSS.appendChild(XMLDocument.createTextNode(this.css))
542 XMLDocument.documentElement.appendChild(nodeCSS)
543
544 return XMLDocument
545 }
546
547 /**
548 * Renvoie null si pas définit.
549 */
550 Client.prototype.getCookie = function()
551 {
552 var cookie = this.regexCookie.exec(document.cookie)
553 if (cookie == null) this.cookie = null
554 else this.cookie = cookie[1]
555 }
556
557 Client.prototype.delCookie = function()
558 {
559 document.cookie = "cookie=; max-age=0"
560 }
561
562 Client.prototype.setCookie = function(cookie)
563 {
564 if (this.cookie == null)
565 return
566
567 document.cookie =
568 "cookie="+this.cookie+
569 "; max-age=" + (60 * 60 * 24 * 365)
570 }
571
572 Client.prototype.identifie = function()
573 {
574 return this.statut == statutType.enregistre || this.statut == statutType.identifie
575 }
576
577 Client.prototype.setStatut = function(statut)
578 {
579 if(typeof(statut) == "string")
580 {
581 statut =
582 statut == "enregistre" ?
583 statutType.enregistre : (statut == "identifie" ? statutType.identifie : statutType.non_identifie)
584 }
585
586 if (statut == this.statut) return
587
588 this.statut = statut
589 this.majMenu()
590 }
591
592 /**
593 * Demande la génération d'un captcha au serveur et l'affiche.
594 */
595 /* Obsolète
596 Client.prototype.afficherCaptcha = function(query)
597 {
598 var thisClient = this
599
600 $.post("request", this.util.xmlVersAction(this.getXMLgenerationCaptcha()),
601 function(data, textStatus)
602 {
603 var chemin = jQuery("chemin", data.documentElement).text()
604 thisClient.captchaCrypt = jQuery("captchaCrypt", data.documentElement).text()
605 jQuery(query).prepend(
606 "<p id=\"captcha\" >Es-tu un bot ? <img class=\"captchaImg\" src=\"" + chemin + "\" />" +
607 "<input name=\"captchaInput\" type=\"text\" size=\"5\" max_length=\"5\" ></p>"
608 )
609 }
610 )
611 }
612
613 Client.prototype.cacherCaptcha = function()
614 {
615 jQuery("#captcha").remove()
616 }*/
617
618 /**
619 * Effectue la connexion vers le serveur.
620 * Cette fonction est bloquante tant que la connexion n'a pas été établie.
621 * S'il existe un cookie en local on s'authentifie directement avec lui.
622 * Si il n'est pas possible de s'authentifier alors on affiche un captcha anti-bot.
623 */
624 Client.prototype.connexionCookie = function()
625 {
626 this.getCookie()
627 if (this.cookie == null) return false;
628 return this.connexion(this.util.xmlVersAction(this.getXMLloginCookie()))
629 }
630
631 Client.prototype.connexionLogin = function(login, password)
632 {
633 return this.connexion(this.util.xmlVersAction(this.getXMLlogin(login, password)))
634 }
635
636 /* Obsolète
637 Client.prototype.connexionCaptcha = function()
638 {
639 return this.connexion(this.util.xmlVersAction(this.getXMLloginCaptcha(this.captchaCrypt, jQuery("#captcha input").val())))
640 }*/
641
642 Client.prototype.enregistrement = function(login, password)
643 {
644 if (this.identifie())
645 {
646 this.login = login
647 this.password = password
648 if(this.flush())
649 this.setStatut(statutType.enregistre)
650 return true
651 }
652 else
653 {
654 if (login == undefined) login = ""
655 if (password == undefined) password = ""
656 return this.connexion(this.util.xmlVersAction(this.getXMLEnregistrement(login, password)))
657 }
658 }
659
660 Client.prototype.connexion = function(action)
661 {
662 thisClient = this
663 jQuery.ajax(
664 {
665 async: false,
666 type: "POST",
667 url: "request",
668 dataType: "xml",
669 data: action,
670 success:
671 function(data)
672 {
673 thisClient.chargerDonnees(data)
674 }
675 }
676 )
677 return this.identifie()
678 }
679
680 Client.prototype.deconnexion = function()
681 {
682 this.setStatut(statutType.non_identifie) // deconnexion
683 this.resetDonneesPersonnelles()
684 this.delCookie ()
685 }
686
687 Client.prototype.chargerDonnees = function(data)
688 {
689 this.setStatut(jQuery("statut", data.documentElement).text())
690
691 if (this.identifie())
692 {
693 this.cookie = jQuery("cookie", data.documentElement).text()
694 this.setCookie()
695
696 this.login = jQuery("login", data.documentElement).text()
697 this.pseudo = jQuery("pseudo", data.documentElement).text()
698 this.email = jQuery("email", data.documentElement).text()
699 this.css = jQuery("css", data.documentElement).text()
700 // met à jour la css
701 if (this.css != "")
702 {
703 jQuery("link#cssPrincipale").attr("href", this.css)
704 this.majMenu()
705 }
706 }
707 this.dernierMessageErreur = jQuery("information", data.documentElement).text()
708 }
709
710 /**
711 * Met à jour les données personne sur serveur.
712 */
713 Client.prototype.flush = function()
714 {
715 thisClient = this
716 //thisClient.util.log(this.util.xmlVersAction(this.getXMLProfile()).action)
717 jQuery.ajax(
718 {
719 async: true,
720 type: "POST",
721 url: "request",
722 dataType: "xml",
723 data: this.util.xmlVersAction(this.getXMLProfile()),
724 success:
725 function(data)
726 {
727 //thisClient.util.log(thisClient.util.serializer.serializeToString(data))
728 }
729 }
730 )
731 // TODO : retourner false si un problème est survenu lors de l'update du profile
732 return true
733 }
734
735 Client.prototype.majMenu = function()
736 {
737 var displayType = this.css == "css/3/euphorik.css" ? "block" : "inline" //this.client
738
739 // met à jour le menu
740 if (this.statut == statutType.enregistre)
741 {
742 jQuery("#menu .profile").css("display", displayType).text("profile")
743 jQuery("#menu .logout").css("display", displayType)
744 jQuery("#menu .register").css("display", "none")
745 }
746 else if (this.statut == statutType.identifie)
747 {
748 jQuery("#menu .profile").css("display", "none")
749 jQuery("#menu .logout").css("display", displayType)
750 jQuery("#menu .register").css("display", displayType)
751 }
752 else
753 {
754 jQuery("#menu .profile").css("display", displayType).text("login")
755 jQuery("#menu .logout").css("display", "none")
756 jQuery("#menu .register").css("display", displayType)
757 }
758 }
759
760 ///////////////////////////////////////////////////////////////////////////////////////////////////
761
762 jQuery.noConflict()
763
764
765 // le main
766 jQuery(document).ready(
767 function()
768 {
769
770 var util = new Util()
771 var client = new Client(util)
772 var pages = new Pages()
773 var formateur = new Formateur()
774
775 // connexion vers le serveur (utilise un cookie qui traine)
776 client.connexionCookie()
777
778 // les styles css
779 for (var i = 1; i <= 3; i++)
780 {
781 jQuery("#css"+i).click(function(){
782 client.setCss("css/" + jQuery(this).attr("id").charAt(3) + "/euphorik.css")
783 })
784 }
785
786 jQuery("#menu .minichat").click(function(){ pages.afficherPage("minichat") })
787 jQuery("#menu .profile").click(function(){ pages.afficherPage("profile") })
788 jQuery("#menu .logout").click(function(){
789 util.messageDialogue("Êtes-vous sur de vouloir vous délogger ?", messageType.question,
790 {"Oui" : function()
791 {
792 client.deconnexion();
793 pages.afficherPage("minichat", true)
794 },
795 "Non" : function(){}
796 }
797 )
798 })
799 jQuery("#menu .register").click(function(){ pages.afficherPage("register") })
800
801 pages.ajouterPage(new PageMinichat(client, formateur, util))
802 pages.ajouterPage(new PageProfile(client, formateur, util))
803 pages.ajouterPage(new PageRegister(client, formateur, util))
804 pages.afficherPage("minichat")
805 }
806 )
807