23
23
function putMsgHTML(msg,mtime,user,usercolor,err) {
28
26
msgHTML += "<div><span class=time>["+mtime+"] </span>";
30
28
if (msg.match(/^\/me /)) {
31
msg = msg.replace(/^\/me /,"<span style=\"color:green;font-weight:bold;\" class=msgnick title='@ "+mtime+"'>* "+user+"</span> ");
30
msg = msg.replace(/^\/me /,"<span style=\"color:green;font-weight:bold;\" class=msgnick title='@ "+mtime+"'>* "+htmlEnc(user)+"</span> ");
32
31
} else if (user != group) {
33
msgHTML += "<span style=\"color:"+usercolor+";\" class=msgnick title='@ "+mtime+"'><" + user + "></span>";
33
msgHTML += "<span style=\"color:"+usercolor+";\" class=msgnick title='@ "+mtime+"'><" + htmlEnc(user) + "></span> ";
36
36
if (user == group) {/* channel status messages */
38
msgHTML += "<span style=\"font-weight:bold;color:red;\">"+msg+"</span>";
40
msgHTML += "<span style=\"font-weight:bold;\">"+msg+"</span>";
38
msgHTML += "<span style=\"font-weight:bold;color:red;\">"+msg+"</span>";
40
msgHTML += "<span style=\"font-weight:bold;\">"+msg+"</span>";
42
if (user != nick && meRegExp.test(msg) && !notHREFMeRegExp.test(msg))
43
msgHTML += " " + msg.replace(meRegExp,"<span class='highlighted'>$1</span>");
45
msgHTML += " " + msg;
50
var scroll_bottom = false;
51
if (cFrame.body.scrollTop+cFrame.body.clientHeight >= cFrame.body.scrollHeight)
42
if (user != nick && meRegExp.test(msg) && !notHREFMeRegExp.test(msg))
43
msgHTML += " " + msg.replace(meRegExp,"<span class='highlighted'>$1</span>");
50
var scroll_bottom = false;
51
if (cFrame.body.scrollTop+cFrame.body.clientHeight >= cFrame.body.scrollHeight)
54
54
cFrame.body.innerHTML += msgHTML;
57
frames.groupchatChat.groupchatIChat.scrollTo(0,cFrame.body.scrollHeight);
57
frames.groupchatChat.groupchatIChat.scrollTo(0,cFrame.body.scrollHeight);
60
60
function popMsgs() {
71
71
msg = user.chatmsgs.shift();
73
var from = msg.getFrom();
73
var from = msg.getFrom();
74
74
if (msg.getFrom().indexOf('/') != -1)
75
75
from = msg.getFrom().substring(msg.getFrom().indexOf('/')+1);
80
timestamp = msg.jwcTimestamp;
82
timestamp = new Date();
80
timestamp = msg.jwcTimestamp;
82
timestamp = new Date();
85
if (new Date() - timestamp > 24*3600*1000)
86
mtime += timestamp.toLocaleDateString() + " ";
85
if (new Date() - timestamp > 24*3600*1000)
86
mtime += timestamp.toLocaleDateString() + " ";
88
mtime += timestamp.toLocaleTimeString();
88
mtime += timestamp.toLocaleTimeString();
90
90
/* look for a subject */
91
91
if (msg.getSubject()) { // set topic
92
92
user.roster.subject = msg.getSubject();
93
93
frames.groupchatTop.document.forms[0].elements['subject'].value = msg.getSubject();
94
putMsgHTML("/me ha cambiado el tema a: "+msg.getSubject(), mtime, from);
94
putMsgHTML("/me ha cambiado el tema a: "+msg.getSubject(), mtime, from);
98
98
if(!msg.getBody() || msg.getBody() == '')
101
101
/* calculate color */
124
124
function updateMe() {
126
frames.groupchatTop.document.forms[0].subject.disabled = (roster.me.role == 'none');
127
frames.groupchatBottom.document.forms[0].submit.disabled = (roster.me.role == 'none');
129
if (roster.me.affiliation == 'owner')
130
frames.groupchatBottom.document.getElementById('config_chan_button').style.display = '';
132
frames.groupchatBottom.document.getElementById('config_chan_button').style.display = 'none';
134
if (roster.me.role == 'none') {// seems we left
135
cFrame.body.innerHTML += "<span style='color:red';>"+"Desconectado."+"</span><br>";
136
frames.groupchatChat.groupchatIChat.scrollTo(0,cFrame.body.scrollHeight);
139
if (frames.groupchatRoster.updateMe)
140
frames.groupchatRoster.updateMe();
125
frames.groupchatTop.document.forms[0].subject.disabled = (roster.me.role == 'none');
126
frames.groupchatBottom.document.forms[0].submit.disabled = (roster.me.role == 'none');
128
if (roster.me.affiliation == 'owner')
129
frames.groupchatBottom.document.getElementById('config_chan_button').style.display = '';
131
frames.groupchatBottom.document.getElementById('config_chan_button').style.display = 'none';
133
if (roster.me.role == 'none') {// seems we left
134
cFrame.body.innerHTML += "<span style='color:red';>"+"Desconectado."+"</span><br>";
135
frames.groupchatChat.groupchatIChat.scrollTo(0,cFrame.body.scrollHeight);
138
if (frames.groupchatRoster.updateMe)
139
frames.groupchatRoster.updateMe();
143
142
function changeUserStat(jid,stat,val,confirm,reason) {
144
143
var user = roster.getUserByJID(jid);
145
var iq = new JSJaCIQ();
149
var query = iq.setQuery('http://jabber.org/protocol/muc#admin');
150
var item = query.appendChild(iq.getDoc().createElement('item'));
151
item.setAttribute('nick',user.name);
153
item.setAttribute(stat,val);
144
var iq = new JSJaCIQ();
148
var query = iq.setQuery('http://jabber.org/protocol/muc#admin');
149
var item = query.appendChild(iq.getDoc().createElement('item'));
150
item.setAttribute('nick',user.name);
152
item.setAttribute(stat,val);
155
154
if (reason || (confirm && (reason = prompt("Reason","")) != ''))
156
item.appendChild(iq.getDoc().createElement('reason')).appendChild(iq.getDoc().createTextNode(reason));
155
item.appendChild(iq.getDoc().createElement('reason')).appendChild(iq.getDoc().createTextNode(reason));
159
srcW.con.send(iq,me.handleError);
158
srcW.con.send(iq,me.handleError);
162
161
function handleError(iq) {
164
if (iq && iq.getType() == 'error') {
165
srcW.Debug.log(iq.getDoc().xml,1);
166
var error = iq.getNode().getElementsByTagName('error').item(0);
169
for (var i=0; i<error.childNodes.length; i++) {
170
switch (error.childNodes.item(i).nodeName) {
172
putMsgHTML("No permitido",new Date(),group,null,true);
175
putMsgHTML("Prohibido",new Date(),group,null,true);
177
case 'item-not-found':
178
putMsgHTML("No encontrado",new Date(),group,null,true);
181
putMsgHTML(error.childNodes.item(i).nodeName,new Date(),group,null,true);
163
if (iq && iq.getType() == 'error') {
164
srcW.Debug.log(iq.getDoc().xml,1);
165
var error = iq.getNode().getElementsByTagName('error').item(0);
168
for (var i=0; i<error.childNodes.length; i++) {
169
switch (error.childNodes.item(i).nodeName) {
171
putMsgHTML("No permitido",new Date(),group,null,true);
174
putMsgHTML("Prohibido",new Date(),group,null,true);
176
case 'item-not-found':
177
putMsgHTML("No encontrado",new Date(),group,null,true);
180
putMsgHTML(error.childNodes.item(i).nodeName,new Date(),group,null,true);
189
188
function changeRole(jid,role,confirm,reason) {
198
197
function openConfig() {
199
if (!configW || configW.closed)
200
configW = open("groupchatconfig.html","gccW"+makeWindowName(jid),"width=480,height=380,resizable=yes,scrollbars=yes");
198
if (!configW || configW.closed)
199
configW = open("groupchatconfig.html","gccW"+makeWindowName(jid),"width=480,height=380,resizable=yes,scrollbars=yes");
205
204
function cleanUp() {
206
if (configW && !configW.closed)
205
if (configW && !configW.closed)
210
209
function part() {
214
var presence = new JSJaCPresence();
215
presence.setType('unavailable');
216
presence.setTo(group);
217
srcW.con.syncSend(presence);
213
var presence = new JSJaCPresence();
214
presence.setType('unavailable');
215
presence.setTo(group);
216
srcW.con.send(presence);
220
219
if (!user.messages.length && !user.chatmsgs.length && srcW && srcW.roster) {
221
220
srcW.roster.removeUser(user);
234
233
jid = passedArgs['jid'];
237
if (typeof(passedArgs['nick']) != 'undefined')
238
nick = passedArgs['nick'];
239
if(typeof(nick) == 'undefined' || nick == '')
240
nick = srcW.roster.nick; // guess a nick
242
meRegExp = new RegExp("\\b("+nick+")\\b","i");
243
notHREFMeRegExp = new RegExp("href=\"\\S*\\b"+nick+"\\b\\S*\"","i");
245
if (passedArgs['pass'] != 'undefined')
246
pass = passedArgs['pass'];
236
if (typeof(passedArgs['nick']) != 'undefined')
237
nick = passedArgs['nick'];
238
if(typeof(nick) == 'undefined' || nick == '')
239
nick = srcW.roster.nick; // guess a nick
241
meRegExp = new RegExp("\\b("+nick+")\\b","i");
242
notHREFMeRegExp = new RegExp("href=\"\\S*\\b"+nick+"\\b\\S*\"","i");
244
if (passedArgs['pass'] != 'undefined')
245
pass = passedArgs['pass'];
248
247
srcW.Debug.log("groupchat room: "+jid+", nick: "+nick + ", pass: "+pass ,2);
251
var aPresence = new JSJaCPresence();
252
aPresence.setTo(group+'/'+nick);
254
var x = aPresence.getDoc().createElement('x');
255
x.setAttribute('xmlns','http://jabber.org/protocol/muc');
256
if (typeof(pass) != 'undefined' && pass != '')
257
x.appendChild(aPresence.getDoc().createElement('password')).appendChild(aPresence.getDoc().createTextNode(pass));
259
aPresence.getNode().appendChild(x);
261
if (srcW.onlstat != 'available' && srcW.onlstat != 'invisible')
262
aPresence.setShow(srcW.onlstat);
264
if (srcW.onlmsg != '')
265
aPresence.setStatus(srcW.onlmsg);
267
srcW.Debug.log("sending muc presence:\n"+aPresence.getDoc().xml,3);
269
srcW.con.send(aPresence);
250
var aPresence = new JSJaCPresence();
251
aPresence.setTo(group+'/'+nick);
253
var x = aPresence.getDoc().createElement('x');
254
x.setAttribute('xmlns','http://jabber.org/protocol/muc');
255
if (typeof(pass) != 'undefined' && pass != '')
256
x.appendChild(aPresence.getDoc().createElement('password')).appendChild(aPresence.getDoc().createTextNode(pass));
258
aPresence.getNode().appendChild(x);
260
if (srcW.onlstat != 'available' && srcW.onlstat != 'invisible')
261
aPresence.setShow(srcW.onlstat);
263
if (srcW.onlmsg != '')
264
aPresence.setStatus(srcW.onlmsg);
266
srcW.Debug.log("sending muc presence:\n"+aPresence.getDoc().xml,3);
268
srcW.con.send(aPresence);
271
270
cFrame = frames.groupchatChat.groupchatIChat.document;
310
309
<script for="document" event="onkeydown()" language="JScript">
312
if (window.event.keyCode == 27)
311
if (window.event && window.event.keyCode == 27)
318
<frameset cols="75%,*" frameborder=2 framespacing=2 border=2 bordercolor=black>
319
<frameset rows="40,*,90" frameborder=2 framespacing=2 border=2 bordercolor=black>
320
<frame src="groupchat_top.html" name="groupchatTop" scrolling="no" />
321
<frame src="groupchat_chat.html" name="groupchatChat" scrolling="no" />
322
<frame src="groupchat_bottom.html" name="groupchatBottom" scrolling="no" />
324
<frame src="groupchat_roster.html" name="groupchatRoster" scrolling="no" />
317
<frameset cols="75%,*" frameborder=2 framespacing=2 border=2 bordercolor=black>
318
<frameset rows="40,*,90" frameborder=2 framespacing=2 border=2 bordercolor=black>
319
<frame src="groupchat_top.html" name="groupchatTop" scrolling="no" />
320
<frame src="groupchat_chat.html" name="groupchatChat" scrolling="no" />
321
<frame src="groupchat_bottom.html" name="groupchatBottom" scrolling="no" />
323
<frame src="groupchat_roster.html" name="groupchatRoster" scrolling="no" />