--- /dev/null
+function doLogin(aForm) {
+ room = 'guests@conference.babelmonkeys.de';
+ if (!aForm.nickname.value)
+ return false;
+ try {
+ oArgs = new Object();
+ oArgs.httpbase = '/http-bind/';
+ oArgs.timerval = 2000;
+ con = new JSJaCHttpBindingConnection(oArgs)
+
+ nickname = aForm.nickname.value;
+ setupHandlers(con);
+
+ oArgs = new Object();
+ oArgs.domain = 'babelmonkeys.de';
+ oArgs.username = 'muckl';
+ oArgs.resource = randomString();
+ oArgs.pass = 'ooje0OjuJeekaek6';
+ con.connect(oArgs);
+ } catch (e) {
+ alert(e);
+ } finally {
+ return false;
+ }
+}
+
+function setupHandlers(con) {
+ con.registerHandler('message', handleMessage);
+ con.registerHandler('presence', handlePresence);
+ con.registerHandler('iq', handleIQ);
+ con.registerHandler('onconnect', handleConnected);
+ con.registerHandler('onerror', handleError);
+ // con.registerHandler('status_changed', handleStatusChanged);
+ con.registerHandler('ondisconnect', handleDisconnected);
+
+ con.registerIQGet('query', NS_VERSION, handleIqVersion);
+ con.registerIQGet('query', NS_TIME, handleIqTime);
+}
+
+function handleConnected() {
+ con.send(new JSJaCPresence());
+ GCpresence = new JSJaCPresence();
+ GCpresence.setTo(room + '/' + nickname);
+ con.send(GCpresence);
+
+ // Make things (in)visible
+ document.getElementById('login').style.display = 'none';
+ document.getElementById('chat').style.display = 'block';
+ document.getElementById('roster').style.display = 'block';
+ document.getElementById('entry').style.display = 'block';
+}
+
+function handleError(e) {
+ alert("An error occured:" +
+ "\nCode: " + e.getAttribute('code') +
+ "\nType: " + e.getAttribute('type') +
+ "\nCondition: " + e.firstChild.nodeName);
+ // Make things (in)visible
+ document.getElementById('login').style.display = 'block';
+ document.getElementById('chat').style.display = 'none';
+ document.getElementById('roster').style.display = 'none';
+ document.getElementById('entry').style.display = 'none';
+
+
+ if (con.connected())
+ con.disconnect();
+}
+
+function handleDisconnected() {
+ // Make things (in)visible
+ document.getElementById('login').style.display = 'block';
+ document.getElementById('chat').style.display = 'none';
+ document.getElementById('roster').style.display = 'none';
+ document.getElementById('entry').style.display = 'none';
+}
+
+function handleMessage(aJSJaCPacket) {
+ var html = '';
+ html += '<div class="msg">';
+ if (aJSJaCPacket.getFromJID().getResource()) {
+ html += '<span class="sender">';
+ html += aJSJaCPacket.getFromJID().getResource();
+ html += ':</span> ';
+ html += aJSJaCPacket.getBody().htmlEnc() + '</div>';
+ } else {
+ html += '<span class="server">';
+ html += aJSJaCPacket.getBody().htmlEnc() + '</span></div>';
+ }
+
+ document.getElementById('chat').innerHTML += html;
+ document.getElementById('chat').lastChild.scrollIntoView();
+}
+
+function handlePresence(aJSJaCPacket) {
+ if (aJSJaCPacket.getFromJID().toString().split('/')[0] != room)
+ return
+ roster_list = document.getElementById('roster_list');
+ nick = aJSJaCPacket.getFromJID().getResource();
+ if (aJSJaCPacket.getType() == 'unavailable') {
+ element = document.getElementById(nick);
+ roster_list.removeChild(element);
+ } else {
+ roster_list.innerHTML += '<li id="' + nick + '">' + nick + '</li>';
+ }
+}
+
+function handleIQ(iq) {
+ con.send(iq.errorReply(ERR_FEATURE_NOT_IMPLEMENTED));
+}
+
+function handleIqVersion(iq) {
+ con.send(iq.reply([
+ iq.buildNode('name', 'jsjacChatClient'),
+ iq.buildNode('version', JSJaC.Version),
+ iq.buildNode('os', navigator.userAgent)
+ ]));
+ return true;
+}
+
+function handleIqTime(iq) {
+ var now = new Date();
+ con.send(iq.reply([iq.buildNode('display',
+ now.toLocaleString()),
+ iq.buildNode('utc',
+ now.jabberDate()),
+ iq.buildNode('tz',
+ now.toLocaleString().substring(now.toLocaleString().lastIndexOf(' ')+1))
+ ]));
+ return true;
+}
+
+function sendMessage(aForm) {
+ if (aForm.text.value) {
+ message = new JSJaCMessage();
+ message.setBody(aForm.text.value);
+ message.setType('groupchat');
+ message.setTo(room);
+ con.send(message);
+ aForm.text.value = '';
+ }
+ return false;
+}
+
+function randomString() {
+ var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
+ var string_length = 20;
+ var randomstring = '';
+ for (var i=0; i<string_length; i++) {
+ var rnum = Math.floor(Math.random() * chars.length);
+ randomstring += chars.substring(rnum,rnum+1);
+ }
+ return randomstring;
+}
+
+
+
+onunload = function() {
+ if (con.connected())
+ con.disconnect();
+}
+