Ignore:
Timestamp:
06/06/08 13:54:09 (16 years ago)
Author:
niltonneto
Message:

Correçoes

Location:
trunk/instant_messenger/js
Files:
3 added
8 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/instant_messenger/js/client.js

    r287 r305  
    1 var conn_im = new IMConnector; 
    2 var disconnected = false; 
    3 var validate_data = false; 
    4 var buffer_im = ''; 
    5 var xtools_im = null; 
    6 var count_im = 0; 
    7 var activate_timeOut = ''; 
     1(function() 
     2{ 
     3        function _config(pObj, pEvent, pHandler) 
     4        { 
     5                if ( typeof pObj == 'object' ) 
     6                { 
     7                        if ( pEvent.substring(0, 2) == 'on' ) 
     8                                pEvent = pEvent.substring(2, pEvent.length); 
    89 
    9 function clientConnectionIm() 
    10 { 
    11         if( count_im < 2 ) 
     10                        if ( pObj.addEventListener ) 
     11                                pObj.addEventListener(pEvent, pHandler, false); 
     12                        else if ( pObj.attachEvent ) 
     13                                pObj.attachEvent('on' + pEvent, pHandler); 
     14                } 
     15        } 
     16 
     17        if ( !(top.document.getElementById('instant_messenger_content')) ) 
    1218        { 
    13                 if( buffer_im.length > 0 ) 
    14                         activate_timeOut = setTimeout('clientConnectionIm()', 5000); 
    15          
    16                 count_im++; 
     19                var _im_content = top.document.createElement('div'); 
     20                _im_content.setAttribute('id', 'instant_messenger_content'); 
     21                _im_content = top.document.body.appendChild(_im_content); 
    1722        } 
    18         else 
     23 
     24        var buffer = ''; 
     25        var _disconnected = false; 
     26 
     27        var _conn = new IMConnector(path_im); 
     28        var _xtools = new XTools(path_im); 
     29        var _window = new Windows(_xtools, _im_content); 
     30        var _ldap = new InstantMessengerLDAP(_conn, _xtools, _window); 
     31        var _jabber = new Jabber(_conn, _xtools, _window, _ldap); 
     32 
     33        // XSL preload 
     34        var _xsl_preload = ['chat.xsl','layer.xsl','contacts']; 
     35        var _xsl_preload_legth = _xsl_preload.length; 
     36        for ( var i = 0; i < _xsl_preload_legth; i++ ) 
     37                _xtools.load(_xsl_preload[i]); 
     38 
     39        var local; 
     40        if ( (local = top.document.getElementById('user_info')) ) 
    1941        { 
    20                 count_im = 0; 
    21                 buffer_im = 0; 
    22                 clientDisconnectIm(); 
    23                 clearTimeout(activate_timeOut); 
    24                 killConnIm(); 
     42                local.innerHTML = ' ' + local.innerHTML; 
     43                var _status = top.document.createElement('img'); 
     44                        _status.setAttribute('id','im_status_src'); 
     45                        _status.src = im_available.src; 
     46 
     47                local.insertBefore(_status, local.firstChild); 
     48 
     49                _config(_status, 'onclick', _contacts); 
     50 
     51                var _menu; 
     52                _menu = top.document.createElement('span'); 
     53                _menu.setAttribute('id','fast_menu_im'); 
     54                local.insertBefore(_menu, local.firstChild); 
     55 
     56                _menu = top.document.createElement('img'); 
     57                _menu.src = im_fast_menu.src; 
     58                local.insertBefore(_menu, local.firstChild); 
     59 
     60                //var local_old = local.innerHTML ; 
     61                //local.innerHTML  = '<img src="' + im_fast_menu.src + '" onclick="javascript:templates.fast_menu();">'; 
     62                //local.innerHTML += '<img id="im_status_src" src="' + im_available.src + '" onclick="javascript:load_im_contacts();"/>'; 
     63                //local.innerHTML += local_old; 
     64                //local.innerHTML += '<div id="instant_messenger_content"></div><span id="fast_menu_im"/>'; 
    2565        } 
    26 } 
    2766 
    28 function clientDisconnectIm() 
    29 { 
    30         if( xtools_im == null ) 
    31                  xtools_im = new XTools; 
     67        function _stream(data) 
     68        { 
     69                data = data.replace(/^ | $/, ''); 
    3270 
    33         disconnected = true; 
    34         var XmlDoc = "<disconnected>" + 
    35                         "<path>" + path_im + "</path>" + 
    36                      "</disconnected>"; 
    37          
    38         im_window.load('__contacts_im_','instant_messenger_content','<title>.::Expresso Messenger::.</title>','window.xsl','190',true,true,false); 
    39         im_window.elementC('__contacts_im_').innerHTML  = xtools_im.parse(XmlDoc,'disconnected.xsl'); 
    40         func.byId('im_status_src').src = im_unavailable.src; 
    41         im.status = 'type=unavailable'; 
    42         im.statusFlag = 'unavailable';                                                                                                   
    43          
    44         function handler_presence_disconnected() 
    45         { 
    46         } 
    47         conn_im.go('$this.Ujabber.setPresence', {'request' : handler_presence_disconnected }, im.status); 
    48 } 
     71                if ( !(data.length) ) 
     72                        return false; 
    4973 
    50 function killConnIm() 
    51 { 
    52         var i; 
    53         disconnected = true; 
    54          
    55         for ( i in conn_im.__HTTP__ ) 
    56                 conn_im.__HTTP__[i].abort(); 
    57 } 
    58  
    59 function client() 
    60 { 
    61         if( jabber == null ) 
    62                 var jabber = new Jabber; 
    63          
    64         if( xtools_im == null ) 
    65                 xtools_im = new XTools; 
    66  
    67         function request(data) 
    68         { 
    69                 if ( !disconnected ) 
     74                if ( data.indexOf('disconnected') != -1 || data.indexOf('</stream:stream>') != -1 ) 
    7075                { 
    71                         conn_im.go('$this.Ujabber.listen', {'stream':stream, 'request':request}, 'classConstructor=read'); 
     76                        _disconnected = true; 
     77                        //alert('disconnected'); 
    7278                } 
    7379                else 
    7480                { 
    75                         clientDisconnectIm(); 
    76                         return false; 
     81                        if ( data.lastIndexOf('>') != data.length - 1) 
     82                                buffer += data + ' '; 
     83                        else 
     84                        { 
     85                                if ( buffer.length ) 
     86                                { 
     87                                        data = buffer + data; 
     88                                        buffer = ''; 
     89                                } 
     90 
     91                                // com xmlns ocorre problemas durante o parse entre 
     92                                // xml e xsl e por esse motivo está sendo retirado 
     93                                data = data.replace(/ xmlns='.*?'/g, ''); 
     94                                data = '<handler>' + data + '</handler>'; 
     95 
     96                                var _xml = _xtools.convert(data); 
     97 
     98                                if ( _xml ) 
     99                                { 
     100                                        var _node = _xml.documentElement.firstChild; 
     101 
     102                                        while ( _node ) 
     103                                        { 
     104                                                if ( _node.nodeType == 1 ) 
     105                                                        _jabber.action(_node); 
     106                                                //else 
     107                                                //      alert('name : ' + _node.nodeName + "\n\nhas children:" + _node.hasChildNodes() + "\nvalue\n\n" + _node.nodeValue); 
     108 
     109                                                _node = _node.nextSibling; 
     110                                        } 
     111                                } 
     112                        } 
    77113                } 
    78114        } 
    79115 
    80         function stream(data) 
     116        function _request() 
    81117        { 
    82                 function trim(pData) 
    83                 { 
    84                         return pData.replace(/^ +| +$/g, ''); 
    85                 } 
    86  
    87                 function retrim(pData) 
    88                 { 
    89                         return pData.replace(/(_##_)+\b/g, ''); 
    90                 } 
    91                  
    92                 data = trim(data); 
    93                  
    94                 if ( data == 'disconnected' || data == '</stream:stream>' ) 
    95                 { 
    96                         clientDisconnectIm(); 
    97                         return false; 
    98                 } 
    99                 else if ( data.lastIndexOf('>') == data.length - 1 && data.length > 0 ) 
    100                 { 
    101                         if ( buffer_im.length ) 
    102                         { 
    103                                 data = buffer_im + data; 
    104                                 buffer_im = ""; 
    105                         } 
    106  
    107                         // com xmlns ocorre problemas durante o parse entre 
    108                         // xml e xsl e por esse motivo está sendo retirado 
    109                         data = '<handler>' + data.replace(/ xmlns='.*?'/g, '') + '</handler>'; 
    110  
    111                         if ( window.ActiveXObject ) 
    112                         { 
    113                                 var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
    114                                 xmlDoc.async = "false"; 
    115                                 xmlDoc.loadXML(data); 
    116                         } 
    117                         else 
    118                         { 
    119                                 var parser = new DOMParser(); 
    120                                 var xmlDoc = parser.parseFromString(data, "text/xml"); 
    121                         } 
    122  
    123                         var node = xmlDoc.documentElement.firstChild; 
    124                          
    125                         while ( node ) 
    126                         { 
    127                                 try 
    128                                 { 
    129                                         jabber.doIt(node.nodeName, node); 
    130                                         node = node.nextSibling; 
    131                                 } 
    132                                 catch(e) 
    133                                 { 
    134                                         alert('erro : ' + e + "\n\n" + e.description); 
    135                                         node = node.nextSibling; 
    136                                 } 
    137                         } 
    138                 } 
    139                 else 
    140                 { 
    141                         data = data.replace(/^ +| +$/g, ''); 
    142                         buffer_im +=  data + " "; 
    143                 } 
     118                if ( !_disconnected ) 
     119                        return _conn.go( 
     120                                '$this.Ujabber.listen', 
     121                                {'stream':_stream, 'request':_wait}, 
     122                                'classCostructor=read' 
     123                        ); 
    144124        } 
    145125 
    146         function contacts(data) 
     126        function _wait() 
    147127        { 
    148                 setTimeout('clientConnectionIm()', 3000); 
     128                setTimeout(_request, 3000); 
    149129        } 
    150         request(); 
    151         setTimeout("conn_im.go('$this.Ujabber.getContacts', {'request':"+contacts+"})", 3000); 
     130 
     131        function _reconnect() 
     132        { 
     133                _disconnected = false; 
     134                _request(); 
     135        } 
     136 
     137        function _disconnect() 
     138        { 
     139                _disconnected = true; 
     140        } 
     141 
     142        function _contacts() 
     143        { 
     144                var _win = _window.get('contact_list'); 
     145                if ( _win ) 
     146                        if ( _win.wm.style.display != 'none' ) 
     147                                _win.wm.style.display = 'none'; 
     148                        else 
     149                                _win.wm.style.display = 'block'; 
     150                else 
     151                        if ( !_disconnected ) 
     152                                _conn.go('$this.Ujabber.getContacts'); 
     153        } 
     154 
     155        function Client() 
     156        { 
     157                _request(); 
     158                setTimeout('InstantMessengerContacts()', 3000); 
     159        } 
     160 
     161        window.InstantMessengerClient = Client; 
     162        window.InstantMessengerReconnect = _reconnect; 
     163        window.InstantMessengerDisconnect = _disconnect; 
     164        window.InstantMessengerContacts = _contacts; 
    152165} 
    153  
    154 var _bkp_onbeforeunload = window.onbeforeunload; 
    155  
    156 window.onbeforeunload = function() 
    157 { 
    158         if ( typeof _bkp_onbeforeunload == 'function' ) 
    159                 _bkp_onbeforeunload(); 
    160  
    161         killConnIm(); 
    162 }; 
     166)(); 
  • trunk/instant_messenger/js/connector.js

    r280 r305  
    1 function IMConnector() 
     1(function() 
    22{ 
    3         this.__HTTP__ = []; 
    4         this.__THREADS__ = []; 
    5 } 
    6  
    7 IMConnector.prototype = { 
    8         'go' : function() 
    9         { 
    10                 // connection 
    11                 var index = 0; 
    12                 var rtlen = 0; 
    13                 var ie = false; // ie doesn't has stream 
    14                 var __this__ = this; 
    15                 function makeConnection(pThread) 
    16                 { 
    17                         __this__.__HTTP__[pThread] = xhr(); 
    18                 } 
    19                 function setPost(pThread) 
    20                 { 
    21                         __this__.__THREADS__[pThread].__METHOD__ = 'POST'; 
    22                         return true; 
    23                 } 
    24                 // this function set __this__.__THREADS__[?].__TYPE__ to 4 for request or 3 for stream 
    25                 function setStream(pThread) 
    26                 { 
    27                         __this__.__THREADS__[pThread].__TYPE__ = ( !ie ) ? 3 : 4; 
    28                         return true; 
    29                 } 
    30                 function trim(pData) 
    31                 { 
    32                         return pData.replace(/^ +| +$/g, ''); 
    33                 } 
    34                 function verifyUserHandler(pThread, pHandler) 
    35                 { 
    36                         var type_of_handler = typeof pHandler; 
    37                         var i; 
    38                         switch ( type_of_handler ) 
     3        var _THREADS = []; 
     4        var _ie; 
     5 
     6        // xhr = XMLHttpRequest 
     7        function _xhr() 
     8        { 
     9                try 
     10                { 
     11                        return new XMLHttpRequest(); 
     12                } 
     13                catch (_e) 
     14                { 
     15                        _ie = true; 
     16                        try 
     17                        { 
     18                                return new ActiveXObject('Msxml2.XMLHTTP'); 
     19                        } 
     20                        catch (_e1) 
     21                        { 
     22                                try 
     23                                { 
     24                                        return new ActiveXObject('Microsoft.XMLHTTP'); 
     25                                } 
     26                                catch (_e2) 
     27                                { 
     28                                        return false; 
     29                                } 
     30                        } 
     31                } 
     32        } 
     33 
     34        function _HANDLER() 
     35        { 
     36                var _ID = arguments[0]; 
     37 
     38                if ( _ie && _THREADS[_ID]._XHR.readyState != 4 ) 
     39                        return false; 
     40 
     41                switch ( _THREADS[_ID]._XHR.readyState ) 
     42                { 
     43                        case 3 : 
     44                                if ( _THREADS[_ID]._HANDLER.stream ) 
     45                                { 
     46                                        var _data = _THREADS[_ID]._XHR.responseText.substr(_THREADS[_ID]._index).replace(/^ +| +$/g, ''); 
     47                                        //alert(_data); 
     48                                        _THREADS[_ID]._rtlen = _THREADS[_ID]._XHR.responseText.length; 
     49 
     50                                        if ( _THREADS[_ID]._index < _THREADS[_ID]._rtlen && _data.length ) 
     51                                                try 
     52                                                { 
     53                                                        _THREADS[_ID]._HANDLER.stream(_data); 
     54                                                } 
     55                                                catch(_e) 
     56                                                { 
     57                                                        alert("#stream\n\n" + _e + "\n\n" + _e.description); 
     58                                                } 
     59 
     60                                        _THREADS[_ID]._index = _THREADS[_ID]._rtlen; 
     61                                } 
     62                        break; 
     63                        case 4 : 
     64                                switch ( _THREADS[_ID]._XHR.status ) 
     65                                { 
     66                                        case 200: 
     67                                                var _data = ( _THREADS[_ID]._MODE == 'XML' ) ? 
     68                                                        _THREADS[_ID]._XHR.responseXML : 
     69                                                        _THREADS[_ID]._XHR.responseText; 
     70 
     71                                                if ( _ie && _THREADS[_ID]._HANDLER.stream ) 
     72                                                        _THREADS[_ID]._HANDLER.stream(_data); 
     73 
     74                                                var _request = ( _THREADS[_ID]._HANDLER.request ) ? 
     75                                                        _THREADS[_ID]._HANDLER.request : false; 
     76 
     77                                                delete _THREADS[_ID]; 
     78 
     79                                                if ( _request ) 
     80                                                        try 
     81                                                        { 
     82                                                                _request(_data); 
     83                                                        } 
     84                                                        catch(_e) 
     85                                                        { 
     86                                                                alert("#request\n\n" + _e + "\n\n" + _e.description); 
     87                                                        } 
     88 
     89                                        break; // [case : status 200] 
     90                                        case 404: 
     91                                                delete _THREADS[_ID]; 
     92                                                alert('Page Not Found!'); 
     93                                        break; // [case : status 404] 
     94                                        default: 
     95                                                delete _THREADS[_ID]; 
     96                                } 
     97                        break; 
     98                        default : 
     99                } 
     100        } 
     101 
     102        function _execute() 
     103        { 
     104                var _ID = arguments[0]; 
     105                var _ACTION = 'act=' + _ID; 
     106                var _TARGET = this._PATH; 
     107                var _SEND = null; 
     108 
     109                if ( _TARGET != '' && _TARGET.lastIndexOf('/') != (_TARGET.length - 1) ) 
     110                        _TARGET += '/'; 
     111 
     112                _TARGET += ( this._CONTROLLER ) ? 
     113                        this._CONTROLLER  : 'controller.php'; 
     114 
     115                if ( _THREADS[_ID]._METHOD == 'GET' ) 
     116                        _TARGET += '?' + _ACTION; 
     117 
     118                _THREADS[_ID]._XHR.open(_THREADS[_ID]._METHOD, _TARGET, true); 
     119 
     120                if ( _THREADS[_ID]._METHOD == 'POST' ) 
     121                { 
     122                        _THREADS[_ID]._XHR.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
     123                        _THREADS[_ID]._XHR.setRequestHeader('Cache-Control',  'no-store, no-cache, must-revalidate'); 
     124                        _THREADS[_ID]._XHR.setRequestHeader('Cache-Control', 'post-check=0, pre-check=0'); 
     125                        _THREADS[_ID]._XHR.setRequestHeader('Pragma', 'no-cache'); 
     126                        _SEND = _ACTION + '&' + arguments[1]; 
     127                } 
     128 
     129                _THREADS[_ID]._XHR.onreadystatechange = function(){_HANDLER(_ID);}; 
     130                _THREADS[_ID]._XHR.send(_SEND); 
     131        } 
     132 
     133        function usage() 
     134        { 
     135                return ""+ 
     136                        "Description:\n"+ 
     137                        "\t<obj>.go(string access, [mixed handler[, mixed post]])\n\n"+ 
     138                        "Parameters:\n"+ 
     139                        "\taccess : assinatura de acesso à camada de controle.\n"+ 
     140                        "\thandler : uma função a ser executada no fim da requisição\n"+ 
     141                        "\t\tou um objeto que poderá conter dois índices sendo\n"+ 
     142                        "\t\tque ambos deverão ser uma função que será executada\n"+ 
     143                        "\t\tconforme o status do objeto xhr, sendo que na posição\n"+ 
     144                        "\t\t'stream' será a função a ser executada a cada iteração\n"+ 
     145                        "\t\tdo objeto xhr e na posição 'request' será a função\n"+ 
     146                        "\t\ta ser executada no fim da requisição.\n"+ 
     147                        "\tpost : se especificado deverá ser uma query string ou um\n"+ 
     148                        "\tXML bem formatado.\n\n"; 
     149        } 
     150 
     151        // @PARAM arguments[0] string : 
     152        //              assinatura de acesso à camada de controle 
     153        // 
     154        // @PARAM arguments[1] object : 
     155        //              OBS : neste caso a conexão assumirá que se trata de uma stream 
     156        //              objeto contendo dois duas funções, sendo, 
     157        //              no índice stream deverá conter uma função que será execultada 
     158        //              a cada mudança de status do objeto xhr 
     159        //      or 
     160        // @PARAM arguments[1] function : funcão a ser executada no retorno da 
     161        //              requisição 
     162        //              OBS : neste caso a conexão assumirá que se trata de uma 
     163        //              requisição função que será execultada no final da requisição 
     164        // 
     165        // @PARAM arguments[2] string : 
     166        //              este parâmetro define se a conexão é via GET ou POST 
     167        //              caso o parâmetro não esteja presente a conexão será execultada 
     168        //              via GET, por outro lado, caso ele exista deverá ser uma query 
     169        //              string válida ou um xml bem formatado 
     170        // 
     171        function go() 
     172        { 
     173                var _argv = arguments; 
     174                var _argc = _argv.length; 
     175                var _ID = _argv[0]; 
     176                var _POST; 
     177                if ( _argc < 1 || _argc > 3 ) 
     178                        return {'error' : "#0\n\n" + usage()}; 
     179 
     180                if ( typeof _ID != 'string' ) 
     181                        return {'error' : "#1\n\n" + usage()}; 
     182 
     183                if ( _THREADS[_ID] ) 
     184                        return {'error' : '#2 - there is a equal request running'}; 
     185 
     186                _THREADS[_ID] = { 
     187                        '_HANDLER'      : {}, 
     188                        '_METHOD'       : ( _argv[2] ) ? 'POST' : 'GET',  // [GET | POST] 
     189                        '_MODE'         : null, // [XML | TEXT] 
     190                        '_TYPE'         : null, // [4 for request | 3 for stream] 
     191                        '_XHR'          : null  // [4 for request | 3 for stream] 
     192                }; 
     193 
     194                if ( _argv[2] ) 
     195                        _POST = _argv[2]; 
     196 
     197                if ( _argv[1] ) 
     198                        switch ( typeof _argv[1] ) 
    39199                        { 
    40200                                case 'function' : 
    41                                         return true; 
     201                                        _THREADS[_ID]._HANDLER = {'request' : _argv[1]}; 
    42202                                break; 
    43203                                case 'object' : 
    44                                         for ( i in pHandler ) 
     204                                        for ( var i in _argv[1] ) 
    45205                                                if ( i != 'stream' && i != 'request' ) 
    46                                                         return false; 
     206                                                { 
     207                                                        delete _THREADS[_ID]; 
     208                                                        return {'error' : "#3\n\n" + usage()}; 
     209                                                } 
    47210                                                else if ( i == 'stream' ) 
    48                                                         setStream(pThread); 
    49                                         return true; 
     211                                                { 
     212                                                        _THREADS[_ID]._index = 0; 
     213                                                        _THREADS[_ID]._rtlen = 0; 
     214                                                } 
     215                                                _THREADS[_ID]._HANDLER = _argv[1]; 
     216                                break; 
     217                                case 'string' : 
     218                                        if ( _argc == 2 ) 
     219                                        { 
     220                                                _THREADS[_ID]._METHOD = 'POST'; 
     221                                                _POST = _argv[1]; 
     222                                        } 
    50223                                break; 
    51224                                default : 
    52                                         return false; 
    53                         } 
    54                 } 
    55                 // xhr = XMLHttpRequest 
    56                 function xhr() 
    57                 { 
     225                                        //delete _THREADS[_ID]; 
     226                                        //return {'error' : "#4\n\n" + usage()}; 
     227                        } 
     228 
     229                if ( !(_THREADS[_ID]._XHR = _xhr()) ) 
     230                        return {'error' : "#4 it cannot make a xhr object"}; 
     231 
     232                ( _THREADS[_ID]._METHOD == 'GET' ) ? 
     233                        _execute.call(this, _ID) : _execute.call(this, _ID, _POST); 
     234                return {'success' : "your thread is running and the response "+ 
     235                                                        "will be manipulated by the handler"}; 
     236        } 
     237 
     238        function Connector() 
     239        { 
     240                var _argv = arguments; 
     241                this._PATH = ( _argv.length > 0 ) ? 
     242                        _argv[0] : ''; 
     243                this._CONTROLLER = ( _argv.length == 2 ) ? 
     244                        _argv[1] : false; 
     245        } 
     246 
     247        Connector.prototype.go = go; 
     248        window.IMConnector = Connector; 
     249 
     250        var _unload_event = window.onbeforeunload; 
     251        window.onbeforeunload = function() 
     252        { 
     253                for ( var _ID in _THREADS ) 
     254                { 
     255                        //if ( _THREADS[_ID]._XHR.abort ) 
    58256                        try 
    59257                        { 
    60                                 return new XMLHttpRequest(); 
    61                         } 
    62                         catch (e) 
    63                         { 
    64                                 ie = true; 
    65                                 try 
    66                                 { 
    67                                         return new ActiveXObject('Msxml2.XMLHTTP'); 
    68                                 } 
    69                                 catch (e1) 
    70                                 { 
    71                                         try 
    72                                         { 
    73                                                 return new ActiveXObject('Microsoft.XMLHTTP'); 
    74                                         } 
    75                                         catch (e2) 
    76                                         { 
    77                                                 return null; 
    78                                         } 
    79                                 } 
    80                         } 
    81                 } 
    82  
    83                 function __HANDLER__() 
    84                 { 
    85                         try 
    86                         { 
    87                                 if ( ie && __this__.__HTTP__[arguments[0]].readyState != 4 ) 
    88                                         return false; 
    89  
    90                                 var threadId = arguments[0]; 
    91  
    92                                 if ( !threadId ) 
    93                                         return false; 
    94  
    95                                 if ( __this__.__HTTP__[threadId].readyState == 3 || __this__.__HTTP__[threadId].readyState == 4 ) 
    96                                 { 
    97                                         if ( !ie && __this__.__HTTP__[threadId].readyState == 3 && __this__.__THREADS__[threadId].__HANDLER__.stream ) 
    98                                         { 
    99                                                 var data = trim(__this__.__HTTP__[threadId].responseText.substr(index)); 
    100                                                 rtlen = __this__.__HTTP__[threadId].responseText.length; 
    101                                                 if ( index < rtlen && data.length ) 
    102                                                 { 
    103                                                         __this__.__THREADS__[threadId].__HANDLER__.stream(data); 
    104                                                         index = rtlen; 
    105                                                 } 
    106                                         } 
    107                                         if ( __this__.__THREADS__[threadId].__HANDLER__.request && __this__.__HTTP__[threadId].readyState == 4 ) 
    108                                         { 
    109                                                 switch ( __this__.__HTTP__[threadId].status ) 
    110                                                 { 
    111                                                         case 200: 
    112                                                                 var stream = false; 
    113                                                                 var request = false; 
    114                                                                 var data = ( __this__.__THREADS__[threadId].__MODE__ == 'XML' ) ? 
    115                                                                         __this__.__HTTP__[threadId].responseXML : 
    116                                                                         __this__.__HTTP__[threadId].responseText; 
    117  
    118                                                                 if ( ie && __this__.__THREADS__[threadId].__HANDLER__.stream ) 
    119                                                                         stream = __this__.__THREADS__[threadId].__HANDLER__.stream; 
    120  
    121                                                                 if ( __this__.__THREADS__[threadId].__HANDLER__.request ) 
    122                                                                         request = __this__.__THREADS__[threadId].__HANDLER__.request; 
    123  
    124                                                                 delete __this__.__THREADS__[threadId]; 
    125  
    126                                                                 if ( stream ) 
    127                                                                         stream(data); 
    128  
    129                                                                 if ( request ) 
    130                                                                         request(data); 
    131  
    132                                                                 break; // [case : status 200] 
    133                                                         case 404: 
    134                                                                 alert('Page Not Found!'); 
    135                                                                 break; // [case : status 404] 
    136                                                         default: 
    137                                                 } 
    138                                         } 
    139                                 } 
     258                                if ( _THREADS[_ID]._XHR && _THREADS[_ID]._XHR.abort ) 
     259                                        _THREADS[_ID]._XHR.abort(); 
     260                                delete _THREADS[_ID]; 
    140261                        } 
    141262                        catch(e) 
    142263                        { 
    143                                 //alert("__HANDLER__\n" + threadId + "\n " + e + "\n ErroR: " + e.description); 
    144                                 //delete __this__.__THREADS__[threadId]; 
    145                         } 
    146                 }; 
    147  
    148                 var argc = arguments.length; 
    149                 if ( argc < 2 || argc > 4 ) 
    150                         return {'error':'#0 - invalid params'}; 
    151  
    152                 if ( __this__.__THREADS__[arguments[0]] ) 
    153                         return {'error':'#2 - request is running'}; 
    154  
    155                 __this__.__THREADS__[arguments[0]] = { 
    156                         '__HANDLER__' : arguments[1], 
    157                         '__METHOD__'  : 'GET',  // __METHOD__ = [GET | POST] 
    158                         '__MODE__'    : 'TEXT', // __MODE__ = [XML | TEXT] 
    159                         '__TYPE__'    : 4       // __TYPE__ = [4 for request | 3 for stream] 
    160                 }; 
    161  
    162                 makeConnection(arguments[0]); 
    163  
    164                 if ( !verifyUserHandler(arguments[0], arguments[1]) ) 
    165                 { 
    166                         //delete __this__.__THREADS__[arguments[0]]; 
    167                         return {'error':'#1 - invalid handler'}; 
    168                 } 
    169  
    170                 if ( argc == 3 ) 
    171                         setPost(arguments[0]); 
    172  
    173                 if ( __this__.__HTTP__[arguments[0]] != null ) 
    174                 { 
    175                         try 
    176                         { 
    177                                 var __TARGET__ = path_im + 'controller.php?act=' + arguments[0]; 
    178  
    179                                 var __SEND__ = null; 
    180                                 __this__.__HTTP__[arguments[0]].open(__this__.__THREADS__[arguments[0]].__METHOD__, __TARGET__, true); 
    181                                 if ( __this__.__THREADS__[arguments[0]].__METHOD__ == 'POST' ) 
    182                                 { 
    183                                         __this__.__HTTP__[arguments[0]].setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
    184                                         __this__.__HTTP__[arguments[0]].setRequestHeader('Cache-Control',  'no-store, no-cache, must-revalidate'); 
    185                                         __this__.__HTTP__[arguments[0]].setRequestHeader('Cache-Control', 'post-check=0, pre-check=0'); 
    186                                         __this__.__HTTP__[arguments[0]].setRequestHeader('Pragma', 'no-cache'); 
    187                                         __SEND__ = 'act=' + arguments[0] + '&' + arguments[2]; 
    188                                 } 
    189                                 var tst = arguments[0]; 
    190                                 __this__.__HTTP__[arguments[0]].onreadystatechange = function(){__HANDLER__(tst);}; 
    191                                 __this__.__HTTP__[arguments[0]].send(__SEND__); 
    192                         } 
    193                         catch(e) 
    194                         { 
    195                                 alert("go\n" + e.description); 
    196                                 return {'error':'#3 - ' + e.description}; 
    197                         } 
    198                 } 
    199         } 
    200 }; 
     264                        } 
     265                } 
     266 
     267                if ( typeof _unload_event == 'function' ) 
     268                        return _unload_event(); 
     269        }; 
     270} 
     271)(); 
  • trunk/instant_messenger/js/dragdrop.js

    r260 r305  
    1 /** 
    2 * @AUTHOR: Alexandre Correia - alexandrecorreia [.at.] celepar [.dot.] pr [.dot.] gov [.dot.] br 
    3 * @AUTHOR: Rodrigo Souza - rodrigosouzadossantos [.at.] gmail [.dot.] com 
    4 * @COPYLEFT: GPL - http://www.gnu.org/copyleft/gpl.html 
    5 * @DATE: 10/10/2007 
    6 * @LAST CHANGE: 11/10/2007 
    7 * @BRIEF: 
    8 **/ 
     1(function() 
     2{ 
     3        var _element = null; 
    94 
    10 function DragDrop() 
    11 { 
    12         this.dragObject         = null; 
    13         this.mouseOffset        = null; 
    14         this.documentMouseMove  = null; 
    15         this.documentMouseUp    = null; 
     5        function _config(pObj, pEvent, pHandler) 
     6        { 
     7                if ( typeof pObj == 'object' ) 
     8                { 
     9                        if ( pEvent.substring(0, 2) == 'on' ) 
     10                                pEvent = pEvent.substring(2, pEvent.length); 
    1611 
    17 } 
    18  
    19 DragDrop.prototype = { 
    20         "drag" : function(ev, pObject) 
    21         { 
    22                 function mouseMove(pEv, pObject, pTarget) 
    23                 { 
    24                         function getMouseOffset(pThis, target, pEv) 
     12                        if ( arguments.length == 3 ) 
    2513                        { 
    26                                 function getPosition(pObject) 
    27                                 { 
    28                                         try 
    29                                         { 
    30                                                 var left = 0; 
    31                                                 var top  = 0; 
    32  
    33                                                 while (pObject.offsetParent) 
    34                                                 { 
    35                                                         left += pObject.offsetLeft; 
    36                                                         top  += pObject.offsetTop; 
    37                                                         pObject = pObject.offsetParent; 
    38                                                 } 
    39  
    40                                                 left += pObject.offsetLeft; 
    41                                                 top  += pObject.offsetTop; 
    42  
    43                                                 return {x:left, y:top}; 
    44                                         }catch(e){} 
    45                                 } 
    46                                 try 
    47                                 { 
    48                                         var ev = pEv || window.event; 
    49  
    50                                         var docPos = getPosition(target); 
    51                                         var mousePos = mouseCoords(ev); 
    52                                         return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y}; 
    53                                 } 
    54                                 catch(e){} 
     14                                if ( pObj.addEventListener ) 
     15                                        pObj.addEventListener(pEvent, pHandler, false); 
     16                                else if ( pObj.attachEvent ) 
     17                                        pObj.attachEvent('on' + pEvent, pHandler); 
    5518                        } 
    56                         function mouseCoords(pEv) 
     19                        else if ( arguments.length == 4 ) 
    5720                        { 
    58                                 try 
    59                                 { 
    60                                         var ev = pEv; 
    61                                         var CoordX = ""; 
    62                                         var CoordY = ""; 
    63  
    64                                         if(ev.pageX || ev.pageY) 
    65                                                 return {x:ev.pageX, y:ev.pageY}; 
    66  
    67                                         CoordX = ev.clientX + document.body.scrollLeft - document.body.clientLeft; 
    68                                         CoordY = ev.clientY + document.body.scrollTop  - document.body.clientTop; 
    69                                         return { x:CoordX, y:CoordY }; 
    70                                 } 
    71                                 catch(e){} 
    72                         } 
    73                         try 
    74                         { 
    75                                 if ( pObject.mouseOffset == null ) 
    76                                         pObject.mouseOffset = getMouseOffset(pObject, pTarget, pEv); 
    77  
    78                                 var ev = pEv || window.event; 
    79                                 var mousePos = mouseCoords(ev); 
    80  
    81                                 if( pObject.dragObject ) 
    82                                 { 
    83                                         var x = mousePos.x - pObject.mouseOffset.x; 
    84                                         var y = mousePos.y - pObject.mouseOffset.y; 
    85                                         pObject.dragObject.style.left = ( x < 0 ) ? 0 : x; 
    86                                         pObject.dragObject.style.top  = ( y < 0 ) ? 0 : y; 
    87                                 } 
    88                                 if ( typeof pObject.documentMouseMove == 'function' ) 
    89                                         pObject.documentMouseMove(); 
    90                         } 
    91                         catch(e){} 
    92                 } 
    93                 function mouseUp(pObject) 
    94                 { 
    95                         try 
    96                         { 
    97                                 if ( typeof pObject.documentMouseUp == 'function' ) 
    98                                         pObject.documentMouseUp(); 
    99                                 pObject.dragObject = null; 
    100                                 document.onmousemove = pObject.documentMouseMove; 
    101                                 document.onmouseup = pObject.documentMouseUp; 
    102                                 pObject.documentMouseMove = pObject.documentMouseUp = null; 
    103                                 pObject.mouseOffset = null; 
    104                         } 
    105                         catch(e){} 
    106                 } 
    107                 try 
    108                 { 
    109                         if( !pObject ) 
    110                                 return; 
    111  
    112                         if (typeof ev.preventDefault != 'undefined') 
    113                                 ev.preventDefault(); 
    114                         else 
    115                                 pObject.onselectstart = new Function("return false;"); 
    116  
    117                         this.mouseOffset = null; 
    118  
    119                         if ( pObject.getAttribute('dragdrop') === "true" ) 
    120                         { 
    121                                 var _this = this; 
    122                                 pObject.style.cursor = "pointer"; 
    123                                 pObject.style.position = 'absolute'; 
    124  
    125                                 pObject.onmousemove = function(ev) 
    126                                 { 
    127                                         mouseMove(ev, _this, pObject); 
    128                                 }; 
    129  
    130                                 if ( typeof document.onmousemove == 'function' && document.onmousemove != pObject.onmousemove ) 
    131                                         this.documentMouseMove = document.onmousemove; 
    132  
    133                                 document.onmousemove = function(ev) 
    134                                 { 
    135                                         mouseMove(ev, _this, pObject); 
    136                                 }; 
    137  
    138                                 pObject.onmouseup = function() 
    139                                 { 
    140                                         mouseUp(_this); 
    141                                 }; 
    142  
    143                                 if ( typeof document.onmouseup == 'function' && document.onmouseup != pObject.onmouseup ) 
    144                                         this.documentMouseUp = document.onmouseup; 
    145  
    146                                 document.onmouseup = pObject.onmouseup; 
    147  
    148                                 var el = ( window.event ) ? window.event.srcElement : ev.target; 
    149  
    150                                 if ( el.getAttribute('dragdrop') === "true" ) 
    151                                 { 
    152                                         _this.dragObject  = pObject; 
    153                                         return false; 
    154                                 } 
     21                                if ( pObj.removeEventListener ) 
     22                                        pObj.removeEventListener(pEvent, pHandler, false); 
     23                                else if ( pObj.detachEvent ) 
     24                                        pObj.detachEvent('on' + pEvent, pHandler); 
    15525                        } 
    15626                } 
    157                 catch(e){alert(e.description);} 
    15827        } 
    159 }; 
    16028 
    161 var drag_drop = new DragDrop(); 
     29        function _getMouseOffset(e, el) 
     30        { 
     31                var docPos = _getPosition(el); 
     32                var mousePos = _mouseCoords(e); 
     33                return { 
     34                        'x' : mousePos.x - docPos.x, 
     35                        'y' : mousePos.y - docPos.y 
     36                }; 
     37        } 
     38 
     39        function _getPosition(_pObject) 
     40        { 
     41                var left = 0; 
     42                var top  = 0; 
     43 
     44                while ( _pObject.offsetParent ) 
     45                { 
     46                        left += _pObject.offsetLeft; 
     47                        top  += _pObject.offsetTop; 
     48                        _pObject = _pObject.offsetParent; 
     49                } 
     50 
     51                left += _pObject.offsetLeft; 
     52                top  += _pObject.offsetTop; 
     53 
     54                return { 
     55                        'x' : left, 
     56                        'y' : top 
     57                }; 
     58        } 
     59 
     60        function _mouseCoords(ev) 
     61        { 
     62                var CoordX = ""; 
     63                var CoordY = ""; 
     64 
     65                if ( ev.pageX || ev.pageY ) 
     66                        return { 
     67                                'x' : ev.pageX, 
     68                                'y' : ev.pageY 
     69                        }; 
     70 
     71                CoordX = ev.clientX + document.body.scrollLeft - document.body.clientLeft; 
     72                CoordY = ev.clientY + document.body.scrollTop  - document.body.clientTop; 
     73                return { 
     74                        'x' : CoordX, 
     75                        'y' : CoordY 
     76                }; 
     77        } 
     78 
     79        function _mouseMove(e) 
     80        { 
     81                if ( _element ) 
     82                { 
     83                        if ( _element.mouseOffset == null ) 
     84                                _element.mouseOffset = _getMouseOffset(e, _element); 
     85 
     86                        var mousePos = _mouseCoords(e); 
     87 
     88                        var x = mousePos.x - _element.mouseOffset.x; 
     89                        var y = mousePos.y - _element.mouseOffset.y; 
     90                        _element.style.left = ( x < 0 ) ? 0 : x; 
     91                        _element.style.top  = ( y < 0 ) ? 0 : y; 
     92                } 
     93        } 
     94 
     95        function _mouseUp() 
     96        { 
     97                if ( _element ) 
     98                { 
     99                        _config(_element, 'onmousemove', _mouseMove, 'remove'); 
     100                        _config(top.document, 'onmousemove', _mouseMove, 'remove'); 
     101 
     102                        _config(_element, 'onmouseup', _mouseUp, 'remove'); 
     103                        _config(top.document, 'onmouseup', _mouseUp, 'remove'); 
     104 
     105                        _element.mouseOffset = null; 
     106                        _element = null; 
     107                } 
     108        } 
     109 
     110        function _toDrag(el) 
     111        { 
     112                if ( el.getAttribute('dragdrop_parent') == null ) 
     113                { 
     114                        if ( el.getAttribute('dragdrop_child') != null ) 
     115                        { 
     116                                var children = 0; 
     117                                while ( (++children < 5) && (el.getAttribute('dragdrop_parent') == null) ) 
     118                                        el = el.parentNode; 
     119                        } 
     120                        if ( el.getAttribute('dragdrop_parent') == null ) 
     121                                el = false; 
     122                } 
     123                return el; 
     124        } 
     125 
     126        function _drag(e) 
     127        { 
     128                if (typeof e.preventDefault != 'undefined') 
     129                        e.preventDefault(); 
     130                else 
     131                        el.onselectstart = new Function("return false;"); 
     132 
     133                var el = ( e.target ) ? e.target : e.srcElement; 
     134 
     135                el = _toDrag(el); 
     136 
     137                if ( el ) 
     138                { 
     139                        _element = el; 
     140 
     141                        _config(el, 'onmousemove', _mouseMove); 
     142                        _config(top.document, 'onmousemove', _mouseMove); 
     143 
     144                        _config(el, 'onmouseup', _mouseUp); 
     145                        _config(top.document, 'onmouseup', _mouseUp); 
     146                } 
     147        } 
     148 
     149        function _set(_pObject) 
     150        { 
     151                if ( typeof _pObject != 'object' ) 
     152                        return false; 
     153 
     154                _pObject.style.position = 'absolute'; 
     155                _pObject.setAttribute('dragdrop_parent', 'true'); 
     156 
     157                _config(_pObject, 'onmousedown', _drag); 
     158        } 
     159 
     160        function DragDrop() 
     161        { 
     162        } 
     163 
     164        DragDrop.prototype.drag = _set; 
     165        window.DragDrop = DragDrop; 
     166} 
     167)(); 
  • trunk/instant_messenger/js/images.js

    r287 r305  
    22        var im_available = new Image(); 
    33        im_available.src = path_im + 'templates/default/images/available.gif'; 
    4          
     4 
    55        var im_away = new Image(); 
    66        im_away.src = path_im + 'templates/default/images/away.gif'; 
    7          
     7 
    88        var im_chat = new Image(); 
    99        im_chat.src = path_im + 'templates/default/images/chat.gif'; 
    10          
     10 
    1111        var im_dnd = new Image(); 
    1212        im_dnd.src = path_im + 'templates/default/images/dnd.gif'; 
    13          
     13 
    1414        var im_xa = new Image(); 
    1515        im_xa.src = path_im + 'templates/default/images/xa.gif'; 
    16          
     16 
    1717        var im_unavailable = new Image(); 
    1818        im_unavailable.src = path_im + 'templates/default/images/unavailable.gif'; 
    19          
     19 
    2020        var im_fast_menu = new Image(); 
    2121        im_fast_menu.src = path_im + 'templates/default/images/menuarwopen.gif'; 
    22          
     22 
    2323        var im_photo = new Image(); 
    2424        im_photo.src = path_im + 'templates/default/images/photo.png'; 
    25          
     25 
    2626        var im_photo_1 = new Image(); 
    2727        im_photo_1.src = path_im + 'templates/default/images/photo_1.png'; 
     
    3434        var smile_1 = new Image(); 
    3535        smile_1.src = path_im + "templates/default/images/smiles/1.gif"; 
    36          
     36 
    3737        var smile_2 = new Image(); 
    3838        smile_2.src = path_im + "templates/default/images/smiles/2.gif"; 
    39          
     39 
    4040        var smile_3 = new Image(); 
    4141        smile_3.src = path_im + "templates/default/images/smiles/3.gif"; 
    42          
     42 
    4343        var smile_4 = new Image(); 
    4444        smile_4.src = path_im + "templates/default/images/smiles/4.gif"; 
    45          
     45 
    4646        var smile_5 = new Image(); 
    4747        smile_5.src = path_im + "templates/default/images/smiles/5.gif"; 
    48          
     48 
    4949        var smile_6 = new Image(); 
    5050        smile_6.src = path_im + "templates/default/images/smiles/6.gif"; 
    51          
     51 
    5252        var smile_7 = new Image(); 
    5353        smile_7.src = path_im + "templates/default/images/smiles/7.gif"; 
    54          
     54 
    5555        var smile_8 = new Image(); 
    5656        smile_8.src = path_im + "templates/default/images/smiles/8.gif"; 
    57          
     57 
    5858        var smile_9 = new Image(); 
    5959        smile_9.src = path_im + "templates/default/images/smiles/9.gif"; 
    60          
     60 
    6161        var smile_10 = new Image(); 
    6262        smile_10.src = path_im + "templates/default/images/smiles/10.gif"; 
    63          
     63 
    6464        var smile_11 = new Image(); 
    6565        smile_11.src = path_im + "templates/default/images/smiles/11.gif"; 
    66          
     66 
    6767        var smile_12 = new Image(); 
    68         smile_12.src = path_im + "templates/default/images/smiles/12.gif";       
     68        smile_12.src = path_im + "templates/default/images/smiles/12.gif"; 
  • trunk/instant_messenger/js/jabber.js

    r287 r305  
    1 function Jabber() 
     1(function() 
    22{ 
    3         this.con = null; 
    4         this.xtools = null; 
    5         this.send_presence = false; 
    6 } 
    7  
    8 Jabber.prototype = { 
    9         'doIt' : function(pAction, pParam) 
    10         { 
    11                 var __this = this; 
    12                 function __connector() 
    13                 { 
    14                         if ( __this.con == null ) 
    15                                 __this.con = new IMConnector; 
    16                 } 
    17                 function __xtools() 
    18                 { 
    19                         __this.xtools = new XTools; 
    20                 } 
    21  
    22                 __connector(); 
    23                 __xtools(); 
    24  
    25                 if ( typeof pAction != 'string' || typeof pParam != 'object' ) 
    26                         return false; 
    27  
    28                 switch ( pAction ) 
    29                 { 
    30                         case 'iq' : 
    31                                 readIq(pParam); 
    32                         break; 
    33                         case 'message' : 
    34                                 readMessage(pParam); 
    35                         break; 
    36                         case 'presence' : 
    37                                 readPresence(pParam); 
    38                         break; 
    39                         case 'sendMessage': 
    40                                 sendMessage(pParam.message,pParam.from); 
    41                                 break; 
    42                 } 
    43  
    44                 function readContacts(pContacts) 
    45                 {  
    46                         var XmlDoc = "<layer>" + 
    47                                                         "<lang1>" + im.get_lang("Nickname") + "</lang1>" + 
    48                                                         "<lang2>" + im.get_lang("Add Contact") + "</lang2>" + 
    49                                                         "<lang3>" + im.get_lang("Preferences") + "</lang3>" + 
    50                                                         "<nickname>" + im.get_lang("Username") + "</nickname>" + 
    51                                                         "<path>" + path_im + "</path>" + 
    52                                                  "</layer>"; 
    53  
    54                         im_window.load('__contacts_im_','instant_messenger_content','<title>.::Expresso Messenger::.</title>','window.xsl','',true,true,false ); 
    55                         im_window.elementC('__contacts_im_').innerHTML  = __this.xtools.parse(XmlDoc,'layer.xsl'); 
    56                         im_window.elementC('__contacts_im_').innerHTML += __this.xtools.parse(pContacts, 'contacts.xsl'); 
    57                          
    58                         var element = func.byId('im_contact_list').firstChild; 
    59  
    60                         while(element) 
    61                         { 
    62                                 if( element.nodeType == 1 ) 
    63                                         if(element.nodeName.toLowerCase() == "img") 
    64                                                 element.src = im_group_open.src; 
    65                                         else if(element.nodeName.toLowerCase() == "div" && element.hasChildNodes()) 
    66                                                 element.firstChild.src = im_unavailable.src; 
    67  
    68                                 element = element.nextSibling; 
    69                         } 
    70                          
    71                         if(func.byId('im__avatar').src === im_photo.src) 
    72                         {                        
    73                                 im.request_vcard('this',false); 
    74                                 im.ldap_photo('im__avatar'); 
    75                         } 
    76                          
    77                         function handler(Xmldata) 
    78                         { 
    79                         } 
    80                         __this.con.go('$this.Ujabber.setStatus', {'request':handler}); 
    81                          
    82                         var status = ""; 
    83                         if( status = cookies_im.checkCookie('status')) 
    84                         { 
    85                                 status = status.substr(status.indexOf("=") + 1,status.length); 
    86                                 im.status = status; 
    87                         } 
    88                         else 
    89                         { 
    90                                 im.status = 'type=available'; 
    91                                 im.statusFlag = 'available'; 
    92                                 func.byId('im_status_src').src = im_available.src; 
    93                         } 
    94          
    95                         im.presence(im.status); 
    96                 } 
    97  
    98                 function readIq(pIq) 
    99                 { 
    100                         switch ( pIq.getAttribute('id') ) 
    101                         { 
    102                                 case 'contacts' : readContacts(pIq); break; 
    103                                 case 'vCard' :  
    104                                 case 'vCard_user' :  
    105                                         readVcard(pIq);  
    106                                         break; 
    107                                 case 'last_time_user': 
    108                                         readLastTimeUser(pIq); 
    109                                         break; 
    110                         } 
    111                 } 
    112  
    113                 function readMessage(pMessage) 
    114                 { 
    115                         if ( pMessage.getElementsByTagName('body').length > 0 ) 
    116                         { 
    117                                 var msg = __this.xtools.parse(pMessage, 'message_new.xsl'); 
    118                                 var from = pMessage.getAttribute('from'); 
    119                                 from = from.substr(0,from.indexOf('/')); 
    120  
    121                                 var iframe = func.byId('iframe_' + from); 
    122  
    123                                 var win; 
    124  
    125                                 if ( !(win = im_window.elementC(from)) ) 
    126                                 { 
    127                                         im_window.load(from, 'instant_messenger_content', '<title>.:: Expresso Messenger ::.</title>', 'chat.xsl', '310', true, true, true); 
    128                                         func.byId(from + '__avatar').src = path_im + "/templates/default/images/photo.png"; 
    129                                 } 
     3        var _conn; 
     4        var _xtools; 
     5        var _window; 
     6        var _ldap; 
     7 
     8        var _menu = new ShowHidden(1500); 
     9 
     10        var _vcards = []; 
     11        var _info = []; 
     12 
     13        var _win_position = 30; 
     14 
     15        function _next_position() 
     16        { 
     17                return (_win_position += 30); 
     18        } 
     19 
     20        function _chat(_pJid) 
     21        { 
     22                var _win_pos = _next_position(); 
     23                var _win_chat = _window.load('chat' + _pJid); 
     24                        _win_chat.title('.::Expresso Messenger::.'); 
     25                        _win_chat.size(310); 
     26                        _win_chat.content(_xtools.parse('chat.xsl')); 
     27                        _win_chat.position(_win_pos, _win_pos); 
     28                        _win_chat.wc.style.padding = "3px"; 
     29 
     30                _ldap.photo( 
     31                        _pJid.substr(0,_pJid.indexOf('@')), 
     32                        _win_chat.wc.childNodes[2] 
     33                ); 
     34 
     35                var _iframe = top.document.createElement('iframe'); 
     36                        _iframe.id = 'iframe_' + _pJid; 
     37 
     38                _win_chat.wc.childNodes[2].appendChild(_iframe); 
     39 
     40                _iframe.style.width = '250px'; 
     41                _iframe.style.height = '100%'; 
     42                _iframe.style.border = '0'; 
     43                _iframe.style.margin = '0'; 
     44 
     45                var _contentWindow = _iframe.contentWindow; 
     46 
     47                _iframe = _contentWindow.document; 
     48                _iframe.write('<html><body style="padding:0;margin:0;"></body></html>'); 
     49                _iframe.close(); 
     50                _iframe.designMode = "On"; 
     51 
     52                _contentWindow.focus(); 
     53 
     54                _config( 
     55                        _win_chat.wc.childNodes[1].childNodes[5], 
     56                        'onclick', 
     57                        function() 
     58                        { 
     59                                _info[_pJid] = true; 
     60                                _vcard(_pJid); 
     61                        } 
     62                ); 
     63 
     64                _config( 
     65                        _win_chat.wc.childNodes[1].lastChild.previousSibling, 
     66                        'onclick', 
     67                        function() 
     68                        { 
     69                                _sendMessage( 
     70                                        _pJid, 
     71                                        _iframe, 
     72                                        _win_chat.wc.firstChild 
     73                                ); 
     74                                _iframe.body.innerHTML = ''; 
     75                                _contentWindow.focus(); 
     76                        } 
     77                ); 
     78 
     79                function _execKeyAction(e) 
     80                { 
     81                        switch ( e.keyCode ) 
     82                        { 
     83                                case 13 : 
     84                                        if ( !(e.shiftKey) ) 
     85                                        { 
     86                                                if ( e.type.indexOf('keydown') != -1 ) 
     87                                                        _sendMessage( 
     88                                                                _pJid, 
     89                                                                _iframe, 
     90                                                                _win_chat.wc.firstChild 
     91                                                        ); 
     92                                                else 
     93                                                        _iframe.body.innerHTML = ''; 
     94 
     95                                                return false; 
     96                                        } 
     97                                break; 
     98                                case 27 : 
     99                                        if ( e.type.indexOf('keyup') != -1 ) 
     100                                                _win_chat.button(_win_chat.bc); 
     101                                break; 
     102                        } 
     103                } 
     104                _config(_contentWindow.document, 'onkeydown', _execKeyAction); 
     105                _config(_contentWindow.document, 'onkeyup', _execKeyAction); 
     106 
     107                if ( !(_vcards[_pJid]) ) 
     108                        _conn.go('$this.Ujabber.getVcard','jid='+_pJid); 
     109                else 
     110                        _readVCard(_vcards[_pJid]); 
     111 
     112                return _win_chat; 
     113        } 
     114 
     115        function _config(pObj, pEvent, pHandler) 
     116        { 
     117                if ( typeof pObj == 'object' ) 
     118                { 
     119                        if ( pEvent.substring(0, 2) == 'on' ) 
     120                                pEvent = pEvent.substring(2, pEvent.length); 
     121 
     122                        if ( pObj.addEventListener ) 
     123                                pObj.addEventListener(pEvent, pHandler, false); 
     124                        else if ( pObj.attachEvent ) 
     125                                pObj.attachEvent('on' + pEvent, pHandler); 
     126                } 
     127        } 
     128 
     129        function _openChat(el) 
     130        { 
     131                var id = el.id; 
     132 
     133                id = id.substr(id.indexOf('_') + 1); 
     134 
     135                if ( id.indexOf('/') > -1 ) 
     136                        id = id.substr(0, id.indexOf('/')); 
     137 
     138                var _win = _window.get('chat' + id); 
     139                if ( !_win ) 
     140                        _chat(id); 
     141                else 
     142                { 
     143                        _win.wm.style.display = 'block'; 
     144                        _win.focus(); 
     145                        _win.wc.childNodes[2].firstChild.contentWindow.focus(); 
     146                } 
     147        } 
     148 
     149        function _readContacts(_pContacts) 
     150        { 
     151                var _win_contact = _window.load('contact_list'); 
     152                        _win_contact.title('.::Expresso Messenger::.'); 
     153                        _win_contact.size(170, 350); 
     154                        _win_contact.position(30, 30, true); 
     155                        _win_contact.bc.style.display = 'none'; 
     156                        _win_contact.wm.style.display = 'none'; 
     157 
     158                var _params = { 
     159                        'lang1':imGetLang('nickname'), 
     160                        'lang2':imGetLang('add contact'), 
     161                        'lang3':imGetLang('preferences'), 
     162                        'nickname':imGetLang('username') 
     163                }; 
     164                _win_contact.content( 
     165                        _xtools.parse(_xtools.xml('layer'),'layer.xsl', _params) 
     166                        + _xtools.parse(_pContacts, 'contacts.xsl', {'path':path_im}) 
     167                ); 
     168 
     169                _config(_win_contact.wc.firstChild.childNodes[5], 'onclick', _ldap.add); 
     170 
     171                var _contact_list = top.document.getElementById('im_contact_list'); 
     172                if ( _contact_list ) 
     173                { 
     174                        _conn.go('$this.Ujabber.setStatus'); 
     175                        _ldap.photo( 
     176                                'im_avatar', 
     177                                _win_contact.wc.firstChild 
     178                        ); 
     179                        _conn.go('$this.Ujabber.getVcard','jid=this'); 
     180                        function _click(e) 
     181                        { 
     182                                var el = ( e.target ) ? e.target : e.srcElement; 
     183                                //alert(e.button); 
     184                                if ( (e.button == 0 && !document.all) || (e.button == 1 && document.all) ) 
     185                                        _openChat(el); 
    130186                                else 
    131187                                { 
    132                                         im_window.load(from, '', '', '', '', true, true, true); 
     188                                        var _options = [ 
     189                                                imGetLang("Nickname"), 
     190                                                imGetLang("Group"), 
     191                                                imGetLang("Remove"), 
     192                                                imGetLang("It requisition permission"), 
     193                                                imGetLang("See Info") 
     194                                        ]; 
     195 
     196                                        var _style_text = 'background: no-repeat url(' + path_im 
     197                                                                + 'templates/default/images/group_close.gif);' 
     198                                                                + 'padding:2px 4px 2px 16px;'; 
     199 
     200                                        var _xml = _xtools.xml('menu'); 
     201                                        var _option; 
     202                                        var _item; 
     203                                        var _action; 
     204                                        var _style; 
     205 
     206                                        for ( var i in _options ) 
     207                                        { 
     208                                                _option = _xml.createElement('option'); 
     209 
     210                                                _item = _xml.createElement('item'); 
     211                                                _item.appendChild(_xml.createTextNode(_options[i])); 
     212 
     213                                                _style = _xml.createElement('style'); 
     214                                                _style.appendChild(_xml.createTextNode(_style_text)); 
     215 
     216                                                _option.appendChild(_item); 
     217                                                _option.appendChild(_style); 
     218 
     219                                                _xml.documentElement.appendChild(_option); 
     220                                        } 
     221 
     222                                        var _sub_menu = top.document.getElementById('sub_' + el.getAttribute('jid')); 
     223                                                _sub_menu.innerHTML = _xtools.parse(_xml, 'options.xsl'); 
     224                                                _menu.action('onmouseover', 'onmouseout', _sub_menu); 
     225 
     226                                        _sub_menu = _sub_menu.firstChild; 
     227                                        _sub_menu.childNodes[0].style.display = 'none'; 
     228                                        _sub_menu.childNodes[1].style.display = 'none'; 
     229                                        _sub_menu.childNodes[3].style.display = 'none'; 
     230                                        _config( 
     231                                                _sub_menu.childNodes[2], 
     232                                                'onclick', 
     233                                                function(e) 
     234                                                { 
     235                                                        var el = ( e.target ) ? e.target : e.srcElement; 
     236                                                        var jid = el.parentNode.parentNode.id.substr(4); 
     237                                                        _conn.go('$this.Ujabber.removeContact','jid='+jid); 
     238                                                } 
     239                                        ); 
     240                                        _config( 
     241                                                _sub_menu.childNodes[4], 
     242                                                'onclick', 
     243                                                function() 
     244                                                { 
     245                                                        _info[el.getAttribute('jid')] = true; 
     246                                                        _vcard(el.getAttribute('jid')); 
     247                                                } 
     248                                        ); 
    133249                                } 
    134  
    135                                 if( iframe == null ) 
     250                        } 
     251                        function _hover(e) 
     252                        { 
     253                                var el = ( e.target ) ? e.target : e.srcElement; 
     254                                var color = "#fff"; 
     255                                if ( e.type.indexOf('mouseover') != -1 ) 
     256                                        color = "#b4cfe5"; 
     257                                el.style.backgroundColor = color; 
     258                        } 
     259                        var _contact = _contact_list.firstChild; 
     260                        while ( _contact ) 
     261                        { 
     262                                if ( _contact.getAttribute('jid') ) 
    136263                                { 
    137                                         win = im_window.elementC(from); 
    138                                          
    139                                         var iframe = document.createElement('iframe'); 
    140                                         iframe.id = 'iframe_' + from; 
    141                                         iframe.style.width = '240px'; 
    142                                         iframe.style.height = '65px'; 
    143                                         iframe.style.border = '0'; 
    144                                         iframe.style.margin = '0'; 
    145                                         iframe.style.padding = '0'; 
    146                                                                                  
    147                                         var _messages_ = win.firstChild.firstChild.nextSibling.nextSibling; 
    148                                         _messages_.appendChild(iframe); 
    149                                          
    150                                         iframe.contentWindow.document.write('<html><body id="' + from + '" style="margin:0px;padding:0px"></body></html>'); 
    151                                         iframe.contentWindow.document.close(); 
    152                                         iframe.contentWindow.document.designMode = "On"; 
    153  
    154                                         function getEnter(e) 
     264                                        //_config(_contact, 'onmousedown', _click); 
     265                                        _config(_contact, 'onmouseup', _click); 
     266                                        _config(_contact, 'onmouseover', _hover); 
     267                                        _config(_contact, 'onmouseout', _hover); 
     268                                } 
     269                                _contact = _contact.nextSibling; 
     270                        } 
     271                } 
     272        } 
     273 
     274        function _vcard(_pJid) 
     275        { 
     276                if ( _vcards[_pJid] ) 
     277                { 
     278                        if ( _info[_pJid] ) 
     279                                delete _info[_pJid]; 
     280 
     281                        var _win_vcard; 
     282                        if ( !(_win_vcard = _window.get('vcard_' + _pJid)) ) 
     283                        { 
     284                                var _win_pos = _next_position(); 
     285 
     286                                _win_vcard = _window.load('vcard_' + _pJid); 
     287                                _win_vcard.title('.:: Informações do Contato ::.'); 
     288                                _win_vcard.size(300); 
     289                                _win_vcard.position(_win_pos, _win_pos); 
     290 
     291                                _win_vcard.wc.style.padding = "3px"; 
     292                                _win_vcard.bx.style.display = "none"; 
     293 
     294                                var _params = { 
     295                                        'fullname' : imGetLang('Full Name'), 
     296                                        'nickname' : imGetLang('Nickname'), 
     297                                        'organization' : imGetLang('Organization'), 
     298                                        'sector' : imGetLang('Sector'), 
     299                                        'role' : imGetLang('Role'), 
     300                                        'birthday' : imGetLang('Birthday') 
     301                                }; 
     302 
     303                                _win_vcard.content( 
     304                                        _xtools.parse( 
     305                                                _vcards[_pJid], 
     306                                                'vcard_contacts.xsl', 
     307                                                _params 
     308                                        ) 
     309                                ); 
     310                        } 
     311                        else 
     312                                _win_vcard.focus(); 
     313                } 
     314                else 
     315                        _conn.go('$this.Ujabber.getVcard', 'jid='+_pJid); 
     316        } 
     317 
     318        function _readVCard(_pVCard) 
     319        { 
     320                _vcards[_pVCard.getAttribute('from')] = _pVCard; 
     321 
     322                switch ( _pVCard.getAttribute('id') ) 
     323                { 
     324                        case "vCard_user" : 
     325                                var _layer_nickname = top.document.getElementById('im_layer_nickname'); 
     326                                var _nickname = _pVCard.getElementsByTagName('NICKNAME'); 
     327 
     328                                if ( _nickname.length && _layer_nickname ) 
     329                                        _layer_nickname.innerHTML = _nickname[0].firstChild.nodeValue; 
     330                        break; 
     331                        case "vCard" : 
     332                                if ( _info[_pVCard.getAttribute('from')] ) 
     333                                        _vcard(_pVCard.getAttribute('from')); 
     334                        break; 
     335                } 
     336        } 
     337 
     338        function _readIq(pIq) 
     339        { 
     340                switch ( pIq.getAttribute('id') ) 
     341                { 
     342                        case 'contacts' : 
     343                                _readContacts(pIq); 
     344                        break; 
     345                        case 'vCard' : 
     346                        case 'vCard_user' : 
     347                                _readVCard(pIq); 
     348                        break; 
     349                        default : //alert('readIq : ' + pIq.getAttribute('id')); 
     350                } 
     351        } 
     352 
     353        function _readMessage(_pMessage) 
     354        { 
     355                var _from = _pMessage.getAttribute('from'); 
     356 
     357                if ( _from.indexOf('/') > -1 ) 
     358                        _from = _from.substr(0, _from.indexOf('/')); 
     359 
     360                var _win = _window.get('chat' + _from); 
     361 
     362                if ( _win && _pMessage.getElementsByTagName('composing').length > 0 ) 
     363                        _win.wc.childNodes[1].lastChild.style.display = 'block'; 
     364 
     365                if ( _pMessage.getElementsByTagName('body').length > 0 ) 
     366                { 
     367                        if ( !_win ) 
     368                                _win = _chat(_from); 
     369 
     370                        var _history = _win.wc.firstChild; 
     371 
     372                        var _nickname; 
     373                        if ( _vcards[_from] ) 
     374                        { 
     375                                _nickname = _vcards[_from].getElementsByTagName('NICKNAME'); 
     376                                if ( _nickname.length ) 
     377                                        _nickname = _nickname[0].firstChild.nodeValue; 
     378                                else 
     379                                        _nickname = _from; 
     380                        } 
     381                        else 
     382                                _nickname = _from; 
     383 
     384                        var _msg = _xtools.parse(_pMessage, 'message_new.xsl', {'nickname':_nickname}); 
     385 
     386                        if ( _history.scrollHeight == (_history.scrollTop + _history.clientHeight) ) 
     387                        { 
     388                                _history.innerHTML += _msg; 
     389                                _history.scrollTop = _history.scrollHeight; 
     390                        } 
     391                        else 
     392                                // this "else" is to prevent the creation of a flag and the need to use another conditional 
     393                                _history.innerHTML += _msg; 
     394 
     395                        _win.wc.childNodes[1].lastChild.style.display = 'none'; 
     396                } 
     397 
     398                if ( _win && _pMessage.getElementsByTagName('paused').length > 0 ) 
     399                        _win.wc.childNodes[1].lastChild.style.display = 'none'; 
     400        } 
     401 
     402        function _readPresence(_pPresence) 
     403        { 
     404                var _from = _pPresence.getAttribute('from'); 
     405                if ( _from.indexOf('/') > -1 ) 
     406                        _from = _from.substr(0, _from.indexOf('/')); 
     407 
     408                var _presence_type = _pPresence.getAttribute('type'); 
     409                var _img_status_contact = top.document.getElementById('contact_' + _from); 
     410                var _mensagem_status_contact = top.document.getElementById('status_' + _from); 
     411                if ( _mensagem_status_contact ) 
     412                { 
     413                        _mensagem_status_contact.innerHTML = ''; 
     414                        _mensagem_status_contact.style.display = 'none'; 
     415                } 
     416 
     417                if ( _presence_type ) 
     418                { 
     419                        switch( _presence_type ) 
     420                        { 
     421                                case 'available' : 
     422                                case 'unavailable' : 
     423                                        if ( _img_status_contact ) 
     424                                                _img_status_contact.style.backgroundImage = 'url(' + eval('im_' + _presence_type + '.src') + ')'; 
     425                                break; 
     426                                case 'subscribe' : 
     427                                        if ( top.document.getElementById('contact_' + _from) ) 
    155428                                        { 
    156                                                 if ( !(e.shiftKey) && (e.keyCode == 13) ) 
    157                                                 { 
    158                                                         if ( e.type.indexOf('keydown') != -1 ) 
    159                                                                 im.SendMessage(from); 
    160                                                         else 
    161                                                                 iframe.contentWindow.document.body.innerHTML = ''; 
    162                                                         return false; 
    163                                                 } 
    164                                         } 
    165  
    166                                         func.attachEvent(iframe.contentWindow, 'onkeydown', getEnter); 
    167                                         func.attachEvent(iframe.contentWindow, 'onkeyup', getEnter); 
    168  
    169                                 } 
    170  
    171                                 iframe.contentWindow.focus(); 
    172  
    173                                 if ( win ) 
    174                                 { 
    175                                         if(!(im.nickname_contacts[from])) 
    176                                                 im.request_vcard(from, false); 
    177  
    178                                         win = win.firstChild.firstChild; 
    179                                         var nick = (im.nickname_contacts[from]) ? im.nickname_contacts[from] : from; 
    180                                         win.innerHTML += "<b>" + nick + "</b>" + im.insertEmoticons(msg); 
    181                                     win.scrollTop = win.scrollHeight;                                    
    182                                  
    183                                         if(!(im.nickname_contacts[from])) 
    184                                                 im.ldap_photo(from + "__avatar"); 
    185                                 } 
    186                                 im.newMessageNotification(); 
    187                         } 
    188                 } 
    189  
    190                 function readPresence(pPresence) 
    191                 { 
    192                         //@TODO: presenca antes da lista ocasiona erros 
    193                         //verificar e retirar o controle de erros abaixo 
    194                         try 
    195                         { 
    196                                 var jidFrom = pPresence.getAttribute('from'); 
    197  
    198                                 var resource = jidFrom.indexOf('/'); 
    199                                 if ( resource > -1 ) 
    200                                         jidFrom = jidFrom.substr(0, resource); 
    201          
    202                                 if(pPresence.getAttribute('type')) 
    203                                 { 
    204                                         switch(pPresence.getAttribute('type')) 
    205                                         { 
    206                                                 case 'subscribe' : 
    207                                                                 if(func.byId(pPresence.getAttribute('from'))) 
    208                                                                 { 
    209                                                                         if(confirm('Autorizar o usuário ' + pPresence.getAttribute('from') + '?')) 
    210                                                                                 im.subscription(pPresence.getAttribute('from'),'subscribed'); 
    211                                                                         else 
    212                                                                                 im.subscription(pPresence.getAttribute('from'),'unsubscribe'); 
    213                                                                 } 
    214                                                                 else 
    215                                                                 { 
    216                                                                         if(!func.byId(pPresence.getAttribute('from'))) 
    217                                                                         { 
    218                                                                                 if(confirm('O usuário ' + pPresence.getAttribute('from') + ' quer adicioná-lo ?')) 
    219                                                                                 { 
    220                                                                                         im.addrequest(pPresence.getAttribute('from')); 
    221                                                                                         im.subscription(pPresence.getAttribute('from'),'subscribed'); 
    222                                                                                 } 
    223                                                                                 else 
    224                                                                                         im.subscription(pPresence.getAttribute('from'),'unsubscribe'); 
    225                                                                         }else 
    226                                                                                 im.subscription(pPresence.getAttribute('from'),pPresence.getAttribute('type')); 
    227                                                                 } 
    228                                                                 break; 
    229                                                 case 'subscribed' : 
    230                                                                 im.subscription(pPresence.getAttribute('from'),pPresence.getAttribute('type')); 
    231                                                                 break; 
    232                                                 case 'unsubscribed' :                                            
    233                                                                 //alert('O usuário ' + pPresence.getAttribute('from') + ' não quer mais papo !'); 
    234                                                                 break; 
    235                                                 case 'unsubscribe' :                             
    236                                                                 alert('O usuário ' + pPresence.getAttribute('from') + ' negou seu pedido !'); 
    237                                                                 break; 
    238                                                 case 'unavailable' : 
    239                                                                 var img = func.byId('img_' + jidFrom); 
    240                                                                 if( img ) 
    241                                                                 { 
    242                                                                         img.src = eval('im_' + pPresence.getAttribute('type') + '.src'); 
    243                                                                         func.confEl(func.byId(jidFrom),"style","margin-left:15px;cursor:pointer;display:none;");                                                         
    244                                                                 } 
    245                                                                 break; 
    246                                                 case 'available' : 
    247                                                                 var img = func.byId('img_' + jidFrom); 
    248                                                                 if( img ) 
    249                                                                 { 
    250                                                                         img.src = eval('im_' + pPresence.getAttribute('type') + '.src'); 
    251                                                                         func.confEl(func.byId(jidFrom),"style","margin-left:15px;cursor:pointer;display:block;");                                                                                                                
    252                                                                 } 
    253                                                                 break; 
    254                                         } 
    255                                 } 
    256                                 else 
    257                                 { 
    258                                         var node = pPresence.firstChild; 
    259                                         while( node ) 
    260                                         { 
    261                                                 if(node.hasChildNodes()) 
    262                                                 {                                                
    263                                                         switch(node.nodeName) 
    264                                                         { 
    265                                                                 case "show" : 
    266                                                                                 var img = func.byId('img_' + jidFrom); 
    267                                                                                 if( img ) 
    268                                                                                 { 
    269                                                                                         img.src = eval('im_' + node.firstChild.nodeValue + '.src'); 
    270                                                                                         func.confEl(func.byId(jidFrom),"style","margin-left:15px;cursor:pointer;display:block;");                                                        
    271                                                                                         func.byId('status_' + jidFrom).innerHTML = " "; 
    272                                                                                         func.confEl(func.byId('status_' + jidFrom), "style", "font-size:8pt; font-family:Verdana, Arial, Helvetica, sans-serif; font-style:italic; display:none;"); 
    273                                                                                 } 
    274                                                                                 break; 
    275                                                                 case "status" :  
    276                                                                                 var img = func.byId('status_' + jidFrom); 
    277                                                                                 if( img ) 
    278                                                                                 { 
    279                                                                                         func.byId('status_' + jidFrom).innerHTML = ( node.firstChild.nodeValue ) ? node.firstChild.nodeValue : "" ; 
    280                                                                                         func.confEl(func.byId('status_' + jidFrom), "style", "font-size:8pt; font-family:Verdana, Arial, Helvetica, sans-serif; font-style:italic; display:block;"); 
    281                                                                                 } 
    282                                                                                 break; 
    283                                                                 default : 
    284                                                                                 var img = func.byId('img_' + jidFrom); 
    285                                                                                 if( img ) 
    286                                                                                 { 
    287                                                                                         img.src = im_available.src;                                                                      
    288                                                                                         func.byId('status_' + jidFrom).innerHTML = " "; 
    289                                                                                         func.confEl(func.byId('status_' + jidFrom), "style", "font-size:8pt; font-family:Verdana, Arial, Helvetica, sans-serif; font-style:italic; display:none;"); 
    290                                                                                 } 
    291                                                                                 break;                                                                           
    292                                                         } 
    293                                                 } 
    294                                                 node = node.nextSibling;                                         
    295                                         } 
    296          
    297                                         if(!im.contacts_off_line) 
    298                                                 setTimeout("im.off_line()",3000); 
    299                                 } 
    300                         } 
    301                         catch(e) 
    302                         { 
    303                                 alert('read presence : ' + e + "\n\n" + e.description); 
    304                         } 
    305                 } 
    306                  
    307                 function readLastTimeUser(pLastTime) 
    308                 { 
    309                         var last_time = __this.xtools.parse(pLastTime, 'last_time.xsl'); 
    310                          
    311                         if( __this.send_presence ) 
    312                         {                        
    313                                 if( last_time != "0") 
    314                                 { 
    315                                         function handler(Xmldata) 
    316                                         { 
    317                                         } 
    318                                         __this.con.go('$this.Ujabber.setStatus', {'request':handler}); 
    319                                  
    320                                         var status = ""; 
    321                                         if( status = cookies_im.checkCookie('status')) 
    322                                         { 
    323                                                 status = status.substr(status.indexOf("=") + 1,status.length); 
    324                                                 im.status = status; 
     429                                                _conn.go('$this.Ujabber.subscription', 'jid=' + _from + '&type=subscribed' ); 
    325430                                        } 
    326431                                        else 
    327432                                        { 
    328                                                 im.status = 'type=available'; 
    329                                                 im.statusFlag = 'available'; 
    330                                                 func.byId('im_status_src').src = im_available.src; 
     433                                                if ( !_window.get('subscription' + _from) ) 
     434                                                { 
     435                                                        var _win_pos = _next_position(); 
     436                                                        var _win_subscription = _window.load('subscription' + _from); 
     437                                                                _win_subscription.title('.::Expresso Messenger::.'); 
     438                                                                _win_subscription.position(_win_pos, _win_pos); 
     439                                                                _win_subscription.size(200); 
     440                                                                _win_subscription.wc.style.padding = "3px"; 
     441                                                                _win_subscription.bc.style.display = 'none'; 
     442                                                                _win_subscription.bx.style.display = 'none'; 
     443                                                                _win_subscription.bz.style.display = 'none'; 
     444 
     445                                                        var _params = { 
     446                                                                'jid' : _from, 
     447                                                                'lang1' : 'deseja adiciona-lo como contato.', 
     448                                                                'lang2' : imGetLang('nickname'), 
     449                                                                'lang3' : imGetLang('group'), 
     450                                                                'lang4' : imGetLang('allow'), 
     451                                                                'lang5' : imGetLang('deny') 
     452                                                        }; 
     453 
     454                                                        _win_subscription.content( 
     455                                                                _xtools.parse(_xtools.xml('subscribe'), 'subscribe.xsl', _params) 
     456                                                        ); 
     457 
     458                                                        _win_subscription.wc.childNodes[2].style.margin = '5px'; 
     459                                                        _win_subscription.wc.childNodes[3].style.margin = '5px'; 
     460 
     461                                                        _config( 
     462                                                                _win_subscription.wc.childNodes[2], 
     463                                                                'onclick', 
     464                                                                function() 
     465                                                                { 
     466                                                                        _win_subscription.wc.childNodes[1].style.display = 'block'; 
     467                                                                        _win_subscription.size(450); 
     468                                                                        _config( 
     469                                                                                _win_subscription.wc.childNodes[2], 
     470                                                                                'onclick', 
     471                                                                                function() 
     472                                                                                { 
     473 
     474                                                                                        var _status = top.document.getElementById('im_status_add_' + _from); 
     475                                                                                        var _name = top.document.getElementById('im_name_' + _from); 
     476                                                                                        var _group = top.document.getElementById('im_group_' + _from); 
     477 
     478                                                                                        _name.value = _name.value.replace(/^( )*|( )*$/g, ''); 
     479                                                                                        _group.value = _group.value.replace(/^( )*|( )*$/g, ''); 
     480 
     481                                                                                        if ( !(_name.value) || !(_group.value) ) 
     482                                                                                        { 
     483                                                                                                _status.innerHTML = '<br/>O campo destacado em vermelho é obrigatório!<br/>'; 
     484 
     485                                                                                                if ( !(_name.value) ) 
     486                                                                                                { 
     487                                                                                                        _name.previousSibling.style.color = "#f00"; 
     488                                                                                                        _status.innerHTML += '<br/>** Informe um "NOME" para o contato.'; 
     489                                                                                                } 
     490 
     491                                                                                                if ( !(_group.value) ) 
     492                                                                                                { 
     493                                                                                                        _group.previousSibling.style.color = "#f00"; 
     494                                                                                                        _status.innerHTML += '<br/>** Informe um "GRUPO" para o contato.'; 
     495                                                                                                } 
     496                                                                                        } 
     497                                                                                        else 
     498                                                                                        { 
     499                                                                                                _status.innerHTML = '<br/>Adicionado contanto, aguarde.<br/>'; 
     500 
     501                                                                                                _conn.go( 
     502                                                                                                        '$this.Ujabber.allowContact', 
     503                                                                                                        function() 
     504                                                                                                        { 
     505                                                                                                                _status.innerHTML = '<br/>Contato autorizado com "SUCESSO"!<br/>'; 
     506                                                                                                                _win_subscription.button(_win_subscription.bc); 
     507                                                                                                        }, 
     508                                                                                                        'uid='+_from.substr(0,_from.indexOf('@'))+'&name='+_name.value+'&group='+_group.value 
     509                                                                                                ); 
     510 
     511                                                                                                _name.value = ''; 
     512                                                                                                _group.value = ''; 
     513                                                                                        } 
     514                                                                                } 
     515                                                                        ); 
     516                                                                } 
     517                                                        ); 
     518                                                } 
    331519                                        } 
    332          
    333                                         im.presence(im.status); 
     520                                break; 
     521                                case 'unsubscribe' : 
     522                                case 'unsubscribed' : 
     523                                        _conn.go('$this.Ujabber.removeContact','jid=' + _from); 
     524                                break; 
     525                                default : //alert('readPresence : ' + _presence_type); 
     526                        } 
     527                } 
     528                else 
     529                { 
     530                        var _node = _pPresence.firstChild; 
     531                        while( _node ) 
     532                        { 
     533                                if ( _node.hasChildNodes() ) 
     534                                { 
     535                                        switch ( _node.nodeName ) 
     536                                        { 
     537                                                case "show" : 
     538                                                        if ( _img_status_contact ) 
     539                                                                _img_status_contact.style.backgroundImage = 'url(' + eval('im_' + _node.firstChild.nodeValue + '.src') + ')'; 
     540                                                break; 
     541                                                case "status" : 
     542                                                        if ( _mensagem_status_contact ) 
     543                                                        { 
     544                                                                if ( _node.firstChild.nodeValue ) 
     545                                                                        _mensagem_status_contact.innerHTML = _node.firstChild.nodeValue; 
     546                                                                _mensagem_status_contact.style.display = 'block'; 
     547                                                        } 
     548                                                break; 
     549                                                default : 
     550                                                        if ( _img_status_contact ) 
     551                                                                _img_status_contact.style.backgroundImage = 'url(' + im_available.src + ')'; 
     552                                        } 
    334553                                } 
    335                         } 
    336                         __this.send_presence = true; 
    337                 } 
    338                  
    339                 function readVcard(pVcard) 
    340                 { 
    341                          
    342                         switch(pVcard.getAttribute('id')) 
    343                         { 
    344                                 case "vCard_user" : 
    345  
    346                                         var vcard = pVcard.firstChild; 
    347                                         var cc = vcard.firstChild; 
    348                                         while( cc ) 
    349                                         { 
    350                                                 if(cc.nodeName == "NICKNAME" || cc.nodeName == "nickname") 
    351                                                 { 
    352                                                         if(cc.firstChild.nodeValue) 
    353                                                                 func.byId('im_layer_nickname').innerHTML = cc.firstChild.nodeValue; 
    354                                                 } 
    355                                                 cc = cc.nextSibling; 
    356                                         } 
    357                                         if( im.vcard ) 
    358                                                 templates.vcard_user(pVcard); 
    359                                         break; 
    360  
    361                                 case "vCard" : 
    362  
    363                                         var vcard = __this.xtools.parse(pVcard,'nickname.xsl');  
    364                                         im.nickname_contacts[vcard.substr(0,vcard.indexOf(','))] = ( vcard.substr(vcard.indexOf(',')+1) ) ? vcard.substr(vcard.indexOf(',')+1) : vcard.substr(0,vcard.indexOf(',')) ; 
    365                                         if( im.vcard ) 
    366                                                 templates.vcard_contact(pVcard); 
    367                                         break; 
    368                         } 
    369                 } 
    370  
    371                 function sendMessage(pMessage, pFrom) 
    372                 { 
    373                         function handler_sendMessage (data) 
    374                         { 
    375                         } 
    376  
    377                         var sendMessage = pMessage.innerHTML; 
    378                         pMessage.innerHTML = pMessage.innerHTML.replace(/^( )*|( )*$/g, ''); 
    379  
    380                         var send = false; 
    381                         var node = pMessage.firstChild; 
    382                          
    383                         while ( node && !send ) 
    384                         { 
    385                                 if ( node.nodeName.toLowerCase() != 'br' ) 
    386                                         send = true; 
    387                                 node = node.nextSibling; 
    388                         } 
    389  
    390                         if ( send ) 
    391                                 __this.con.go('$this.Ujabber.sendMessage', {'request':handler_sendMessage},"to="+pMessage.getAttribute('id')+"&body="+escape(pMessage.innerHTML)); 
    392                         pMessage.innerHTML = ''; 
    393                          
    394                         var win = im_window.elementC(pFrom); 
    395                         if ( win ) 
    396                         { 
    397                                 win = win.firstChild.firstChild; 
    398                                 win.innerHTML += "<b>" + im.get_lang("says") +":</br></b>" + sendMessage + "</br></br>"; 
    399                             win.scrollTop = win.scrollHeight;                                    
    400                         } 
    401                 } 
    402         } 
    403 }; 
     554                                _node = _node.nextSibling; 
     555                        } 
     556                } 
     557        } 
     558 
     559        function _sendMessage(_pJid, _pMessage, _pHistory) 
     560        { 
     561                var m1 = _pMessage = _pMessage.body.innerHTML; 
     562                var m2 = _pMessage = _pMessage.replace(/(&nbsp;)+|( )+/ig, ' '); 
     563                var m3 = _pMessage = _pMessage.replace(/(<br[^>]*>)+/ig, '<br/>'); 
     564                var m4 = _pMessage = _pMessage.replace(/^( )+|( )+$|^(<br\/>)|(<br\/>)$/g, ''); 
     565 
     566                //_pMessage = _pMessage.replace(/( )+(<br[^>]*>)+/g, '<br/>'); 
     567                //_pMessage = _pMessage.replace(/(<br[^>]*>)*( )+(<br[^>]*>)+/g, ''); 
     568                //_pMessage = _pMessage.replace(/^(<br[^>]*>)*|(<br[^>]*>)*$/g, ''); 
     569 
     570                if ( _pMessage != '' ) 
     571                { 
     572                        _conn.go('$this.Ujabber.sendMessage', "to=" + _pJid + "&body=" + escape(_pMessage)); 
     573 
     574                        if ( _pHistory.scrollHeight == (_pHistory.scrollTop + _pHistory.clientHeight) ) 
     575                        { 
     576                                _pHistory.innerHTML += '<b>' + imGetLang('says') + ':</b><br/>' + _pMessage + '<br/><br/>'; 
     577                            _pHistory.scrollTop = _pHistory.scrollHeight; 
     578                        } 
     579                        else 
     580                        // this "else" is to prevent the creation of a flag and the need to use another conditional 
     581                                _pHistory.innerHTML += '<b>' + imGetLang('says') + ':</b><br/>' + _pMessage + '<br/><br/>'; 
     582                } 
     583        } 
     584 
     585        function _action(_pAction) 
     586        { 
     587                //alert ( typeof pAction + "\n\n" + pAction.nodeName ) 
     588                if ( typeof _pAction == 'object' && _pAction.nodeName ) 
     589                { 
     590                        switch ( _pAction.nodeName ) 
     591                        { 
     592                                case 'iq' : 
     593                                        _readIq(_pAction); 
     594                                break; 
     595                                case 'message' : 
     596                                        _readMessage(_pAction); 
     597                                break; 
     598                                case 'presence' : 
     599                                        _readPresence(_pAction); 
     600                                break; 
     601                                //default : alert('action : ' + _pAction.nodeName); 
     602                        } 
     603                } 
     604        } 
     605 
     606        function Jabber() 
     607        { 
     608                _conn = arguments[0]; 
     609                _xtools = arguments[1]; 
     610                _window = arguments[2]; 
     611                _ldap = arguments[3]; 
     612        } 
     613 
     614        Jabber.prototype.action = _action; 
     615        window.Jabber = Jabber; 
     616} 
     617)(); 
  • trunk/instant_messenger/js/xtools.js

    r260 r305  
    1 function XTools() 
     1(function() 
    22{ 
    3 } 
     3        var _FILES = []; 
    44 
    5 XTools.prototype = { 
    6         'convert' : function(pString) 
     5        function _convert(pString) 
    76        { 
    87                if ( typeof pString != 'string' ) 
    98                        return false; 
    109 
    11                 if (window.ActiveXObject) 
     10                if ( window.ActiveXObject ) 
    1211                { 
    13                         var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
    14                         xmlDoc.async = "false"; 
    15                         xmlDoc.loadXML(pString); 
     12                        var _xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
     13                        _xmlDoc.async = "false"; 
     14                        _xmlDoc.loadXML(pString); 
    1615                } 
    1716                else 
    1817                { 
    1918                        var parser = new DOMParser(); 
    20                         var xmlDoc = parser.parseFromString(pString, "text/xml"); 
     19                        var _xmlDoc = parser.parseFromString(pString, "text/xml"); 
    2120                } 
    2221 
    23                 return xmlDoc; 
    24         }, 
    25         'load' : function(pFile) 
     22                return _xmlDoc; 
     23        } 
     24 
     25        function _load(pFile) 
    2626        { 
    27                 var data = null; 
    28                 if ( document.implementation.createDocument ) 
    29                         data = document.implementation.createDocument("", "", null); 
     27                pFile = this._PATH + 'xsl/' + pFile; 
     28                if ( !(_FILES[pFile]) ) 
     29                { 
     30                        var _data = null; 
     31                        if ( document.implementation.createDocument ) 
     32                                _data = document.implementation.createDocument("", "", null); 
     33                        else 
     34                                _data = new ActiveXObject("Msxml2.FreeThreadedDOMDocument"); 
     35 
     36                        _data.async = false; 
     37                        _data.load(pFile + '?' + Date.parse(new Date)); 
     38                        _FILES[pFile] = _data; 
     39                } 
     40                return _FILES[pFile]; 
     41        } 
     42 
     43        function _parse() 
     44        { 
     45                if ( arguments.length == 1 ) 
     46                { 
     47                        pXML = _xml('root'); 
     48                        pXSL = arguments[0]; 
     49                } 
    3050                else 
    31                         data = new ActiveXObject("Msxml2.FreeThreadedDOMDocument"); 
     51                { 
     52                        pXML = arguments[0]; 
     53                        pXSL = arguments[1]; 
     54                } 
     55                switch ( typeof pXML ) 
     56                { 
     57                        case 'object' : 
     58                        break; 
     59                        case 'string' : 
     60                                if ( pXML.indexOf('<') == 0 ) 
     61                                        pXML = _convert(pXML); 
     62                                else 
     63                                        pXML = _load.call(this, pXML); 
     64                        break; 
     65                        default : 
     66                                return {'error':'invalid xml'} 
     67                } 
     68                switch ( typeof pXSL ) 
     69                { 
     70                        case 'object' : 
     71                        break; 
     72                        case 'string' : 
     73                                pXSL = _load.call(this, pXSL); 
     74                        break; 
     75                        default : 
     76                                return {'error':'invalid xsl'} 
     77                } 
    3278 
    33                 data.async = false; 
    34                 data.load( path_im + 'xsl/' + pFile + '?' + Date.parse(new Date)); 
    35                 return data; 
    36         }, 
    37         'parse' : function(pXML, pXSL) 
    38         { 
    39                 try 
     79                var fragment = null; 
     80                if ( window.XSLTProcessor ) 
    4081                { 
    41                         switch ( typeof pXML ) 
     82                        var xslProc = new XSLTProcessor(); 
     83                        xslProc.importStylesheet(pXSL); 
     84 
     85                        if ( (arguments.length == 3) && (typeof arguments[2] == 'object') ) 
    4286                        { 
    43                                 case 'object' : 
    44                                 break; 
    45                                 case 'string' : 
    46                                         if ( pXML.indexOf('<') == 0 ) 
    47                                                 pXML = this.convert(pXML); 
    48                                         else 
    49                                                 pXML = this.load(pXML); 
    50                                 break; 
    51                                 default : 
    52                                         return {'error':'invalid xml'} 
    53                         } 
    54                         switch ( typeof pXSL ) 
    55                         { 
    56                                 case 'object' : 
    57                                 break; 
    58                                 case 'string' : 
    59                                         pXSL = this.load(pXSL); 
    60                                 break; 
    61                                 default : 
    62                                         return {'error':'invalid xsl'} 
     87                                var params = arguments[2]; 
     88                                for (var i in params ) 
     89                                         xslProc.setParameter(null, i, params[i]); 
    6390                        } 
    6491 
    65                         var fragment = null; 
    66                         if ( window.XSLTProcessor ) 
     92                        fragment = xslProc.transformToFragment(pXML, document); 
     93 
     94                        // para retornar valor igual ao ie. 
     95                        var aux = document.createElement("div"); 
     96                        aux.appendChild(fragment); 
     97                        fragment = aux.innerHTML; 
     98                } 
     99                else 
     100                { 
     101                        var xslTemplate = new ActiveXObject("MSXML2.XSLTemplate"); 
     102                        xslTemplate.stylesheet = pXSL; 
     103 
     104                        var xslProc = xslTemplate.createProcessor(); 
     105                        xslProc.input = pXML; 
     106 
     107                        if ( (arguments.length == 3) && (typeof arguments[2] == 'object') ) 
    67108                        { 
    68                                 var xslProc = new XSLTProcessor(); 
    69                                 xslProc.importStylesheet(pXSL); 
    70                                 fragment = xslProc.transformToFragment(pXML, document); 
     109                                var params = arguments[2]; 
     110                                for (var i in params ) 
     111                                         xslProc.addParameter(i, params[i], ''); 
     112                        } 
    71113 
    72                                 // para retornar valor igual ao ie. 
    73                                 var aux = document.createElement("div"); 
    74                                 aux.appendChild(fragment); 
    75                                 fragment = aux.innerHTML; 
    76                         } 
    77                         else 
    78                         { 
    79                                 var xslTemplate = new ActiveXObject("MSXML2.XSLTemplate"); 
    80                                 xslTemplate.stylesheet = pXSL; 
     114                        xslProc.transform(); 
     115                        fragment = xslProc.output; 
     116                } 
     117                return fragment; 
     118        } 
    81119 
    82                                 var myXslProc = xslTemplate.createProcessor(); 
    83                                 myXslProc.input = pXML; 
     120        function _xml() 
     121        { 
     122                var a = false; 
     123                if ( document.implementation.createDocument ) 
     124                        a = document.implementation.createDocument("", "", null); 
     125                else if ( ActiveXObject ) 
     126                        a = new ActiveXObject("Msxml2.DOMDocument"); 
    84127 
    85                                 myXslProc.transform(); 
    86                                 fragment = myXslProc.output; 
    87                         } 
    88                         return fragment; 
    89                 } 
    90                 catch(e) 
    91                 { 
    92                         alert("transform\n\n" + e + "\n\n" + e.description); 
    93                 } 
    94         }, 
    95         'xml' : function() 
     128                if ( arguments.length == 1 && typeof arguments[0] == 'string' ) 
     129                        a.appendChild(a.createElement(arguments[0])); 
     130                //with ( a ) 
     131                //      appendChild(createProcessingInstruction("xml", "version='1.0'")); 
     132 
     133                return a; 
     134        } 
     135 
     136        function XTools() 
    96137        { 
    97                 try 
    98                 { 
    99                         var a = false; 
    100                         if ( document.implementation.createDocument ) 
    101                                 a = document.implementation.createDocument("", "", null); 
    102                         else if ( ActiveXObject ) 
    103                                 a = new ActiveXObject("Msxml2.DOMDocument"); 
     138                var _argv = arguments; 
     139                this._PATH = ( _argv.length > 0 ) ? 
     140                        _argv[0] : ''; 
     141                if ( this._PATH != '' && this._PATH.lastIndexOf('/') != (this._PATH.length - 1) ) 
     142                        this._PATH += '/'; 
     143        } 
    104144 
    105                         //with ( a ) 
    106                         //      appendChild(createProcessingInstruction("xml", "version='1.0'")); 
    107  
    108                         return a; 
    109                 } 
    110                 catch(e) 
    111                 { 
    112                         alert("create\n\n" + e + "\n\n" + e.description); 
    113                 } 
    114         } 
    115 }; 
     145        XTools.prototype.convert = _convert; 
     146        XTools.prototype.load = _load; 
     147        XTools.prototype.parse = _parse; 
     148        XTools.prototype.xml = _xml; 
     149        window.XTools = XTools; 
     150} 
     151)(); 
Note: See TracChangeset for help on using the changeset viewer.