1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4
<title>JWChat - Opcoes</title>
5
<meta http-equiv="content-type" content="text/html; charset=utf-8">
6
<script src="switchStyle.js"></script>
7
<script src="version.js"></script>
8
<script src="shared.js"></script>
9
<script src="jabber_x_data.js"></script>
10
<script src="xmlextras.js"></script>
11
<script src="jsjac.js"></script>
14
function savePrefs() {
15
var prefs = new Array('usersHidden','autoPopup','autoPopupAway','focusWindows','timestamps','playSounds','timerval','enableLog');
20
var iq = new JSJaCIQ();
22
var query = iq.setQuery('jabber:iq:private');
23
var jNode = query.appendChild(iq.getDoc().createElement('jwchat'));
24
jNode.setAttribute('xmlns','jwchat:prefs');
26
for (var i=0; i<prefs.length; i++) {
27
var item = jNode.appendChild(iq.getDoc().createElement(prefs[i]));
28
if (prefs[i] == 'usersHidden')
29
item.appendChild(iq.getDoc().createTextNode(eval("srcW.roster."+prefs[i])));
31
item.appendChild(iq.getDoc().createTextNode(eval("srcW."+prefs[i])));
34
srcW.Debug.log(iq.getDoc().xml,3);
40
function displayTimestamps() {
41
srcW.timestamps = form.timestamps.checked;
42
/* set timestamp display in all open chat-windows */
43
for (var i=0; i<srcW.roster.users.length; i++) {
44
if ((srcW.roster.users[i].chatW) && (srcW.roster.users[i].chatW.closed == false)) {
45
srcW.roster.users[i].chatW.top.displayTimestamp();
47
if (srcW.roster.users[i].roster) {
48
for (var j=0; j<srcW.roster.users[i].roster.users.length; j++) {
49
if (srcW.roster.users[i].roster.users[j].chatW &&
50
!srcW.roster.users[i].roster.users[j].chatW.closed)
51
srcW.roster.users[i].roster.users[j].chatW.displayTimestamp();
57
function toggleAutoPopupAway(el) {
58
document.getElementById('autoPopupAway').disabled = !el.checked;
62
function getOptions() {
63
form = document.forms['options'];
64
if (srcW.roster.usersHidden)
65
form.usersHidden.checked = true;
67
form.autoPopup.checked = true;
68
if (srcW.autoPopupAway)
69
form.autoPopupAway.checked = true;
70
if (srcW.playSounds == true)
71
form.playSounds.checked = true;
72
if (srcW.timestamps == true)
73
form.timestamps.checked = true;
74
if (srcW.focusWindows == true)
75
form.focusWindows.checked = true;
77
form.enableLog.checked = srcW.enableLog;
79
if (typeof(srcW.loghost) == 'undefined')
80
document.getElementById('tr_enableLog').style.display = 'none';
82
if (srcW.con.isPolling()) {
83
for (var i=0; i<form.timerval.options.length; i++) {
84
if (form.timerval.options[i].value == srcW.timerval)
85
form.timerval.selectedIndex = i;
88
toggleAutoPopupAway(document.getElementById('autoPopup'));
92
function service_selected(el) {
93
pane = el.nextSibling;
94
if (el.options[el.selectedIndex].value == '') {
99
pane.innerHTML = "<div class='transport_pane'>"+"Buscando Servico ...<br>Favor esperar!"+"</div>";
101
var iq = new JSJaCIQ();
103
iq.setTo(el.options[el.selectedIndex].value);
104
iq.setQuery('jabber:iq:register');
107
srcW.con.send(iq,me.getRegisterForm);
110
function getRegisterForm(iq) {
111
if (!iq || iq.getType() != 'result' || iq.getQueryXMLNS() != 'jabber:iq:register') {
112
pane.innerHTML = "<div class='transport_pane'>"+"Ocorreu um Erro ..."+"</div>";
115
srcW.Debug.log(iq.getDoc().xml,2);
117
var query = iq.getQuery();
119
// check if it's jabber:x:data
122
if (iq.getNode().getElementsByTagName('x').length && iq.getNode().getElementsByTagName('x').item(0).getAttribute('xmlns') == 'jabber:x:data') {
123
html += "<form>"+genJabberXDataTable(iq.getNode().getElementsByTagName('x').item(0))+"</form>";
125
if (query.getElementsByTagName('registered').item(0))
126
html += "<div class='pane_el'><b style='color:red;'>"+"Voce ja esta registrado nesse servico!"+"</b></div>";
127
if (query.getElementsByTagName('instructions').item(0))
128
html += "<div class='pane_el'>"+query.getElementsByTagName('instructions').item(0).firstChild.nodeValue+"</div>";
129
html += "<form name='transport'><table>";
130
for (var i=0; i<query.childNodes.length; i++) {
131
var aItem = query.childNodes.item(i);
132
switch (aItem.nodeName) {
136
case 'key': // hide key
137
html += "<tr><td colspan=2><input type=hidden name='"+aItem.nodeName+"' value='"+aItem.firstChild.nodeValue+"'></td></tr>";
140
if (aItem.firstChild)
141
html += "<tr><td>"+aItem.nodeName+"</td><td><input type='password' name='"+aItem.nodeName+"' value='"+aItem.firstChild.nodeValue+"'></td></tr>";
143
html += "<tr><td>"+aItem.nodeName+"</td><td><input type='password' name='"+aItem.nodeName+"'></td></tr>";
146
if (aItem.firstChild)
147
html += "<tr><td>"+aItem.nodeName+"</td><td><input type='text' name='"+aItem.nodeName+"' value='"+aItem.firstChild.nodeValue+"'></td></tr>";
149
html += "<tr><td>"+aItem.nodeName+"</td><td><input type='text' name='"+aItem.nodeName+"'></td></tr>";
152
html += "</table></form>";
154
html += "<div class='pane_el' align='right'>";
155
if (query.getElementsByTagName('registered').item(0)) {
156
html += "<button onClick=\"unregisterGateway('"+iq.getFrom()+"');\">"+"Desregistrar"+"</button>";
158
html += "<button onClick=\"registerService('"+iq.getFrom()+"','"+pane.id+"');\">"+"Renovar"+"</button>";
160
html += "<button onClick=\"registerService('"+iq.getFrom()+"','"+pane.id+"');\">"+"Registrar"+"</button>";
162
pane.innerHTML = html;
166
var ie5=document.all&&document.getElementById;
167
var oldactiveindex = 0;
169
function tabclicked(e) {
170
// find index of clicked element
171
var firingobj=ie5? event.srcElement : e.target;
172
var tablabels = document.getElementById('tablabels');
173
for (var i=0; i<tablabels.childNodes.length; i++)
174
if (tablabels.childNodes[i] == firingobj) {
175
if (oldactiveindex == i)
177
var tabs = document.getElementById('tabs');
178
tabs.childNodes[oldactiveindex].className = 'tabinactive';
179
tabs.childNodes[i].className = 'tab';
180
tablabels.childNodes[i].className = 'tablabelactive';
181
tablabels.childNodes[oldactiveindex].className = 'tablabel';
186
function registerService(sJid,paneid) {
189
var pane = document.getElementById(paneid);
191
for (var i=0; i<pane.childNodes.length; i++) {
192
if (pane.childNodes[i].tagName == 'FORM') {
193
aForm = pane.childNodes[i];
200
var jabberXData = (aForm.elements['jwchat_form_type'] && aForm.elements['jwchat_form_type'].value == 'jabber:x:data');
203
setxml = genJabberXDataReply(aForm);
205
for (var i=0; i<aForm.elements.length; i++) {
206
var el = aForm.elements[i];
207
setxml += "<"+el.name+">"+el.value+"</"+el.name+">";
211
var iq = new JSJaCIQ();
215
var query = iq.setQuery('jabber:iq:register');
217
var xmldoc = XmlDocument.create('body','foo');
218
xmldoc.loadXML('<body>'+setxml+'</body>');
220
for (var i=0; i<xmldoc.firstChild.childNodes.length; i++)
221
query.appendChild(xmldoc.firstChild.childNodes.item(i).cloneNode(true));
223
srcW.Debug.log(iq.getDoc().xml,2);
226
srcW.con.send(iq,me.handleRegisterService,sJid);
228
pane.innerHTML = "<strong>"+"Request sent to "+sJid+".."+"</strong><br>";
231
/* callback from registering a service */
232
function handleRegisterService(iq,sJid) {
233
if (iq.getType() == 'error') {
235
var html = "<strong style='color:red;'>"+"Erro";
236
if (iq.getNode().getElementsByTagName('error').item(0)) {
237
var aErr = iq.getNode().getElementsByTagName('error').item(0);
238
if (aErr.getAttribute('code'))
239
html += " ("+aErr.getAttribute('code')+")";
241
if (aErr.firstChild && aErr.firstChild.nodeValue)
242
html += aErr.firstChild.nodeValue;
243
else if (aErr.firstChild) {
244
switch (aErr.firstChild.nodeName) {
245
case 'bad-request': html += "Bad Request";
247
default: html += aErr.firstChild.nodeName;
252
html += "</strong><br/>";
253
pane.innerHTML += html;
256
pane.innerHTML += "<strong>"+"Registration successful."+"</strong><br/>";
259
pane.innerHTML += "<strong>"+"Sending presence..."+"</strong><br />";
260
var aPresence = new JSJaCPresence();
261
aPresence.setTo(sJid);
262
aPresence.setShow(srcW.onlstat);
263
aPresence.setStatus(srcW.onlmsg);
264
srcW.con.send(aPresence);
265
pane.innerHTML += "<strong>"+"Done."+"</strong><br />";
268
function unregisterGateway(sJid) {
269
if (srcW.roster.getUserByJID(sJid) != null)
270
sJid = srcW.roster.getUserByJID(sJid).fulljid;
272
pane.innerHTML = "<strong>"+"Unregistering from service "+sJid+" ..."+"</strong><br />";
273
var iq = new JSJaCIQ();
276
var query = iq.setQuery('jabber:iq:register');
277
var item = query.appendChild(iq.getDoc().createElement('remove'));
279
srcW.con.send(iq,me.handleUnregisterService,sJid);
282
function handleUnregisterService(iq,sJid) {
283
if (iq.getType() == 'error') {
284
var html = "<strong style='color:red;'>"+"Erro";
285
if (iq.getNode().getElementsByTagName('error').item(0)) {
286
var aErr = iq.getNode().getElementsByTagName('error').item(0);
287
if (aErr.getAttribute('code'))
288
html += " ("+aErr.getAttribute('code')+")";
290
if (aErr.firstChild && aErr.firstChild.nodeValue)
291
html += aErr.firstChild.nodeValue;
292
else if (aErr.firstChild) {
293
switch (aErr.firstChild.nodeName) {
294
case 'bad-request': html += "Bad Request";
296
default: html += aErr.firstChild.nodeName;
301
html += "</strong><br/>";
302
pane.innerHTML += html;
305
pane.innerHTML += "<strong>"+"Done."+"</strong><br />";
306
pane.innerHTML += "<strong>"+"Removing "+sJid+" from roster..."+"</strong><br />";
308
var iq = new JSJaCIQ();
310
var query = iq.setQuery('jabber:iq:roster');
311
var item = query.appendChild(iq.getDoc().createElement('item'));
312
item.setAttribute('jid',sJid);
313
item.setAttribute('subscription','remove');
317
if (confirm("Remove all associated contacts?")) {
318
pane.innerHTML += "<strong>"+"Removing contacts..."+"</strong><br />";
319
var iq = new JSJaCIQ();
321
var query = iq.setQuery('jabber:iq:roster');
322
for (var i=0; i<srcW.roster.users.length; i++) {
323
if (cutResource(srcW.roster.users[i].jid.substring(srcW.roster.users[i].jid.indexOf('@')+1)) == cutResource(sJid) &&
324
srcW.roster.users[i].jid != cutResource(sJid)) {
325
var item = query.appendChild(iq.getDoc().createElement('item'));
326
item.setAttribute('jid',srcW.roster.users[i].fulljid);
327
item.setAttribute('subscription','remove');
328
pane.innerHTML += srcW.roster.users[i].name+"<br />";
333
pane.innerHTML += "<strong>"+"Done."+"</strong><br />";
338
srcW = opener.parent;
342
// initialise handlers for tabs
343
var tablabels = document.getElementById('tablabels');
344
for (var i=0; i<tablabels.childNodes.length; i++)
345
tablabels.childNodes[i].onclick = tabclicked;
348
var jwchat_version = document.getElementById('jwchat_version');
349
jwchat_version.innerHTML = VERSION;
350
if (VERSION == "CVS")
351
jwchat_version.innerHTML += "<br>(" + document.lastModified + ")";
353
var transports_selector = document.getElementById('transports_selector');
354
var transport_optidx = 1;
355
var directory_selector = document.getElementById('directory_selector');
356
var directory_optidx = 1;
357
for (var i in srcW.disco) {
358
if (!srcW.disco[i].getNode) continue;
359
var item = srcW.disco[i];
360
if (item.getNode().getElementsByTagName('identity').item(0)) {
361
if (item.getNode().getElementsByTagName('identity').item(0).getAttribute('category') == 'gateway') {
362
for (var j=0; j<item.getNode().getElementsByTagName('feature').length; j++) {
363
if (item.getNode().getElementsByTagName('feature').item(j).getAttribute('var') == 'jabber:iq:register') {
364
transports_selector.options[transport_optidx++] = new Option(item.getNode().getElementsByTagName('identity').item(0).getAttribute('name'),item.getFrom());
368
} else if (item.getNode().getElementsByTagName('identity').item(0).getAttribute('category') == 'directory') {
369
for (var j=0; j<item.getNode().getElementsByTagName('feature').length; j++) {
370
if (item.getNode().getElementsByTagName('feature').item(j).getAttribute('var') == 'jabber:iq:register') {
371
directory_selector.options[directory_optidx++] = new Option(item.getNode().getElementsByTagName('identity').item(0).getAttribute('name'),item.getFrom());
379
if (directory_optidx == 1)
380
document.getElementById('dir_label').style.display = 'none';
381
if (transport_optidx == 1)
382
document.getElementById('gw_label').style.display = 'none';
386
onunload = savePrefs;
389
<style type="text/css">
390
th { font-size: 80%; text-align: right; font-weight: normal; }
391
#transport_pane input {
392
border: 1px solid black;
400
border: 1px solid black;
401
border-bottom: 0px solid white;
403
background-color: lightgrey;
406
border: 1px solid black;
407
border-bottom: 1px solid white;
410
background-color: white;
414
border: 1px solid black;
415
background-color: white;
417
.tab { display: block; }
418
.tabinactive { display: none; }
419
.pane_el { margin: 4px; }
422
<body style="margin: 8px;">
424
<table border=0 cellpadding=0 cellspacing=0 height="100%" width="100%">
427
<div id="tablabels" class="tablabels"><span class="tablabelactive">Geral</span><span class="tablabel" id='gw_label'>Gateways</span><span class="tablabel" id='dir_label'>Diretorio de Usuario</span><span class="tablabel">Sobre</span></div>
429
<tr><td height="100%" class="tabs" valign="top">
430
<div id="tabs"><div id="tab1" class="tab">
431
<form name="options">
433
<legend>Opcoes</legend>
436
<td><input id="usersHidden" type="checkbox" onChange="srcW.roster.toggleHide();"></td>
437
<td><label for="usersHidden">Esconder usuarios offline</label></td>
440
<td><input id="autoPopup" type="checkbox" onChange="srcW.autoPopup=this.checked;toggleAutoPopupAway(this);"></td>
441
<td><label for="autoPopup">Abrir automaticamente mensagens e chats</label></td>
444
<td><input id="autoPopupAway" type="checkbox" onChange="srcW.autoPopupAway=this.checked"></td>
445
<td><label for="autoPopupAway">Auto-Pop-Up se away</label></td>
448
<td><input id="playSounds" type="checkbox" onChange="srcW.playSounds=this.checked;"></td>
449
<td><label for="playSounds">Tocar sons</label></td>
452
<td><input id="focusWindows" type="checkbox" onChange="srcW.focusWindows=this.checked;"></td>
453
<td><label for="focusWindows">Abrir janela se uma mensagem nova e recebida</label></td>
456
<td><input id="timestamps" type="checkbox" onClick="displayTimestamps();"></td>
457
<td><label for="timestamps">Mostar horario (timestamp) nas janelas de chat</label></td>
459
<tr id='tr_enableLog'>
460
<td><input id="enableLog" type="checkbox" onChange="srcW.enableLog=this.checked;"></td>
461
<td><label for="enableLog">Ativar gravacao de log das mensagens</label></td>
463
<script language="JavaScript">
464
if (opener.parent.con.isPolling())
468
Intervalo de Renovacao: \
469
<select name="timerval" onChange="srcW.con.setPollInterval(this.value);srcW.timerval=this.value;"> \
470
<option value="2000">2 seg.</option> \
471
<option value="5000">5 seg.</option> \
472
<option value="10000">10 seg.</option> \
473
<option value="30000">30 seg.</option> \
481
</div><div class="tabinactive" id="transports_tab">Registrar em <select id="transports_selector" onchange="service_selected(this);"><option value=""> - Escolha Gateway - </option></select><div id="transport_pane"></div></div><div class="tabinactive" id="directory_tab">Registrar em <select id="directory_selector" onchange="service_selected(this);"><option value=""> - Escolha Diretorio - </option></select><div id="directory_pane"></div></div><div class="tabinactive" id="about_tab" align="center">
483
<img src="images/jwchat.jpg" style="border:1px solid black;">
484
<h1 style="margin-bottom: 0px;">JWChat</h1>
485
Version <span id="jwchat_version"></span>
487
<nobr>© 2003-2004 by <a href="mailto:steve@zeank.in-berlin.de">Stefan Strigler</a></nobr>
489
<img src="images/jumpto.gif" align="middle"><a href="http://jwchat.sourceforge.net" target="_new">http://jwchat.sourceforge.net</a>