source: trunk/expressoMail1_2/js/QuickCatalogSearch.js @ 7267

Revision 7267, 38.7 KB checked in by angelo, 12 years ago (diff)

Ticket #3120 - Cursor invisivel ao adicionar destinatarios no Expresso Mail

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