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