1 function doLogin(aForm) {
2 room = 'guests@conference.babelmonkeys.de';
3 if (!aForm.nickname.value)
7 oArgs.httpbase = '/http-bind/';
9 con = new JSJaCHttpBindingConnection(oArgs)
11 nickname = aForm.nickname.value;
15 oArgs.domain = 'babelmonkeys.de';
16 oArgs.username = 'muckl';
17 oArgs.resource = randomString();
18 oArgs.pass = 'ooje0OjuJeekaek6';
27 function setupHandlers(con) {
28 con.registerHandler('message', handleMessage);
29 con.registerHandler('presence', handlePresence);
30 con.registerHandler('iq', handleIQ);
31 con.registerHandler('onconnect', handleConnected);
32 con.registerHandler('onerror', handleError);
33 // con.registerHandler('status_changed', handleStatusChanged);
34 con.registerHandler('ondisconnect', handleDisconnected);
36 con.registerIQGet('query', NS_VERSION, handleIqVersion);
37 con.registerIQGet('query', NS_TIME, handleIqTime);
40 function handleConnected() {
41 con.send(new JSJaCPresence());
42 GCpresence = new JSJaCPresence();
43 GCpresence.setTo(room + '/' + nickname);
46 // Make things (in)visible
47 document.getElementById('login').style.display = 'none';
48 document.getElementById('chat').style.display = 'block';
49 document.getElementById('roster').style.display = 'block';
50 document.getElementById('entry').style.display = 'block';
53 function handleError(e) {
54 alert("An error occured:" +
55 "\nCode: " + e.getAttribute('code') +
56 "\nType: " + e.getAttribute('type') +
57 "\nCondition: " + e.firstChild.nodeName);
58 // Make things (in)visible
59 document.getElementById('login').style.display = 'block';
60 document.getElementById('chat').style.display = 'none';
61 document.getElementById('roster').style.display = 'none';
62 document.getElementById('entry').style.display = 'none';
69 function handleDisconnected() {
70 // Make things (in)visible
71 document.getElementById('login').style.display = 'block';
72 document.getElementById('chat').style.display = 'none';
73 document.getElementById('roster').style.display = 'none';
74 document.getElementById('entry').style.display = 'none';
77 function handleMessage(aJSJaCPacket) {
79 html += '<div class="msg">';
80 if (aJSJaCPacket.getFromJID().getResource()) {
81 html += '<span class="sender">';
82 html += aJSJaCPacket.getFromJID().getResource();
84 html += aJSJaCPacket.getBody().htmlEnc() + '</div>';
86 html += '<span class="server">';
87 html += aJSJaCPacket.getBody().htmlEnc() + '</span></div>';
90 document.getElementById('chat').innerHTML += html;
91 document.getElementById('chat').lastChild.scrollIntoView();
94 function handlePresence(aJSJaCPacket) {
95 if (aJSJaCPacket.getFromJID().toString().split('/')[0] != room)
97 roster_list = document.getElementById('roster_list');
98 nick = aJSJaCPacket.getFromJID().getResource();
99 if (aJSJaCPacket.getType() == 'unavailable') {
100 element = document.getElementById(nick);
101 roster_list.removeChild(element);
103 roster_list.innerHTML += '<li id="' + nick + '">' + nick + '</li>';
107 function handleIQ(iq) {
108 con.send(iq.errorReply(ERR_FEATURE_NOT_IMPLEMENTED));
111 function handleIqVersion(iq) {
113 iq.buildNode('name', 'jsjacChatClient'),
114 iq.buildNode('version', JSJaC.Version),
115 iq.buildNode('os', navigator.userAgent)
120 function handleIqTime(iq) {
121 var now = new Date();
122 con.send(iq.reply([iq.buildNode('display',
123 now.toLocaleString()),
127 now.toLocaleString().substring(now.toLocaleString().lastIndexOf(' ')+1))
132 function sendMessage(aForm) {
133 if (aForm.text.value) {
134 message = new JSJaCMessage();
135 message.setBody(aForm.text.value);
136 message.setType('groupchat');
139 aForm.text.value = '';
144 function randomString() {
145 var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
146 var string_length = 20;
147 var randomstring = '';
148 for (var i=0; i<string_length; i++) {
149 var rnum = Math.floor(Math.random() * chars.length);
150 randomstring += chars.substring(rnum,rnum+1);
157 onunload = function() {