1 function doLogin(aForm) {
2 room = 'guests@conference.babelmonkeys.de';
3 domain = 'babelmonkeys.de'
5 password = 'ooje0OjuJeekaek6';
6 if (!aForm.nickname.value)
10 oArgs.httpbase = '/http-bind/';
11 oArgs.timerval = 2000;
12 con = new JSJaCHttpBindingConnection(oArgs)
14 nickname = aForm.nickname.value;
18 oArgs.domain = domain;
19 oArgs.username = user;
20 oArgs.resource = randomString();
21 oArgs.pass = password;
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);
39 con.registerIQGet('query', NS_VERSION, handleIqVersion);
40 con.registerIQGet('query', NS_TIME, handleIqTime);
43 function handleConnected() {
44 con.send(new JSJaCPresence());
45 GCpresence = new JSJaCPresence();
46 GCpresence.setTo(room + '/' + nickname);
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';
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';
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';
80 function handleMessage(aJSJaCPacket) {
82 html += '<div class="msg">';
83 if (aJSJaCPacket.getFromJID().getResource()) {
84 html += '<span class="sender">';
85 html += aJSJaCPacket.getFromJID().getResource();
87 html += aJSJaCPacket.getBody().htmlEnc() + '</div>';
89 html += '<span class="server">';
90 html += aJSJaCPacket.getBody().htmlEnc() + '</span></div>';
93 document.getElementById('chat').innerHTML += html;
94 document.getElementById('chat').lastChild.scrollIntoView();
97 function handlePresence(aJSJaCPacket) {
98 if (aJSJaCPacket.getFromJID().toString().split('/')[0] != room)
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);
106 roster_list.innerHTML += '<li id="' + nick + '">' + nick + '</li>';
110 function handleIQ(iq) {
111 con.send(iq.errorReply(ERR_FEATURE_NOT_IMPLEMENTED));
114 function handleIqVersion(iq) {
116 iq.buildNode('name', 'jsjacChatClient'),
117 iq.buildNode('version', JSJaC.Version),
118 iq.buildNode('os', navigator.userAgent)
123 function handleIqTime(iq) {
124 var now = new Date();
125 con.send(iq.reply([iq.buildNode('display',
126 now.toLocaleString()),
130 now.toLocaleString().substring(now.toLocaleString().lastIndexOf(' ')+1))
135 function sendMessage(aForm) {
136 if (aForm.text.value) {
137 message = new JSJaCMessage();
138 message.setBody(aForm.text.value);
139 message.setType('groupchat');
142 aForm.text.value = '';
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);
160 onunload = function() {