]> cgit.babelmonkeys.de Git - xmppchat.git/blob - main.js
Initial commit
[xmppchat.git] / main.js
1 function doLogin(aForm) {
2         room = 'guests@conference.babelmonkeys.de';
3         if (!aForm.nickname.value)
4                 return false;
5         try {
6                 oArgs = new Object();
7                 oArgs.httpbase = '/http-bind/';
8                 oArgs.timerval = 2000;
9                 con = new JSJaCHttpBindingConnection(oArgs)
10
11                 nickname = aForm.nickname.value;
12                 setupHandlers(con);
13                 
14                 oArgs = new Object();
15                 oArgs.domain = 'babelmonkeys.de';
16                 oArgs.username = 'muckl';
17                 oArgs.resource = randomString();
18                 oArgs.pass = 'ooje0OjuJeekaek6';
19                 con.connect(oArgs);
20         } catch (e) {
21                 alert(e);
22         } finally {
23                 return false;   
24         }
25 }
26
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);
35
36         con.registerIQGet('query', NS_VERSION, handleIqVersion);
37         con.registerIQGet('query', NS_TIME, handleIqTime);
38 }
39
40 function handleConnected() {
41         con.send(new JSJaCPresence());
42         GCpresence = new JSJaCPresence();
43         GCpresence.setTo(room + '/' + nickname);
44         con.send(GCpresence);
45
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';
51 }
52
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';
63
64   
65         if (con.connected())
66                 con.disconnect();
67 }
68
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';
75 }
76
77 function handleMessage(aJSJaCPacket) {
78         var html = '';
79         html += '<div class="msg">';
80         if (aJSJaCPacket.getFromJID().getResource()) {
81                 html += '<span class="sender">';
82                 html += aJSJaCPacket.getFromJID().getResource();
83                 html += ':</span> ';
84                 html += aJSJaCPacket.getBody().htmlEnc() + '</div>';
85         } else {
86                 html += '<span class="server">';
87                 html += aJSJaCPacket.getBody().htmlEnc() + '</span></div>';
88         }
89
90         document.getElementById('chat').innerHTML += html;
91         document.getElementById('chat').lastChild.scrollIntoView();
92 }
93
94 function handlePresence(aJSJaCPacket) {
95         if (aJSJaCPacket.getFromJID().toString().split('/')[0] != room)
96                 return
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);
102         } else {
103                 roster_list.innerHTML += '<li id="' + nick + '">' + nick + '</li>';
104         }
105 }
106
107 function handleIQ(iq) {
108         con.send(iq.errorReply(ERR_FEATURE_NOT_IMPLEMENTED));
109 }
110
111 function handleIqVersion(iq) {
112         con.send(iq.reply([
113                      iq.buildNode('name', 'jsjacChatClient'),
114                      iq.buildNode('version', JSJaC.Version),
115                      iq.buildNode('os', navigator.userAgent)
116                      ]));
117         return true;
118 }
119
120 function handleIqTime(iq) {
121         var now = new Date();
122         con.send(iq.reply([iq.buildNode('display',
123                                   now.toLocaleString()),
124                      iq.buildNode('utc',
125                                   now.jabberDate()),
126                      iq.buildNode('tz',
127                                   now.toLocaleString().substring(now.toLocaleString().lastIndexOf(' ')+1))
128                      ]));
129         return true;
130 }
131
132 function sendMessage(aForm) {
133         if (aForm.text.value) {
134                 message = new JSJaCMessage();
135                 message.setBody(aForm.text.value);
136                 message.setType('groupchat');
137                 message.setTo(room);
138                 con.send(message);
139                 aForm.text.value = '';
140         }
141         return false;
142 }
143
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);
151         }
152         return randomstring;
153 }
154
155
156
157 onunload = function() {
158         if (con.connected())
159                 con.disconnect();
160 }
161