// Instant Messenger
// im_functions.js
function IM()
{
this.array_lang_im = new Array();
this.array_users = new Array();
this.vcard_user = new Array();
this.load_photo = false;
}
/*
* Load Contatos
*/
IM.prototype.load_im = function()
{
var force = ( arguments.length ) ? true : false;
var _this = this;
Sincro.count = 0;
var handler_contacts = function(data)
{
if ( data[1] )
{
_this.array_users.splice(0,_this.array_users.length);
_this.array_users = data;
_this.mount_list(data);
}
_this.conf_VcardUser(data[0]);
}
if ( force || this.getWinContactsState() )
cIM.cExecute("$this.Ujabber.list_user",handler_contacts);
}
/*
* Update Contatos
*/
IM.prototype.UpdateContacts = function()
{
var _this = this;
_this.load_im();
}
IM.prototype.showContacts = function()
{
if ( this.getWinContactsState() )
im_win.windowClose('contacts_im');
else
{
im_win.windowMaximizeRestore('contacts_im');
this.load_im();
}
}
IM.prototype.getWinContactsState = function()
{
try
{
var win_state = false;
win_state = ( windowItems['contacts'].state == WINDOW_STATE_REGULAR ) ? true : false;
win_state = ( win_state ) ? win_state : ( windowItems['contacts'].state == WINDOW_STATE_MAXIMIZED ) ? true : false;
return win_state;
}
catch(e)
{
return false;
}
}
/*
* Monta Lista de Contatos
*/
IM.prototype.mount_list = function(pList)
{
var _this = this;
var div = document.getElementById("div_contacts");
div.innerHTML = "";
div.innerHTML += '' +
''+_this.get_lang('list of contacts') + ' - ' + ( pList.length - 1 ) + '
' +
'
';
for(var i=1; i < pList.length; i++){
var div_agroups = document.getElementById("all_groups");
if(document.getElementById("img_" + pList[i].group.rm_space()) == null ){
div_agroups.innerHTML += '';
div_agroups.innerHTML += '' + pList[i].group + '';
if(pList[i].group.rm_space() != 'sem_grupo'){
var div_group = document.createElement('DIV');
div_group.id = pList[i].group.rm_space();
if(pList[i].subscription.rm_space() == "both")
div_group.innerHTML = '' + pList[i].name + '
';
else
div_group.innerHTML = '' + pList[i].name + '
';
div_agroups.appendChild(div_group);
}else{
var div_group = document.createElement('DIV');
div_group.id = pList[i].group.rm_space();
div_group.innerHTML = ''+
'
'+pList[i].jid+'
';
div_agroups.appendChild(div_group);
}
}else{
if(pList[i].group.rm_space() != 'sem_grupo'){
var div_group = document.getElementById(pList[i].group.rm_space());
if(pList[i].subscription.rm_space() == "both")
div_group.innerHTML += '' + pList[i].name + '
';
else
div_group.innerHTML = '' + pList[i].name + '
';
div_agroups.appendChild(div_group);
}else{
var div_group = document.getElementById(pList[i].group.rm_space());
div_group.innerHTML += ''+
'
'+pList[i].jid+'
';
div_agroups.appendChild(div_group);
}
}
}
setTimeout("Templates.Users_Not_Auth()",2500);
}
/*
* Requisitar autorização;
*/
IM.prototype.Authorization = function(pJid,pSubscription)
{
if(confirm("Enviar pedido?")){
var handler_accept_request = function(data){
if(!data)
alert("Pedido já foi enviado!");
}
cIM.cExecute("$this.Ujabber.AcceptRequest",handler_accept_request,"jid="+pJid+"&subscription="+pSubscription);
}
}
/*
* Grupos dos Contatos;
*/
IM.prototype.visible_group = function(el)
{
var _this = this;
el = el.rm_space();
var div = document.getElementById(el);
div.style.display = "none";
var img = document.getElementById("img_" + el);
img.onclick = function(){_this.unvisible_group(el)};
img.src = img_group_close.src;
}
IM.prototype.unvisible_group = function(el)
{
var _this = this;
el = el.rm_space();
var div = document.getElementById(el);
div.style.display = "";
var img = document.getElementById("img_" + el);
img.onclick = function(){_this.visible_group(el)};
img.src = img_group_open.src;
}
/*
* Conf. Vcard
*/
IM.prototype.conf_VcardUser = function(data)
{
var _this = this;
// Vcard pessoal;
if ( !_this.load_photo ){
_this.vcard_user['VCARD_FN'] = decodeURI(data.VCARD_FN);
_this.vcard_user['VCARD_NICKNAME'] = decodeURI(data.VCARD_NICKNAME);
_this.vcard_user['VCARD_ORGNAME'] = decodeURI(data.VCARD_ORGNAME);
_this.vcard_user['VCARD_ORGUNIT'] = decodeURI(data.VCARD_ORGUNIT);
_this.vcard_user['VCARD_ROLE'] = decodeURI(data.VCARD_ROLE);
_this.vcard_user['VCARD_BDAY'] = decodeURI(data.VCARD_BDAY);
_this.vcard_user['VCARD_DESC'] = decodeURI(data.VCARD_DESC);
_this.vcard_user['VCARD_JID'] = decodeURI(data.VCARD_JID);
im_win.get_photo_ldap(decodeURI(data['VCARD_JID']));
_this.load_photo = true;
}
// NickName;
if(_this.vcard_user['VCARD_NICKNAME'] != "")
document.getElementById('span_nickname').innerHTML = " " + _this.vcard_user['VCARD_NICKNAME'].substring(0,30) + "";
else
document.getElementById('span_nickname').innerHTML = " " + IM.get_lang('your nickname') + "";
// Custom Message;
if(_this.vcard_user['VCARD_DESC'] != "")
document.getElementById('span_message').innerHTML = " " + _this.vcard_user['VCARD_DESC'].substring(0,30) + "";
else
document.getElementById('span_message').innerHTML = " " + IM.get_lang('your message') + "";
}
/*
* Menu
*/
IM.prototype.visible_box = function()
{
var _this = this;
document.getElementById('list_users').style.display = "";
var img = document.getElementById('box_menu');
img.onclick = function(){_this.unvisible_box()};
img.src = img_open_box.src;
}
IM.prototype.unvisible_box = function()
{
var _this = this;
document.getElementById('list_users').style.display = "none";
var img = document.getElementById('box_menu');
img.onclick = function(){_this.visible_box()};
img.src = img_close_box.src;
}
/*
* Traduções
*/
// Translate words and phrases using user language from eGroupware.
IM.prototype.get_lang = function(_key,_arg1,_arg2,_arg3,_arg4)
{
var _this = this;
if(!_this.array_lang_im[0]){
return _key+"*";
}
_value = "";
for(i = 0; i < _this.array_lang_im[0].length;i++){
if(_this.array_lang_im[0][i] == _key.toLowerCase()) {
_value = _this.array_lang_im[1][i];
break;
}
}
if(!_value)
return _key+"*";
if(_arg1 || _arg2 ||_arg3 || _arg4) {
for(j = 1; j <= 4; j++){
if(eval("_arg"+j)) {
var regExp = new RegExp("%"+j+"");
_value = _value.replace(regExp,eval("_arg"+j));
}
}
}
return _value;
}
/*
* Pega Mensagens
*/
IM.prototype.getMessage = function()
{
_this = this;
var handler_message = function(data)
{
if(data.length > 0)
{
var aux = "";
var hora = new Date();
for(var i=0; i < data.length; i++)
{
mensagens = document.getElementById(data[i].from.substr(0, data[i].from.indexOf('/')) + '_chatMessages');
var nickname = data[i].from.substr(0, data[i].from.indexOf('/'));
for(var j=1 ; j < _this.array_users.length ; j++)
{
var nick_user = decodeURI(_this.array_users[j].VCARD_JID);
if( nickname.rm_space() == nick_user.rm_space())
{
var vcard_nick = decodeURI(_this.array_users[j].VCARD_NICKNAME);
if( vcard_nick != "")
{
nickname = vcard_nick;
if(nickname.rm_space() == decodeURI(_this.array_users[j].VCARD_NICKNAME))
nickname = nickname;
else
nickname = decodeURI(_this.array_users[j].VCARD_NICKNAME);
}
}
}
minuto = ( hora.getMinutes() > 9 ) ? hora.getMinutes() : '0' + hora.getMinutes();
_hora = '[' + hora.getHours() + ':' + minuto + '] ';
data[i].body = decodeURI(data[i].body).replace(/\\\'/g, '\'');
if ( mensagens )
{
mensagens.innerHTML += '' + _hora + nickname + ' fala:
' + _this.emotions_icons(data[i].body) + '
';
if ( windowItems[data[i].from.substr(0, data[i].from.indexOf('/'))].state != WINDOW_STATE_REGULAR && windowItems[data[i].from.substr(0, data[i].from.indexOf('/'))].state != WINDOW_STATE_MAXIMIZED )
im_win.showWindowItem(data[i].from.substr(0, data[i].from.indexOf('/')));
}
else
{
im_win.open_chat(data[i].from.substr(0, data[i].from.indexOf('/')));
mensagens = document.getElementById(data[i].from.substr(0, data[i].from.indexOf('/')) + '_chatMessages');
mensagens.innerHTML += '' + _hora + nickname + ' fala:
' + _this.emotions_icons(data[i].body) + '
';
}
}
mensagens.scrollTop = mensagens.scrollHeight;
im_win.newMessageNotification();
}
}
cIM.cExecute("$this.Ujabber.getMessages", handler_message);
}
/*
* Envia Mensagens
*/
IM.prototype.sendMessage = function (pJID)
{
var _this = this;
var name_document = document.getElementById(pJID + '_edita');
var envio = name_document.contentWindow.document.getElementsByTagName('body').item(0);
envio.innerHTML = func.trim(envio.innerHTML.replace(/^( |
| )*|( |
| )*$/g, ''));
if ( envio.innerHTML != "" )
{
var message_text = "";
message_text += envio.innerHTML + "
";
envio.innerHTML = '';
var message_element = document.getElementById(pJID + '_chatMessages');
message_element.innerHTML += '' + ((_this.vcard_user['VCARD_NICKNAME'] != "") ? _this.vcard_user['VCARD_NICKNAME'] : _this.vcard_user['VCARD_JID'] );
message_element.innerHTML += ' ' + _this.get_lang('speak') + ':
';
message_element.innerHTML += _this.emotions_icons(message_text.replace(/^( |
| )*|( |
| )*$/g, '')) + '
';
message_element.scrollTop = message_element.scrollHeight;
var handler_sendMessage = function(data)
{
if(!data)
alert(data);
}
cIM.cExecute("$this.Ujabber.SendMessage",handler_sendMessage,"to="+pJID+"&body="+url_encode(encodeURI(message_text)));
}
}
/*
* Smiles
*/
IM.prototype.emotions_icons = function(pMessage)
{
for ( i = 1; i < cod_emotions.length; i++ )
{
var image = eval('smile_' + i + '.src.substr(smile_' + i + '.src.indexOf(im_path))')
pMessage = pMessage.replace(cod_emotions[i], '');
}
return pMessage;
}
IM.prototype.atalho = function()
{
if ( local = func.byId('user_info') )
{
var aux = new Array();
var _mix = func.newEl('a', 'a', 'img', 'img', 'dl');
var fast_menu_link = _mix[0];
var contacts_link = _mix[1];
var fast_menu_image = _mix[2];
var contacts_image = _mix[3];
var im_fast_menu = _mix[4];
fast_menu_link.onclick = function(){IM.showFastMenu();};
contacts_link.onclick = function(){IM.showContacts();};
aux['fast_menu_image'] = new Array();
aux['fast_menu_image']['element'] = fast_menu_image;
aux['fast_menu_image']['style'] = 'width:9px;height:9px';
aux['fast_menu_image']['src'] = im_path + 'templates/default/images/menuarwopen.gif';
aux['im_fast_menu'] = new Array();
aux['im_fast_menu']['element'] = im_fast_menu;
aux['im_fast_menu']['id'] = 'fast_menu_im';
aux['im_fast_menu']['class'] = 'menu_im';
aux['contacts_image'] = new Array();
aux['contacts_image']['element'] = contacts_image;
aux['contacts_image']['id'] = 'chat_bubble';
aux['contacts_image']['src'] = im_path + 'templates/default/images/navbar.png';
aux['contacts_image']['style'] = 'width:15px;height:15px';
func.confEl(aux);
func.insEl(fast_menu_image, fast_menu_link);
func.insEl(contacts_image, contacts_link);
func.insElB(fast_menu_link, contacts_link, im_fast_menu, document.createTextNode(' '), local.firstChild);
}
else
setTimeout('IM.atalho()', 5000);
}
IM.prototype.showFastMenu = function()
{
if ( !messages_timeout )
{
var option = func.newEl('dt');
var option_link = func.newEl('a');
var option_image = func.newEl('img');
option_link.onclick = function(){IM.login();};
func.confEl(option_image, 'src', img_online.src);
func.confEl(option_image, 'style', 'width:16px;height:16px;');
func.insEl(option_image, IM.get_lang('login'), option_link);
func.insEl(option_link, option);
im_menu_action.menu('fast_menu_im', option);
}
else
{
var _dt = func.newEl('dt', 'dt', 'dt', 'dt', 'dt');
var _a = func.newEl('a', 'a', 'a', 'a', 'a');
for ( var i in _dt )
{
if ( typeof _dt[i] == 'function' )
continue;
eval('var option' + (parseInt(i)+1) + ' = _dt[' + i + '];');
eval('var option' + (parseInt(i)+1) + '_link = _a[' + i + '];');
}
var _img = func.newEl('img', 'img', 'img', 'img');
for ( var i in _img )
{
if ( typeof _dt[i] == 'function' )
continue;
eval('var option' + (parseInt(i)+1) + '_image = _img[' + i + '];');
}
option1_link.onclick = function(){IM.setStatus('online');};
option2_link.onclick = function(){IM.setStatus('idle');};
option3_link.onclick = function(){IM.setStatus('busy');};
option4_link.onclick = function(){IM.logout();};
option5_link.onclick = function(){IM.setStatus('custom')};
func.confEl(option1_image, 'src', img_online.src);
func.confEl(option1_image, 'style', 'width:16px;height:16px;');
func.confEl(option2_image, 'src', img_idle.src);
func.confEl(option2_image, 'style', 'width:16px;height:16px;');
func.confEl(option3_image, 'src', img_busy.src);
func.confEl(option3_image, 'style', 'width:16px;height:16px;');
func.confEl(option4_image, 'src', img_offline.src);
func.confEl(option4_image, 'style', 'width:16px;height:16px;');
func.insEl(option1_image, IM.get_lang('online'), option1_link);
func.insEl(option1_link, option1);
func.insEl(option2_image, IM.get_lang('????'), option2_link);
func.insEl(option2_link, option2);
func.insEl(option3_image, IM.get_lang('busy'), option3_link);
func.insEl(option3_link, option3);
func.insEl(option4_image, IM.get_lang('offline'), option4_link);
func.insEl(option4_link, option4);
func.insEl(IM.get_lang('Custom message...'), option5_link);
func.insEl(option5_link, option5);
im_menu_action.menu('fast_menu_im', option1, option2, option3, option4, option5);
}
}
IM.prototype.setStatus = function(pStatus)
{
im_menu_action.menu('fast_menu_im', null);
}
IM.prototype.getStatus = function()
{
}
IM.prototype.login = function()
{
try
{
im_menu_action.menu('fast_menu_im', null);
Sincro.get_list();
Sincro.get_Message();
var contacts_image = func.byId('chat_bubble');
contacts_image.parentNode.onclick = function(){IM.showContacts()};
func.confEl(contacts_image, 'src', im_path + 'templates/default/images/navbar.png');
}
catch (e)
{
}
}
IM.prototype.logout = function()
{
im_menu_action.menu('fast_menu_im', null);
clearTimeout(messages_timeout);
clearTimeout(contacts_timeout);
messages_timeout = false;
contacts_timeout = false;
var contacts_image = func.byId('chat_bubble');
contacts_image.parentNode.onclick = function(){IM.showFastMenu()};
func.confEl(contacts_image, 'src', img_chat_bubble.src);
}
IM.prototype.menu_preferences = function(pElement)
{
if ( document.getElementById(pElement).innerHTML == "" )
{
var form_pref = "";
form_pref += "- ";
form_pref += " "+IM.get_lang('Add Contact')+"
";
form_pref += "- ";
form_pref += " "+IM.get_lang('Remove Contact')+"
";
form_pref += "- ";
form_pref += " "+IM.get_lang('Information')+"
";
form_pref += "
";
im_menu_action.menu(pElement, form_pref);
}
}
IM.prototype.menu_button_right = function(pElement,pReq)
{
var form_menu_button_right = '';
if(pReq)
{
form_menu_button_right += '- ' + IM.get_lang('Authorization') + '';
}
form_menu_button_right += '
- ' + IM.get_lang('Nick') + ''+
'
- ' + IM.get_lang('Send File') + ''+
'
- ' + IM.get_lang('Group') + ''+
'
- ' + IM.get_lang('Delete') + ''+
'
- ' + IM.get_lang('See Info') + ''+
'
';
im_menu_action.menu("_span_" + pElement, form_menu_button_right);
}
/*
* url_encode
*/
function url_encode(str)
{
var hex_chars = "0123456789ABCDEF";
var noEncode = /^([a-zA-Z0-9\_\-\.])$/;
var n, strCode, hex1, hex2, strEncode = "";
for( n = 0; n < str.length; n++ )
{
if ( noEncode.test(str.charAt(n)) )
{
strEncode += str.charAt(n);
}
else
{
strCode = str.charCodeAt(n);
hex1 = hex_chars.charAt(Math.floor(strCode / 16));
hex2 = hex_chars.charAt(strCode % 16);
strEncode += "%" + (hex1 + hex2);
}
}
return strEncode;
}
/*
* Ação do botão onclick da lista de contatos;
*/
IM.prototype.action_button = function(pEv,pStatus,pJid,pReq)
{
var _this = this;
if(pEv.button > 1){
_this.menu_button_right(pJid,pReq);
document.oncontextmenu = new Function("return false");
}else{
if(pStatus == parseInt(1))
_this.open_chat(pJid);
}
}
/*
* Abre Conversa
*/
IM.prototype.open_chat = function(pJID)
{
func.byId(pJID).firstChild.src = img_chat_bubble.src;
im_win.open_chat(pJID);
}
String.prototype.rm_space = function()
{
return this.replace(/( *)/g,"");
}
IM.prototype.LTrim = function(value)
{
var w_space = String.fromCharCode(32);
var strTemp = "";
var iTemp = 0;
if(v_length < 1) return "";
var v_length = value ? value.length : 0;
while ( iTemp < v_length )
{
if ( value && value.charAt(iTemp) != w_space )
{
strTemp = value.substring(iTemp,v_length);
break;
}
iTemp++;
}
return strTemp;
}
// Build Object
var IM = new IM();