Ignore:
Timestamp:
11/11/11 16:42:49 (12 years ago)
Author:
wmerlotto
Message:

Ticket #2305 - Enviando alteracoes, desenvolvidas internamente na Prognus. Ultimas sincronizacoes...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/expressoMail1_2/js/QuickCatalogSearch.js

    r5134 r5172  
    1010        emQuickCatalogSearch.prototype.showList = function(data, begin, end, ID, field) 
    1111        { 
    12                         data_    = data;         
    13                         id_    = ID; 
    14             field_ = field; 
    15             begin_ = begin; 
    16             end_   = end; 
     12                data_  = data;   
     13                id_    = ID; 
     14        field_ = field; 
     15        begin_ = begin; 
     16        end_   = end; 
    1717 
    18                         keypress_read(data); 
    19             configure_slider(data); 
     18                keypress_read(data); 
     19                configure_slider(data); 
    2020                create_list(data, true); 
    21             details_results(data); 
    22                          
     21                details_results(data); 
     22 
    2323                id = '1'; 
    2424                _this = this; 
     
    3636                func_add_contact = function () {         
    3737                };               
    38                  
    3938        _this.showWindow(el_A);  
    4039        } 
    41          
    42          
     40      
     41         
    4342    /* Leitura das teclas de atalho */     
    4443    function keypress_read(data) {       
    45                 $("#dialog-modal").keydown(function (e) { 
     44                $("#dialog-modal").unbind('keydown').keydown(function (e) { 
    4645                        var keyCode = e.keyCode; 
    47                         arrow = {left: 37, up: 38, right: 39, down: 40, enter: 13, esc: 27}; 
    48                         var slider = $( "#slider"  ); 
     46                        arrow = {left: 37, up: 38, right: 39, down: 40, enter: 13, esc: 27, space: 32}; 
     47                        var slider = $( "#slider" ); 
    4948                        switch (keyCode)  
    5049                        { 
    51                                 case arrow.enter: 
     50                                case arrow.enter:                                        
    5251                                        if(!search_focus){ 
    5352                                                i = $(".ui-selected:last").attr("value") + 1; 
    54                                                 add_contact_field($("#contact_" + i).html()); 
     53                                                if($("#actions_"+i).clone().find(".ui-button-text").text() == '+') 
     54                                                        add_contact_field(document.getElementById("contact_"+i).innerHTML, document.getElementById("actions_"+i), "contact_"+i); 
     55                                                else{ 
     56                                                        remove_contact_field(document.getElementById("contact_"+i).innerHTML, document.getElementById("actions_"+i), "contact_"+i); 
     57                                                } 
    5558                                                document.getElementById("busca").value = ""; 
    56                                                 $("#dialog-modal").unbind('keydown'); 
    57                                         $("#dialog-modal").dialog("close"); 
     59                                                $("#dialog-modal").dialog("close"); 
    5860                                        } 
    5961                                        break; 
    6062                                case arrow.left: 
    61                                         slider.slider("value", $( "#slider" ).slider( "value" ) - 1); 
    62                                         create_list(data_, false);               
     63                                        if(!search_focus){ 
     64                                                slider.slider("value", $( "#slider" ).slider( "value" ) - 1); 
     65                                                create_list(data_, false);       
     66                                        } 
    6367                                        break; 
    6468                                case arrow.right: 
    65                                         if((($( "#slider" ).slider( "value" ))) == Math.ceil(data_.length/6)) 
    66                                                 break; 
    67                                         slider.slider( "value", $( "#slider" ).slider( "value" ) + 1);                                   
    68                                         create_list(data_, false);                                                       
     69                                        if(!search_focus){ 
     70                                                if((($( "#slider" ).slider( "value" ))) == Math.ceil(data_.length/6)) 
     71                                                        break; 
     72                                                slider.slider( "value", $( "#slider" ).slider( "value" ) + 1);                                   
     73                                                create_list(data_, false);                                                       
     74                                        } 
    6975                                        break; 
    7076                                case arrow.up: 
    71                                         show_detail(data_, "up"); 
     77                                        if(!search_focus){ 
     78                                                show_detail(data_, "up"); 
     79                                        } 
    7280                                        break; 
    7381                                case arrow.down: 
    74                                         show_detail(data_, "down"); 
    75                                                 break; 
    76                                 } 
     82                                        if(!search_focus){ 
     83                                                show_detail(data_, "down"); 
     84                                        } 
     85                                        break; 
     86                                case arrow.space: 
     87 
     88                                        if(!search_focus){ 
     89                                                i = $(".ui-selected:last").attr("value") + 1; 
     90                                                if($("#actions_"+i).clone().find(".ui-button-text").text() == '+') 
     91                                                { 
     92                                                        add_contact_field(document.getElementById("contact_"+i).innerHTML, document.getElementById("actions_"+i), "contact_"+i); 
     93                                                }else{ 
     94                                                        remove_contact_field(document.getElementById("contact_"+i).innerHTML, document.getElementById("actions_"+i), "contact_"+i); 
     95                                                } 
     96                                                document.getElementById("busca").value = ""; 
     97                                        } 
     98                                        break; 
     99                        } 
    77100                });      
    78                                                         } 
     101        } 
    79102         
    80103         
     
    88111                        $('li.ui-selected').next().addClass("ui-selected");  
    89112                        id_contact++; 
    90                                         } 
     113                } 
    91114                else { 
    92115                        if(id_contact == (($( "#slider" ).slider( "value" ) -1)*6))  
     
    95118                        $('li.ui-selected').prev().addClass("ui-selected");  
    96119                        id_contact--; 
    97                                     }  
     120                }                                        
    98121                line_contact.removeClass("ui-selected").addClass("ui-selectee"); 
    99                 var details = $("#detalhes_contato").empty();                                  
     122                var details = $("#detalhes_contato").empty();     
    100123                switch(data_['type_catalog']) { 
    101124                        case 'G': 
    102                                         var extra_fields = (data_['extra_ldap_fields']).split("#");    
     125                                var extra_fields = (data_['extra_ldap_fields']).split("#");    
    103126                                if(preferences.default_fields_quick_search != 0) { 
    104127                                        details.append('<p><label class="attribute">' + utf8_decoder(data_[id_contact].cn[0]) + "</label>" + '<span class="value">' + data_[id_contact].mail[0] + '</span></p>'); 
    105128                                        details.append('<p><label class="attribute">Telefone </label>' + '<span class="value">' + data_[id_contact].telephonenumber[0] + '</span></p>');            
    106                                         } 
     129                                } 
    107130                                for (var i=0; i<=extra_fields.length-1; i++) 
    108                                             { 
    109                                                 var campo = extra_fields[i].substr(extra_fields[i].indexOf("|")+1);     
    110                                                 var valor = extra_fields[i].substr(0, (extra_fields[i].indexOf("|")));                                           
     131                                { 
     132                                        var campo = extra_fields[i].substr(extra_fields[i].indexOf("|")+1);     
     133                                        var valor = extra_fields[i].substr(0, (extra_fields[i].indexOf("|")));                                           
    111134                                        if(data_[id_contact][valor.toLowerCase()] != undefined) { 
    112135                                                var tmp_campo = '<p><label class="attribute">' + campo + "</label>" ; 
     
    114137                                                        details.append(tmp_campo + '<span class="value">' + data_[id_contact][valor.toLowerCase()][j] + "</span></p>"); 
    115138                                                        tmp_campo = ""; 
    116                                             } 
    117                                         } 
    118                                     } 
    119                                         break; 
     139                                                } 
     140                                        } 
     141                                } 
     142                                break; 
    120143                        case 'P': 
    121                                 details.append('<p><label class="attribute">' + utf8_decoder(data_[id_contact].cn) + '</label>' + '<span class="value">' + data_[id_contact].mail + '</span></p>'); 
     144                                if(utf8_decoder(data_[id_contact].cn) == 'undefined') 
     145                                        details.append('<p><label class="attribute">' + utf8_decoder(data_[id_contact].title) + '</label>' + '<span class="value">' + data_[id_contact].short_name + '</span></p>'); 
     146                                else 
     147                                        details.append('<p><label class="attribute">' + utf8_decoder(data_[id_contact].cn) + '</label>' + '<span class="value">' + data_[id_contact].mail + '</span></p>'); 
    122148                if(data_[id_contact].telephonenumber != null) 
    123149                    details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data_[id_contact].telephonenumber + '</span></p>'); 
    124                                                 break;   
     150                                break; 
    125151                        default: 
    126                                 var extra_fields = (data_['extra_ldap_fields']).split("#");    
     152                                var extra_fields = (data_['extra_ldap_fields']).split("#");    
    127153                if(preferences.default_fields_quick_search != 0 || data_[id_contact].type_contact == "P") { 
    128                                         details.append('<p><label class="attribute">' + utf8_decoder(data_[id_contact].cn) + '</label>' + '<span class="value">' + data_[id_contact].mail + '</span></p>'); 
     154                                        if(utf8_decoder(data_[id_contact].cn) == 'undefined') 
     155                                                details.append('<p><label class="attribute">' + utf8_decoder(data_[id_contact].title) + '</label>' + '<span class="value">' + data_[id_contact].short_name + '</span></p>'); 
     156                                        else 
     157                                                details.append('<p><label class="attribute">' + utf8_decoder(data_[id_contact].cn) + '</label>' + '<span class="value">' + data_[id_contact].mail + '</span></p>'); 
    129158                                        if(data_[id_contact].telephonenumber != null) 
    130159                                                details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data_[id_contact].telephonenumber + '</span></p>'); 
    131                                                         } 
     160                                }        
     161                                if(data_[id_contact].mail[0] == 'undefined') 
     162                                        break; 
    132163                                if(data_[id_contact].mail[0].length > 1) { 
    133164                                        for (var i=0; i<=extra_fields.length-1; i++) { 
    134                                                 var campo = extra_fields[i].substr(extra_fields[i].indexOf("|")+1);     
    135                                                 var valor = extra_fields[i].substr(0, (extra_fields[i].indexOf("|")));                                           
     165                                                var campo = extra_fields[i].substr(extra_fields[i].indexOf("|")+1);     
     166                                                var valor = extra_fields[i].substr(0, (extra_fields[i].indexOf("|")));                                           
    136167                                                if(data_[id_contact][valor.toLowerCase()] != undefined) { 
    137168                                                        var tmp_campo = '<p><label class="attribute">' + campo + "</label>" ; 
     
    139170                                                                details.append(tmp_campo + '<span class="value">' + data_[id_contact][valor.toLowerCase()][j] + "</span></p>"); 
    140171                                                                tmp_campo = ""; 
    141                                                 } 
    142                                             } 
    143                                         } 
    144                                     } 
    145                                         break; 
    146                         } 
     172                                                        } 
     173                                                } 
     174                                        } 
     175                                } 
     176                        break; 
     177                }                                
    147178        } 
     179 
    148180                         
    149                          
    150                          
    151                 /* 
    152                 * Método que cria a lista de contatos 
    153                 */ 
     181        /* 
     182        * Método que cria a lista de contatos 
     183        */ 
    154184        function create_list(data, begin, uiValue) { 
    155185                var sliderValue = 1; 
     
    158188                if(uiValue) 
    159189                        sliderValue = uiValue; 
    160                                         $("#detalhes_contato").empty(); 
     190                $("#detalhes_contato").empty(); 
    161191                var paginas = Math.ceil(data.length/6);  
    162                                         $("#title_usuarios").html( get_lang("Results") ); 
    163                         var selectable = $("#selectable"); 
    164                                                 selectable.empty(); 
    165                         var Ul = document.createElement("ul"); 
     192                $("#title_usuarios").html( get_lang("Results") ); 
     193        var selectable = $("#selectable"); 
     194                selectable.empty(); 
     195                var acento = data.search_for; 
     196        var Ul = document.createElement("ul"); 
     197                var caracteresInvalidos = 'àèìòùâêîôûäëïöüáéíóúãõÀÈÌÒÙÂÊÎÔÛÄËÏÖÜÁÉÍÓÚÃÕ'; 
     198                var caracteresValidos =   'aeiouaeiouaeiouaeiouaoAEIOUAEIOUAEIOUAEIOUAO';        
     199                 
     200                var i = new Number(); 
     201                var j = new Number(); 
     202                var cString = new String(); 
     203                var varRes = ''; 
     204 
     205                for (i = 0; i < data.search_for.length; i++) { 
     206                        cString = data.search_for.substring(i, i + 1); 
     207                        for (j = 0; j < caracteresInvalidos.length; j++) { 
     208                                if (caracteresInvalidos.substring(j, j + 1) == cString){ 
     209                                        cString = caracteresValidos.substring(j, j + 1); 
     210                                } 
     211                        } 
     212                        varRes += cString; 
     213                } 
     214                data.search_for = varRes; 
     215                 
    166216                for (i=((sliderValue -1)*6)+1; i<(((sliderValue -1)*6)+1)+6; i++) { 
    167                         var Op = document.createElement("li"); 
     217                        var Op = document.createElement("li"); 
    168218                        if(i > data.length) 
    169                                                                 break; 
    170                                                         if (data['type_catalog'] != 'G' && (data[i-1].mail == null || data[i-1].mail == "")) 
    171                                 data[i-1].mail = "No mail";  
     219                                break; 
     220                        if (data['type_catalog'] != 'G' && (data[i-1].mail == null || data[i-1].mail == "")) 
     221                                data[i-1].mail = get_lang("No mail");  
    172222                                 
    173223                        if(i == (((sliderValue -1)*6)+1)) { 
    174                                                                 Op.setAttribute("class", "ui-selected"); 
     224                                Op.setAttribute("class", "ui-selected"); 
    175225                                Op.setAttribute("className", "ui-selected"); 
    176                                                         } 
    177                                                         else {   
    178                                                                 Op.setAttribute("class", "ui-selectee"); 
     226                        }        
     227                        else {  
     228                                Op.setAttribute("class", "ui-selectee"); 
    179229                                Op.setAttribute("className", "ui-selectee"); 
    180                                                         } 
    181                                                         var contact_name = utf8_decoder(data[i-1].cn); 
    182                         if(contact_name.toLowerCase().indexOf(data.search_for.toLowerCase()) != -1 && data.search_for.indexOf(" ") == -1 && data.search_for.indexOf("@") == -1)                                                                  
    183                                                                 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); 
    184                         Op.innerHTML = '<span class="menu-control"><button onClick="add_contact_field(document.getElementById(\'contact_' + i + '\').innerHTML)">+</button><button onClick="remove_contact_field(document.getElementById(\'contact_' + i + '\').innerHTML)">x</button></span><div id="contact_' + i + '" onDblClick="add_contact_field(this.innerHTML)"><div class="name_contact"><strong>' + contact_name + '</strong><em>' + utf8_decoder(data[i-1].mail) + '</em></div></div>'; 
    185                             $(Op).val(i - 1); 
     230                        } 
     231                        var contact_name = utf8_decoder(data[i-1].cn); 
     232                        if(contact_name == 'undefined'){ 
     233                                contact_name = utf8_decoder(data[i-1].title); 
     234                                if(contact_name != 'undefined'){ 
     235                                        data[i-1].mail = data[i-1].short_name; 
     236                                } 
     237                        } 
     238                        var exist = "add_contact_field"; 
     239                        var signal = "+"; 
     240                        var btnClass = "add"; 
     241                        var emailList = $("#" + field_ + "_" + id_).val(); 
     242                        var emails_adicionados = emailList.split(","); 
     243                        for(aux=0; aux<emails_adicionados.length -1; aux++) { 
     244                                if(emails_adicionados[aux].match(/<([^<]*)>[\s]*$/)[1] == utf8_decoder(data[i-1].mail)){ 
     245                                        emails_adicionados[aux] = "%"; 
     246                                        exist = "remove_contact_field"; 
     247                                        signal = "x"; 
     248                                        btnClass = "remove"; 
     249                                } 
     250                        } 
     251                         
     252                        if(contact_name.toLowerCase().indexOf(acento.toLowerCase()) != -1 && acento.indexOf(" ") == -1 && acento.indexOf("@") == -1)                                                                     
     253                                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); 
     254                        else if(contact_name.toLowerCase().indexOf(data.search_for.toLowerCase()) != -1 && data.search_for.indexOf(" ") == -1 && data.search_for.indexOf("@") == -1)                                                                     
     255                                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); 
     256                        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 + '</strong><em class="email">' + utf8_decoder(data[i-1].mail) + '</em></div></div>'; 
     257                        Op.innerHTML = line; 
     258            $(Op).val(i - 1); 
    186259            selectable.append(Op); 
    187                         } 
     260                        $("#contact_"+i).click(function(){ 
     261                                document.getElementById("amount-text").focus(); 
     262                        }); 
     263        } 
    188264                selectable.append(Ul); 
    189265                var first_contact; 
     
    198274                        }); 
    199275                } 
    200                 var details = $("#detalhes_contato").empty();                                  
     276                var details = $("#detalhes_contato").empty();    
     277                 
    201278                switch (data['type_catalog']) { 
    202279                        case 'G': 
     
    220297                                break; 
    221298                        case 'P': 
    222                                 details.append('<p><label class="attribute">' + utf8_decoder(data[first_contact].cn) + '</label>' + '<span class="value">' + data[first_contact].mail + '</span></p>'); 
     299                                if(utf8_decoder(data[first_contact].cn) != 'undefined') 
     300                                        details.append('<p><label class="attribute">' + utf8_decoder(data[first_contact].cn) + '</label>' + '<span class="value">' + data[first_contact].mail + '</span></p>'); 
     301                                else 
     302                                        details.append('<p><label class="attribute">' + utf8_decoder(data[first_contact].title) + '</label>' + '<span class="value">' + data[first_contact].short_name + '</span></p>'); 
    223303                if(data[first_contact].telephonenumber != null) 
    224304                                        details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data[first_contact].telephonenumber  + '</span></p>'); 
    225305                                break; 
    226                         default: 
     306                        default:                                 
    227307                                var extra_fields = (data['extra_ldap_fields']).split("#");    
    228308                                if(preferences.default_fields_quick_search != 0 || data[first_contact].type_contact == "P") { 
    229                                         details.append('<p><label class="attribute">' + utf8_decoder(data[first_contact].cn) + "</label>" + '<span class="value">' + data[first_contact].mail + "</span></p>"); 
     309                                        if(utf8_decoder(data[first_contact].cn) != 'undefined') 
     310                                                details.append('<p><label class="attribute">' + utf8_decoder(data[first_contact].cn) + '</label>' + '<span class="value">' + data[first_contact].mail + '</span></p>'); 
     311                                        else 
     312                                                details.append('<p><label class="attribute">' + utf8_decoder(data[first_contact].title) + '</label>' + '<span class="value">' + data[first_contact].short_name + '</span></p>'); 
    230313                                        if(data[first_contact].telephonenumber != null) 
    231314                                                details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data[first_contact].telephonenumber + "</span></p>"); 
    232315                                } 
    233                                 if(data[first_contact].mail != "No mail") { 
    234                                         if(data[first_contact].mail[0].length > 1) { 
     316                                if(data[first_contact].mail != get_lang("No mail")) { 
     317                                        if(data[first_contact].mail.length > 1) { 
    235318                                                for (var i=0; i<=extra_fields.length-1; i++) { 
    236319                                                        var campo = extra_fields[i].substr(extra_fields[i].indexOf("|")+1);     
     
    251334                $( "#amount-text" ).val( string_results ); 
    252335                $("button").button(); 
     336                //$("button.remove").button({icons:{primary:"ui-icon-close"}, text: false}); 
     337                //$("button.add").button({icons:{primary:"ui-icon-plus"}, text: false}); 
    253338                if(!is_ie) 
    254339                        document.getElementById("amount-text").focus();  
    255                 $("#selectable li:first button:first").focus(); 
     340                $("#selectable li:first").focus(); 
    256341                removeFocus(); 
    257                 }        
     342        }        
    258343                 
    259344                 
    260345        /* Método que configura os detalhes do resultado da busca */ 
    261346        function details_results(data) { 
    262                                 $(function() { 
    263                     $( "#selectable" ).selectable({ 
    264                                                 stop: function() { 
    265                                                                 var details = $("#detalhes_contato").empty();                                  
    266                                 $( ".ui-selected", this ).each(function() { 
    267                         switch(data['type_catalog']) { 
    268                                                         case 'G': 
    269                                         var extra_fields = (data['extra_ldap_fields']).split("#");    
    270                                                                 if(preferences.default_fields_quick_search != 0) {       
    271                                                                         details.append('<p><label class="attribute">' + utf8_decoder(data[this.value].cn[0]) + "</label>" + '<span class="value">' + data[this.value].mail[0] + "</span></p>"); 
    272                                                                         details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data[this.value].telephonenumber[0] + "</span></p>"); 
    273                                                                 } 
    274                                                                 for (var i=0; i<=extra_fields.length-1; i++) { 
    275                                             var campo = extra_fields[i].substr(extra_fields[i].indexOf("|")+1);     
    276                                             var valor = extra_fields[i].substr(0, (extra_fields[i].indexOf("|")));                                           
    277                                                                         if(data[this.value][valor.toLowerCase()] != undefined) { 
    278                                                                                 var tmp_campo = '<p><label class="attribute">' + campo + "</label>" ; 
    279                                                                                 for(j=0; j<data[this.value][valor.toLowerCase()].length; j++) { 
    280                                                                                         details.append(tmp_campo + '<span class="value">' + data[this.value][valor.toLowerCase()][j] + "</span></p>"); 
    281                                                                                         tmp_campo = ""; 
    282                                             } 
    283                                         } 
    284                                     } 
    285                                                                 break; 
    286                                                         case 'P': 
    287                                                                 details.append('<p><label class="attribute">' + utf8_decoder(data[this.value].cn) + "</label>" + '<span class="value">' + data[this.value].mail + "</span></p>"); 
    288                                 if(data[this.value].telephonenumber != null) 
    289                                     details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data[this.value].telephonenumber + "</span></p>"); 
    290                                                                 break; 
    291                                                         default: 
    292                                                 var extra_fields = (data['extra_ldap_fields']).split("#");    
    293                                 if(preferences.default_fields_quick_search != 0 || data[this.value].type_contact == "P") { 
    294                                                                         details.append('<p><label class="attribute">' + utf8_decoder(data[this.value].cn) + "</label>" + '<span class="value">' + data[this.value].mail + "</span></p>"); 
    295                                                                         if(data[this.value].telephonenumber != null) 
    296                                                                                 details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data[this.value].telephonenumber + "</span></p>"); 
    297                                                 } 
    298                                                                 if(data[this.value].mail[0].length > 1) { 
     347                $(function() { 
     348                        $( "#selectable" ).selectable({ 
     349                                stop: function() { 
     350                                        var details = $("#detalhes_contato").empty();                                  
     351                    $( ".ui-selected", this ).each(function() { 
     352                                                if(data.length > 0){ 
     353                                                        switch(data['type_catalog']) { 
     354                                                                case 'G': 
     355                                                                        var extra_fields = (data['extra_ldap_fields']).split("#");    
     356                                                                        if(preferences.default_fields_quick_search != 0) {       
     357                                                                                details.append('<p><label class="attribute">' + utf8_decoder(data[this.value].cn[0]) + "</label>" + '<span class="value">' + data[this.value].mail[0] + "</span></p>"); 
     358                                                                                details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data[this.value].telephonenumber[0] + "</span></p>"); 
     359                                                                        } 
    299360                                                                        for (var i=0; i<=extra_fields.length-1; i++) { 
    300                                                         var campo = extra_fields[i].substr(extra_fields[i].indexOf("|")+1);     
    301                                                         var valor = extra_fields[i].substr(0, (extra_fields[i].indexOf("|")));                                           
     361                                                                                var campo = extra_fields[i].substr(extra_fields[i].indexOf("|")+1);     
     362                                                                                var valor = extra_fields[i].substr(0, (extra_fields[i].indexOf("|")));                                           
    302363                                                                                if(data[this.value][valor.toLowerCase()] != undefined) { 
    303364                                                                                        var tmp_campo = '<p><label class="attribute">' + campo + "</label>" ; 
     
    305366                                                                                                details.append(tmp_campo + '<span class="value">' + data[this.value][valor.toLowerCase()][j] + "</span></p>"); 
    306367                                                                                                tmp_campo = ""; 
    307                                                         } 
    308                                                     } 
    309                                                 } 
    310                                         } 
    311                                                                 break; 
    312                                     } 
    313                                                                 }); 
    314                                                 } 
    315                     }); 
    316                 }); 
    317         } 
    318          
    319          
    320         /*  
    321          * Método que configura o slider e os resultados  
    322          */ 
     368                                                                                        } 
     369                                                                                } 
     370                                                                        } 
     371                                                                        break; 
     372                                                                case 'P': 
     373                                                                        if(utf8_decoder(data[this.value].cn) == 'undefined') 
     374                                                                                details.append('<p><label class="attribute">' + utf8_decoder(data[this.value].title) + "</label>" + '<span class="value">' + data[this.value].short_name + "</span></p>"); 
     375                                                                        else 
     376                                                                                details.append('<p><label class="attribute">' + utf8_decoder(data[this.value].cn) + "</label>" + '<span class="value">' + data[this.value].mail + "</span></p>"); 
     377                                                                        if(data[this.value].telephonenumber != null) 
     378                                                                                details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data[this.value].telephonenumber + "</span></p>"); 
     379                                                                        break; 
     380                                                                default: 
     381                                                                        var extra_fields = (data['extra_ldap_fields']).split("#");    
     382                                                                        if(preferences.default_fields_quick_search != 0 || data[this.value].type_contact == "P") { 
     383                                                                                if(utf8_decoder(data[this.value].cn) == 'undefined') 
     384                                                                                        details.append('<p><label class="attribute">' + utf8_decoder(data[this.value].title) + "</label>" + '<span class="value">' + data[this.value].short_name + "</span></p>"); 
     385                                                                                else 
     386                                                                                        details.append('<p><label class="attribute">' + utf8_decoder(data[this.value].cn) + "</label>" + '<span class="value">' + data[this.value].mail + "</span></p>"); 
     387                                                                                if(data[this.value].telephonenumber != null) 
     388                                                                                        details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data[this.value].telephonenumber + "</span></p>"); 
     389                                                                        } 
     390                                                                        if(data[this.value].mail[0] == 'undefined') 
     391                                                                                        break; 
     392                                                                        if(data[this.value].mail[0] != get_lang("No mail")) { 
     393                                                                                if(data[this.value].mail[0].length > 1) { 
     394                                                                                        for (var i=0; i<=extra_fields.length-1; i++) { 
     395                                                                                                var campo = extra_fields[i].substr(extra_fields[i].indexOf("|")+1);     
     396                                                                                                var valor = extra_fields[i].substr(0, (extra_fields[i].indexOf("|")));                                           
     397                                                                                                if(data[this.value][valor.toLowerCase()] != undefined) { 
     398                                                                                                        var tmp_campo = '<p><label class="attribute">' + campo + "</label>" ; 
     399                                                                                                        for(j=0; j<data[this.value][valor.toLowerCase()].length; j++) { 
     400                                                                                                                details.append(tmp_campo + '<span class="value">' + data[this.value][valor.toLowerCase()][j] + "</span></p>"); 
     401                                                                                                                tmp_campo = ""; 
     402                                                                                                        } 
     403                                                                                                } 
     404                                                                                        } 
     405                                                                                } 
     406                                                                        } 
     407                                                                        break; 
     408                                                        } 
     409                                                } 
     410                                        }); 
     411                                } 
     412            }); 
     413        }); 
     414    } 
     415      
     416          
     417    /*  
     418    * Método que configura o slider e os resultados  
     419    */ 
    323420    function configure_slider(data) {    
    324421        var paginas = (Math.ceil(data.length/6));  
    325             $("#title_usuarios").html( get_lang("Results") ); 
    326             $(function() { 
    327                 $( "#slider" ).slider({ 
    328                                         value:1, 
    329                                         min: 1, 
    330                                         max: paginas, 
    331                                         step: 1, 
     422        $("#title_usuarios").html( get_lang("Results") ); 
     423        $(function() { 
     424            $( "#slider" ).slider({ 
     425                                value:1, 
     426                                min: 1, 
     427                                max: paginas, 
     428                                step: 1, 
    332429                                slide: function( event, ui ) { 
    333430                                        create_list(data, false, ui.value);  
    334                                                                 var string_results = ui.value + " " + get_lang("of") + " " + paginas + " (" + data.length + " " + get_lang("Results") + ")";  
     431                                        var string_results = ui.value + " " + get_lang("of") + " " + paginas + " (" + data.length + " " + get_lang("Results") + ")";             
    335432                                        $( "#amount-text" ).val( string_results ); 
    336                                                 } 
    337                     }); 
     433                                } 
     434            }); 
    338435                        $("#selectable li:first button:first").focus(); 
    339                 }); 
    340         } 
     436                }); 
     437    } 
    341438         
    342439        var search_focus = false; 
    343  
     440                 
    344441        function setFocus() {search_focus = true;return;} 
    345                  
     442         
    346443        function removeFocus() {search_focus = false;return;} 
    347444                 
    348445    function checkEnter(e) { 
    349                         var kC = window.event ? event.keyCode : 
    350             e && e.keyCode ? e.keyCode : 
    351             e && e.which ? e.which : null; 
     446                var kC = window.event ? event.keyCode : 
     447        e && e.keyCode ? e.keyCode : 
     448        e && e.which ? e.which : null; 
    352449        if (kC)  
    353                                 return kC == 13; 
     450                        return kC == 13; 
    354451        else 
    355                                 return false; 
    356                         } 
     452                        return false; 
     453        } 
    357454         
    358          
    359         /*  
    360          * Faz a busca direto da tela modal   
    361          */ 
     455                 
     456    /*  
     457     * Faz a busca direto da tela modal   
     458     */ 
    362459    function buscaContato(param) { 
    363460                $("#busca, #detalhes_contato, #selectable").empty(); 
     
    365462            alert(get_lang("Please enter a parameter to search")); 
    366463            return; 
     464        }             
     465                if(param.length < preferences.search_characters_number) { 
     466            alert(get_lang("parameter must be at least") + " " +  preferences.search_characters_number + " " + get_lang("characters")); 
     467            return false; 
     468        } 
     469        var catalog = $("#combobox").val(); 
     470        var handler_emQuickSearch = function(data) { 
     471            data_ = data; 
     472                        if(data_.length > 0) {      
     473                                configure_slider(data_); 
     474                                create_list(data, true); 
     475                                details_results(data_); 
    367476            } 
    368                 if(param.length < preferences.search_characters_number) { 
    369                 alert(get_lang("parameter must be at least") + " " +  preferences.search_characters_number + " " + get_lang("characters")); 
    370                 return false; 
     477            else { 
     478                                $("#detalhes_contato, #selectable").empty(); 
     479                                var selectable = $("#selectable"); 
     480                                var Ul = document.createElement("ul"); 
     481                                Ul.onclick = function(){ 
     482                                }; 
     483                                var Op = document.createElement("li"); 
     484                                Op.innerHTML = '<span class="menu-control"></span><div id="no_results"><div class="name_contact"><strong class="name">Nenhum Resultado Encontrado</strong></div></div>'; 
     485                                selectable.append(Op); 
     486                                selectable.append(Ul); 
     487                                var string_results = "0 " + get_lang("of") + " 0 (0 "  + get_lang("Results") + ")";              
     488                                $( "#amount-text" ).val( string_results ); 
     489                                details_results(data); 
     490                configure_slider(data);  
    371491            } 
    372             var catalog = $("#combobox").val(); 
    373         var handler_emQuickSearch = function(data) { 
    374                 data_ = data; 
    375                         if(data_.length > 0) {         
    376                     configure_slider(data_);     
    377                 create_list(data_, true); 
    378                     details_results(data_); 
    379                 } 
    380             else { 
    381                     $("#detalhes_contato, #selectable").empty(); 
    382                     configure_slider(data);  
    383                 } 
    384             } 
    385             cExecute ("$this.ldap_functions.quicksearchcontact&search_for="+param+"&field=TO&ID=0&catalog="+catalog, handler_emQuickSearch); 
    386492        } 
    387                  
     493        cExecute ("$this.ldap_functions.quicksearchcontact&search_for="+param+"&field=TO&ID=0&catalog="+catalog, handler_emQuickSearch); 
     494    } 
     495                 
     496        function verifyEmails(emailAux, contato) {       
     497                var contact_id = contato.split("_");             
     498                if(contact_id[1] != 0) 
     499                { 
     500                        var ini = parseInt((contact_id[1]/6).toFixed(0)); 
     501                        if(ini != 0 && ini != 1){ 
     502                                ini = ini * 6; 
     503                                var fim = ini+1; 
     504                        } 
     505                        else{ 
     506                                ini = 1; 
     507                                var fim = ini; 
     508                        } 
     509                        fim = fim +5; 
     510                        var contact2 = ""; 
     511                        for(aux = ini; aux <= fim; aux++){ 
     512                                if(contact_id[1] != aux){ 
     513                                        if($("#"+contact_id[0]+"_"+aux).find('.email').text() == emailAux){ 
     514                                                contact2 = contact_id[0]+"_"+aux; 
     515                                                var button = document.getElementById("actions_"+aux); 
     516                                                var div = document.getElementById(contact2); 
     517                                                if($("#actions_"+aux).find('.ui-button-text').text() == '+'){ 
     518                                                        button.onclick = function(){ 
     519                                                                remove_contact_field(div.innerHTML, button, contact2); 
     520                                                        }; 
     521                                                        div.ondblclick = function(){ 
     522                                                                remove_contact_field(div.innerHTML, button, contact2); 
     523                                                        }; 
     524                                                        $("#actions_"+aux).find('.ui-button-text').text('x'); 
     525                                                } 
     526                                                else{ 
     527                                                        button.onclick = function(){ 
     528                                                                add_contact_field(div.innerHTML, button, contact2); 
     529                                                        }; 
     530                                                        div.ondblclick = function(){ 
     531                                                                add_contact_field(div.innerHTML, button, contact2); 
     532                                                        }; 
     533                                                        $("#actions_"+aux).find('.ui-button-text').text('+'); 
     534                                                } 
     535                                        } 
     536                                } 
     537                        } 
     538                } 
     539        } 
     540    /*  
     541    * Método que adiciona o contato selecionado no campo do email (To, CC, CCo)  
     542    */ 
     543    function add_contact_field(contact, button, divs) { 
     544         
     545                var nome = $(contact).clone().find('.name').text(); 
     546                var email = $(contact).clone().find('.email').text(); 
     547                 
     548                if(email == get_lang("No mail")){ 
     549                        alert(get_lang("It is not possible to add this contact as a recipient because it does not have email")); 
     550                        if(!is_ie) 
     551                                document.getElementById("amount-text").focus(); 
     552                        return; 
     553                } 
     554                 
     555                verifyEmails(email, divs); 
     556                 
     557                final_contact = "\""+nome +"\" <"+email+">, "; 
     558                 
     559                var emailList      = document.getElementById(field_ + "_" + id_).value;  
     560                 
     561        if (emailList[0] != '"' && emailList.indexOf(",") < 0) 
     562                        emailList = emailList.substr(end_); 
     563        if(emailList.lastIndexOf(",") > 0)  
     564                        emailList = emailList.substr(0, emailList.lastIndexOf(",") + 1); 
    388565         
    389         /*  
    390          * Método que adiciona o contato selecionado no campo do email (To, CC, CCo)  
    391          */ 
    392     function add_contact_field(contact) { 
    393                         var emailList      = document.getElementById(field_ + "_" + id_).value;  
    394                 var contact_parsed = contact.replace(/<[\/]*u>/gi, ''); 
    395                 contact_parsed     = contact_parsed.replace(/<u[^>]*>/gi, ''); 
    396                 contact_parsed     = contact_parsed.replace(/<\/?[^>]+>/gi, ' '); 
    397             contact_parsed     = contact_parsed.replace(/^\s+|\s+$/gi, "").replace(/\s{2,}/gi, "|"); 
    398             var tokens_contact = contact_parsed.split("|"); 
    399             if (tokens_contact[1].indexOf("(") > 0) 
    400                 tokens_contact[1] = tokens_contact[1].substr(0, (tokens_contact[1].indexOf("("))-2); 
    401                                  
    402                         var final_contact; 
    403                         if(tokens_contact[2] == undefined) 
    404                         final_contact = "\"" + tokens_contact[0] + "" + "\" <" + tokens_contact[1] + ">, "; 
    405                         else 
    406                         {                        
    407                                 if(tokens_contact[3] == undefined)                
    408                                 final_contact =  "\"" + tokens_contact[0] + "" +  tokens_contact[1] + "\" <" + tokens_contact[2] + ">, "; 
    409                                 else 
    410                                 final_contact =  "\"" + tokens_contact[0] + "" +  tokens_contact[1] + "" +  tokens_contact[2] + "\" <" + tokens_contact[3] + ">, "; 
    411             } 
    412         if (emailList[0] != '"' && emailList.indexOf(",") < 0) 
    413                 emailList = emailList.substr(end_); 
    414             if(emailList.lastIndexOf(",") > 0) 
    415                         emailList = emailList.substr(0, emailList.lastIndexOf(",") + 1); 
    416              
    417566                final_contact = final_contact.replace(/\/n/, ""); 
    418             new_emailList = emailList + final_contact;     
    419             document.getElementById(field_ + "_" + id_).value = new_emailList; 
    420                  
    421                 if (is_ie) {  
    422                         var range= document.getElementById(field_ + "_" + id_).createTextRange();  
    423                         range.collapse(false);  
    424                         range.select();  
    425                 } else {  
    426                         document.getElementById(field_ + "_" + id_).focus();    
    427                 }  
    428                  
    429                  
    430                  
    431                         $(this).unbind('keypress'); 
    432                         $(this).dialog("close"); 
    433         } 
    434                  
    435                 /*  
    436          * Método que remove o contato selecionado no campo do email (To, CC, CCo)  
    437          */ 
    438         function remove_contact_field(contact) { 
    439                         var contact_parsed = contact.replace(/<\/?[^>]+>/gi, ' '); 
    440             contact_parsed     = contact_parsed.replace(/^\s+|\s+$/gi, "").replace(/\s{2,}/gi, "|"); 
    441                          
    442                 var tokens_contact = contact_parsed.split("|");  
    443                         if (tokens_contact[2].indexOf("(") > 0) 
    444                 tokens_contact[2] = tokens_contact[2].substr(0, (tokens_contact[2].indexOf("("))-2); 
    445                         var final_contact; 
    446                         if(tokens_contact[3] == undefined)                
    447                                 final_contact =  "\"" + tokens_contact[0] + " " +  tokens_contact[1] + "\" <" + tokens_contact[2] + ">"; 
    448                         else 
    449                                 final_contact =  "\"" + tokens_contact[0] + " " +  tokens_contact[1] + " " +  tokens_contact[2] + "\" <" + tokens_contact[3] + ">"; 
    450                          
     567                new_emailList = emailList + final_contact;     
     568        document.getElementById(field_ + "_" + id_).value = new_emailList; 
     569                 
     570                button.onclick = function(){ 
     571                        remove_contact_field(document.getElementById(divs).innerHTML, button, divs); 
     572                }; 
     573                var div = document.getElementById(divs); 
     574                 
     575                div.ondblclick = function(){ 
     576                        remove_contact_field(div.innerHTML, button, divs); 
     577                }; 
     578                 
     579                button.innerHTML = '<span class="ui-button-text" style="">x</span>'; 
     580    } 
     581                 
     582                 
     583        /*  
     584    * Método que remove o contato selecionado no campo do email (To, CC, CCo)  
     585    */ 
     586        function remove_contact_field(contact, button, divs) { 
     587                var email = $(contact).clone().find('.email').text(); 
    451588                var exist = false; 
     589                 
    452590                var emailList = $("#" + field_ + "_" + id_).val(); 
    453                         var emails_adicionados = emailList.split(","); 
     591                var emails_adicionados = emailList.split(","); 
     592                 
     593                verifyEmails(email, divs); 
     594                 
    454595                for(i=0; i<emails_adicionados.length -1; i++) { 
    455                         emails_adicionados[i].replace(/^\s+|\s+$/g, '');  
    456                         if(emails_adicionados[i] == final_contact) { 
    457                                         emails_adicionados[i] = "%"; 
     596 
     597                        if(emails_adicionados[i].match(/<([^<]*)>[\s]*$/)[1] == email) { 
     598                                emails_adicionados[i] = "%"; 
    458599                                exist = true; 
    459                                 } 
    460                         } 
     600                        } 
     601                } 
     602                 
    461603                if (exist == false)  
    462                                 return false; 
    463                         var novos_contatos = emails_adicionados.join(",");   
    464             novos_contatos = novos_contatos.replace(/%,/g, ""); 
     604                        return false; 
     605                var novos_contatos = emails_adicionados.join(",");   
     606                novos_contatos = novos_contatos.replace(/%,/g, ""); 
    465607                $("#" + field_ + "_" + id_).val(novos_contatos); 
    466                 } 
     608                 
     609                button.onclick = function(){ 
     610                        add_contact_field(document.getElementById(divs).innerHTML, button, divs); 
     611                }; 
     612                 
     613                var div = document.getElementById(divs); 
     614                 
     615                div.ondblclick = function(){ 
     616                        add_contact_field(div.innerHTML, button, divs); 
     617                }; 
     618                 
     619                button.innerHTML = '<span class="ui-button-text" style="">+</span>'; 
     620        } 
    467621         
    468                
     622          
    469623        /* Decoder utf8 */       
    470624    function utf8_decoder ( str_data ) { 
    471             var tmp_arr = [], i = 0, ac = 0, c1 = 0, c2 = 0, c3 = 0; 
    472             str_data += ''; 
     625        var tmp_arr = [], i = 0, ac = 0, c1 = 0, c2 = 0, c3 = 0;      
     626        str_data += '';     
    473627        while ( i < str_data.length ) { 
    474                 c1 = str_data.charCodeAt(i); 
     628            c1 = str_data.charCodeAt(i); 
    475629            if (c1 < 128) { 
    476                     tmp_arr[ac++] = String.fromCharCode(c1); 
    477                     i++; 
     630                                tmp_arr[ac++] = String.fromCharCode(c1); 
     631                i++; 
    478632            } else if ((c1 > 191) && (c1 < 224)) { 
    479                             c2 = str_data.charCodeAt(i+1); 
    480                             tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63)); 
    481                             i += 2; 
    482                         } else { 
    483                                     c2 = str_data.charCodeAt(i+1); 
    484                                     c3 = str_data.charCodeAt(i+2); 
    485                                     tmp_arr[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); 
    486                                     i += 3; 
    487                                 } 
    488             } 
    489   
    490             return tmp_arr.join(''); 
     633                        c2 = str_data.charCodeAt(i+1); 
     634                        tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63)); 
     635                        i += 2; 
     636                      } else { 
     637                                c2 = str_data.charCodeAt(i+1); 
     638                                c3 = str_data.charCodeAt(i+2); 
     639                                tmp_arr[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); 
     640                                i += 3; 
     641                             } 
    491642        } 
     643        return tmp_arr.join(''); 
     644    } 
    492645         
    493                
     646     
    494647        /* Mostra tela de help */        
    495648    function show_help() { 
     
    499652                                                width: 540, 
    500653                                                modal: true, 
    501                                                 closeOnEscape: true 
     654                                                closeOnEscape: true, 
     655                                                close : function (event, ui) { 
     656                                                                        $( "#amount-text" ).focus(); 
     657                                                                        event.stopPropagation(); 
     658                                                                } 
    502659                        }); 
    503660                }); 
    504661        }        
    505                    
    506                
     662         
     663        $("#dialog-modal_help").live("dialogclose", function(){ 
     664                if(!is_ie) 
     665                        $( "#amount-text" ).focus(); 
     666        }); 
     667 
     668           
    507669        emQuickCatalogSearch.prototype.showWindow = function (div) { 
    508670                $(this).bind('keydown'); 
    509                                 $(function() { 
    510                     $( "#dialog:ui-dialog" ).dialog( "destroy" );                     
    511                     $( "#dialog-modal" ).dialog({ 
    512                                                 resizable: false, 
     671                $(function() { 
     672        $( "#dialog:ui-dialog" ).dialog( "destroy" );                     
     673        $( "#dialog-modal" ).dialog({ 
     674                        resizable: false, 
    513675//                      height: "auto", 
    514676                        width: 780, 
    515                                                 modal: true, 
     677                        modal: true, 
    516678                        position: 'bottom', 
    517                                                 closeOnEscape: true, 
    518                                                 close: function (event, ui) { 
    519                                                         event.stopPropagation(); 
     679                        closeOnEscape: true, 
     680                        close: function (event, ui) { 
     681                                event.stopPropagation(); 
    520682                                $(this).unbind('keydown'); 
    521683                                if (is_ie) {  
     
    528690                        }, 
    529691                        open: function () { 
    530                                 $("#selectable li:first button:first").focus();     
    531                                                 }, 
    532                                                 focus: function (event, ui) { 
     692                                removeFocus(); 
     693                                $("#selectable li:first").focus(); 
     694                                document.getElementById("amount-text").focus();  
     695                        }, 
     696                        focus: function (event, ui) { 
    533697                                //$(this).unbind('keydown'); 
    534                                                 }, 
    535                                                 beforeClose: function (event, ui) { 
     698                        }, 
     699                        beforeClose: function (event, ui) { 
    536700                                $(this).unbind('keydown'); 
    537                                                 }, 
     701                        }, 
    538702                        buttons:[ 
    539703                                                { 
    540704                                                        text: "Fechar", 
    541705                                                        click: function(){ 
    542                                                                 $("#detalhes_contato, #selectable, #busca").empty(); 
    543                                                                 $(this).dialog("close"); 
     706                                                                                                $("#detalhes_contato, #selectable, #busca").empty(); 
     707                                                                                                $(this).dialog("close"); 
    544708                                                                                                if (is_ie) {  
    545709                                                                                                        var range= document.getElementById(field_ + "_" + id_).createTextRange();  
     
    548712                                                                                                } else {  
    549713                                                                                                                document.getElementById(field_ + "_" + id_).focus();     
    550                                                         }  
     714                                                                                                }  
    551715                                                                                         }, 
    552716                                                        style: "margin-top: -2.1em"  
    553717                                                } 
    554718                                        ] 
    555                                         }); 
    556                 }); 
     719                        }); 
     720        }); 
    557721                $(".ui-dialog .ui-dialog-titlebar") 
    558722                .append('<a href="#" class="ui-dialog-titlebar-minimize ui-corner-all" role="button"><span class="ui-icon ui-icon-minusthick">minimize</span></a>') 
     
    561725                        $(".ui-icon-minusthick, .ui-icon-newwin").toggleClass('ui-icon-minusthick').toggleClass('ui-icon-newwin'); 
    562726                }); 
    563          
     727                 
    564728                $("#dialog-modal button, input.button").button();                                
    565729        } 
Note: See TracChangeset for help on using the changeset viewer.