function IM() { this._listen = true; this.vcards = false; this.labelVcard = []; this.statusvcard = false; this.UsersNot = []; this.userPrefe = false; this.im_time_ = false; } IM.prototype.load_im = function() { IM.listen(); IM.requireContacts(); var handler_Status = function(XmlData) { var data = XmlData.getElementsByTagName('retorno').item(0); data = data.firstChild.nodeValue; if( data ) { statusFlag = data; setTimeout('IM.ImgStatus("'+data+'")',4000); } }; XMLTools.request('$this.Ujabber.MyPresence', 'GET', handler_Status); }; IM.prototype.listen = function() { if ( !this._listen ) return false; var _this = this; var handler = function(data) { try { if( !_this.userPrefe ) { if(window.IM_Preferences) IM_Preferences.GetYourPreferences(); } _this.getContacts(data); _this.getPresence(data); _this.getComposing(data); _this.getMessages(data); _this.getVcard(data); if(!_this.vcards) { _this.requireVcard(); _this.vcards = true; } } catch(e) { //alert("listen\n\n" + e + "\n\n" + e.description) } _this._listen = true; setTimeout('IM.listen()', 3000); }; this._listen = false; XMLTools.__RETURN_MODE__ = 'XML'; XMLTools.request('$this.Ujabber.listen', 'GET', handler); }; /* * Contacts */ IM.prototype.requireContacts = function() { var handler = function(data) { }; XMLTools.request('$this.Ujabber.requireContacts', 'GET', handler); }; IM.prototype.getContacts = function(data) { try { if ( data.getElementsByTagName('contacts').length > 0 ) { var node = data.documentElement.firstChild; while ( node.nodeName != 'contacts' ) node = node.nextSibling; var div = document.getElementById("div_contacts"); var xsl = XMLTools.load(im_path + 'xsl/contacts.xsl?' + Date.parse(new Date)); var img = document.createElement('img'); img.id = 'img_all_groups'; img.src = img_group_open.src; img.onclick = function(){IM.visible_group("all_groups")}; var a = document.createElement('div'); a.innerHTML = XMLTools.transform(node, xsl); div.innerHTML = ''; div.appendChild(img); div.appendChild(document.createTextNode(this.get_lang('List of Contacts'))); div.appendChild(a); var group = func.byId("all_groups").firstChild; while ( group ) { var contact = group.firstChild.nextSibling; while ( contact = contact.nextSibling ) { var img = func.newEl('img'); img.src = img_unavailable.src; func.insElB(img, func.byId(contact.id).firstChild); } try { var img = document.createElement('img'); img.src = img_group_open.src; img.id = "img_" + group.id; var el_parent = group; el_parent.insertBefore(img,el_parent.firstChild); } catch(e){} group = group.nextSibling; } this.atalho(); } } catch (e) { //alert('getContacts()' + e); } }; /* * Visible / Unvisible */ IM.prototype.visible_group = function(el) { var _this = this; var divParent = document.getElementById(el); divParent.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; 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; } /* * Presence */ IM.prototype.getPresence = function(data) { try { var presence = data.documentElement.firstChild; var _this = this; while ( presence ) { if ( presence.nodeName != 'presence' ) { presence = presence.nextSibling; continue; } var from = presence.getAttribute('from'); var type = presence.getAttribute('type'); if ( presence.hasChildNodes() ) var status_message = presence.firstChild.nodeValue; else var status_message = false; if( from ) { switch ( type ) { case 'subscribe' : if ( !func.byId(from) ) _this.UsersNot[_this.UsersNot.length] = from; else { Subscription.subscribed(from); this.setStatus(statusFlag); } break; case 'subscribed' : // break; case 'unsubscribe' : Subscription.unsubscribe(from); type = 'unavailable'; func.byId(from).firstChild.src = eval('img_' + type + '.src'); break; case 'unsubscribed' : Subscription.unsubscribed(from); type = 'unavailable'; func.byId(from).firstChild.src = eval('img_' + type + '.src'); break; default : if ( func.byId(from) ) { func.byId(from).firstChild.src = eval('img_' + type + '.src'); var status; if ( (status = func.byId(from + '_im_window')) ) { status.firstChild.style.background = 'url('+func.byId(from).firstChild.src+')'; status = func.byId(from + '_im_window_message'); if( status_message && status_message != "available" ) status.innerHTML = from.substr(0, from.indexOf('@')) + ' : ' + status_message; else status.innerHTML = ''; } if( document.getElementById('status_message_' + from) == null) { var lbl = document.createElement('label'); lbl.id = 'status_message_' + from; if(!status_message) lbl.innerHTML = ""; else if( status_message != "available" ) lbl.innerHTML = "
( " + status_message + " )
"; func.byId(from).appendChild(lbl); }else{ var lbl = document.getElementById('status_message_' + from); if(!status_message) lbl.innerHTML = ""; else if( status_message != "available" ) lbl.innerHTML = "
( " + status_message + " )
"; } } } } if( _this.UsersNot.length > 0 ) Templates.Users_Not_Auth(_this.UsersNot); presence = presence.nextSibling; } _this.Contacts_Offline(); } catch(e) { } }; /* * Contatos - Offline */ IM.prototype.Contacts_Offline = function() { var offline = true; if(IM.userPrefe) offline = eval(IM_Preferences.LoadPreferences('ch_offline')); else offline = eval(IM_Preferences.LoadPreferences('ch_offline')); var group = func.byId("all_groups").firstChild; while ( group ) { var contact = group.firstChild.nextSibling; while ( contact = contact.nextSibling ) { if(func.byId(contact.id)) { var childF = func.byId(contact.id).firstChild; if( childF.src == img_unavailable.src && !offline ) func.byId(contact.id).style.display = "none"; else func.byId(contact.id).style.display = "block"; } } group = group.nextSibling; } } /* * Get / Send - Messages */ IM.prototype.getMessages = function(data) { try { data = data.documentElement; if ( data.childNodes.length > 0 ) { var message = data.firstChild; while ( message ) { if ( message.tagName == 'messages' ) { var from = message.getAttribute('from'); with ( from ) from = substr(0, indexOf('/')) if( document.getElementById('vcard_' + from) != null) { var vcards = IM_Preferences.vCardLoad(from); var nickname = vcards.substr(vcards.indexOf('NICKNAME'),vcards.length); nickname = nickname.substr(0,nickname.indexOf('|')); nickname = nickname.substr(nickname.indexOf(':') + 1 , nickname.length); nickname = func.trim(nickname); } var win = document.getElementById(from + '_chatMessages'); if ( !win ) { im_win.open_chat(from); win = document.getElementById(from + '_chatMessages'); } var el = message.firstChild; while ( el ) { var xsl = XMLTools.load(im_path + 'xsl/message.xsl?' + Date.parse(new Date)); var next = el.nextSibling; var label = document.createElement('strong'); if(nickname) label.appendChild(document.createTextNode(nickname)); else label.appendChild(document.createTextNode(from)); win.appendChild(label); win.appendChild(document.createElement('br')); win.innerHTML += XMLTools.transform(el, xsl); win.innerHTML = this.emotions_icons(win.innerHTML); win.appendChild(document.createElement('br')); win.appendChild(document.createElement('br')); win.scrollTop = win.scrollHeight; im_win.newMessageNotification(); el = next; } } if ( (composing = func.byId(from + '_composing')) ) if ( composing.style.display = 'block' ) composing.style.display = 'none'; message = message.nextSibling; } } } catch (e) { //alert(e.description) } } 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'); var nickname = "me "; if( IM_Preferences.jid ) { var vcards = IM_Preferences.vCardLoad(IM_Preferences.jid); nickname = vcards.substr(vcards.indexOf('NICKNAME'),vcards.length); nickname = nickname.substr(0,nickname.indexOf('|')); nickname = nickname.substr(nickname.indexOf(':') + 1 , nickname.length); } message_element.innerHTML += '' + nickname + ' '; message_element.innerHTML += ' ' + _this.get_lang('speak') + ':
'; message_element.innerHTML += message_text + '
'; message_element.scrollTop = message_element.scrollHeight; var handler_sendMessage = function(data) { var data = func.interface(data); if(!data) alert(data); } XMLTools.request('$this.Ujabber.SendMessage','POST',handler_sendMessage,"to="+pJID+"&body="+escape(message_text)); } }; IM.prototype.getComposing = function(data) { if ( data.hasChildNodes() ) { var node = data.documentElement.firstChild; while ( node ) { var composing; if ( node.nodeName == 'composing' ) if ( (composing = func.byId(node.getAttribute('from') + '_composing')) ) if ( composing.style.display = 'none' ) composing.style.display = 'block'; if ( node.nodeName == 'paused' ) if ( (composing = func.byId(node.getAttribute('from') + '_composing')) ) if ( composing.style.display = 'block' ) composing.style.display = 'none'; node = node.nextSibling; } } }; /* * Get_lang */ IM.prototype.get_lang = function(_key, _arg1, _arg2, _arg3, _arg4) { var _value = ""; if ( !lang_im[_key.toLowerCase()] ) return _key + "*"; _value = lang_im[_key.toLowerCase()]; 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; }; 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){} }; IM.prototype.showContacts = function() { if ( this.getWinContactsState() ) im_win.windowClose('contacts_im'); else { im_win.windowMaximizeRestore('contacts_im'); //this.load_im(); } }; /* * Smiles */ IM.prototype.emotions_icons = function(pEmotion) { for ( i = 1; i < cod_emotions.length; i++ ) { var image = eval('smile_' + i + '.src.substr(smile_' + i + '.src.indexOf(im_path))') pEmotion = pEmotion.replace(cod_emotions[i], ''); } return pEmotion; } IM.prototype.atalho = function() { if ( (local = func.byId('user_info')) && !(func.byId('myStatus')) ) { 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'] = 'myStatus'; aux['contacts_image']['src'] = eval('img_' + statusFlag + '.src'); 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); }; /* * Vcard */ IM.prototype.requireVcard = function() { var _this = this; var handler_getVcard = function(_XMLdata) { var data = _XMLdata.getElementsByTagName('retorno').item(0); data = eval(data.firstChild.nodeValue); if(!data) setTimeout("IM.requireVcard()",2000); }; XMLTools.request('$this.Ujabber.requireVcard','GET',handler_getVcard); } IM.prototype.getVcard = function(data) { var _this = this; try { if ( data.getElementsByTagName('vcard').length > 0 && !_this.statusvcard ) { var div = document.getElementById("im_vcard_contacts"); var xsl = XMLTools.load(im_path + 'xsl/vcard_contacts.xsl?' + Date.parse(new Date)); _this.statusvcard = true; div.innerHTML = ""; div.innerHTML += XMLTools.transform(data, xsl); IM_Preferences.vCardInit(); } }catch(e){} }; IM.prototype.open_chat = function(pJID) { im_win.open_chat(pJID); }; IM.prototype.action_button = function(pEv, pJid) { try { if ( pEv.button > 1 ) { var posx = 0; var posy = 0; if (pEv.pageX || pEv.pageY) { posx = pEv.pageX; posy = pEv.pageY; } else if (pEv.clientX || pEv.clientY) { posx = pEv.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; posy = pEv.clientY + document.body.scrollTop + document.documentElement.scrollTop; } this.menu_button_right(pJid, posx, posy); document.oncontextmenu = new Function("return false"); } else if ( func.byId(pJid).firstChild.src != img_unavailable.src ) this.open_chat(pJid); } catch(e) { //alert("action_button\n\n" + e) } }; IM.prototype.menu_button_right = function(pElement, pX, pY) { var form_menu_button_right = '
'+ '
' + IM.get_lang('Nick') + ''+ '
' + IM.get_lang('Send File') + ''+ '
' + IM.get_lang('Group') + ''+ '
' + IM.get_lang('Delete') + ''+ '
' + IM.get_lang('(Re)-requisitar Autorização') + '' + '
' + IM.get_lang('See Info') + ''+ '
'; im_menu_action.menu('menu_contato', form_menu_button_right); func.byId('menu_contato').style.top = pY-10; func.byId('menu_contato').style.left = pX-10; func.byId('menu_contato').style.zIndex = zValue + 10; }; /* * Menu */ IM.prototype.menu_preferences = function() { var posx = 0; var posy = 0; var pEv = arguments[0]; if (pEv.pageX || pEv.pageY) { posx = pEv.pageX; posy = pEv.pageY; } else if (pEv.clientX || pEv.clientY) { posx = pEv.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; posy = pEv.clientY + document.body.scrollTop + document.documentElement.scrollTop; } var p_element = document.getElementById(arguments[1]); var _xmlDoc = ""; var _this = this; _xmlDoc = '' + '' + '' + '' + '' + ''; im_menu_action.menu(p_element.id,parse_XmlXsl(_xmlDoc,'menu_preferences.xsl')); func.byId(p_element).style.top = posy; func.byId(p_element).style.left = posx; func.byId(p_element).style.zIndex = zValue + 10; _this.Load_Images_menu(); } IM.prototype.Load_Images_menu = function(Element) { try { var group = document.getElementById("dl_im_menu_preferences"); var Child = group.childNodes; for(var i = 0; i < Child.length; i++) { var img = document.createElement('img'); img.src = img_menu.src; Child[i].firstChild.insertBefore(img, Child[i].firstChild.firstChild); } }catch (e){} } /* * Função Provisória - By AlC */ function parse_XmlXsl(_xmlDoc, form_xsl) { var xslWin = false; if ( !xslWin ) xslWin = XMLTools.load(im_path + 'xsl/' + form_xsl + '?' + Date.parse(new Date)); a = document.createElement('div'); if (window.ActiveXObject) { var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async = "false"; xmlDoc.loadXML(_xmlDoc); } else { var parser = new DOMParser(); var xmlDoc = parser.parseFromString(_xmlDoc, "text/xml"); } a.innerHTML = XMLTools.transform(xmlDoc, xslWin); return a; } IM.prototype.showFastMenu = function() { 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','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(){statusFlag = 'available'; IM.setStatus('available');}; option2_link.onclick = function(){statusFlag = 'xa'; IM.setStatus('xa');}; option3_link.onclick = function(){statusFlag = 'dnd'; IM.setStatus('dnd');}; option4_link.onclick = function(){statusFlag = 'unavailable'; IM.setStatus('unavailable');}; option5_link.onclick = function(){IM.setStatus('custom')}; func.confEl(option1_image, 'src', img_available.src); func.confEl(option1_image, 'style', 'width:16px;height:16px;cursor:pointer;'); func.confEl(option2_image, 'src', img_xa.src); func.confEl(option2_image, 'style', 'width:16px;height:16px;cursor:pointer;'); func.confEl(option3_image, 'src', img_dnd.src); func.confEl(option3_image, 'style', 'width:16px;height:16px;cursor:pointer;'); func.confEl(option4_image, 'src', img_unavailable.src); func.confEl(option4_image, 'style', 'width:16px;height:16px;cursor:pointer;'); func.confEl(option5_image, 'src', img_edit.src); func.confEl(option5_image, 'style', 'width:16px;height:16px;cursor:pointer;'); func.insEl(option1_image, IM.get_lang('online'), option1_link); func.confEl(option1_link, 'style','cursor:pointer;'); func.insEl(option1_link, option1); func.insEl(option2_image, IM.get_lang('away'), option2_link); func.confEl(option2_link, 'style','cursor:pointer;'); func.insEl(option2_link, option2); func.insEl(option3_image, IM.get_lang('busy'), option3_link); func.confEl(option3_link, 'style','cursor:pointer;'); func.insEl(option3_link, option3); func.insEl(option4_image, IM.get_lang('offline'), option4_link); func.confEl(option4_link, 'style','cursor:pointer;'); func.insEl(option4_link, option4); func.insEl(option5_image, IM.get_lang('Custom message...'), option5_link); func.confEl(option5_link, 'style','cursor:pointer;'); func.insEl(option5_link, option5); im_menu_action.menu('fast_menu_im', option1, option2, option3, option4, option5); }; IM.prototype.setStatus = function(pStatus) { try { var handler = function() { }; im_menu_action.menu('fast_menu_im', null); if ( pStatus == 'custom' ) { pStatus = prompt('Personalize seu Status : '); pStatus = 'show=' + statusFlag + '&status=' + pStatus; } else { if ( pStatus == 'unavailable' ) { this.ImgStatus(pStatus); pStatus = 'type=' + pStatus; } else { try { this.ImgStatus(pStatus); pStatus = 'show=' + pStatus; } catch(e){} } } XMLTools.request('$this.Ujabber.setPresence', 'POST', handler, pStatus); } catch(e){} }; IM.prototype.ImgStatus = function(pStatus) { var myStatus; if ( (myStatus = func.byId('myStatus')) ) myStatus.src = eval('img_' + pStatus + '.src'); }; IM.prototype.setAway = function() { if ( statusFlag != 'available' ) return false; if ( awayFlag ) { this.setStatus('available'); awayFlag = false; } else { this.setStatus('xa'); awayFlag = true; } }; IM.prototype.infoContact = function(pUid) { var info = false; var div_allg = document.getElementById('all_groups'); var elements = div_allg.firstChild; while ( elements ) { var childs = elements.firstChild; while( childs ) { if(childs.tagName == "DIV" && childs.id.indexOf(pUid) === 0 ) { info = {'jid':childs.id, 'src':childs.firstChild.src}; break; } childs = childs.nextSibling; } if ( !info ) elements = elements.nextSibling; else break; } return info; }; var IM = new IM();