]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_folder_window.js
initial merge/overlay profile editor ui
[working/Evergreen.git] / Open-ILS / web / reports / oils_rpt_folder_window.js
1 dojo.requireLocalization("openils.reports", "reports");
2
3 var rpt_strings = dojo.i18n.getLocalization("openils.reports", "reports");
4 var OILS_TEMPLATE_INTERFACE = 'xul/template_builder.xul';
5 var OILS_LEGACY_TEMPLATE_INTERFACE = 'oils_rpt_builder.xhtml';
6
7
8 /* generic folder window class */
9 oilsRptSetSubClass('oilsRptFolderWindow', 'oilsRptObject');
10 function oilsRptFolderWindow(type, folderId) { 
11         this.init();
12         var node = oilsRptCurrentFolderManager.findNode(type, folderId);
13         this.selector = DOM.oils_rpt_folder_contents_selector;
14         this.folderNode = node;
15         this.type = type;
16 }
17
18
19 oilsRptFolderWindow.prototype.draw = function() {
20
21         _debug('drawing folder window for ' + this.folderNode.folder.name() );
22
23         var obj = this;
24         setSelector(DOM.oils_rpt_output_limit_selector, oilsRptOutputLimit);
25         setSelector(DOM.oils_rpt_output_limit_selector_2, oilsRptOutputLimit2);
26
27         DOM.oils_rpt_output_limit_selector.onchange = function() {
28                 oilsRptOutputLimit = getSelectorVal(DOM.oils_rpt_output_limit_selector);
29                 obj.draw();
30         }
31
32         DOM.oils_rpt_output_limit_selector_2.onchange = function() {
33                 oilsRptOutputLimit2 = getSelectorVal(DOM.oils_rpt_output_limit_selector_2);
34                 obj.draw();
35         }
36
37         var mine = ( this.folderNode.folder.owner().id() == USER.id() );
38
39         _debug('drawing folder window with type '+this.type);
40         if(mine) _debug('folder is mine...');
41
42         if( mine && this.type == 'template') 
43                 unHideMe(DOM.oils_rpt_folder_window_contents_new_template.parentNode);
44         else hideMe(DOM.oils_rpt_folder_window_contents_new_template.parentNode);
45
46         unHideMe(DOM.oils_rpt_folder_window_contents_div);
47         hideMe(DOM.oils_rpt_folder_manager_div);
48         hideMe(DOM.oils_rpt_top_folder);
49
50         DOM.oils_rpt_folder_window_manage_tab.onclick = function() {
51                 unHideMe(DOM.oils_rpt_folder_window_contents_div);
52                 hideMe(DOM.oils_rpt_folder_manager_div);
53         }
54         DOM.oils_rpt_folder_window_edit_tab.onclick = function() {
55                 hideMe(DOM.oils_rpt_folder_window_contents_div);
56                 unHideMe(DOM.oils_rpt_folder_manager_div);
57         }
58
59         this.setFolderEditActions();
60
61         hideMe(DOM.oils_rpt_template_folder_new_report);
62         unHideMe(DOM.oils_rpt_folder_table_right_td);
63         hideMe(DOM.oils_rpt_folder_table_alt_td);
64         this.drawFolderDetails();
65
66         DOM.oils_rpt_folder_content_action_go.onclick = 
67                 function() {obj.doFolderAction()}
68
69         this.fetchFolderData();
70
71         var sel = DOM.oils_rpt_folder_contents_action_selector;
72         var x = true;
73         for( var i = 0; i < sel.options.length; i++ ) {
74                 var opt = sel.options[i];
75
76                 if( !mine && opt.getAttribute('value').match(/move/) ) {
77                         hideMe(opt);
78                         continue;
79                 }
80
81                 if( opt.getAttribute('type') == this.type ) {
82                         if(x && !opt.disabled) {
83                                 opt.selected = true;
84                                 x = false;
85                         }
86                         unHideMe(opt);
87                 } else hideMe(opt);
88         }
89
90         this.drawEditActions();
91
92         var porg = PERMS.SHARE_REPORT_FOLDER;
93         if( porg < 1 ) 
94                 DOM.oils_rpt_folder_manager_share_opt.disabled = true;
95 }
96
97 oilsRptFolderWindow.prototype.drawEditActions = function() {
98
99         DOM.oils_rpt_folder_window_contents_new_template.onclick = function() {
100                 var s = location.search+'';
101                 s = s.replace(/\&folder=\d+/g,'');
102                 s = s.replace(/\&ct=\d+/g,'');
103                 goTo( OILS_TEMPLATE_INTERFACE+s+'&folder='+obj.folderNode.folder.id());
104         }
105
106
107         if( this.folderNode.folder.owner().id() != USER.id() )
108                 hideMe(DOM.oils_rpt_folder_manager_tab_table);
109         else
110                 unHideMe(DOM.oils_rpt_folder_manager_tab_table);
111
112         if( isTrue(this.folderNode.folder.shared())) {
113                 DOM.oils_rpt_folder_manager_share_opt.disabled = true;
114                 DOM.oils_rpt_folder_manager_unshare_opt.disabled = false;
115         } else {
116                 DOM.oils_rpt_folder_manager_share_opt.disabled = false;
117                 DOM.oils_rpt_folder_manager_unshare_opt.disabled = true;
118         }
119
120         this.hideFolderActions();
121         var obj = this;
122
123         DOM.oils_rpt_folder_manager_actions_submit.onclick = function() {
124                 var act = getSelectorVal(DOM.oils_rpt_folder_manager_actions);
125                 _debug("doing folder action: " + act);
126                 obj.hideFolderActions();
127                 switch(act) {
128                         case 'change_name':
129                                 unHideMe(DOM.oils_rpt_folder_manager_change_name_div);
130                                 break;
131                         case 'create_sub_folder':
132                                 var porg = PERMS.SHARE_REPORT_FOLDER;
133                                 if( porg < 1 ) 
134                                         DOM.oils_rpt_folder_manager_sub_shared.disabled = true;
135                                 removeChildren(DOM.oils_rpt_folder_manager_sub_lib_picker);
136                                 unHideMe(DOM.oils_rpt_folder_manager_create_sub);
137                                 obj.myOrgSelector = new oilsRptMyOrgsWidget(
138                                         DOM.oils_rpt_folder_manager_sub_lib_picker, USER.ws_ou(), porg)
139                                 obj.myOrgSelector.draw();
140                                 break;
141                         case 'delete':
142                                 obj.doFolderDelete();
143                                 break;
144                         case 'share':
145                                 obj.shareFolder();
146                                 break;
147                         case 'unshare':
148                                 obj.unShareFolder();
149                                 break;
150                 }
151         }
152
153 }
154
155
156 oilsRptFolderWindow.prototype.shareFolder = function() {
157         var folder = this.folderNode.folder;
158         if(isTrue(folder.shared()))
159                 return alertId('oils_rpt_folder_already_shared');
160         unHideMe(DOM.oils_rpt_folder_manager_share_div);
161
162
163         var orgsel = new oilsRptMyOrgsWidget(
164                 DOM.oils_rpt_folder_manager_share_lib_picker, 
165                 USER.ws_ou(), PERMS.SHARE_REPORT_FOLDER);
166         orgsel.draw();
167
168         var type = this.type;
169         DOM.oils_rpt_folder_manager_share_submit.onclick = function() {
170                 folder.shared('t');
171                 folder.share_with(orgsel.getValue());
172                 oilsRptUpdateFolder( folder, type, 
173                         function(success) {
174                                 if(success) {
175                                         oilsRptAlertSuccess();
176                                         oilsRptCurrentFolderManager.draw();
177                                 }
178                         }
179                 );
180         }
181 }
182
183 oilsRptFolderWindow.prototype.unShareFolder = function() {
184         var folder = this.folderNode.folder;
185         if(!isTrue(folder.shared()))
186                 return alertId('oils_rpt_folder_already_unshared');
187         if(!confirmId('oils_rpt_folder_unshare_confirm')) return;
188         folder.shared('f');
189         var type = this.type;
190         oilsRptUpdateFolder( folder, type, 
191                 function(success) {
192                         if(success) {
193                                 oilsRptAlertSuccess();
194                                 oilsRptCurrentFolderManager.draw();
195                         }
196                 }
197         );
198 }
199
200
201 oilsRptFolderWindow.prototype.hideFolderActions = function() {
202         hideMe(DOM.oils_rpt_folder_manager_change_name_div);
203         hideMe(DOM.oils_rpt_folder_manager_create_sub);
204         hideMe(DOM.oils_rpt_folder_manager_share_div);
205 }
206
207
208 oilsRptFolderWindow.prototype.doFolderAction = function() {
209         var objs = (this.fmTable) ? this.fmTable.getSelected() : [];
210
211         if( this.type == 'output' && this.fmTable2 ) 
212                 objs = objs.concat( this.fmTable2.getSelected() );
213
214         if( objs.length == 0 ) 
215                 return alert(rpt_strings.FOLDER_WINDOW_SELECT_ITEM);
216         var action = getSelectorVal(DOM.oils_rpt_folder_contents_action_selector);
217
218         var obj = this;
219         var successCallback = function(errid) {
220                 if(errid) alertId(errid)
221                 else oilsRptAlertSuccess();
222                 obj.draw();
223         };
224
225         var obj = this;
226         switch(action) {
227
228                 case 'create_report' :
229                         hideMe(DOM.oils_rpt_folder_table_right_td);
230                         unHideMe(DOM.oils_rpt_folder_table_alt_td);
231                         unHideMe(DOM.oils_rpt_editor_div);
232                         new oilsRptReportEditor(new oilsReport(objs[0]), this);
233                         break;
234                 case 'delete_report' :
235                         if(!confirmId('oils_rpt_verify_report_delete')) return;
236                         this.deleteReports(objs, 0, successCallback);
237                         break;
238
239                 case 'delete_template' :
240             if(!confirmId('oils_rpt_verify_template_delete')) return;
241                         this.deleteTemplates(objs, 0, successCallback);
242                         break;
243
244                 case 'show_output':
245                         this.showOutput(objs[0]);
246                         break;
247
248                 case 'delete_output':
249                         if(!confirmId('oils_rpt_folder_contents_confirm_delete')) return;
250                         this.deleteOutputs(objs,0, successCallback);
251                         break;
252
253                 case 'move_template':
254                         this.changeBatchFolder(objs, 'template', successCallback);
255                         break;
256
257                 case 'move_report':
258                         this.changeBatchFolder(objs, 'report', successCallback);
259                         break;
260
261                 case 'move_output':
262                         this.changeBatchFolder(objs, 'output', successCallback);
263                         break;
264
265                 case 'clone_template':
266                         this.cloneTemplate(objs[0]);
267         }
268 }
269
270 oilsRptFolderWindow.prototype.changeBatchFolder = function(objs, type, callback) {
271         hideMe(DOM.oils_rpt_folder_window_contents_table);
272         unHideMe(DOM.oils_rpt_move_folder_div)
273         var obj = this;
274         this.drawFolderOptions(type,    
275                 function(folderid) {
276                         obj.changeFolderList(objs, type, folderid, 0, callback);
277                         hideMe(DOM.oils_rpt_move_folder_div)
278                         unHideMe(DOM.oils_rpt_folder_window_contents_table);
279                 }
280         );
281 }
282
283 oilsRptFolderWindow.prototype.cloneTemplate = function(template) {
284         hideMe(DOM.oils_rpt_folder_window_contents_table);
285         unHideMe(DOM.oils_rpt_move_folder_div)
286         var obj = this;
287         this.drawFolderOptions('template',
288                 function(folderid) {
289                         var s = location.search+'';
290                         s = s.replace(/\&folder=\d+/g,'');
291                         s = s.replace(/\&ct=\d+/g,'');
292             version = JSON2js(template.data()).version;
293             if(version && version >= 2) {
294                 _debug('entering new template building interface with template version ' + version);
295                             goTo(OILS_TEMPLATE_INTERFACE+s+'&folder='+folderid+'&ct='+template.id());
296             } else {
297                             goTo(OILS_LEGACY_TEMPLATE_INTERFACE+s+'&folder='+folderid+'&ct='+template.id());
298             }
299                 }
300         );
301 }
302
303
304 oilsRptFolderWindow.prototype.changeFolderList = function(list, type, folderid, idx, callback, errid) {
305         if( idx >= list.length ) return callback(errid);
306         var item = list[idx];
307         var obj = this;
308         var rcback = function(){obj.changeFolderList(list,type,folderid,++idx,callback,errid)};
309
310         item.folder(folderid);
311
312         switch(type) {
313                 case 'template':
314                         oilsRptUpdateTemplate(item,rcback);
315                         break;
316                 case 'report':
317                         oilsRptUpdateReport(item,rcback);
318                         break;
319                 case 'output':
320                         oilsRptUpdateSchedule(item,rcback);
321                         break;
322         }
323 }
324
325 oilsRptFolderWindow.prototype.drawFolderOptions = function(type, callback) {
326         //var oilsRptChangeFolderTree;
327         var selectedFolder;
328         oilsRptBuildFolder(
329                 type,
330                 DOM.oils_rpt_move_folder_picker,
331                 'tree9807897',
332                 rpt_strings.FOLDER_WINDOW_CHANGE_FOLDERS,
333                 function(node) { 
334                         appendClear(DOM.oils_rpt_move_folder_selected, node.folder.name());
335                         selectedFolder = node.folder.id();
336                 } 
337         );
338
339         DOM.oils_rpt_change_folder_submit.onclick = function() {
340                 if(selectedFolder) callback(selectedFolder);
341         }
342
343         DOM.oils_rpt_change_folder_cancel.onclick = function() {
344                 hideMe(DOM.oils_rpt_move_folder_div)
345                 unHideMe(DOM.oils_rpt_folder_window_contents_table);
346         }
347 }
348
349
350 oilsRptFolderWindow.prototype.deleteOutputs = function(list, idx, callback, errid) {
351         if( idx >= list.length ) return callback(errid);
352         var output = list[idx];
353
354         if( output.runner().id()  != USER.id() ) {
355                 this.deleteOutputs(list, ++idx, 
356                         callback, 'oils_rpt_folder_contents_no_delete');
357
358         } else {
359                 _debug('deleting output ' + output.id());
360                 var req = new Request(OILS_RPT_DELETE_SCHEDULE,SESSION,output.id());
361                 var obj = this;
362                 req.callback(function(){obj.deleteOutputs(list, ++idx, callback, errid);});
363                 req.send();
364         }
365 }
366
367 oilsRptFolderWindow.prototype.showOutput = function(sched) {
368         oilsRptFetchReport(sched.report().id(), 
369                 function(r) {
370                         var url = oilsRptBuildOutputLink(r.template(), r.id(), sched.id());
371                         _debug("launching report output view at URL: " + url);
372                         if(isXUL()) 
373                                 xulG.new_tab('/xul/server/util/rbrowser.xul?url=' + url,  /* this comes from urls.XUL_REMOTE_BROWSER */
374                                         {tab_name: dojo.string.substitute( rpt_strings.FOLDER_WINDOW_REPORT_OUTPUT, [r.name()] ), browser:false},
375                                         {no_xulG:false, show_nav_buttons:true, show_print_button:true});
376                         else {
377                                 //goTo(url);
378                                 var win = window.open(url,r.name(), 'resizable,width=800,height=600,scrollbars=1'); 
379                         }
380                 }
381         );
382 }
383
384
385 oilsRptFolderWindow.prototype.deleteReports = function(list, idx, callback, errid) {
386         if( idx >= list.length ) return callback(errid);
387         var report = list[idx];
388
389         var obj = this;
390         if( report.owner().id() != USER.id() ) {
391                 this.deleteReports(list, ++idx, 
392                         callback, 'oils_rpt_folder_contents_no_delete');
393
394         } else {
395
396 //              var req0 = new Request(OILS_RPT_REPORT_HAS_OUTS, SESSION, report.id());
397 //              req0.callback(
398 //                      function(r0) {
399 //                              var r0es = r0.getResultObject();
400 //                              if( r0es != '0' ) {
401 //                                      obj.deleteReports(list, ++idx, 
402 //                                              callback, 'oils_rpt_folder_contents_report_no_delete');
403 //                              } else {
404                                         _debug('deleting report ' + report.id());
405                                         var req = new Request(OILS_RPT_DELETE_REPORT, SESSION, report.id());
406                                         req.callback(function(r) { 
407                                                 var res = r.getResultObject();
408                                                 if( res == 0 ) return oilsRptAlertFailure();
409                                                 obj.deleteReports(list, ++idx, callback, errid)
410                                         });
411                                         req.send();
412 //                              }
413 //                      }
414 //              );
415 //
416 //              req0.send();
417         }
418 }
419
420 oilsRptFolderWindow.prototype.deleteTemplates = function(list, idx, callback, errid) {
421         if( idx >= list.length ) return callback(errid);
422         var tmpl = list[idx];
423
424         var obj = this;
425         if( tmpl.owner().id() != USER.id() ) {
426                 this.deleteTemplates(list, ++idx, 
427                         callback, 'oils_rpt_folder_contents_no_delete');
428
429         } else {
430
431
432 //              var req0 = new Request( OILS_RPT_TEMPLATE_HAS_RPTS, SESSION, tmpl.id() );
433 //              req0.callback(
434 //                      function(r0) {
435 //                              var resp = r0.getResultObject();
436 //
437 //                              if( resp != '0' ) {
438 //                                      obj.deleteTemplates(list, ++idx, 
439 //                                              callback, 'oils_rpt_folder_contents_template_no_delete');
440 //
441 //                              } else {
442                                         _debug('deleting template ' + tmpl.id());
443                                         var req = new Request(OILS_RPT_DELETE_TEMPLATE, SESSION, tmpl.id());
444                                         req.callback(function(r) {
445                                                 var res = r.getResultObject();
446                                                 if( res == 0 ) return oilsRptAlertFailure();
447                                                 obj.deleteTemplates(list, ++idx, callback, errid)
448                                         });
449                                         req.send();
450 //                              }
451 //                      }
452 //              );
453 //              req0.send();
454         }
455 }
456
457
458
459 oilsRptFolderWindow.prototype.drawFolderDetails = function() {
460         appendClear(DOM.oils_rpt_folder_creator_label, 
461                 text(this.folderNode.folder.owner().usrname()));
462         appendClear(DOM.oils_rpt_folder_name_label, 
463                 text(this.folderNode.folder.name()));
464 }
465
466
467 oilsRptFolderWindow.prototype.fetchFolderData = function(callback) {
468
469         hideMe(DOM.oils_rpt_content_count_row_2);
470         hideMe(DOM.oils_rpt_content_row_2);
471
472         removeChildren(this.selector);
473         var req = new Request(OILS_RPT_FETCH_FOLDER_DATA, 
474                 SESSION, this.type, this.folderNode.folder.id(), oilsRptOutputLimit);
475
476         hideMe(DOM.oils_rpt_pending_output);
477
478         if(this.type == 'output') {
479                 unHideMe(DOM.oils_rpt_pending_output);
480                 /* first fetch the non-complete schedules */
481                 req = new Request(OILS_RPT_FETCH_OUTPUT, 
482                         SESSION, this.folderNode.folder.id(), oilsRptOutputLimit, 0);
483         }
484
485         var obj = this;
486         removeChildren(obj.selector);
487         req.callback(
488                 function(r) {
489                         var res = r.getResultObject();
490
491                         if( res.length == 0 ) {
492                                 //hideMe(DOM.oils_rpt_content_count_row); /* this also hides the new-template link.. fix me */
493                                 hideMe(DOM.oils_rpt_content_row);
494                                 unHideMe(DOM.oils_rpt_content_row_empty);
495                         } else {
496                                 unHideMe(DOM.oils_rpt_content_count_row);
497                                 unHideMe(DOM.oils_rpt_content_row);
498                                 hideMe(DOM.oils_rpt_content_row_empty);
499                         }
500
501                         if( obj.type == 'output' ) {
502                                 obj.fleshSchedules(res, 0, obj.selector);
503                         } else {
504
505
506                                 obj.fmTable = drawFMObjectTable( 
507                                         { 
508                                                 dest : obj.selector, 
509                                                 obj : res,
510                                                 selectCol : true,
511                                                 selectColName : rpt_strings.FOLDER_WINDOW_COLNAME_SELECT,
512                                                 selectAllName : rpt_strings.FOLDER_WINDOW_COLNAME_ALL,
513                                                 selectNoneName : rpt_strings.FOLDER_WINDOW_COLNAME_NONE
514                                         }
515                                 );
516                         }
517                 }
518         );
519         req.send();
520
521         if( this.type != 'output' ) return;
522
523         /*
524         unHideMe(DOM.oils_rpt_content_count_row_2);
525         unHideMe(DOM.oils_rpt_content_row_2);
526         */
527
528         /* now fetch the completed schedules */
529         req = new Request(OILS_RPT_FETCH_OUTPUT, 
530                 SESSION, this.folderNode.folder.id(), oilsRptOutputLimit2, 1);
531
532         _debug("TRYING: fleshing finished scheds with div: " + DOM.oils_rpt_folder_contents_selector_2);
533         removeChildren(DOM.oils_rpt_folder_contents_selector_2);
534         req.callback(
535                 function(r) {
536                         var res = r.getResultObject();
537
538                         if( res.length == 0 ) {
539                                 hideMe(DOM.oils_rpt_content_count_row_2);
540                                 hideMe(DOM.oils_rpt_content_row_2);
541                         } else {
542                                 unHideMe(DOM.oils_rpt_content_count_row_2);
543                                 unHideMe(DOM.oils_rpt_content_row_2);
544                         }
545
546                         _debug("fleshing finished scheds with div: " + DOM.oils_rpt_folder_contents_selector_2);
547                         obj.fleshSchedules(res, 0, DOM.oils_rpt_folder_contents_selector_2, true);
548                 }
549         );
550         req.send();
551 }
552
553
554 oilsRptFolderWindow.prototype.fleshSchedules = function(list, idx, selector, isSecond) {
555
556         if( idx >= list.length ) return;
557
558         var sched = list[idx];
559         var obj = this;
560
561         oilsRptFetchUser(sched.runner(),
562
563                 function(user) {
564                         sched.runner(user);
565                         oilsRptFetchTemplate(sched.report().template(),
566
567                                 function(template) {
568                                         sched.report().template(template);
569                                         if( idx == 0 ) {
570                                                 _debug("drawing schedule with output: "+selector);
571                                                 var t = drawFMObjectTable( 
572                                                         { 
573                                                                 dest : selector, 
574                                                                 obj : [sched],
575                                                                 selectCol : true,
576                                                                 selectColName : rpt_strings.FOLDER_WINDOW_COLNAME_SELECT,
577                                                                 selectAllName : rpt_strings.FOLDER_WINDOW_COLNAME_ALL,
578                                                                 selectNoneName : rpt_strings.FOLDER_WINDOW_COLNAME_NONE
579                                                         }
580                                                 );
581
582                                                 if( isSecond ) obj.fmTable2 = t;
583                                                 else obj.fmTable = t;
584
585                                         } else {
586                                                 //obj.fmTable.add(sched);
587                                                 if( isSecond ) obj.fmTable2.add(sched);
588                                                 else obj.fmTable.add(sched);
589                                         }
590
591                                         obj.fleshSchedules(list, ++idx, selector, isSecond);
592                                 }
593                         );
594                 }
595         );
596 }
597
598
599 oilsRptFolderWindow.prototype.setSelected = function(folderNode) {
600         this.selectedFolder = folderNode;
601 }
602
603 oilsRptFolderWindow.prototype.setFolderEditActions = function() {
604         var folder = this.folderNode.folder;
605
606         var obj = this;
607         DOM.oils_rpt_folder_manager_name_input.value = folder.name();
608         DOM.oils_rpt_folder_manager_change_name_submit.onclick = function() {
609                 var name = DOM.oils_rpt_folder_manager_name_input.value;
610                 if(name != "") {
611                         folder.name( name );
612                         if(confirmId('oils_rpt_folder_manager_change_name_confirm')) {
613                                 oilsRptUpdateFolder(folder, obj.type,
614                                         function(success) {
615                                                 if(success) {
616                                                         oilsRptAlertSuccess();
617                                                         oilsRptCurrentFolderManager.draw();
618                                                 }
619                                         }
620                                 );
621                         }
622                 }
623         }
624
625         DOM.oils_rpt_folder_manager_sub_lib_create.onclick = function() {
626                 var folder;
627
628                 if( obj.type == 'report' ) folder = new rrf();
629                 if( obj.type == 'template' ) folder = new rtf();
630                 if( obj.type == 'output' ) folder = new rof();
631
632                 folder.owner(USER.id());
633                 folder.parent(obj.folderNode.folder.id());
634                 folder.name(DOM.oils_rpt_folder_manager_sub_name.value);
635                 var shared = getSelectorVal(DOM.oils_rpt_folder_manager_sub_shared);
636                 folder.shared( (shared == 'yes') ? 't' : 'f');
637                 if( folder.shared() == 't' )
638                         folder.share_with( obj.myOrgSelector.getValue() );
639
640                 oilsRptCreateFolder(folder, obj.type,
641                         function(success) {
642                                 if(success) {
643                                         oilsRptAlertSuccess();
644                                         oilsRptCurrentFolderManager.draw();
645                                 }
646                         }
647                 );
648         }
649 }
650
651
652 oilsRptFolderWindow.prototype.doFolderDelete = function() {
653         
654         var cache = oilsRptFolderNodeCache[this.type];
655         /* let's see if this folder has any children */
656         for( var c in cache ) 
657                 if( cache[c].folder.parent() == this.folderNode.folder.id() )
658                         return alertId('oils_rpt_folder_cannot_delete');
659
660         /* lets see if the folder has contents */
661         var req = new Request(OILS_RPT_FETCH_FOLDER_DATA, 
662                 SESSION, this.type, this.folderNode.folder.id(), 1);
663
664         if(this.type == 'output') {
665                 req = new Request(OILS_RPT_FETCH_OUTPUT, 
666                         SESSION, this.folderNode.folder.id(), 1);
667         }
668
669         var obj = this;
670         req.send();
671
672         req.callback( 
673                 function(r) {
674
675                         var contents = r.getResultObject();
676                         if( contents.length > 0 ) 
677                                 return alertId('oils_rpt_folder_cannot_delete');
678
679                         if( confirmId('oils_rpt_folder_manager_delete_confirm') ) {
680                                 var req2 = new Request(OILS_RPT_DELETE_FOLDER, 
681                                         SESSION, obj.type, obj.folderNode.folder.id());
682         
683                                 req2.callback( 
684                                         function(r2) {
685                                                 var res = r2.getResultObject();
686                                                 if( res == 1 ) {
687                                                         oilsRptAlertSuccess();
688                                                         oilsRptCurrentFolderManager.draw();
689                                                 }
690                                                 else alert('error: '+js2JSON(res));
691                                         }
692                                 );
693
694                                 req2.send();
695                         }
696                 }
697         );
698 }
699
700