source: sandbox/2.4.2-expresso2/expressoMail1_2/js/QuickCatalogSearch.js @ 6567

Revision 6567, 38.0 KB checked in by angelo, 12 years ago (diff)

Ticket #2885 - Na tela de busca rapida de contatos ao utilizar teclas de atalho

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1        function emQuickCatalogSearch ()
2        {
3                this.arrayWin = new Array();
4                this.el;
5                this.cc_contacts = new Array();
6                this.cc_groups  = new Array();
7        }
8       
9        $(document).ready(function(){
10                $('#combobox option').each(function(){
11                        if($(this).val() == preferences.catalog_search){
12                                $(this).attr('selected',true);
13                        }
14                });
15        });       
16       
17        /* showlist */ 
18        emQuickCatalogSearch.prototype.showList = function(data, begin, end, ID, field)
19        {
20                data_  = data; 
21                id_    = ID;
22        field_ = field;
23        begin_ = begin;
24        end_   = end;
25                content = $("#content_id_"+ID);
26               
27                keypress_read(data);
28                configure_slider(data);
29                create_list(data, true);
30                details_results(data);
31
32        this.showWindow();     
33        }
34     
35         
36    /* Leitura das teclas de atalho */   
37    function keypress_read(data) {     
38                $("#dialog-modal").unbind('keydown').keydown(function (e) {
39                        var keyCode = e.keyCode;
40                        arrow = {left: 37, up: 38, right: 39, down: 40, enter: 13, esc: 27, space: 32};
41                        var slider = $( "#slider" );
42                        switch (keyCode)
43                        {
44                                case arrow.enter:                                       
45                                        if(!search_focus){
46                                                i = $(".ui-selected:last").attr("value") + 1;
47                                                if($("#actions_"+i).clone().find(".ui-button-text").text() == '+')
48                                                        add_contact_field(document.getElementById("contact_"+i).innerHTML, document.getElementById("actions_"+i), "contact_"+i);
49                                                else{
50                                                        remove_contact_field(document.getElementById("contact_"+i).innerHTML, document.getElementById("actions_"+i), "contact_"+i);
51                                                }
52                                                document.getElementById("busca").value = "";
53                                                //Evita que o campo "para" receba o enter
54                                                e.preventDefault();
55                                                $("#dialog-modal").dialog("close");
56                                        }
57                                        if (is_webkit){
58                                                //Posiciona o cursor no final do texto no Chrome
59                                                var txt_area = document.getElementById('to_'+id_);
60                                                var len = txt_area.value.length;
61                                                txt_area.setSelectionRange(len, len);
62                                        }
63                                        break;
64                                case arrow.left:
65                                        if(!search_focus){
66                                                slider.slider("value", $( "#slider" ).slider( "value" ) - 1);
67                                                create_list(data_, false);     
68                                        }
69                                        break;
70                                case arrow.right:
71                                        if(!search_focus){
72                                                if((($( "#slider" ).slider( "value" ))) == Math.ceil(data_.length/6))
73                                                        break;
74                                                slider.slider( "value", $( "#slider" ).slider( "value" ) + 1);                                 
75                                                create_list(data_, false);                                                     
76                                        }
77                                        break;
78                                case arrow.up:
79                                        if(!search_focus){
80                                                show_detail(data_, "up");
81                                        }
82                                        break;
83                                case arrow.down:
84                                        if(!search_focus){
85                                                show_detail(data_, "down");
86                                        }
87                                        break;
88                                case arrow.space:
89
90                                        if(!search_focus){
91                                                i = $(".ui-selected:last").attr("value") + 1;
92                                                if($("#actions_"+i).clone().find(".ui-button-text").text() == '+')
93                                                {
94                                                        add_contact_field(document.getElementById("contact_"+i).innerHTML, document.getElementById("actions_"+i), "contact_"+i);
95                                                }else{
96                                                        remove_contact_field(document.getElementById("contact_"+i).innerHTML, document.getElementById("actions_"+i), "contact_"+i);
97                                                }
98                                                document.getElementById("busca").value = "";
99                                        }
100                                        break;
101                        }
102                });     
103        }
104       
105       
106        /* Mostra os detalhes do contato selecionado */
107        function show_detail(data_, direction) {
108                id_contact = $(".ui-selected:last").attr("value");
109                if(direction == "down") {
110                        if((id_contact == (((((parseInt($( "#slider" ).slider( "value" )) - 1)*6))+6)-1)) || id_contact == data_.length - 1 || data_.length == 1)
111                                return;
112                        var line_contact = $('li.ui-selected');
113                        $('li.ui-selected').next().addClass("ui-selected");
114                        id_contact++;
115                }
116                else {
117                        if(id_contact == (($( "#slider" ).slider( "value" ) -1)*6))
118                                return;
119                        var line_contact = $('li.ui-selected');
120                        $('li.ui-selected').prev().addClass("ui-selected");
121                        id_contact--;
122                }                                       
123                line_contact.removeClass("ui-selected").addClass("ui-selectee");
124                var details = $("#detalhes_contato").empty();   
125                switch(data_['type_catalog']) {
126                        case 'G':
127                                if(data_['extra_ldap_fields'] != undefined){
128                                        if(data_['extra_ldap_fields'].length != 0)
129                                                var extra_fields = (data_['extra_ldap_fields']).split("#");   
130                                        else
131                                                var extra_fields = []; 
132                                }else
133                                        var extra_fields = []; 
134                                if(preferences.default_fields_quick_search != 0) {
135                                        details.append('<p><label class="attribute">' + utf8_decoder(data_[id_contact].cn[0]) + "</label>" + '<span class="value">' + (data_[id_contact].mail ? data_[id_contact].mail[0] : "") + '</span></p>');
136                                        if((data_[id_contact].telephonenumber ? data_[id_contact].telephonenumber[0] : ""))
137                                                details.append('<p><label class="attribute">Telefone </label>' + '<span class="value">' + (data_[id_contact].telephonenumber ? data_[id_contact].telephonenumber[0] : "") + '</span></p>');           
138                                }
139                                for (var i=0; i<=extra_fields.length-1; i++)
140                                {
141                                        var campo = extra_fields[i].substr(extra_fields[i].indexOf("|")+1);   
142                                        var valor = extra_fields[i].substr(0, (extra_fields[i].indexOf("|")));                                         
143                                        if(data_[id_contact][valor.toLowerCase()] != undefined) {
144                                                var tmp_campo = '<p><label class="attribute">' + campo + "</label>" ;
145                                                for(j=0; j<data_[id_contact][valor.toLowerCase()].length; j++) {
146                                                        details.append(tmp_campo + '<span class="value">' + data_[id_contact][valor.toLowerCase()][j] + "</span></p>");
147                                                        tmp_campo = "";
148                                                }
149                                        }
150                                }
151                                if (data_[id_contact].vacationactive == "TRUE"){
152                                        details.append('<p><img src="templates/default/images/mala-big.png"/><span class="title-outoffice">Filtro "Fora do Escritório" ativo.</span></p>');     
153                                        if ( data_[id_contact].vacationinfo ){
154                                                details.append('<div class="outoffice"><div class="outoffice-inner"><span>'+ data_[id_contact].vacationinfo +'</span></div></div>');
155                                                if ( $('.outoffice-inner').height() > $('.outoffice').height() ){                                               
156                                                        var link = $('<a>').html('Ver mais');
157                                                        link.attr('id','more');
158                                                        link.bind('click',function(){$('.outoffice').animate({height: $('.outoffice-inner').height(),width: '-=15px'},800); $('#more').unbind('click').hide();});
159                                                        details.append(link);
160                                                }
161                                        }
162                                }
163                                break;
164                        case 'P':
165                                if(utf8_decoder(data_[id_contact].cn) == 'undefined')
166                                        details.append('<p><label class="attribute">' + utf8_decoder(data_[id_contact].title) + '</label>' + '<span class="value">' + data_[id_contact].short_name + '</span></p>');
167                                else
168                                        details.append('<p><label class="attribute">' + utf8_decoder(data_[id_contact].cn) + '</label>' + '<span class="value">' + data_[id_contact].mail + '</span></p>');
169                if(data_[id_contact].telephonenumber != null)
170                    details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data_[id_contact].telephonenumber + '</span></p>');
171                                if (data_[id_contact].vacationactive == "TRUE"){
172                                        details.append('<p><img src="templates/default/images/mala-big.png"/><span class="title-outoffice">Filtro "Fora do Escritório" ativo.</span></p>');     
173                                        if (data_[id_contact].vacationinfo){
174                                                details.append('<div class="outoffice"><div class="outoffice-inner"><span>'+ data_[id_contact].vacationinfo +'</span></div></div>');
175                                                if ( $('.outoffice-inner').height() > $('.outoffice').height() ){
176                                                        var link = $('<a>').html('Ver mais');
177                                                        link.attr('id','more');
178                                                        link.bind('click',function(){$('.outoffice').animate({height: $('.outoffice-inner').height(),width: '-=15px'},800); $('#more').unbind('click').hide();});
179                                                        details.append(link);
180                                                }
181                                        }
182                                }       
183                                break;
184                        default:
185                                if(data_['extra_ldap_fields'] != undefined){
186                                        if(data_['extra_ldap_fields'].length != 0)
187                                                var extra_fields = (data_['extra_ldap_fields']).split("#");   
188                                        else
189                                                var extra_fields = [];   
190                                }else{
191                                        var extra_fields = [];   
192                                }
193                if(preferences.default_fields_quick_search != 0 || data_[id_contact].type_contact == "P" || data_[id_contact].type_contact == "G") {
194                                        if(utf8_decoder(data_[id_contact].cn) == 'undefined')
195                                                details.append('<p><label class="attribute">' + utf8_decoder(data_[id_contact].title) + '</label>' + '<span class="value">' + data_[id_contact].short_name + '</span></p>');
196                                        else
197                                                details.append('<p><label class="attribute">' + utf8_decoder(data_[id_contact].cn) + '</label>' + '<span class="value">' + data_[id_contact].mail + '</span></p>');
198                                        if(data_[id_contact].telephonenumber != null)
199                                                details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data_[id_contact].telephonenumber + '</span></p>');
200                                }       
201                                if(data_[id_contact].mail[0] == 'undefined')
202                                        break;
203                                if(data_[id_contact].mail[0].length > 1) {
204                                        for (var i=0; i<=extra_fields.length-1; i++) {
205                                                var campo = extra_fields[i].substr(extra_fields[i].indexOf("|")+1);   
206                                                var valor = extra_fields[i].substr(0, (extra_fields[i].indexOf("|")));                                         
207                                                if(data_[id_contact][valor.toLowerCase()] != undefined) {
208                                                        var tmp_campo = '<p><label class="attribute">' + campo + "</label>" ;
209                                                        for(j=0; j<data_[id_contact][valor.toLowerCase()].length; j++) {
210                                                                details.append(tmp_campo + '<span class="value">' + data_[id_contact][valor.toLowerCase()][j] + "</span></p>");
211                                                                tmp_campo = "";
212                                                        }
213                                                }
214                                        }
215                                }
216                                if (data_[id_contact].vacationactive == "TRUE"){
217                                        details.append('<p><img src="templates/default/images/mala-big.png"/><span class="title-outoffice">Filtro "Fora do Escritório" ativo.</span></p>');     
218                                        if (data_[id_contact].vacationinfo){
219                                                details.append('<div class="outoffice"><div class="outoffice-inner"><span>'+ data_[id_contact].vacationinfo +'</span></div></div>');
220                                                if ( $('.outoffice-inner').height() > $('.outoffice').height() ){
221                                                        var link = $('<a>').html('Ver mais');
222                                                        link.attr('id','more');
223                                                        link.bind('click',function(){$('.outoffice').animate({height: $('.outoffice-inner').height(),width: '-=15px'},800); $('#more').unbind('click').hide();});
224                                                        details.append(link);
225                                                }
226                                        }       
227                                }                               
228                        break;
229                }                               
230        }
231
232                       
233        /*
234        * Método que cria a lista de contatos
235        */
236        function create_list(data, begin, uiValue) {
237                var sliderValue = 1;
238                if(typeof($( "#slider" ).slider( "value" )) != "object")
239                        sliderValue = $( "#slider" ).slider( "value" );
240                if(uiValue)
241                        sliderValue = uiValue;
242                $("#detalhes_contato").empty();
243                var paginas = Math.ceil(data.length/6);
244                $("#title_usuarios").html( get_lang("Results") );
245        var selectable = $("#selectable");
246                selectable.empty();
247                var acento = data.search_for;
248        var Ul = document.createElement("ul");
249                var caracteresInvalidos = 'àèìòùâêîôûäëïöüáéíóúãõÀÈÌÒÙÂÊÎÔÛÄËÏÖÜÁÉÍÓÚÃÕ';
250                var caracteresValidos =   'aeiouaeiouaeiouaeiouaoAEIOUAEIOUAEIOUAEIOUAO';       
251               
252                var i = new Number();
253                var j = new Number();
254                var cString = new String();
255                var varRes = '';
256
257                for (i = 0; i < data.search_for.length; i++) {
258                        cString = data.search_for.substring(i, i + 1);
259                        for (j = 0; j < caracteresInvalidos.length; j++) {
260                                if (caracteresInvalidos.substring(j, j + 1) == cString){
261                                        cString = caracteresValidos.substring(j, j + 1);
262                                }
263                        }
264                        varRes += cString;
265                }
266                data.search_for = varRes;
267               
268                for (i=((sliderValue -1)*6)+1; i<(((sliderValue -1)*6)+1)+6; i++) {
269                        var Op = document.createElement("li");
270                        if(i > data.length)
271                                break;
272                        if (data['type_catalog'] != 'G' && (data[i-1].mail == null || data[i-1].mail == ""))
273                                data[i-1].mail = get_lang("No mail");
274                               
275                        if(i == (((sliderValue -1)*6)+1)) {
276                                Op.setAttribute("class", "ui-selected");
277                                Op.setAttribute("className", "ui-selected");
278                        }       
279                        else { 
280                                Op.setAttribute("class", "ui-selectee");
281                                Op.setAttribute("className", "ui-selectee");
282                        }
283                        var contact_name = utf8_decoder(data[i-1].cn);
284                        if(contact_name == 'undefined'){
285                                contact_name = utf8_decoder(data[i-1].title);
286                                if(contact_name != 'undefined'){
287                                        data[i-1].mail = data[i-1].short_name;
288                                }
289                        }
290                        var exist = "add_contact_field";
291                        var signal = "+";
292                        var btnClass = "add";
293                        emails_adicionados = "";
294                        var emailList = content.find(field_).filter("input").parent().find("div input");
295                        //      var array = content.find(".to-tr").find(".box");
296                        $.each(emailList, function(index, value){
297                                emails_adicionados += $(value).val() + ",";
298                        });
299                        emails_adicionados = emails_adicionados.split(",");
300                        for(aux=0; aux<emails_adicionados.length -1; aux++) {
301                                if(emails_adicionados[aux].match(/<([^<]*)>[\s]*$/)){
302                                        if(emails_adicionados[aux].match(/<([^<]*)>[\s]*$/)[1].toLowerCase() == (utf8_decoder(data[i-1].mail)).toLowerCase()){
303                                                emails_adicionados[aux] = "%";
304                                                exist = "remove_contact_field";
305                                                signal = "x";
306                                                btnClass = "remove";
307                                        }
308                                }else{
309                                        if(emails_adicionados[aux].toLowerCase() == (utf8_decoder(data[i-1].mail)).toLowerCase()){
310                                                emails_adicionados[aux] = "%";
311                                                exist = "remove_contact_field";
312                                                signal = "x";
313                                                btnClass = "remove";
314                                        }
315                                }
316                        }
317                       
318                        if(contact_name.toLowerCase().indexOf(acento.toLowerCase()) != -1 && acento.indexOf(" ") == -1 && acento.indexOf("@") == -1)                                                                   
319                                contact_name = contact_name.substring(0, contact_name.toLowerCase().indexOf(acento.toLowerCase())) + "<u>" + contact_name.substr(contact_name.toLowerCase().indexOf(acento.toLowerCase()), acento.length) + "</u>" + contact_name.substring(contact_name.toLowerCase().indexOf(acento.toLowerCase()) + acento.length);
320                        else if(contact_name.toLowerCase().indexOf(data.search_for.toLowerCase()) != -1 && data.search_for.indexOf(" ") == -1 && data.search_for.indexOf("@") == -1)                                                                   
321                                contact_name = contact_name.substring(0, contact_name.toLowerCase().indexOf(data.search_for.toLowerCase())) + "<u>" + contact_name.substr(contact_name.toLowerCase().indexOf(data.search_for.toLowerCase()), data.search_for.length) + "</u>" + contact_name.substring(contact_name.toLowerCase().indexOf(data.search_for.toLowerCase()) + data.search_for.length);
322                        var vacationImg = '';
323                        if (data[i-1].vacationactive == "TRUE")
324                                vacationImg = '<img src="templates/default/images/mala-small.png"/>';   
325                        var line = '<span class="menu-control"><button class="'+btnClass+'" id="actions_'+i+'" onClick="'+exist+'(document.getElementById(\'contact_' + i + '\').innerHTML, this, \'contact_' + i + '\')">'+ signal +'</button></span><div id="contact_' + i + '" onDblClick="'+exist+'(this.innerHTML, document.getElementById(\'actions_'+i+'\'), \'contact_' + i + '\')"><div class="name_contact"><strong class="name">' + contact_name +' '+ vacationImg +'</strong><em class="email">' + ((utf8_decoder(data[i-1].mail) != undefined)? (utf8_decoder(data[i-1].mail) == 'undefined' ? get_lang("No mail") : utf8_decoder(data[i-1].mail)) : get_lang("No mail")) + '</em></div></div>';
326                        Op.innerHTML = line;
327            $(Op).val(i - 1);
328            selectable.append(Op);
329                        $("#contact_"+i).click(function(){
330                                document.getElementById("amount-text").focus();
331                        });
332        }
333                selectable.append(Ul);
334                var first_contact;
335                begin ? first_contact = 0 : first_contact = ((sliderValue* 6) -6);                     
336                var details = $("#detalhes_contato").empty();   
337               
338                switch (data['type_catalog']) {
339                        case 'G':
340                                if(data['extra_ldap_fields']){
341                                        if(data['extra_ldap_fields'].length != 0)
342                                                var extra_fields = (data['extra_ldap_fields']).split("#");   
343                                        else
344                                                var extra_fields = [];   
345                                }else
346                                        var extra_fields = [];   
347                                if(preferences.default_fields_quick_search != 0) {                             
348                                        details.append('<p><label class="attribute">' + utf8_decoder(data[first_contact].cn[0]) + "</label>" + '<span class="value">' + (data[first_contact].mail ? data[first_contact].mail[0] : "") + "</span></p>");
349                                        if(data[first_contact].telephonenumber)
350                                                details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + (data[first_contact].telephonenumber ? data[first_contact].telephonenumber[0] : "") + '</span></p>');
351                                }
352                                for (var i=0; i<=extra_fields.length-1; i++) {
353                                        var campo = extra_fields[i].substr(extra_fields[i].indexOf("|")+1);   
354                                        var valor = extra_fields[i].substr(0, (extra_fields[i].indexOf("|")));                                         
355                                        if(data[0][valor.toLowerCase()] != undefined)
356                                        {
357                                                var tmp_campo = '<p><label class="attribute">' + campo + "</label>" ;
358                                                for(j=0; j<data[first_contact][valor.toLowerCase()].length; j++) {
359                                                        details.append(tmp_campo + '<span class="value">' + utf8_decoder(data[first_contact][valor.toLowerCase()][j]) + "</span></p>");
360                                                        tmp_campo = "";
361                                                }
362                                        }
363                                }
364                                if (data[first_contact].vacationactive == "TRUE"){
365                                        details.append('<p><img src="templates/default/images/mala-big.png"/><span class="title-outoffice">Filtro "Fora do Escritório" ativo.</span></p>');     
366                                        if ( data[first_contact].vacationinfo ){
367                                                details.append('<div class="outoffice"><div class="outoffice-inner"><span>'+ data[first_contact].vacationinfo +'</span></div></div>');
368                                                if ( $('.outoffice-inner').height() > $('.outoffice').height() ){                                               
369                                                        var link = $('<a>').html('Ver mais');
370                                                        link.attr('id','more');
371                                                        link.bind('click',function(){$('.outoffice').animate({height: $('.outoffice-inner').height(),width: '-=15px'},800); $('#more').unbind('click').hide();});
372                                                        details.append(link);
373                                                }       
374                                        }       
375                                }                                                       
376                                break;
377                        case 'P':
378                                if(utf8_decoder(data[first_contact].cn) != 'undefined')
379                                        details.append('<p><label class="attribute">' + utf8_decoder(data[first_contact].cn) + '</label>' + '<span class="value">' + data[first_contact].mail + '</span></p>');
380                                else
381                                        details.append('<p><label class="attribute">' + utf8_decoder(data[first_contact].title) + '</label>' + '<span class="value">' + data[first_contact].short_name + '</span></p>');
382                if(data[first_contact].telephonenumber != null)
383                                        details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data[first_contact].telephonenumber  + '</span></p>');
384                                if (data[first_contact].vacationactive == "TRUE"){
385                                        details.append('<p><img src="templates/default/images/mala-big.png"/><span class="title-outoffice">Filtro "Fora do Escritório" ativo.</span></p>');     
386                                        if ( data[first_contact].vacationinfo ){
387                                                details.append('<div class="outoffice"><div class="outoffice-inner"><span>'+ data[first_contact].vacationinfo +'</span></div></div>');
388                                                if ( $('.outoffice-inner').height() > $('.outoffice').height() ){
389                                                        var link = $('<a>').html('Ver mais');
390                                                        link.attr('id','more');
391                                                        link.bind('click',function(){$('.outoffice').animate({height: $('.outoffice-inner').height(),width: '-=15px'},800); $('#more').unbind('click').hide();});
392                                                        details.append(link);
393                                                }       
394                                        }
395                                }                               
396                                break;
397                        default:       
398                                if(data['extra_ldap_fields']){
399                                        if(data['extra_ldap_fields'].length != 0)
400                                                var extra_fields = (data['extra_ldap_fields']).split("#");   
401                                        else
402                                                var extra_fields = [];   
403                                }else
404                                        var extra_fields = [];   
405                                if(preferences.default_fields_quick_search != 0 || data[first_contact].type_contact == "P" || data[first_contact].type_contact == "G") {
406                                        if(utf8_decoder(data[first_contact].cn) != 'undefined')
407                                                details.append('<p><label class="attribute">' + utf8_decoder(data[first_contact].cn) + '</label>' + '<span class="value">' + data[first_contact].mail + '</span></p>');
408                                        else
409                                                details.append('<p><label class="attribute">' + utf8_decoder(data[first_contact].title) + '</label>' + '<span class="value">' + data[first_contact].short_name + '</span></p>');
410                                        if(data[first_contact].telephonenumber != null)
411                                                details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data[first_contact].telephonenumber + "</span></p>");
412                                }
413                                if( data[first_contact].type_contact == "G") {
414                                        if(data[first_contact].mail[0].length > 1) {
415                                                for (var i=0; i<=extra_fields.length-1; i++) {
416                                                        var campo = extra_fields[i].substr(extra_fields[i].indexOf("|")+1);   
417                                                        var valor = extra_fields[i].substr(0, (extra_fields[i].indexOf("|")));                                         
418                                                        if(data[first_contact][valor.toLowerCase()] != undefined) {
419                                                                var tmp_campo = '<p><label class="attribute">' + campo + "</label>" ;
420                                                                for(j=0; j<data[first_contact][valor.toLowerCase()].length; j++) {
421                                                                        details.append(tmp_campo + '<span class="value">' + utf8_decoder(data[first_contact][valor.toLowerCase()][j]) + "</span></p>");
422                                                                        tmp_campo = "";
423                                                                }       
424                                                        }       
425                                                }
426                                        }
427                                }
428                                if (data[first_contact].vacationactive == "TRUE"){
429                                        details.append('<p><img src="templates/default/images/mala-big.png"/><span class="title-outoffice">Filtro "Fora do Escritório" ativo.</span></p>');     
430                                        if ( data[first_contact].vacationinfo ){
431                                                details.append('<div class="outoffice"><div class="outoffice-inner"><span>'+ data[first_contact].vacationinfo +'</span></div></div>');
432                                                if ( $('.outoffice-inner').height() > $('.outoffice').height() ){                                               
433                                                        var link = $('<a>').html('Ver mais');
434                                                        link.attr('id','more');
435                                                        link.bind('click',function(){$('.outoffice').animate({height: $('.outoffice-inner').height(),width: '-=15px'},800); $('#more').unbind('click').hide();});
436                                                        details.append(link);
437                                                }       
438                                        }
439                                }                               
440                                break;
441                }
442                var string_results = sliderValue + " " + get_lang("of") + " " + paginas + " (" + data.length + " " + get_lang("Results") + ")";
443                $( "#amount-text" ).val( string_results ).attr('readonly', true);
444                $("button").button();
445                //$("button.remove").button({icons:{primary:"ui-icon-close"}, text: false});
446                //$("button.add").button({icons:{primary:"ui-icon-plus"}, text: false});
447                if(!is_ie)
448                        document.getElementById("amount-text").focus();
449                $("#selectable li:first").focus();
450                removeFocus();
451        }       
452               
453               
454        /* Método que configura os detalhes do resultado da busca */
455        function details_results(data) {
456                $(function() {
457                        $( "#selectable" ).selectable({
458                                stop: function() {
459                                        var details = $("#detalhes_contato").empty();                                 
460                    $( ".ui-selected", this ).each(function() {
461                                                if(data.length > 0){
462                                                        switch(data['type_catalog']) {
463                                                                case 'G':
464                                                                        if(data['extra_ldap_fields'] != undefined){
465                                                                                if(data['extra_ldap_fields'].length != 0)
466                                                                                        var extra_fields = (data['extra_ldap_fields']).split("#");   
467                                                                                else
468                                                                                        var extra_fields = [];   
469                                                                        }else
470                                                                                var extra_fields = [];   
471                                                                        if(preferences.default_fields_quick_search != 0 && data[this.value] ) {
472                                            details.append('<p><label class="attribute">' + utf8_decoder(data[this.value].cn[0]) + "</label>" + '<span class="value">' + (data[this.value].mail ? data[this.value].mail[0] : "")+ "</span></p>");
473                                                                                if(data[this.value].telephonenumber )
474                                                                                        details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + (data[this.value].telephonenumber ? data[this.value].telephonenumber[0] : "")+ "</span></p>");
475                                                                        }
476                                                                        for (var i=0; i<=extra_fields.length-1; i++) {
477                                                                                var campo = extra_fields[i].substr(extra_fields[i].indexOf("|")+1);   
478                                                                                var valor = extra_fields[i].substr(0, (extra_fields[i].indexOf("|")));                                         
479                                                                                if( data[this.value] && data[this.value][valor.toLowerCase()] != undefined) {
480                                                                                        var tmp_campo = '<p><label class="attribute">' + campo + "</label>" ;
481                                                                                        for(j=0; j<data[this.value][valor.toLowerCase()].length; j++) {
482                                                                                                details.append(tmp_campo + '<span class="value">' + utf8_decoder(data[this.value][valor.toLowerCase()][j]) + "</span></p>");
483                                                                                                tmp_campo = "";
484                                                                                        }
485                                                                                }
486                                                                        }
487                                                                        if (data[this.value].vacationactive == "TRUE"){
488                                                                                details.append('<p><img src="templates/default/images/mala-big.png"/><span class="title-outoffice">Filtro "Fora do Escritório" ativo.</span></p>');     
489                                                                                if ( data[this.value].vacationinfo ){
490                                                                                        details.append('<div class="outoffice"><div class="outoffice-inner"><span>'+ data[this.value].vacationinfo +'</span></div></div>');
491                                                                                        if ( $('.outoffice-inner').height() > $('.outoffice').height() ){                                                                                       
492                                                                                                var link = $('<a>').html('Ver mais');
493                                                                                                link.attr('id','more');
494                                                                                                link.bind('click',function(){$('.outoffice').animate({height: $('.outoffice-inner').height(),width: '-=15px'},800); $('#more').unbind('click').hide();});
495                                                                                                details.append(link);
496                                                                                        }
497                                                                                }
498                                                                        }                                                                       
499                                                                        break;
500                                                                case 'P':
501                                                                        if(utf8_decoder(data[this.value].cn) == 'undefined')
502                                                                                details.append('<p><label class="attribute">' + utf8_decoder(data[this.value].title) + "</label>" + '<span class="value">' + data[this.value].short_name + "</span></p>");
503                                                                        else
504                                                                                details.append('<p><label class="attribute">' + utf8_decoder(data[this.value].cn) + "</label>" + '<span class="value">' + data[this.value].mail + "</span></p>");
505                                                                        if(data[this.value].telephonenumber != null)
506                                                                                details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data[this.value].telephonenumber + "</span></p>");
507                                                                        if (data[this.value].vacationactive == "TRUE"){
508                                                                                details.append('<p><img src="templates/default/images/mala-big.png"/><span class="title-outoffice">Filtro "Fora do Escritório" ativo.</span></p>');     
509                                                                                if ( data[this.value].vacationinfo ){
510                                                                                        details.append('<div class="outoffice"><div class="outoffice-inner"><span>'+ data[this.value].vacationinfo +'</span></div></div>');
511                                                                                        if ( $('.outoffice-inner').height() > $('.outoffice').height() ){
512                                                                                                var link = $('<a>').html('Ver mais');
513                                                                                                link.attr('id','more');
514                                                                                                link.bind('click',function(){$('.outoffice').animate({height: $('.outoffice-inner').height(),width: '-=15px'},800); $('#more').unbind('click').hide();});
515                                                                                                details.append(link);
516                                                                                        }       
517                                                                                }
518                                                                        }                                                                       
519                                                                        break;
520                                                                default:
521                                                                        if(this.value == undefined)
522                                                                                break;
523                                                                               
524                                                                        if(data['extra_ldap_fields'].length != 0)
525                                                                                var extra_fields = (data['extra_ldap_fields']).split("#");   
526                                                                        else
527                                                                                var extra_fields = [];     
528                                                                        if(preferences.default_fields_quick_search != 0 || data[this.value].type_contact == "P" || data[this.value].type_contact == "G") {
529                                                                                if(utf8_decoder(data[this.value].cn) == 'undefined')
530                                                                                        details.append('<p><label class="attribute">' + utf8_decoder(data[this.value].title) + "</label>" + '<span class="value">' + data[this.value].short_name + "</span></p>");
531                                                                                else
532                                                                                        details.append('<p><label class="attribute">' + utf8_decoder(data[this.value].cn) + "</label>" + '<span class="value">' + data[this.value].mail + "</span></p>");
533                                                                                if(data[this.value].telephonenumber != null)
534                                                                                        details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data[this.value].telephonenumber + "</span></p>");
535                                                                        }
536                                                                        if(data[this.value].mail[0] == 'undefined')
537                                                                                        break;
538                                                                        if(data[this.value].mail[0] != get_lang("No mail")) {
539                                                                                if(data[this.value].mail[0].length > 1) {
540                                                                                        for (var i=0; i<=extra_fields.length-1; i++) {
541                                                                                                var campo = extra_fields[i].substr(extra_fields[i].indexOf("|")+1);   
542                                                                                                var valor = extra_fields[i].substr(0, (extra_fields[i].indexOf("|")));                                         
543                                                                                                if(data[this.value][valor.toLowerCase()] != undefined) {
544                                                                                                        var tmp_campo = '<p><label class="attribute">' + campo + "</label>" ;
545                                                                                                        for(j=0; j<data[this.value][valor.toLowerCase()].length; j++) {
546                                                                                                                details.append(tmp_campo + '<span class="value">' + utf8_decoder(data[this.value][valor.toLowerCase()][j]) + "</span></p>");
547                                                                                                                tmp_campo = "";
548                                                                                                        }
549                                                                                                }
550                                                                                        }
551                                                                                }
552                                                                        }
553                                                                        if (data[this.value].vacationactive == "TRUE"){
554                                                                                details.append('<p><img src="templates/default/images/mala-big.png"/><span class="title-outoffice">Filtro "Fora do Escritório" ativo.</span></p>');     
555                                                                                if ( data[this.value].vacationinfo ){
556                                                                                        details.append('<div class="outoffice"><div class="outoffice-inner"><span>'+ data[this.value].vacationinfo +'</span></div></div>')
557                                                                                        if ( $('.outoffice-inner').height() > $('.outoffice').height() ){
558                                                                                                var link = $('<a>').html('Ver mais');
559                                                                                                link.attr('id','more');
560                                                                                                link.bind('click',function(){$('.outoffice').animate({height: $('.outoffice-inner').height(),width: '-=15px'},800); $('#more').unbind('click').hide();});
561                                                                                                details.append(link);
562                                                                                        }
563                                                                                }       
564                                                                        }                                                                       
565                                                                        break;
566                                                        }
567                                                }
568                                        });
569                                }
570            });
571        });
572    }
573     
574         
575    /*
576    * Método que configura o slider e os resultados
577    */
578    function configure_slider(data) {   
579        var paginas = (Math.ceil(data.length/6));
580        $("#title_usuarios").html( get_lang("Results") );
581        $(function() {
582            $( "#slider" ).slider({
583                                value:1,
584                                min: 1,
585                                max: paginas,
586                                step: 1,
587                                slide: function( event, ui ) {
588                                        create_list(data, false, ui.value);
589                                        var string_results = ui.value + " " + get_lang("of") + " " + paginas + " (" + data.length + " " + get_lang("Results") + ")";           
590                                        $( "#amount-text" ).val( string_results );
591                                }
592            });
593                        $("#selectable li:first button:first").focus();
594                });
595    }
596       
597        var search_focus = false;
598               
599        function setFocus() {search_focus = true;return;}
600       
601        function removeFocus() {search_focus = false;return;}
602               
603    function checkEnter(e) {
604                var kC = window.event ? event.keyCode :
605        e && e.keyCode ? e.keyCode :
606        e && e.which ? e.which : null;
607        if (kC)
608                        return kC == 13;
609        else
610                        return false;
611        }
612       
613               
614    /*
615     * Faz a busca direto da tela modal 
616     */
617    function buscaContato(param) {
618                $("#busca, #detalhes_contato, #selectable").empty();
619                if(param.length == 0) {
620            alert(get_lang("Please enter a parameter to search"));
621            return;
622        }           
623                if(param.length < preferences.search_characters_number) {
624            alert(get_lang("parameter must be at least") + " " +  preferences.search_characters_number + " " + get_lang("characters"));
625            return false;
626        }
627        var catalog = $("#combobox").val();
628        var handler_emQuickSearch = function(data) {
629            data_ = data;
630                        if(data_.length > 0) {     
631                                configure_slider(data_);
632                                create_list(data, true);
633                                details_results(data_);
634            }
635            else {
636                                $("#detalhes_contato, #selectable").empty();
637                                var selectable = $("#selectable");
638                                var Ul = document.createElement("ul");
639                                Ul.onclick = function(){
640                                };
641                                var Op = document.createElement("li");
642                                Op.innerHTML = '<span class="menu-control"></span><div id="no_results"><div class="name_contact"><strong class="name">Nenhum Resultado Encontrado</strong></div></div>';
643                                selectable.append(Op);
644                                selectable.append(Ul);
645                                var string_results = "0 " + get_lang("of") + " 0 (0 "  + get_lang("Results") + ")";             
646                                $( "#amount-text" ).val( string_results );
647                                details_results(data);
648                configure_slider(data);
649            }
650        }
651        cExecute ("$this.ldap_functions.quicksearchcontact&search_for="+param+"&field=TO&ID=0&catalog="+catalog, handler_emQuickSearch);
652    }
653               
654        function verifyEmails(emailAux, contato) {     
655                var contact_id = contato.split("_");           
656                if(contact_id[1] != 0)
657                {
658                        var ini = parseInt((contact_id[1]/6).toFixed(0));
659                        if(ini != 0 && ini != 1){
660                                ini = ini * 6;
661                                var fim = ini+1;
662                        }
663                        else{
664                                ini = 1;
665                                var fim = ini;
666                        }
667                        fim = fim +5;
668                        var contact2 = "";
669                        for(aux = ini; aux <= fim; aux++){
670                                if(contact_id[1] != aux){
671                                        if($("#"+contact_id[0]+"_"+aux).find('.email').text() == emailAux){
672                                                contact2 = contact_id[0]+"_"+aux;
673                                                var button = document.getElementById("actions_"+aux);
674                                                var div = document.getElementById(contact2);
675                                                if($("#actions_"+aux).find('.ui-button-text').text() == '+'){
676                                                        button.onclick = function(){
677                                                                remove_contact_field(div.innerHTML, button, contact2);
678                                                        };
679                                                        div.ondblclick = function(){
680                                                                remove_contact_field(div.innerHTML, button, contact2);
681                                                        };
682                                                        $("#actions_"+aux).find('.ui-button-text').text('x');
683                                                }
684                                                else{
685                                                        button.onclick = function(){
686                                                                add_contact_field(div.innerHTML, button, contact2);
687                                                        };
688                                                        div.ondblclick = function(){
689                                                                add_contact_field(div.innerHTML, button, contact2);
690                                                        };
691                                                        $("#actions_"+aux).find('.ui-button-text').text('+');
692                                                }
693                                        }
694                                }
695                        }
696                }
697        }
698    /*
699    * Método que adiciona o contato selecionado no campo do email (To, CC, CCo)
700    */
701    function add_contact_field(contact, button, divs) {
702       
703                var nome = $(contact).clone().find('.name').text();
704                var email = $(contact).clone().find('.email').text();
705                if(email == get_lang("No mail")){
706                        alert(get_lang("It is not possible to add this contact as a recipient because it does not have email"));
707                        if(!is_ie)
708                                document.getElementById("amount-text").focus();
709                        return;
710                }
711                verifyEmails(email, divs);
712                final_contact = "\""+nome +"\" <"+email+">";
713
714                final_contact = final_contact.replace(/\/n/, "");
715                var index = parseInt(divs.split("_")[1])-1;
716                if(data_[index].type_contact == "G"){
717                        var ldap_id = preferences.expressoMail_ldap_identifier_recipient;
718                        if(ldap_id){
719                                draw_email_box(
720                                        (data_[index][ldap_id.toLowerCase()] ? data_[index][ldap_id.toLowerCase()][0] : final_contact)
721                                        , content.find(field_).filter("input")
722                                );
723                        }else{
724                                draw_email_box(final_contact, content.find(field_).filter("input"));
725                        }
726                }else{
727                        draw_email_box((data_[index].id_contact ? data_[index].id_contact : data_[index].id), content.find(field_).filter("input"), (data_[index].id_contact ? true : "G"));
728                }
729                content.find(field_).filter("input").val("");
730                button.onclick = function(){
731                        remove_contact_field(document.getElementById(divs).innerHTML, button, divs);
732                };
733                var div = document.getElementById(divs);
734                div.ondblclick = function(){
735                        remove_contact_field(div.innerHTML, button, divs);
736                };
737                button.innerHTML = '<span class="ui-button-text" style="">x</span>';
738    }
739               
740               
741        /*
742    * Método que remove o contato selecionado no campo do email (To, CC, CCo)
743    */
744        function remove_contact_field(contact, button, divs) {
745                var email = $(contact).clone().find('.email').text();
746                var array = content.find(field_).parent().find("div input");
747                $.each(array, function(index, value){
748                        var validated_email = $(value).val();
749                        if(validated_email.match(/<([^<]*)>[\s]*$/)){
750                                if(validated_email.match(/<([^<]*)>[\s]*$/)[1].toLowerCase() == email.toLowerCase()) {
751                                        $(value).parent().remove();
752                                }
753                        }
754                });
755       
756                button.onclick = function(){
757                        add_contact_field(document.getElementById(divs).innerHTML, button, divs);
758                };
759                var div = document.getElementById(divs);
760                div.ondblclick = function(){
761                        add_contact_field(div.innerHTML, button, divs);
762                };
763                button.innerHTML = '<span class="ui-button-text" style="">+</span>';
764        }
765       
766         
767        /* Decoder utf8 */     
768    function utf8_decoder ( str_data ) {
769        var tmp_arr = [], i = 0, ac = 0, c1 = 0, c2 = 0, c3 = 0;     
770        str_data += '';   
771        while ( i < str_data.length ) {
772            c1 = str_data.charCodeAt(i);
773            if (c1 < 128) {
774                                tmp_arr[ac++] = String.fromCharCode(c1);
775                i++;
776            } else if ((c1 > 191) && (c1 < 224)) {
777                        c2 = str_data.charCodeAt(i+1);
778                        tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
779                        i += 2;
780                      } else {
781                                c2 = str_data.charCodeAt(i+1);
782                                c3 = str_data.charCodeAt(i+2);
783                                tmp_arr[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
784                                i += 3;
785                             }
786        }
787        return tmp_arr.join('');
788    }
789       
790   
791        /* Mostra tela de help */       
792    function show_help() {
793                $(function() {
794                        $( "#dialog-modal_help" ).dialog({
795                                                resizable: false,
796                                                width: 540,
797                                                modal: true,
798                                                closeOnEscape: true,
799                                                close : function (event, ui) {
800                                                                        $( "#amount-text" ).focus();
801                                                                        event.stopPropagation();
802                                                                }
803                        });
804                });
805        }       
806       
807        $("#dialog-modal_help").live("dialogclose", function(){
808                if(!is_ie)
809                        $( "#amount-text" ).focus();
810        });
811
812         
813        emQuickCatalogSearch.prototype.showWindow = function () {
814                $(this).bind('keydown');
815                $(function() {
816        $( "#dialog:ui-dialog" ).dialog( "destroy" );                   
817        $( "#dialog-modal" ).dialog({
818                        resizable: false,
819//                      height: "auto",
820                        width: 780,
821                        modal: true,
822                        position: 'bottom',
823                        closeOnEscape: true,
824                        close: function (event, ui) {
825                                event.stopPropagation();
826                                $(this).unbind('keydown');
827                                if (is_ie) {
828                                        var range= content.find(field_).createTextRange();
829                                        range.collapse(false);
830                                        range.select();
831                                } else {
832                                        content.find(field_).focus();   
833                                }
834                        },
835                        open: function () {
836                                removeFocus();
837                                $("#selectable li:first").focus();
838                                document.getElementById("amount-text").focus();
839                        },
840                        focus: function (event, ui) {
841                                //$(this).unbind('keydown');
842                        },
843                        beforeClose: function (event, ui) {
844                                $(this).unbind('keydown');
845                        },
846                        buttons:[
847                                                {
848                                                        text: "Fechar",
849                                                        click: function(){
850                                                                                                $("#detalhes_contato, #selectable, #busca").empty();
851                                                                                                $(this).dialog("close");
852                                                                                                if (is_ie) {
853                                                                                                        var range= content.find(field_).createTextRange();
854                                                                                                        range.collapse(false);
855                                                                                                        range.select();
856                                                                                                } else {
857                                                                                                        content.find(field_).focus();   
858                                                                                                }
859                                                                                         },
860                                                        style: "margin-top: -2.1em"
861                                                }
862                                        ]
863                        });
864        });
865                $(".ui-dialog .ui-dialog-titlebar")
866                .append('<a href="#" class="ui-dialog-titlebar-minimize ui-corner-all" role="button"><span class="ui-icon ui-icon-minusthick">minimize</span></a>')
867                .find('.ui-dialog-titlebar-minimize').click(function() {
868                        $(".ui-dialog-buttonpane, .ui-dialog-content").toggle();
869                        $(".ui-icon-minusthick, .ui-icon-newwin").toggleClass('ui-icon-minusthick').toggleClass('ui-icon-newwin');
870                });
871                $("#dialog-modal .ui-icon-search").click(function (){buscaContato($('#busca').val());});                                               
872                $("#dialog-modal button, input.button").button();
873}
874
875       
876        /* Build the Object */
877        //QuickCatalogSearch;
878        QuickCatalogSearch = new emQuickCatalogSearch();
Note: See TracBrowser for help on using the repository browser.