blob: 43b4bd7edc74c36e9e5bfdeae8f512b0ff1e51c6 [file] [log] [blame]
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +05301pscript.onload_Messages = function() {
2 var p = new PageHeader($i('message_header'),'Messages');
3 pscript.msg_struct = new Message();
4}
5
6pscript.onshow_Messages = function() {
7 pscript.msg_struct.show_inbox();
8}
9
10function Message(){
11 if(!this.mytabs) this.make_body();
12}
13
14Message.prototype.make_body = function() {
15 var me = this;
16 this.mytabs = new TabbedPage($i('inbox_tabs'));
17 $y(this.mytabs.body_area, {padding:'16px'})
18
19 me.make_inbox();
20 me.make_compose();
21 me.make_sent();
22
23 this.mytabs.tabs['Inbox'].show();
24}
25
26Message.prototype.make_inbox = function() {
27 var me = this;
28
29 //inbox tab
30 me.mytabs.add_tab('Inbox', function() {
31 me.inbox_lst.generate_unread_lst();
32 me.inbox_lst.msg_li.run();
33 me.cur_inbox_list = me.inbox_lst.msg_li; // for refresh
34 });
35
36 if(!this.inbox_lst) this.inbox_lst = new MessageList(me.mytabs.tabs['Inbox'].tab_body, 'inbox msg');
37 this.inbox_lst.msg_li.get_query = function() {
38 //me.checked_msg_lst = [];
39 me.all_msg = {};
40 this.query = repl("select distinct t1.name, t1.last_updated_on, t1.last_updated_by, t1.subject, t3.first_name, t3.file_list, t1.message_date, t1.owner, t1.message, t1.previous_updated_by from `tabMail` t1, `tabMail Participant Details` t2, `tabProfile` t3 where t1.is_main_thread='Yes' and t2.participant_name='%(user)s' and (t2.delete_status is NULL or t2.delete_status = 'No') and t1.name = t2.parent and ((t1.last_updated_by = t3.name and t1.last_updated_by!='%(user)s') or (t1.previous_updated_by = t3.name and t1.previous_updated_by!='%(user)s')) order by t1.modified desc", {'user':user});
41
42 this.query_max = repl("select distinct count(t1.name) from `tabMail` t1, `tabMail Participant Details` t2, `tabProfile` t3 where t1.is_main_thread='Yes' and t2.participant_name='%(user)s' and (t2.delete_status is NULL or t2.delete_status = 'No') and t1.name = t2.parent and ((t1.last_updated_by = t3.name and t1.last_updated_by!='%(user)s') or (t1.previous_updated_by = t3.name and t1.previous_updated_by!='%(user)s')) order by t1.modified desc", {'user':user});
43 }
44
45 this.inbox_lst.generate_unread_lst();
46 this.inbox_lst.msg_li.run();
47 this.inbox_lst.msg_li.onrun = function(){ me.inbox_lst.show_if_no_msg(me.inbox_lst.msg_li); }
48}
49
50Message.prototype.make_compose = function() {
51 var me = this;
52
53 me.mytabs.add_tab('Compose', function() {
54 if(!pscript.compose_msg_obj){
55 pscript.compose_msg_obj = new MessageThread(me.mytabs.tabs['Compose'].tab_body, me.mytabs.tabs['Inbox'], me.inbox_lst.lst_wrapper, 'My Inbox');
56 //pscript.compose_msg_obj.show_msg(0, me.mytabs.tabs['Compose'].tab_body, me.mytabs.tabs['Inbox'], me.inbox_lst.lst_wrapper, 'My Inbox', me.mytabs.tabs['Sent'], me.sent_lst.lst_wrapper);
57 }
58 pscript.compose_msg_obj.show_msg(0, me.mytabs.tabs['Compose'].tab_body, me.mytabs.tabs['Inbox'], me.inbox_lst.lst_wrapper, 'My Inbox', me.mytabs.tabs['Sent'], me.sent_lst.lst_wrapper);
59
60 this.cur_inbox_list = null;
61 });
62}
63
64Message.prototype.make_sent = function() {
65 var me = this;
66
67 // sent msg tab
68 me.mytabs.add_tab('Sent', function() {
69 me.sent_lst.msg_li.run();
70 me.cur_inbox_list = me.sent_lst.msg_li; // for refresh
71 });
72
73 if(!this.sent_lst) this.sent_lst = new MessageList(me.mytabs.tabs['Sent'].tab_body, 'sent msg');
74 this.sent_lst.msg_li.get_query = function() {
75 //me.checked_msg_lst = [];
76 me.all_msg = {};
77
78 this.query = repl("select distinct t1.name, t1.last_updated_on, t1.last_updated_by, t1.subject, t3.first_name, t3.file_list, t1.message_date, t1.owner, t1.message from `tabMail` t1, `tabProfile` t3, `tabMail Participant Details` t2 where t1.is_main_thread='Yes' and t1.last_updated_by='%(user)s' and t1.last_updated_by = t3.name and t2.participant_name = '%(user)s' and (t2.delete_status is NULL or t2.delete_status = 'No') and t2.parent = t1.name order by t1.modified desc", {'user':user});
79 this.query_max = repl("select distinct count(t1.name) from `tabMail` t1, `tabProfile` t3, `tabMail Participant Details` t2 where t1.is_main_thread='Yes' and t1.last_updated_by='%(user)s' and t1.last_updated_by = t3.name and t2.participant_name = '%(user)s' and (t2.delete_status is NULL or t2.delete_status = 'No') and t2.parent = t1.name order by t1.modified desc", {'user':user});
80 }
81 this.sent_lst.msg_li.run();
82 this.sent_lst.msg_li.onrun = function(){ me.sent_lst.show_if_no_msg(me.sent_lst.msg_li); }
83}
84
85Message.prototype.show_inbox = function(){
86 var me = this;
87 if(me.inbox_lst){
88 me.inbox_lst.msg_li.run();
89 }
90 me.mytabs.tabs['Inbox'].show();
91}
92
93MessageList = function(parent_tab, req_frm) {
94 this.checked_msg_lst = [];
95 this.unread_msg_lst = [];
96 this.all_msg = {};
97 this.parent_tab = parent_tab;
98 this.req_frm = req_frm;
99 this.make();
100}
101
102MessageList.prototype.make = function(){
103 var me = this;
104
105 this.lst_wrapper = $a(me.parent_tab, 'div');
106
107 //toolbar
108 this.toolbar_area = $a(this.lst_wrapper, 'div', '', {paddingTop:'12px'});
109 this.create_toolbar();
110
111 //no inbox msg div
112 this.no_lst_wrapper = $a(me.parent_tab, 'div', '', {padding:'8px',backgroundColor:'#FFE4AA'});
113 $dh(this.no_lst_wrapper);
114
115 //view inbox msg div
116 this.view_msg_wrapper = $a(me.parent_tab, 'div');
117
118 this.msg_li = new Listing("Recent Messages",1);
119 this.msg_li.colwidths = ['90%'];
120 this.msg_li.opts.no_border = 1;
121 this.msg_li.opts.show_empty_tab = 0;
122 this.msg_li.opts.no_border = 1;
123
124 this.msg_li.show_cell = function(cell,ri,ci,d) {
125 if(ri % 2)$y(cell,{backgroundColor:'#E1E3DE'});
126 if(ci ==0){
127 this.msg_lst = new MessagePreview(cell, me.req_frm, d[ri][0], d[ri][1], d[ri][2], d[ri][3], d[ri][4], d[ri][5], d[ri][6], d[ri][7], d[ri][8], d[ri][9], me.lst_wrapper, me.view_msg_wrapper, me.unread_msg_lst, me.all_msg);
128 }
129 }
130 this.msg_li.make(this.lst_wrapper);
131 $dh(this.msg_li.btn_area);
132}
133
134MessageList.prototype.create_toolbar = function(){
135 var me = this;
136
137 this.toolbar_tbl = make_table(me.toolbar_area, 1, 2, '100%', ['85%', '15%']);
138
139 this.select_all_lnk = $a($td(this.toolbar_tbl, 0, 0), 'span', 'link_type');
140 this.select_all_lnk.innerHTML = 'Select All';
141 $dh(this.select_all_lnk);
142
143 this.unselect_all_lnk = $a($td(this.toolbar_tbl, 0, 0), 'span', 'link_type');
144 this.unselect_all_lnk.innerHTML = 'Unselect All';
145 $dh(this.unselect_all_lnk);
146
147 this.select_all_lnk.onclick = function(){
148 $ds(me.unselect_all_lnk);
149 $dh(me.select_all_lnk);
150 for(m in me.all_msg){
151 me.all_msg[m].checked = true;
152 }
153 }
154
155 this.unselect_all_lnk.onclick = function(){
156 $ds(me.select_all_lnk);
157 $dh(me.unselect_all_lnk);
158 for(m in me.all_msg){
159 me.all_msg[m].checked = false;
160 }
161 }
162
163 this.delete_selected_btn = $a($td(this.toolbar_tbl, 0, 1), 'button', 'button', {align:'right'});
164 this.delete_selected_btn.innerHTML = 'Delete Selected';
165 $dh(this.delete_selected_btn);
166 this.delete_selected_btn.onclick = function(){
167 me.checked_msg_lst = [];
168 for(m in me.all_msg){
169 if(me.all_msg[m].checked == true)
170 me.checked_msg_lst.push(m);
171 }
172 me.delete_selected();
173 }
174}
175
176MessageList.prototype.show_if_no_msg = function(lst_data){
177 var me = this;
178 $dh(me.view_msg_wrapper);
179
180 if(!lst_data.has_data()){
181 $ds(me.no_lst_wrapper);
182 $dh(me.lst_wrapper);
183 if(me.req_frm == 'inbox msg'){
184 me.no_lst_wrapper.innerHTML = "You have no messages in your Inbox.";
185 }
186 else if(me.req_frm == 'sent msg'){
187 me.no_lst_wrapper.innerHTML = "You have no messages in your Sent messages list.";
188 }
189 } else {
190 $dh(me.no_lst_wrapper);
191 $ds(me.lst_wrapper);
192 $dh(me.no_lst_wrapper);
193 $ds(me.lst_wrapper);
194 $dh(this.unselect_all_lnk);
195 $ds(this.select_all_lnk);
196 $ds(this.delete_selected_btn);
197 }
198}
199
200MessageList.prototype.generate_unread_lst = function(){
201 var me = this;
202
203 var msg_callback = function(r, rt){
204 if(r.message.ur_lst){
205 me.unread_msg_lst = r.message.ur_lst;
206 }
207 }
208 $c('runserverobj', {doctype:'Message Control',method:'get_unread_msg_lst',arg:user}, msg_callback);
209}
210
211MessageList.prototype.delete_selected = function(){
212 var me = this;
213
214 if(me.checked_msg_lst.length >= 1) me.msg_li.msg_lst.delete_msg(me.checked_msg_lst);
215 else msgprint("error:Please select the message to delete");
216}
217
218function MessagePreview(parent, req_frm, msg_id, last_updated_on, last_updated_by, subject, first_name, profile_pic, msg_date, msg_owner, message, previous_updated_by, lst_wrapper, view_msg_wrapper, unread_msg_lst, all_msg_dict) {
219 this.create_structure(parent);
220
221 if(req_frm) this.req_frm = req_frm;
222 this.msg_id = msg_id;
223 this.subject = subject;
224 this.message = message;
225 this.msg_date = msg_date;
226 this.msg_owner = msg_owner;
227 this.first_name = first_name;
228 this.lst_wrapper = lst_wrapper;
229 this.view_msg_wrapper = view_msg_wrapper;
230 if(profile_pic) this.profile_pic = profile_pic;
231 if(last_updated_on) this.last_updated_on = last_updated_on;
232 if(last_updated_by) this.last_updated_by = last_updated_by;
233 if(previous_updated_by) this.previous_updated_by = previous_updated_by;
234 this.unread_msg_lst = unread_msg_lst;
235 this.all_msg = all_msg_dict;
236
237 this.show_msg_sender();
238 this.show_msg_subject();
239 this.show_delete_lnk();
240}
241
242MessagePreview.prototype.create_structure = function(parent){
243 this.wrapper = $a(parent,'div');
244 this.t = make_table(this.wrapper, 1, 4, '100%', ['5%','10%','80%','5%']);
245}
246
247MessagePreview.prototype.show_msg_sender = function(){
248 var me = this;
249
250 // checkbox
251 var chk_box = $a($td(this.t, 0, 0),'div');
252 if(isIE) {
253 chk_box.innerHTML = '<input type="checkbox" style="border: 0px">'; // IE fix
254 this.inp = chk_box.childNodes[0];
255 } else {
256 this.inp = $a(chk_box, 'input');
257 this.inp.type = 'checkbox';
258 }
259
260 this.inp.onclick = function() {
261 for(m in me.all_msg){
262 if(m == me.msg_id)
263 me.all_msg[m].checked = me.inp.checked;
264 }
265 }
266
267 me.all_msg[me.msg_id] = this.inp;
268
269 //sender or receiver
270 // photo
271 if(this.profile_pic) {
272 var img = $a($td(this.t, 0, 1),'img');
273 var img_src = this.profile_pic.split(NEWLINE)[0].split(',')[0]
274 img.src = repl('cgi-bin/getfile.cgi?name=%(fn)s&thumbnail=32',{fn:img_src})
275 }
276 //name
277 var div = $a($td(this.t, 0, 1),'div');
278 div.innerHTML = this.first_name;
279}
280
281MessagePreview.prototype.show_msg_subject = function() {
282 var me = this;
283 // message
284 var div1 = $a($td(this.t, 0, 2),'div', '', {paddingBottom:'4px'});
285 var sp = $a(div1,'span','link_type', {fontSize:'12px'});
286 sp.innerHTML = 'Sub : ' +me.subject;
287
288 var div = $a($td(this.t, 0, 2),'div', 'comment',{paddingBottom:'8px'});
289 div.innerHTML = 'created by: ' + me.msg_owner +' | created on: ' + dateutil.str_to_user(me.msg_date)+ ' | last updated on: ' + dateutil.str_to_user(me.last_updated_on);
290
291 if (me.req_frm == 'inbox msg' && inList(me.unread_msg_lst, me.msg_id)) {
292 $y(sp,{fontWeight:'bold',color:'Black'});
293 $y(div,{fontWeight:'bold',color:'Black'});
294 }
295
296 sp.style.cursor = 'pointer';
297 sp.msg_id = me.msg_id; sp.req_frm = me.req_frm;
298
299 sp.onclick = function() {
300 $dh(me.lst_wrapper);
301 if(this.req_frm == 'inbox msg'){
302 if(!pscript.inbox_msg_obj){
303 pscript.inbox_msg_obj = new MessageThread(me.view_msg_wrapper, pscript.msg_struct.mytabs.tabs['Inbox'], me.lst_wrapper, 'My Inbox');
304 }
305 pscript.inbox_msg_obj.show_msg(this.msg_id, me.view_msg_wrapper, pscript.msg_struct.mytabs.tabs['Inbox'], me.lst_wrapper, 'My Inbox', pscript.msg_struct.mytabs.tabs['Sent'], me.lst_wrapper);
306
307 //mark for already read
308 if (this.req_frm == 'inbox msg' && inList(me.unread_msg_lst,this.msg_id)) {
309 me.mark_as_read(this.msg_id);
310 }
311 }
312 else if(this.req_frm == 'sent msg'){
313 if(!pscript.sent_msg_obj){
314 pscript.sent_msg_obj = new MessageThread(me.view_msg_wrapper, pscript.msg_struct.mytabs.tabs['Sent'], me.lst_wrapper, 'My Inbox');
315 }
316 pscript.sent_msg_obj.show_msg(this.msg_id, me.view_msg_wrapper, pscript.msg_struct.mytabs.tabs['Sent'], me.lst_wrapper, 'My Inbox', pscript.msg_struct.mytabs.tabs['Sent'], me.lst_wrapper);
317 }
318 }
319}
320
321MessagePreview.prototype.mark_as_read = function(msg_id){
322 this.msg_id = msg_id;
323 var me = this;
324
325 args = {'user' : user, 'msg':this.msg_id,'read':'Yes'}
326 $c_obj('Message Control','read_unread_message',docstring(args),function(r,rt){
327 me.remove_element(me.unread_msg_lst, me.msg_id);
328 });
329}
330
331MessagePreview.prototype.delete_msg = function(msg_nm_lst){
332 this.msg_nm_lst = msg_nm_lst;
333 var me = this;
334 var delete_msg_dialog;
335
336 set_delete_msg_dialog = function() {
337 delete_msg_dialog = new Dialog(400, 200, 'Delete Message');
338 delete_msg_dialog.make_body([
339 ['HTML', 'Message', '<div class = "comment">Are you sure, you want to delete message(s) ?</div>'],
340 ['HTML', 'Response', '<div class = "comment" id="delete_msg_dialog_response"></div>'],
341 ['HTML', 'Delete Msg', '<div></div>']
342 ]);
343
344 var delete_msg_btn1 = $a($i(delete_msg_dialog.widgets['Delete Msg']), 'button', 'button');
345 delete_msg_btn1.innerHTML = 'Yes';
346 delete_msg_btn1.onclick = function(){ delete_msg_dialog.add(); }
347
348 var delete_msg_btn2 = $a($i(delete_msg_dialog.widgets['Delete Msg']), 'button', 'button');
349 delete_msg_btn2.innerHTML = 'No';
350 $y(delete_msg_btn2,{marginLeft:'4px'});
351 delete_msg_btn2.onclick = function(){ delete_msg_dialog.hide();}
352
353 delete_msg_dialog.onshow = function() {
354 $i('delete_msg_dialog_response').innerHTML = '';
355 }
356
357 delete_msg_dialog.add = function() {
358 // sending...
359 $i('delete_msg_dialog_response').innerHTML = 'Processing...';
360 var m_arg = user+ '~~' + this.msg_nm_lst;
361
362 var call_back = function(r,rt) {
363 if(r.message == 'true'){
364 $i('delete_msg_dialog_response').innerHTML = 'Message Deleted';
365 delete_msg_dialog.hide();
366
367 for(m=0; m<me.msg_nm_lst.length; m++){
368 if(inList(me.unread_msg_lst, me.msg_nm_lst[m]))
369 me.remove_element(me.unread_msg_lst, me.msg_nm_lst[m]);
370 }
371 pscript.msg_struct.inbox_lst.msg_li.run();
372 pscript.msg_struct.sent_lst.msg_li.run();
373 }
374 }
375 $c('runserverobj', {doctype:'Message Control',method:'delete_message',arg:m_arg}, call_back);
376 }
377 }
378
379 if(!delete_msg_dialog){
380 set_delete_msg_dialog();
381 }
382 delete_msg_dialog.msg_nm_lst = this.msg_nm_lst;
383 delete_msg_dialog.show();
384}
385
386MessagePreview.prototype.remove_element = function(arrayName, arrayElement){
387 for(var i=0; i<arrayName.length;i++ )
388 {
389 if(arrayName[i]==arrayElement)
390 arrayName.splice(i,1);
391 }
392}
393
394MessagePreview.prototype.show_delete_lnk = function() {
395 var me = this;
396 var div = $a($td(this.t, 0, 3), 'span', 'link_type');
397 div.innerHTML = 'Delete';
398 div.msg_id = me.msg_id;
399
400 div.onclick = function() {
401 me.delete_msg(me.msg_id);
402 }
403}
404
405MessagePart = function(parent){
406 var me = this;
407
408 this.parent = parent;
409 this.inputs = {};
410
411 me.make_header();
412 me.make_reply();
413 me.make_post();
414}
415
416MessagePart.prototype.make = function(label, ele, comment){
417 var me = this;
418
419 var div = $a(this.parent,'div','',{marginBottom:'12px'});
420 var t = make_table(div,2,1,'70%',['100%']);
421
422 if( ele == 'button'){
423 var element = $a($td(t,0,0), 'button');
424 element.innerHTML = label;
425 }
426 else {
427 var element = $a($td(t,1,0),ele);
428
429 // large fonts for inputs
430 if(in_list(['input','textarea'],ele.toLowerCase())) {
431 $y(element,{fontSize:'14px', width:'100%'})
432 }
433 $td(t,0,0).innerHTML = label;
434 }
435
436 if(comment) {
437 var div2 = $a(div,'div','',{fontSize:'11px', color:'#888', marginTop:'2px'});
438 div2.innerHTML = comment;
439 }
440
441 element.wrapper = div;
442 if(label) me.inputs[label] = element;
443 return element;
444}
445
446MessagePart.prototype.make_header = function(){
447 var me = this;
448
449 this.back_link_div = $a(me.make('','div'),'span', 'link_type', {paddingTop:'12px'});
450 this.back_link_div.innerHTML = 'Back to List';
451
452 me.make('To','textarea','Enter Email Ids separated by commas (,)');
453 $y(me.inputs['To'],{overflow :'auto', height : '50px'});
454 me.make('Subject','input');
455}
456
457MessagePart.prototype.make_reply = function(){
458 var me = this;
459 this.inputs.Thread = $a(this.parent, 'div', '', {margin:'16px 0px'})
460}
461
462MessagePart.prototype.make_post = function(){
463 var me = this;
464
465 me.make('Message','textarea');
466 $y(me.inputs['Message'],{height:'240px'});
467
468 // send + cancel
469 var d = $a(this.parent, 'div');
470 me.inputs.Send = $btn(d, 'Send');
471 me.inputs.Reply = $a(d, 'Reply')
472}
473
474MessagePart.prototype.add_header_values = function(to_list, subject){
475 var me = this;
476
477 //thread_participants
478 me.inputs['To'].value = to_list.join(',');
479 me.inputs['To'].disabled = true;
480
481 // subject
482 me.inputs['Subject'].value = subject;
483 me.inputs['Subject'].disabled = true;
484}
485
486MessagePart.prototype.add_reply_thread = function(thread){
487 var me = this;
488 // prev messages
489 var t = me.inputs['Thread'];
490 t.innerHTML = ''; // clear previous threads
491
492 var w = $a(t,'div','',{width:'70%'});
493 var tab = make_table(w,thread.length,2,'100%',['20%','80%'], {padding:'8px 0px', borderBottom:'1px solid #AAA'});
494
495 for(i=0;i<thread.length;i++) {
496 // ---- photo ----
497 if(thread[i][6]) {
498 var img = $a($td(tab,i,0),'img');
499 var img_src = thread[i][6].split(NEWLINE)[0].split(',')[0];
500 img.src = repl('cgi-bin/getfile.cgi?name=%(fn)s&thumbnail=32',{fn:img_src});
501 }
502
503 // ---- sender name ----
504 var d = $a($td(tab,i,0),'div','',{fontSize:'11px'});
505 d.innerHTML = thread[i][5];
506
507 //----- date ----
508 var d = $a($td(tab,i,1),'div', 'comment', {marginLeft:'8px', color:'#888', fontSize:'11px'});
509 d.innerHTML = dateutil.str_to_user(thread[i][3]);
510
511 //------ message ------
512 var d = $a($td(tab,i,1),'div', 'comment', {fontSize:'14px', marginLeft:'8px'});
513 d.innerHTML = replace_newlines(thread[i][1]);
514 $y($td(tab,i,1), {paddingBottom: '8px'});
515 }
516}
517
518//++++++++++++++++++++++++ Message ++++++++++++++++++++++++
519
520MessageThread = function(parent, view_list_tab, view_list_div, req_frm) {
521 var me = this;
522 this.wrapper = $a(parent,'div');
523 if(!this.msg_parts) this.make(view_list_tab, view_list_div, req_frm);
524}
525
526
527MessageThread.prototype.add_autosuggest = function() {
528 var me = this;
529
530 // ---- add auto suggest ----
531 var opts = { script: '', json: true, maxresults: 10, timeout: 10000, delay:250, maxentries:500, cache:false};
Rushabh Mehtacbaae202011-09-08 19:07:14 +0530532
533 wn.require('lib/js/legacy/widgets/autosuggest.js');
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530534
535 var as = new AutoSuggest(me.msg_parts.inputs['To'], opts);
536 as.custom_select = function(txt, sel) {
537 // ---- add to the last comma ----
538
539 var r = '';
540 var tl = txt.split(',');
541 for(var i=0;i<tl.length-1;i++) r=r+tl[i]+',';
542 r = r+(r?' ':'')+sel+',';
543 if(r[r.length-1]==NEWLINE) { r=substr(0,r.length-1);}
544 return r;
545 }
546
547 // ---- override server call ----
548 as.doAjaxRequest = function(txt) {
549 var pointer = as; var q = '';
550
551 // ---- get last few letters typed ----
552 var last_txt = txt.split(',');
553 last_txt = last_txt[last_txt.length-1];
554
555 // ---- show options ----
556 var call_back = function(r,rt) {
557 as.aSug = [];
558 var jsondata = r.message;
559 for (var i=0;i<jsondata.results.length;i++) {
560 as.aSug.push({'id':jsondata.results[i].id, 'value':jsondata.results[i].value, 'info':jsondata.results[i].info});
561 }
562 as.idAs = "as_for_to_message";
563
564 //old create list
565 as.createList(as.aSug);
566 }
567
568 $c_obj('Message Control', 'get_to_list', (last_txt ? last_txt : '%'), call_back);
569 return;
570 }
571}
572
573MessageThread.prototype.make = function(view_list_tab, view_list_div, req_frm) {
574 var me = this;
575
576 me.view_list_tab = view_list_tab;
577 me.view_list_div = view_list_div;
578 me.req_frm = req_frm;
579
580 this.msg_parts = new MessagePart(me.wrapper);
581
582 this.msg_parts.back_link_div.onclick = function() {
583 me.hide();
584
585 if(me.in_compose) {
586 if(me.req_frm == 'My Inbox') { me.view_list_tab.show(); $ds(me.view_list_div); }
587 }
588 }
589
590 // autosuggest
591 me.add_autosuggest();
592}
593
594MessageThread.prototype.set_inbox_editor = function(editor) {
595 pscript.inbox_text_editor_set = 1;
596}
597
598MessageThread.prototype.view_existing_msg = function(args){
599 var me = this;
600
601 $c_obj('Message Control', 'get_thread_details', docstring(args),
602 function(r, rt){
603 var tl = r.message.tl;
604 var to_list = r.message.to_list;
605
606 //to and subject
607 me.msg_parts.add_header_values(to_list, tl[0][0]);
608
609 //reply thread
610 me.msg_parts.add_reply_thread(tl);
611
612 //post area
613 if(me.inbox_editor && pscript.inbox_text_editor_set == 1){
614 me.inbox_editor.editor.setContent('');
615 }
616 else{
617 me.msg_parts.inputs['Message'].value = '';
618 }
619 me.show_as(true);
620 }
621 );
622}
623
624MessageThread.prototype.view_blank_form = function(){
625 var me = this;
626
627 $ds(me.msg_parts.inputs['To'].wrapper);
628
629 me.msg_parts.inputs['To'].disabled = false;
630 me.msg_parts.inputs['To'].value = '';
631
632 me.msg_parts.inputs['Subject'].disabled = false;
633 me.msg_parts.inputs['Subject'].value = '';
634
635 me.msg_parts.inputs['Thread'].innerHTML = '';
636
637 if(me.inbox_editor && pscript.inbox_text_editor_set == 1){
638 me.inbox_editor.editor.setContent('');
639 }
640 else{
641 me.msg_parts.inputs['Message'].value = '';
642 }
643 me.show_as(false);
644}
645
646// msg_id = mesage id,
647// parent = div/tab from where msg will be shown,
648// view_list_tab = name of tab in which list will be viewed,
649// view_list_div = name of div in which list will be viewed,
650// req_frm = my inbox / group / event,
651// show_on_send_tab = tab to be viewed on sending/replying to msg,
652// show_on_send_div = div to be viewed on sending/replying to msg,
653// receiver_lst = list of msg receiver
654
655MessageThread.prototype.show_msg = function(msg_id, parent, view_list_tab, view_list_div, req_frm, show_on_send_tab, show_on_send_div, receiver_lst) {
656 var me = this;
657
658 // set tinymce editor
659 if(!me.inbox_editor) {
660 pscript.inbox_text_editor_set = 0;
661 var theme_adv_btn1 ="fontselect,fontsizeselect,formatselect,indicime,indicimehelp,emotions";
662 var theme_adv_btn2 ="bold,italic,underline,|,undo,redo,|,code,forecolor,backcolor,link,unlink,hr,|,sub,sup,|,charmap";
663 var theme_adv_btn3 = "";
664
665 me.inbox_editor = new TextAreaEditor(me.msg_parts.inputs["Message"], null, me.set_inbox_editor, theme_adv_btn1, theme_adv_btn2, theme_adv_btn3, '300px');
666 }
667
668 me.req_frm = req_frm;
669 me.receiver_lst = receiver_lst;
670 me.parent = parent;
671 me.view_list_tab = view_list_tab;
672 me.view_list_div = view_list_div;
673 me.show_on_send_tab = show_on_send_tab;
674 me.show_on_send_div = show_on_send_div;
675 me.msg_parts.inputs['Send'].btn_click = 0;
676 me.msg_parts.inputs['Reply'].btn_click = 0;
677
678 if(msg_id) {
679 this.cur_message_id = msg_id;
680 var args = {'user_name':user, 'cur_msg_id': this.cur_message_id};
681 me.view_existing_msg(args);
682 }
683 else {
684 this.cur_message_id = null;
685 me.view_blank_form();
686 }
687 $ds(me.parent);
688
689 // reply or send btn
690 me.msg_parts.inputs['Send'].onclick = function(){
691 if(!this.btn_click){
692 this.btn_click = 1;
693 me.send(me.req_frm, me.receiver_lst, me.show_on_send_tab, me.show_on_send_div);
694 }
695 }
696 me.msg_parts.inputs['Reply'].onclick = me.msg_parts.inputs['Send'].onclick;
697}
698
699MessageThread.prototype.hide = function() {
700 var me = this;
701
702 $dh(me.wrapper);
703 $ds(me.view_list_div);
704 me.display = 0;
705}
706
707MessageThread.prototype.show_as = function(reply) {
708 var me = this;
709
710 if(!reply) {
711 $dh(me.msg_parts.inputs['Thread'].wrapper);
712 $dh(me.msg_parts.inputs['Reply']);
713 $ds(me.msg_parts.inputs['Send']);
714 me.in_compose = 1;
715 }
716 else {
717 $ds(me.msg_parts.inputs['Thread'].wrapper);
718 $ds(me.msg_parts.inputs['Reply']);
719 $dh(me.msg_parts.inputs['Send']);
720 $dh(me.view_list_div);
721 me.in_compose = 1;
722 }
723 $ds(me.wrapper);
724 me.display = 1;
725}
726
727MessageThread.prototype.send_msg = function(arg){
728 var me = this;
729 var args = arg;
730
731 var send_call_back = function(r, rt){
732 //var me = this;
733 if(r.message == 'true'){
734 me.msg_parts.inputs['To'].value = '';
735 me.msg_parts.inputs['Subject'].value = '';
736 me.msg_parts.inputs['Thread'].innerHTML = '';
737
738 if(me.inbox_editor && pscript.inbox_text_editor_set == 1){
739 me.inbox_editor.editor.setContent('');
740 }
741 else{
742 me.msg_parts.inputs['Message'].value = '';
743 }
744
745 if(me.req_frm == 'My Inbox'){
746 pscript.msg_struct.sent_lst.msg_li.run();
747 me.show_on_send_tab.show();
748 $ds(me.show_on_send_div);
749 $dh(me.parent);
750 }
751 }
752 }
753
754 if(me.cur_message_id==null){
755 $c_obj('Message Control','send_message',docstring(args), send_call_back);
756 }
757 else{
758 $c_obj('Message Control','send_reply',docstring(args), send_call_back);
759 }
760}
761
762MessageThread.prototype.send = function(req_frm, receiver_lst, show_on_send_tab, show_on_send_div) {
763 var me = this;
764 me.req_frm = req_frm;
765 me.show_on_send_tab = show_on_send_tab;
766 me.show_on_send_div = show_on_send_div;
767 var args = {'user_name':user};
768
769 if(me.inbox_editor && pscript.inbox_text_editor_set == 1){
770 args.message = me.inbox_editor.editor.getContent();
771 }
772 else{
773 args.message = me.msg_parts.inputs['Message'].value;
774 }
775
776 if(me.cur_message_id==null){
777 args.subject = me.msg_parts.inputs['Subject'].value;
778 args.to_list = me.msg_parts.inputs['To'].value;
779 if(!args.to_list) {msgprint('error:Must enter "To:"'); }
780 else if(!args.subject) {msgprint('error:Must enter "Subject"'); }
781 else me.send_msg(args);
782 }
783 else{
784 var subj = me.msg_parts.inputs['Subject'].value;
785 if(!subj.substr(0,3).toLowerCase()=='re:')
786 subj = 'Re: ' + subj;
787 args.subject = subj;
788 args.message_id = me.cur_message_id;
789
790 me.send_msg(args);
791 }
792}
793
794MessageThread.prototype.delete_msg = function(req_frm, parent, view_list_tab, view_list_div) {
795 var me = this;
796
797 var msg_lst = [];
798 var delete_message_dialog;
799 me.parent = parent;
800
801 if(me.cur_message_id)
802 msg_lst.push(me.cur_message_id);
803
804 if(msg_lst.length >= 1){
805 function set_delete_message_dialog() {
806 delete_message_dialog = new Dialog(400, 400, 'Delete Message');
807 delete_message_dialog.make_body([
808 ['HTML', 'Message', '<div class = "comment">Are you sure, you want to delete this message ?</div>'],
809 ['HTML', 'Response', '<div class = "comment" id="delete_message_dialog_response"></div>'],
810 ['HTML', 'Delete Message', '<div id="delete_message_btn" style ="height:25px;"></div>']
811 ]);
812
813 var delete_message_btn1 = $a($i('delete_message_btn'), 'button', 'button');
814 delete_message_btn1.innerHTML = 'Yes';
815 delete_message_btn1.onclick = function(){ delete_message_dialog.add();}
816
817 var delete_message_btn2 = $a($i('delete_message_btn'), 'button', 'button');
818 delete_message_btn2.innerHTML = 'No';
819 $y(delete_message_btn2,{marginLeft:'4px'});
820
821 delete_message_btn2.onclick = function(){ delete_message_dialog.hide();}
822
823 delete_message_dialog.onshow = function() {
824 $i('delete_message_dialog_response').innerHTML = '';
825 }
826
827 delete_message_dialog.add = function() {
828 if(this.req_frm == 'My Inbox'){
829 var args = user + '~~' + this.msg_lst;
830 $c_obj('Message Control', 'delete_message', args, function(r, rt){
831 if(r.message == 'true'){
832 me.hide();
833 me.view_list_tab.show();
834 $ds(me.view_list_div);
835 delete_message_dialog.hide();
836 }
837 });
838 }
839 }
840 }
841
842 if(!delete_message_dialog)
843 set_delete_message_dialog();
844 delete_message_dialog.req_frm = req_frm;
845 delete_message_dialog.msg_lst = msg_lst;
846 delete_message_dialog.view_list_tab = view_list_tab;
847 delete_message_dialog.view_list_div = view_list_div;
848 delete_message_dialog.show();
849 }
850}
851
852// ---------------- editor---------------------
853
854var editor_count = 0;
855
856function TextAreaEditor(txt, parent, callback, theme_advanced_btn1, theme_advanced_btn2, theme_advanced_btn3, editor_ht) {
857
858 this.txt = txt;
859 this.parent = parent;
860 this.callback = callback;
861 if(theme_advanced_btn1) this.theme_advanced_btn1 = theme_advanced_btn1;
862 if(theme_advanced_btn2) this.theme_advanced_btn2 = theme_advanced_btn2;
863 if(theme_advanced_btn3) this.theme_advanced_btn3 = theme_advanced_btn3;
864 if(editor_ht) this.editor_ht = editor_ht;
865
866 // load tinyMCE library
867 this.load_tiny_mce_library();
868}
869
870TextAreaEditor.prototype.load_tiny_mce_library = function() {
871
872 var me = this;
873
874 if(!tinymce_loaded) {
875 tinymce_loaded = 1;
876 tinyMCE_GZ.init(
877 {
878 themes : "advanced",
879 plugins : "style,table,inlinepopups,indicime,emotions",
880 languages : "en",
881 disk_cache : true
882 }, function(){ me.setup_text_area() });
883 }
884 else {
885 me.setup_text_area();
886 }
887}
888
889TextAreaEditor.prototype.setup_text_area = function() {
890
891 var me = this;
892 if(!me.txt) {
893 me.txt = $a(me.parent, 'textarea');
894 }
895
896 editor_count++;
897 me.id = 'editor_text_' + editor_count;
898 me.txt.setAttribute('id', me.id);
899
900 tinyMCE.init({
901 theme : "advanced",
902 mode : "exact",
903 elements: me.id,
904 plugins:"table,style,inlinepopups,indicime,emotions",
905 theme_advanced_toolbar_location : "top",
906 theme_advanced_statusbar_location : "bottom",
907 extended_valid_elements: "div[id|dir|class|align|style]",
908
909 // w/h
910 width: '100%',
911 height: me.editor_ht?me.editor_ht:'50px',
912
913 // buttons
914 //theme_advanced_buttons1 :"bold,italic,underline,strikethrough,blockquote,forecolor,backcolor,bullist,numlist,|,undo,redo,|,image,code,indicime,indicimehelp,emotions",
915 theme_advanced_buttons1 : me.theme_advanced_btn1?me.theme_advanced_btn1:"bold,italic,underline,forecolor,backcolor,|,undo,redo,|,link,unlink,indicime,indicimehelp,emotions",
916 theme_advanced_buttons2 : me.theme_advanced_btn2?me.theme_advanced_btn2:"",
917 theme_advanced_buttons3 : me.theme_advanced_btn3?me.theme_advanced_btn3:"",
918
919 // callback function with editor instance.
920 init_instance_callback : "editor_init_callback"
921 });
922
923 editor_init_callback = function(inst) {
924 me.editor = tinyMCE.get(me.id);
925 me.editor.focus();
926
927 if(me.callback){
928 me.callback(me.editor);
929 }
930 }
931}