]> git.babelmonkeys.de Git - xmppchat.git/blob - main.js
Use english everywhere
[xmppchat.git] / main.js
1 function doLogin(aForm) {
2         room = 'guests@conference.babelmonkeys.de';
3         domain = 'babelmonkeys.de'
4         user = 'muckl';
5         password = 'ooje0OjuJeekaek6';
6         if (!aForm.nickname.value)
7                 return false;
8         try {
9                 oArgs = new Object();
10                 oArgs.httpbase = '/http-bind/';
11                 oArgs.timerval = 2000;
12                 con = new JSJaCHttpBindingConnection(oArgs)
13
14                 nickname = aForm.nickname.value;
15                 setupHandlers(con);
16                 
17                 oArgs = new Object();
18                 oArgs.domain = domain;
19                 oArgs.username = user;
20                 oArgs.resource = randomString();
21                 oArgs.pass = password;
22                 con.connect(oArgs);
23         } catch (e) {
24                 alert(e);
25         } finally {
26                 return false;   
27         }
28 }
29
30 function setupHandlers(con) {
31         con.registerHandler('message', handleMessage);
32         con.registerHandler('presence', handlePresence);
33         con.registerHandler('iq', handleIQ);
34         con.registerHandler('onconnect', handleConnected);
35         con.registerHandler('onerror', handleError);
36         // con.registerHandler('status_changed', handleStatusChanged);
37         con.registerHandler('ondisconnect', handleDisconnected);
38
39         con.registerIQGet('query', NS_VERSION, handleIqVersion);
40         con.registerIQGet('query', NS_TIME, handleIqTime);
41 }
42
43 function handleConnected() {
44         con.send(new JSJaCPresence());
45         GCpresence = new JSJaCPresence();
46         GCpresence.setTo(room + '/' + nickname);
47         con.send(GCpresence);
48
49         // Make things (in)visible
50         document.getElementById('login').style.display = 'none';
51         document.getElementById('chat').style.display = 'block';
52         document.getElementById('roster').style.display = 'block';
53         document.getElementById('entry').style.display  = 'block';
54 }
55
56 function handleError(e) {
57         alert("An error occured:" + 
58                 "\nCode: " + e.getAttribute('code') + 
59                 "\nType: " + e.getAttribute('type') +
60                 "\nCondition: " + e.firstChild.nodeName); 
61         // Make things (in)visible
62         document.getElementById('login').style.display = 'block';
63         document.getElementById('chat').style.display = 'none';
64         document.getElementById('roster').style.display = 'none';
65         document.getElementById('entry').style.display  = 'none';
66
67   
68         if (con.connected())
69                 con.disconnect();
70 }
71
72 function handleDisconnected() {
73         // Make things (in)visible
74         document.getElementById('login').style.display = 'block';
75         document.getElementById('chat').style.display = 'none';
76         document.getElementById('roster').style.display = 'none';
77         document.getElementById('entry').style.display  = 'none';
78 }
79
80 function handleMessage(aJSJaCPacket) {
81         var html = '';
82         html += '<div class="msg">';
83         if (aJSJaCPacket.getFromJID().getResource()) {
84                 html += '<span class="sender">';
85                 html += aJSJaCPacket.getFromJID().getResource();
86                 html += ':</span> ';
87                 html += aJSJaCPacket.getBody().htmlEnc() + '</div>';
88         } else {
89                 html += '<span class="server">';
90                 html += aJSJaCPacket.getBody().htmlEnc() + '</span></div>';
91         }
92
93         document.getElementById('chat').innerHTML += html;
94         document.getElementById('chat').lastChild.scrollIntoView();
95 }
96
97 function handlePresence(aJSJaCPacket) {
98         if (aJSJaCPacket.getFromJID().toString().split('/')[0] != room)
99                 return
100         roster_list = document.getElementById('roster_list');
101         nick = aJSJaCPacket.getFromJID().getResource();
102         if (aJSJaCPacket.getType() == 'unavailable') {
103                 element = document.getElementById(nick);
104                 roster_list.removeChild(element);
105         } else {
106                 roster_list.innerHTML += '<li id="' + nick + '">' + nick + '</li>';
107         }
108 }
109
110 function handleIQ(iq) {
111         con.send(iq.errorReply(ERR_FEATURE_NOT_IMPLEMENTED));
112 }
113
114 function handleIqVersion(iq) {
115         con.send(iq.reply([
116                      iq.buildNode('name', 'jsjacChatClient'),
117                      iq.buildNode('version', JSJaC.Version),
118                      iq.buildNode('os', navigator.userAgent)
119                      ]));
120         return true;
121 }
122
123 function handleIqTime(iq) {
124         var now = new Date();
125         con.send(iq.reply([iq.buildNode('display',
126                                   now.toLocaleString()),
127                      iq.buildNode('utc',
128                                   now.jabberDate()),
129                      iq.buildNode('tz',
130                                   now.toLocaleString().substring(now.toLocaleString().lastIndexOf(' ')+1))
131                      ]));
132         return true;
133 }
134
135 function sendMessage(aForm) {
136         if (aForm.text.value) {
137                 message = new JSJaCMessage();
138                 message.setBody(aForm.text.value);
139                 message.setType('groupchat');
140                 message.setTo(room);
141                 con.send(message);
142                 aForm.text.value = '';
143         }
144         return false;
145 }
146
147 function randomString() {
148         var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
149         var string_length = 20;
150         var randomstring = '';
151         for (var i=0; i<string_length; i++) {
152                 var rnum = Math.floor(Math.random() * chars.length);
153                 randomstring += chars.substring(rnum,rnum+1);
154         }
155         return randomstring;
156 }
157
158
159
160 onunload = function() {
161         if (con.connected())
162                 con.disconnect();
163 }
164