-function doLogin(aForm) {
- room = 'guests@conference.babelmonkeys.de';
- domain = 'babelmonkeys.de'
- user = 'muckl';
- password = 'ooje0OjuJeekaek6';
- 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 = domain;
- oArgs.username = user;
- oArgs.resource = randomString();
- oArgs.pass = password;
- 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 addBubble(nick) {
- id = nick + 'Bubble';
- if (!document.getElementById(id)) {
- root = document.getElementsByTagName('body')[0];
- var div = '';
- div += '<div id="' + id + '" class="bubble" onmousedown="startDrag(this)">';
- div += '<a href="#" onclick="' +"document.getElementById('" + id + "').style.display='none'" + '">Close</a>';
- div += '<div id="' + id + 'Chat" class="bubbleChat"></div>';
- div += '<form id="' + id + 'Form" class="bubbleForm" onsubmit="return sendChatMessage(this,' + "'" + nick + "');" + '" action="#">';
- div += '<input type="text" name="text" id="' + id + 'Text" class="bubbleForm"/>';
- div += '</form>';
- div += '</div>';
- root.innerHTML += div;
- }
- document.getElementById(id).style.display = 'block';
-}
-
-function handleMessage(aJSJaCPacket) {
- var html = '';
- sender = aJSJaCPacket.getFromJID().getResource()
- html += '<div class="msg">';
- if (sender) {
- html += '<span class="sender">';
- html += sender;
- html += ':</span> ';
- html += aJSJaCPacket.getBody().htmlEnc() + '</div>';
- } else {
- html += '<span class="server">';
- html += aJSJaCPacket.getBody().htmlEnc() + '</span></div>';
- }
-
- if (aJSJaCPacket.getType() == 'chat') {
- addBubble(sender);
- document.getElementById(id + 'Chat').innerHTML += html;
- document.getElementById(id + 'Chat').lastChild.scrollIntoView();
- } else {
- 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 + '" onclick="addBubble(' + "'" + 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 sendChatMessage(aForm, to) {
- if (aForm.text.value) {
- message = new JSJaCMessage();
- message.setBody(aForm.text.value);
- message.setType('chat');
- message.setTo(room + '/' + to);
- con.send(message);
- aForm.text.value = '';
- var html = '';
- html += '<div class="msg">';
- html += '<span class="sender">';
- html += nickname;
- html += ':</span> ';
- html += message.getBody().htmlEnc() + '</div>';
- document.getElementById(to + 'BubbleChat').innerHTML += html;
- document.getElementById(to + 'BubbleChat').lastChild.scrollIntoView();
-
- }
- 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;
-}
-
-var dragElement = null;
-var mouseX = 0;
-var mouseY = 0;
-var offX = 0;
-var offY = 0;
-
-function startDrag(element) {
- dragElement = element;
- offX = mouseX - dragElement.offsetLeft;
- offY = mouseY - dragElement.offsetTop;
-}
-
-function doDrag(eve) {
- mouseX = eve.pageX;
- mouseY = eve.pageY;
-
- if (dragElement) {
- dragElement.style.left = (mouseX - offX) + 'px';
- dragElement.style.top = (mouseY - offY) + 'px';
- }
-}
-
-function stopDrag(eve) {
- dragElement = null;
-}
-
-onunload = function() {
- if (con.connected())
- con.disconnect();
-}
-
-onmousemove = doDrag;
-
-onmouseup = stopDrag;