source: sandbox/2.4.1-2/expressoMail1_2/js/QuickCatalogSearch.js @ 6272

Revision 6272, 36.8 KB checked in by angelo, 12 years ago (diff)

Ticket #2765 - Aviso de ferias de destinatarios na criacao de mensagens conforme filtro fora de escritorio

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