source: trunk/expressoMail1_2/js/search.js @ 69

Revision 69, 16.7 KB checked in by niltonneto, 17 years ago (diff)

* empty log message *

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1/**************************************************************************\
2 Início
3\**************************************************************************/
4        function searchE(){
5                this.searchW   = new Array;
6                this.name_box_search = "";
7                this.all_boxes = new Array;
8                this.type = "";
9                this.fields = new Array("_ass","_de","_body","_para","_cc","_cco");
10        }
11        var search_tabs = 0; // Count the number of seach tabs
12       
13        //Monta os forms dentro da janela;
14        searchE.prototype.showForms = function(value){
15                // Principal
16                if(!Element("window_search")) {
17                        var form_search = document.createElement("DIV");
18                        form_search.style.visibility = 'hidden';
19                        form_search.style.top = '0px';
20                        form_search.style.left = '0px';
21                        form_search.id = "window_search";
22                        document.body.appendChild(form_search);                 
23                }
24               
25                // Pesquisa
26                if(!Element("div_form_search")){
27                        var div_form_search = document.createElement("DIV");
28                        div_form_search.id = "div_form_search";
29                        div_form_search.style.position = "absolute";
30                        div_form_search.style.left = "10px";
31                        div_form_search.style.top  = "10px";
32                        div_form_search.style.width = "635px";
33                        div_form_search.style.height = "200px";
34                        div_form_search.style.borderStyle = "outset";
35                        div_form_search.style.borderColor = "black";
36                        div_form_search.style.borderWidth = "1px";
37                        div_form_search.style.overflow = "hidden";
38                        div_form_search.innerHTML = "";
39                        var call_form_search = EsearchE.mount_form();
40                        div_form_search.appendChild(call_form_search);
41                        form_search.appendChild(div_form_search);       
42
43                }       
44               
45                if(!Element("div_button_search")){
46                        var div_button_search    = document.createElement("DIV");
47                                div_button_search.id = "div_button_search";
48                                div_button_search.style.position = "absolute";
49                                div_button_search.style.left = "10px";
50                                div_button_search.style.top = "223px";
51                                div_button_search.style.width = "600px";
52                                div_button_search.style.height = "25px";
53                                div_button_search.innerHTML = "<table border='0' width='50%' cellpadding='0' cellspacing='0' align='right'>"+
54                                                                                          "<tr>"+
55                                                                                          "<td><input type='button' value=" + get_lang('Search') + " onclick='EsearchE.func_search()'></td>"+
56                                                                                          "<td><input type='button' value=" + get_lang('Clean') + " onclick='EsearchE.func_clean()'></td>"+
57                                                                                          "<td><input type='button' value=" + get_lang('Close') + " onclick='EsearchE.func_close(\"hidden\")'></td>"+
58                                                                                          "</tr>"+
59                                                                                          "</table>";
60                                form_search.appendChild(div_button_search);
61                }
62               
63                if(!Element("table_layer")){
64                        var table_layer    = "";
65                }
66               
67                if(value == "")
68                        EsearchE.showWindow(Element("window_search"));
69       
70                // Cria as caixas postais;
71                EsearchE.mount_folders();
72
73                if(value){
74                        Element("check_all_msg").checked = true;
75                        EsearchE.all_mailboxes();
76                        EsearchE.func_search(value);
77                }
78
79        }
80       
81        //Form
82        searchE.prototype.mount_form = function(value){
83                var form_sch = document.createElement("FORM");
84                form_sch.id  = "form_sch";
85                form_sch.innerHTML = "<table id='table_princ' border='0' cellpading='0' cellspacing='0' align='center'>"+
86                                                     "<tr>"+
87                                                     "<td colspan='2'><b>" + get_lang('Inform your search in the text fields') + " :</b></td>"+
88                                                     "<td rowspan='7'>&nbsp"+
89                                                     "</td>"+
90                                                     "<td rowspan='8'>"+
91                                                     "<table border='0' cellpading='0' cellspacing='0'>"+
92                                                     "<tr>"+
93                                                     "<td colspan='3' valign='top'>&nbsp;<b>" + get_lang('Search the messages in these folders') + " :</b></td>"+
94                                                     "</tr>"+
95                                                     "<tr>"+
96                                                     "<td valign='top'><div id='folders' style='width:160px; height:150px'></div></td>"+
97                                                     "<td>"+
98                                                     "<input type='button' id='incluir' name='incluir' value='>>' onclick='EsearchE.add_mailboxes()'><br>"+
99                                                     "<input type='button' id='excluir' name='excluir' value='<<' onclick='EsearchE.del_mailboxes()'></td>"+
100                                                     "</td>"+
101                                                     "<td><select multiple id='sel_search_nm_box1' name='sel_search_nm_box1' size='10' style='width:160px'></select></td>"+
102                                                     "</tr>"+
103                                                     "<tr>"+
104                                                     "<td valign='top'><input type='checkBox' id='check_all_msg' name='check_all_msg' onclick='EsearchE.all_mailboxes()'><b>" + get_lang('In all the folders') + "</b></td>"+
105                                                     "</tr>"+
106                                                     "</table>"+
107                                                     "</td>"+
108                                                     "</tr>"+
109                                                     "<tr>"+
110                                                     "<td align='right'>" + get_lang('From') + " .: </td>"+
111                                                     "<td><input type='text' id='txt_de' size='20'></td>"+
112                                                     "</tr>"+
113                                                     "<tr>"+
114                                                     "<td align='right'>" + get_lang('To') + ".: </td>"+
115                                                     "<td><input type='text' id='txt_para' size='20'></td>"+
116                                                     "</tr>"+                                               
117                                                     "<tr>"+
118                                                     "<td align='right'>" + get_lang('Cc') + " .: </td>"+
119                                                     "<td><input type='text' id='txt_cc' size='20'></td>"+
120                                                     "</tr>"+
121                                                     "<tr>"+
122                                                     "<td align='right'>" + get_lang('Subject') + " .: </td>"+
123                                                     "<td><input type='text' id='txt_ass' size='20'></td>"+
124                                                     "</tr>"+
125                                                     "<tr>"+
126                                                         "<td align='right'>" + get_lang('Message body') + " .:</td>"+
127                                                     "<td><input type='text' id='txt_body' size='20'></td>"+
128                                                     "</tr>"+
129                                                     "</table>";
130                return form_sch;
131        }
132
133        // Pastas;
134        searchE.prototype.mount_folders = function(){
135                connector.loadScript("TreeS");
136
137                if( Element("div_folders_search") == null){
138                        var div_folders = document.createElement("DIV");
139                                div_folders.id = "div_folders_search";
140                                div_folders.style.width = "155px";
141                                div_folders.style.height = "152px";
142                                div_folders.style.borderStyle = "outset";
143                                div_folders.style.borderColor = "black";
144                                div_folders.style.borderWidth = "1px";
145                                div_folders.style.background  = "#F7F7F7";
146                                div_folders.style.overflow = "auto";
147                                div_folders.innerHTML = "";
148                                var dest_div = Element("folders");
149                                dest_div.appendChild(div_folders);
150                }               
151                ttree.make_tree(folders,"div_folders_search","_folders_tree_search","","","","");
152        }
153       
154        // Monta Resultado no Box
155        searchE.prototype.mount_result_box = function(data){
156                draw_box(new Array(), "_search");
157                draw_paging(0);
158//              alternate_border(0);
159
160        }
161        // Form resultado;
162        searchE.prototype.mount_result = function(data){
163                //This func returns the most recent date
164                function date_comp(a,b)
165                {
166                        var data1 = a.match(/\d{2}\/\d{2}\/\d{4}--\d+? \w*b--\d*$/g);
167                        data1 = data1[0].substr(0, data1[0].indexOf('--'))
168                        with ( data1 )
169                                data1 = Date.UTC(substr(-4), substr(-7, 2), substr(0, 2));
170                        var data2 = b.match(/\d{2}\/\d{2}\/\d{4}--\d+? \w*b--\d*$/g);
171                        data2 = data2[0].substr(0, data2[0].indexOf('--'))
172                        with ( data2 )
173                                data2 = Date.UTC(substr(-4), substr(-7, 2), substr(0, 2));
174                        return data2 - data1;
175                }
176               
177                var nw_array = new Array;
178                data = data.substr(2, data.length - 4);
179                var var_tmp  = data.split("####");
180                var cont = parseInt(0);
181                var_tmp.sort(date_comp);
182                for(var i=0; i < var_tmp.length; i++){
183                        if(var_tmp[i] != ""){
184                                nw_array[cont] = var_tmp[i];
185                                cont++;
186                        }
187                }
188                var table = document.createElement("TABLE");
189                        table.id    = "table_result";
190                        table.width = "100%";
191                if(is_ie){
192                        table.cellPadding  = '0';
193                        table.cellSpacing = '0';
194                        table.setAttribute("border","1");
195                }else{
196                        table.setAttribute( "cellspacing", "0");
197                        table.setAttribute( "cellpadding", "0");
198                        table.setAttribute( "border", "1");
199                }
200                var tbody = document.createElement("TBODY");
201                if(nw_array.length > 0){
202                        write_msg(nw_array.length + get_lang(' search results'));                       
203                }
204
205                for( var i=0; i < nw_array.length; i++){
206                        var tr = document.createElement("TR");
207                var color = "#F0F0F0";
208                        tr.style.background  =  color;
209
210                        if (nw_array[i].match(/.*--.*--\w*--\d{2}\/\d{2}\/\d{4}--\d+? \w*b--\d*$/g) == null) //subject with "--"
211                        {
212                                var aux1 = nw_array[i].match(/\d{2}\/\d{2}\/\d{4}--\d+? \w*b--\d*$/g);
213                                aux1 = aux1[0].split("--");
214                                nw_array[i] = nw_array[i].substr(0, nw_array[i].indexOf(aux1[0])-2);
215                                var aux = [];
216                                aux[0] = nw_array[i].substr(0, nw_array[i].indexOf('--'));
217                                nw_array[i] = nw_array[i].substr(nw_array[i].indexOf('--')+2);
218                                aux[1] = nw_array[i].substr(0, nw_array[i].indexOf('--'));
219                                aux[2] = nw_array[i].substr(nw_array[i].indexOf('--')+2);
220                                aux = aux.concat(aux1);
221                        }
222                        else
223                        {
224                                alert(nw_array[i]);
225                        var aux = nw_array[i].split("--");
226                        }
227                       
228                        for(var j=0 ; j < aux.length ; j++){
229                                        var mailbox = aux[0];
230                                        var uid_msg = aux[5];
231                                        var td = document.createElement("TD");
232                                        td.style.border = "1px solid #FFFFFF";
233                                        td.style.height = "20px";
234                                if( j <= 4){
235                                        if( j == 0){
236                                                td.width = "10%";                                       
237                                                var nm_box = aux[0].split(cyrus_delimiter);
238                                                var td1 = nm_box.pop();
239                                                if(td1 == "INBOX"){
240                                                        var td1  = "Caixa de Entrada";
241                                                }
242                                        }
243                                        if( j == 1){
244                                                var subject_encode = url_encode(aux[2]);
245                                                td.width = "25%";                                       
246                                                var td1  = '<a href=javascript:void(0) onclick=EsearchE.open_msg(\"' + url_encode(mailbox) + '\",\"' + uid_msg + '\",\"' + subject_encode + '\")>' + aux[1].substr(0,25) + '</a>';
247                                        }
248                                        if( j == 2){
249                                                var subject_encode = url_encode(aux[2]);
250                                                td.width = "45%";                                       
251                                                var td1  = '<a href=javascript:void(0) onclick=EsearchE.open_msg(\"' + url_encode(mailbox) + '\",\"' + uid_msg + '\",\"' + subject_encode + '\")>' + aux[2].substr(0,60) + '...</a>';
252
253                                        }
254                                        if( j == 3){
255                                                td.width = "10%";                                       
256                                                td.align = "center";
257                                                var td1  = aux[3];
258                                        }
259                                        if( j == 4){
260                                                td.width = "10%";
261                                                td.align = "center";
262                                                var td1  = aux[4];
263                                        }
264
265                                        td.innerHTML = td1;
266                                        tr.appendChild(td);
267                                }
268                        }
269                        aux.splice(0,(aux.length));
270                        tbody.appendChild(tr);
271                }
272                table.appendChild(tbody);
273               
274                search_tabs += 1;
275                var border_id = create_border(get_lang("Search Results"), "search_" + search_tabs);
276                var content = document.getElementById('content_id_' + "search_" + search_tabs);
277                if(is_ie)
278                Element("border_table").width = "99.5%";
279               
280                /* Put header */
281                var table_element = document.createElement("TABLE");
282                var tbody_element = document.createElement("TBODY");
283                table_element.setAttribute("id", "table_message_header_box");
284                table_element.className = "table_message_header_box";
285                tr_element = document.createElement("TR");
286                tr_element.className = "message_header";
287                td_element1 = document.createElement("TD");
288                td_element1.setAttribute("width", "10%");
289                td_element1.align = "left";
290                td_element1.innerHTML = get_lang("Folder");
291                td_element2 = document.createElement("TD");
292                td_element2.setAttribute("width", "35%");
293                td_element2.align = "left";
294                td_element2.innerHTML = get_lang("Who");
295                td_element3 = document.createElement("TD");
296                td_element3.setAttribute("width", "35%");
297                td_element3.align = "left";
298                td_element3.innerHTML = get_lang("Subject");
299                td_element4 = document.createElement("TD");
300                td_element4.setAttribute("width", "10%");
301                td_element4.align = "center";
302                td_element4.innerHTML = get_lang("Date");
303                td_element5 = document.createElement("TD");
304                td_element5.setAttribute("width", "10%");
305                td_element5.align = "right";
306                td_element5.innerHTML = get_lang("Size");
307       
308                tr_element.appendChild(td_element1);
309                tr_element.appendChild(td_element2);
310                tr_element.appendChild(td_element3);
311                tr_element.appendChild(td_element4);
312                tr_element.appendChild(td_element5);
313                tbody_element.appendChild(tr_element);
314                table_element.appendChild(tbody_element);
315                content.appendChild(table_element);
316                /*end of "put header"*/
317               
318                content.appendChild(table);
319        }
320
321        searchE.prototype.open_msg = function(mailbox, uid_msg, subject){
322                var handler_get_msg = function(data){
323                        if(Element("border_id_" + uid_msg + "_r")){alert(get_lang("This message is already opened!"));}
324                        else{draw_message(data,create_border(url_decode(subject), uid_msg + "_r"));}
325                }
326                var args   = "$this.imap_functions.get_info_msg";
327                var params = "msg_number=" + uid_msg + "&msg_folder=" + mailbox;
328                cExecute(args,handler_get_msg,params);
329
330        }
331
332        // Adiciona caixas postais na busca;
333        searchE.prototype.add_mailboxes = function(){
334                var sel = Element("sel_search_nm_box1");
335                var name_box     = this.name_box_search.split(cyrus_delimiter);
336                if(this.name_box_search == "")
337                        return false;
338                var name_box_def = "";
339                if(name_box.length != 1){
340                        name_box_def = name_box[(name_box.length-1)];
341                }else{
342                        name_box_def = "Caixa de Entrada";             
343                }
344                if( sel.length > 0){
345                        for(var i=0; i < sel.options.length; i++){
346                                if(sel.options[i].value == this.name_box_search){
347                                        alert(get_lang('This message is already selected!'));
348                                        return false;
349                                }
350                        }
351                }
352                var opt = new Option(name_box_def,this.name_box_search,false,true);
353                sel[sel.length] = opt;
354        }
355        // Remove as caixas postais na busca;
356        searchE.prototype.del_mailboxes = function(){
357                var sel = Element("sel_search_nm_box1");
358                if(sel.length > 0){
359                        for(var i=0; i < sel.options.length; i++){
360                                if(sel.options[i].selected == true){
361                                        sel.options[i] = null;
362                                        i--;
363                                }
364                        }
365                }
366       
367        }
368        // todas as caixas
369        searchE.prototype.all_mailboxes = function(){
370                var value = Element("check_all_msg").checked;
371                var cont = parseInt(0);
372                if(value){
373                        if(EsearchE.all_boxes.length > 0){
374                                EsearchE.all_boxes.splice(0,(EsearchE.all_boxes.length));                       
375                        }
376                        for(var i=0; i < folders.length; i++){
377                                EsearchE.all_boxes[cont] = folders[i].folder_id;
378                                cont++;
379                        }
380                }else{
381                        EsearchE.all_boxes.splice(0,(EsearchE.all_boxes.length));
382                }
383        }
384
385        // Search;
386        searchE.prototype.func_search = function(value){
387                var fields = "##";
388                        // Verifica se os campos estão preenchidos;
389                        if(trim(Element("txt_ass").value) != ""){
390                                fields += "SUBJECT " +  "<=>" +url_encode(Element("txt_ass").value) + " ";
391                        }
392                        if(trim(Element("txt_body").value) != ""){
393                                fields += "BODY " + "<=>" + url_encode(Element("txt_body").value) + " ";
394                        }
395                        if(trim(Element("txt_de").value) != ""){
396                                fields += "FROM " + "<=>" + url_encode(Element("txt_de").value) + " ";
397                        }
398                        if(trim(Element("txt_para").value) != ""){
399                                fields += "TO " + "<=>" + url_encode(Element("txt_para").value) + " ";
400                        }
401                        if(trim(Element("txt_cc").value) != ""){
402                                fields += "CC " + "<=>" + url_encode(Element("txt_cc").value) + " ";
403                        }
404                        if(value) {
405                                fields = "##ALL " +  "<=>" +url_encode(value) + " ";
406                        }
407
408                fields += "##";
409                if(fields == "####"){
410                        alert(get_lang("Define some parameters!"));
411                        return false;
412                }
413               
414                if(Element("check_all_msg").checked){
415                        var nm_box = new Array;
416                        for(var i=0; i < EsearchE.all_boxes.length; i++){
417                                nm_box[i] = EsearchE.all_boxes[i] + fields;
418                        }
419                }else{
420                        var nm_box = new Array;
421                        var sel_combo = Element("sel_search_nm_box1");
422                        if( sel_combo.options.length <= 0){
423                                alert("Defina quais as caixas para busca!");
424                                return false;
425                        }
426                       
427                        for(var i=0; i < sel_combo.options.length; i++){
428                                sel_combo.options[i].selected = true;
429                        }
430                        for(var i=0; i < sel_combo.options.length; i++){
431                                if(sel_combo.options[i].selected == true){
432                                        nm_box[nm_box.length] = sel_combo.options[i].value + fields;
433                                }
434                        }
435                }
436                var handler = function(data){
437                        if(data == "none"){alert(get_lang("None result was found."));}
438                        else if(data == "many results"){alert(get_lang("More than %1 results. Please, try to refine your search.",50));}
439                        else{EsearchE.mount_result(data);}
440                }
441                var args   = "$this.imap_functions.search_msg";
442                var params = "condition=" + nm_box;
443                cExecute(args,handler,params);
444        }
445        // clean;
446        searchE.prototype.func_clean = function(){
447                // Limpa os campos;
448                for(var i=0; i < this.fields.length; i++){
449                        if(Element("txt" + this.fields[i]) != null){Element("txt" + this.fields[i]).value = "";}
450                }                       
451            if(Element("check_all_msg") != null){Element("check_all_msg").checked = false;}
452
453            EsearchE.all_boxes.splice(0,(EsearchE.all_boxes.length));
454                EsearchE.del_mailboxes()
455                cl.parentNode.removeChild(cl);
456        }
457
458        // close
459        searchE.prototype.func_close = function(type){
460                var _this = this;
461                _this.name_box_search = "";
462                EsearchE.all_boxes.splice(0,(EsearchE.all_boxes.length));
463                _this.type = type;
464                _this.searchW['window_search'].close();
465        }
466        // Monta a janela em tela;
467        searchE.prototype.showWindow = function(div){
468
469                if(!this.searchW[div.id]) {
470                        div.style.width = "660px";
471                        div.style.height = "255px";
472                        div.style.visibility = "hidden";
473                        div.style.position = "absolute";
474                        div.style.zIndex = "10003";                     
475                        var title = ':: Pesquisar ::';
476                        var wHeight = div.offsetHeight + "px";
477                        var wWidth =  div.offsetWidth   + "px";
478
479                        win = new dJSWin({                     
480                                id: 'ccList'+div.id,
481                                content_id: div.id,
482                                width: wWidth,
483                                height: wHeight,
484                                title_color: '#3978d6',
485                                bg_color: '#eee',
486                                title: title,                                           
487                                title_text_color: 'white',
488                                button_y_img: '../phpgwapi/images/win_min.gif',
489                                button_x_img: '../phpgwapi/images/winclose.gif',
490                                border: true });
491                        this.searchW[div.id] = win;
492                        win.draw();
493                }else{
494                        var _this = this;
495                        win = this.searchW[div.id];
496                        if((_this.type == "close" && win.state == 0) || win.state == 2){EsearchE.func_clean();}
497                        win.draw();
498                }
499                win.open();     
500        }
501// Cria o objeto
502        var EsearchE;
503        EsearchE = new searchE();
Note: See TracBrowser for help on using the repository browser.