]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/serial/manage_dists.js
Merge branch 'master' of git+ssh://yeti.esilibrary.com/home/evergreen/evergreen-equin...
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / serial / manage_dists.js
1 dump('entering serial/manage_dists.js\n');
2 // vim:et:sw=4:ts=4:
3
4 if (typeof serial == 'undefined') serial = {};
5 serial.manage_dists = function (params) {
6     try {
7         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
8         JSAN.use('util.error'); this.error = new util.error();
9     } catch(E) {
10         dump('serial/manage_dists: ' + E + '\n');
11     }
12 };
13
14 serial.manage_dists.prototype = {
15
16     'map_tree' : {},
17     'map_sdist' : {},
18     'map_sstr' : {},
19     'sel_list' : [],
20     'funcs' : [],
21     'editor_indexes' : { 'sdist' : 1, 'sstr' : 2, 'sbsum' : 3, 'sssum' : 4, 'sisum' : 5 },
22
23     'ids_from_sel_list' : function(type) {
24         var obj = this;
25         JSAN.use('util.functional');
26
27         var list = util.functional.map_list(
28             util.functional.filter_list(
29                 obj.sel_list,
30                 function (o) {
31                     return o.split(/_/)[0] == type;
32                 }
33             ),
34             function (o) {
35                 return o.split(/_/)[1];
36             }
37         );
38
39         return list;
40     },
41
42     'editor_init' : function(type, mode, params) {
43         var obj = this;
44         try {
45             $('serial_manage_dists_editor_deck').selectedIndex = obj.editor_indexes[type];
46             var editor_type = type + '_editor';
47             if (typeof obj[editor_type] == 'undefined') {
48                 JSAN.use('serial.' + editor_type);
49                 obj[editor_type] = new serial[editor_type](); 
50             }
51
52             params.do_edit = true;
53             params.handle_update = true;
54             if (mode == 'add') {
55                 params.trigger_refresh = true;
56                 params.refresh_command = function () {obj.refresh_list();};
57             }
58             obj[editor_type].init(params);
59         } catch(E) {
60             obj.error.standard_unexpected_error_alert('editor_init() error',E);
61         }
62     },
63
64     'do_delete' : function(type, method, overridable_events) {
65         var obj = this;
66         try {
67             JSAN.use('util.functional');
68
69             var list = util.functional.filter_list(
70                 obj.sel_list,
71                 function (o) {
72                     return o.split(/_/)[0] == type;
73                 }
74             );
75
76             list = util.functional.map_list(
77                 list,
78                 function (o) {
79                     return JSON2js( js2JSON( obj['map_' + type][ type + '_' + o.split(/_/)[1] ] ) );
80                 }
81             );
82
83             //TODO: proper messages
84             var delete_msg;
85             if (list.length != 1) {
86                 delete_msg = document.getElementById('serialStrings').getFormattedString('staff.serial.manage_dists.delete_' + type + '.confirm.plural', [list.length]);
87             } else {
88                 delete_msg = document.getElementById('serialStrings').getString('staff.serial.manage_dists.delete_' + type + '.confirm');
89             }
90             var r = obj.error.yns_alert(
91                     delete_msg,
92                     document.getElementById('serialStrings').getString('staff.serial.manage_dists.delete_' + type + '.title'),
93                     document.getElementById('catStrings').getString('staff.cat.copy_browser.delete_items.delete'),
94                     document.getElementById('catStrings').getString('staff.cat.copy_browser.delete_items.cancel'),
95                     null,
96                     document.getElementById('commonStrings').getString('common.confirm')
97             );
98
99             if (r == 0) {
100                 for (var i = 0; i < list.length; i++) {
101                     list[i].isdeleted('1');
102                 }
103                 var robj = obj.network.request(
104                     'open-ils.serial', 
105                     method, 
106                     [ ses(), list, true ],
107                     null,
108                     {
109                         'title' : document.getElementById('serialStrings').getString('staff.serial.manage_dists.delete_' + type + '.override'),
110                         'overridable_events' : overridable_events
111                     }
112                 );
113                 if (robj == null) throw(robj);
114                 if (typeof robj.ilsevent != 'undefined') {
115                     if (robj.ilsevent != 0) {
116                         var overridable = false;
117                         for (i = 0; i < overridable_events.length; i++) {
118                             if (overridable_events[i] == robj.ilsevent) {
119                                 overridable = true;
120                                 break;
121                             }
122                         }
123                         if (!overridable) throw(robj);
124                     }
125                 }
126                 obj.refresh_list();
127             }
128         } catch(E) {
129             obj.error.standard_unexpected_error_alert(document.getElementById('serialStrings').getString('staff.serial.manage_dists.delete.error'),E);
130             obj.refresh_list();
131         }
132     },
133
134     'init' : function( params ) {
135
136         try {
137             netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
138             var obj = this;
139
140             obj.docid = params.docid;
141
142             JSAN.use('util.network'); obj.network = new util.network();
143             JSAN.use('OpenILS.data'); obj.data = new OpenILS.data(); obj.data.init({'via':'stash'});
144             JSAN.use('util.controller'); obj.controller = new util.controller();
145             obj.controller.init(
146                 {
147                     control_map : {
148                         'save_columns' : [ [ 'command' ], function() { obj.list.save_columns(); } ],
149                         'sel_clip' : [
150                             ['command'],
151                             function() { obj.list.clipboard(); }
152                         ],
153                         'cmd_broken' : [
154                             ['command'],
155                             function() { 
156                                 alert(document.getElementById('commonStrings').getString('common.unimplemented'));
157                             }
158                         ],
159                         'cmd_show_my_libs' : [
160                             ['command'],
161                             function() { 
162                                 obj.show_my_libs(); 
163                             }
164                         ],
165                         'cmd_clear' : [
166                             ['command'],
167                             function() {
168                                 obj.map_tree = {};
169                                 obj.list.clear();
170                             }
171                         ],
172                         'cmd_add_siss' : [
173                             ['command'],
174                             function() {
175                                 try {
176                                     var list = obj.ids_from_sel_list('sdist');
177                                     if (list.length == 0) list = obj.ids_from_sel_list('siss-group');
178                                     if (list.length == 0) return;
179
180                                     /*TODO: permission check?
181                                     //populate 'list' with owning_libs of subs, TODO
182                                     var edit = 0;
183                                     try {
184                                         edit = obj.network.request(
185                                             api.PERM_MULTI_ORG_CHECK.app,
186                                             api.PERM_MULTI_ORG_CHECK.method,
187                                             [ 
188                                                 ses(), 
189                                                 obj.data.list.au[0].id(), 
190                                                 list,
191                                                 [ 'CREATE_COPY' ]
192                                             ]
193                                         ).length == 0 ? 1 : 0;
194                                     } catch(E) {
195                                         obj.error.sdump('D_ERROR','batch permission check: ' + E);
196                                     }
197
198                                     if (edit==0) return; // no read-only view for this interface */
199                                     var new_siss = new siss();
200                                     new_siss.subscription(list[0]);//TODO: add multiple at once support?
201                                     new_siss.isnew(1);
202                                     var params = {};
203                                     params.sisses = [new_siss];
204                                     obj.editor_init('siss', 'add', params);
205                                 } catch(E) {
206                                     obj.error.standard_unexpected_error_alert(document.getElementById('serialStrings').getString('staff.serial.manage_dists.add.error'),E);
207                                 }
208                             }
209                         ],
210                         'cmd_add_sstr' : [
211                             ['command'],
212                             function() {
213                                 try {
214                                     var list = obj.ids_from_sel_list('sdist');
215                                     if (list.length == 0) list = obj.ids_from_sel_list('sstr-group');
216                                     if (list.length == 0) return;
217
218                                     /*TODO: permission check?
219                                     //populate 'list' with owning_libs of subs, TODO
220                                     var edit = 0;
221                                     try {
222                                         edit = obj.network.request(
223                                             api.PERM_MULTI_ORG_CHECK.app,
224                                             api.PERM_MULTI_ORG_CHECK.method,
225                                             [ 
226                                                 ses(), 
227                                                 obj.data.list.au[0].id(), 
228                                                 list,
229                                                 [ 'CREATE_COPY' ]
230                                             ]
231                                         ).length == 0 ? 1 : 0;
232                                     } catch(E) {
233                                         obj.error.sdump('D_ERROR','batch permission check: ' + E);
234                                     }
235
236                                     if (edit==0) return; // no read-only view for this interface */
237                                     var new_sstr = new sstr();
238                                     new_sstr.distribution(list[0]);//TODO: add multiple at once support?
239                                     new_sstr.isnew(1);
240                                     var params = {};
241                                     params.sstrs = [new_sstr];
242                                     obj.editor_init('sstr', 'add', params);
243                                 } catch(E) {
244                                     obj.error.standard_unexpected_error_alert($('serialStrings').getString('staff.serial.manage_dists.add.error'),E);
245                                 }
246                             }
247                         ],
248                         'cmd_delete_sstr' : [
249                             ['command'],
250                             function() {
251                                 var overridable_events = [ //TODO: proper overrides
252                                 ];
253                                 obj.do_delete('sstr', 'open-ils.serial.stream.batch.update', overridable_events);
254                             }
255                         ],
256                         'cmd_delete_siss' : [
257                             ['command'],
258                             function() {
259                                 var overridable_events = [ //TODO: proper overrides
260                                 ];
261                                 obj.do_delete('siss', 'open-ils.serial.issuance.fleshed.batch.update', overridable_events);
262                             }
263                         ],
264                         'cmd_delete_sdist' : [
265                             ['command'],
266                             function() {
267                                 var overridable_events = [
268                                     11000 // SERIAL_SUBSCRIPTION_NOT_EMPTY
269                                 ];
270                                 obj.do_delete('sdist', 'open-ils.serial.subscription.fleshed.batch.update', overridable_events);
271                             }
272                         ],
273                         'cmd_mark_library' : [
274                             ['command'],
275                             function() {
276                                 try {
277                                     var list = obj.ids_from_sel_list('aou');
278                                     if (list.length == 1) {
279                                         obj.data.marked_library = { 'lib' : list[0], 'docid' : obj.docid };
280                                         obj.data.stash('marked_library');
281                                         alert(document.getElementById('catStrings').getString('staff.cat.copy_browser.mark_library.alert'));
282                                     } else {
283                                         obj.error.yns_alert(
284                                                 document.getElementById('catStrings').getString('staff.cat.copy_browser.mark_library.prompt'),
285                                                 document.getElementById('catStrings').getString('staff.cat.copy_browser.mark_library.title'),
286                                                 document.getElementById('commonStrings').getString('common.ok'),
287                                                 null,
288                                                 null,
289                                                 document.getElementById('commonStrings').getString('common.confirm')
290                                                 );
291                                     }
292                                 } catch(E) {
293                                     obj.error.standard_unexpected_error_alert('manage_dists.js -> mark library',E);
294                                 }
295                             }
296                         ],
297
298                         'cmd_mark_distribution' : [
299                             ['command'],
300                             function() {
301                                 try {
302                                     var list = obj.ids_from_sel_list('sdist');
303                                     if (list.length == 1) {
304                                         obj.data.marked_distribution = list[0];
305                                         obj.data.stash('marked_distribution');
306                                         alert(document.getElementById('catStrings').getString('staff.cat.copy_browser.mark_volume.alert'));
307                                     } else {
308                                         obj.error.yns_alert(
309                                                 document.getElementById('catStrings').getString('staff.cat.copy_browser.mark_volume.prompt'),
310                                                 document.getElementById('catStrings').getString('staff.cat.copy_browser.mark_volume.title'),
311                                                 document.getElementById('commonStrings').getString('common.ok'),
312                                                 null,
313                                                 null,
314                                                 document.getElementById('commonStrings').getString('common.confirm')
315                                                 );
316                                     }
317                                 } catch(E) {
318                                     obj.error.standard_unexpected_error_alert('manage_dists.js -> mark distribution',E);
319                                 }
320                             }
321                         ],
322                         'cmd_add_distributions' : [
323                             ['command'],
324                             function() {
325                                 try {
326                                     var list = obj.ids_from_sel_list('aou');
327                                     if (list.length == 0) return;
328                                     //TODO: permission check?
329                                     /*var edit = 0;
330                                     try {
331                                         edit = obj.network.request(
332                                             api.PERM_MULTI_ORG_CHECK.app,
333                                             api.PERM_MULTI_ORG_CHECK.method,
334                                             [ 
335                                                 ses(), 
336                                                 obj.data.list.au[0].id(), 
337                                                 list,
338                                                 [ 'CREATE_VOLUME', 'CREATE_COPY' ]
339                                             ]
340                                         ).length == 0 ? 1 : 0;
341                                     } catch(E) {
342                                         obj.error.sdump('D_ERROR','batch permission check: ' + E);
343                                     }
344
345                                     if (edit==0) {
346                                         alert(document.getElementById('catStrings').getString('staff.cat.copy_browser.add_volume.permission_error'));
347                                         return; // no read-only view for this interface
348                                     } */
349                                     var new_sdist = new sdist();
350                                     new_sdist.owning_lib(list[0]);//TODO: add multiple at once support?
351                                     new_sdist.isnew(1);
352                                     new_sdist.record_entry(obj.docid);
353                                     var params = {};
354                                     params.sdists = [new_sdist];
355                                     obj.editor_init('sdist', 'add', params);
356                                 } catch(E) {
357                                     obj.error.standard_unexpected_error_alert(document.getElementById('serialStrings').getString('staff.serial.manage_dists.add.error'),E);
358                                 }
359                             }
360                         ],
361                         'cmd_transfer_distribution' : [
362                             ['command'],
363                             function() {
364                                 try {
365                                     obj.data.stash_retrieve();
366                                     if (!obj.data.marked_library) {
367                                         alert(document.getElementById('catStrings').getString('staff.cat.copy_browser.transfer_volume.alert'));
368                                         return;
369                                     }
370                                     
371                                     var list = obj.ids_from_sel_list('sdist');
372
373                                     netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
374
375                                     JSAN.use('util.functional');
376
377                                     var sdist_list = util.functional.map_list(
378                                         list,
379                                         function (o) {
380                                             return obj.map_sdist[ 'sdist_' + o ].start_date();
381                                         }
382                                     ).join(document.getElementById('commonStrings').getString('common.grouping_string'));
383
384                                     var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: auto">';
385                                     xml += '<description>';
386                                     xml += document.getElementById('catStrings').getFormattedString('staff.cat.copy_browser.transfer.prompt', [sdist_list, obj.data.hash.aou[ obj.data.marked_library.lib ].shortname()]);
387                                     xml += '</description>';
388                                     xml += '<hbox><button label="' + document.getElementById('catStrings').getString('staff.cat.copy_browser.transfer.submit.label') + '" name="fancy_submit"/>';
389                                     xml += '<button label="' 
390                                         + document.getElementById('catStrings').getString('staff.cat.copy_browser.transfer.cancel.label') 
391                                         + '" accesskey="' 
392                                         + document.getElementById('catStrings').getString('staff.cat.copy_browser.transfer.cancel.accesskey') 
393                                         + '" name="fancy_cancel"/></hbox>';
394                                     xml += '<iframe style="overflow: scroll" flex="1" src="' + urls.XUL_BIB_BRIEF + '?docid=' + obj.data.marked_library.docid + '"/>';
395                                     xml += '</vbox>';
396                                     JSAN.use('OpenILS.data');
397                                     var data = new OpenILS.data(); data.init({'via':'stash'});
398                                     //data.temp_transfer = xml; data.stash('temp_transfer');
399                                     JSAN.use('util.window'); var win = new util.window();
400                                     var fancy_prompt_data = win.open(
401                                         urls.XUL_FANCY_PROMPT,
402                                         //+ '?xml_in_stash=temp_transfer'
403                                         //+ '&title=' + window.escape('Volume Transfer'),
404                                         'fancy_prompt', 'chrome,resizable,modal,width=500,height=300',
405                                         {
406                                             'xml' : xml,
407                                             'title' : document.getElementById('catStrings').getString('staff.cat.copy_browser.transfer.title')
408                                         }
409                                     );
410
411                                     if (fancy_prompt_data.fancy_status == 'incomplete') {
412                                         alert(document.getElementById('catStrings').getString('staff.cat.copy_browser.transfer.incomplete'));
413                                         return;
414                                     }
415
416                                     var robj = obj.network.simple_request(
417                                         'FM_ACN_TRANSFER', 
418                                         [ ses(), { 'docid' : obj.data.marked_library.docid, 'lib' : obj.data.marked_library.lib, 'distributions' : list } ],
419                                         null,
420                                         {
421                                             'title' : document.getElementById('catStrings').getString('staff.cat.copy_browser.transfer.override.failure'),
422                                             'overridable_events' : [
423                                                 1208, // TITLE_LAST_COPY
424                                                 1219, // COPY_REMOTE_CIRC_LIB
425                                             ],
426                                         }
427                                     );
428
429                                     if (typeof robj.ilsevent != 'undefined') {
430                                         if (robj.ilsevent == 1221) { // ORG_CANNOT_HAVE_VOLS
431                                             alert(document.getElementById('catStrings').getString('staff.cat.copy_browser.transfer.ineligible_destination'));
432                                         } else {
433                                             throw(robj);
434                                         }
435                                     } else {
436                                         alert(document.getElementById('catStrings').getString('staff.cat.copy_browser.transfer.success'));
437                                     }
438
439                                 } catch(E) {
440                                     obj.error.standard_unexpected_error_alert(document.getElementById('catStrings').getString('staff.cat.copy_browser.transfer.unexpected_error'),E);
441                                 }
442                                 obj.refresh_list();
443                             }
444                         ],
445
446                         'cmd_transfer_sstrs' : [
447                             ['command'],
448                             function() {
449                                 try {
450                                     obj.data.stash_retrieve();
451                                     if (!obj.data.marked_distribution) {
452                                         alert(document.getElementById('catStrings').getString('staff.cat.copy_browser.transfer_items.missing_volume'));
453                                         return;
454                                     }
455                                     
456                                     JSAN.use('util.functional');
457
458                                     var list = obj.ids_from_sel_list('sstr');
459                                     var distribution = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[ obj.data.marked_distribution ]);
460
461                                     JSAN.use('cat.util'); cat.util.transfer_copies( { 
462                                         'distribution_ids' : list, 
463                                         'docid' : distribution.record(),
464                                         'distribution_label' : distribution.start_date(),
465                                         'owning_lib' : distribution.owning_lib(),
466                                     } );
467
468                                 } catch(E) {
469                                     obj.error.standard_unexpected_error_alert(document.getElementById('catStrings').getString('staff.cat.copy_browser.transfer_items.unexpected_error'),E);
470                                 }
471                                 obj.refresh_list();
472                             }
473                         ],
474                         'cmd_refresh_list' : [
475                             ['command'],
476                             function() {
477                                 obj.refresh_list();
478                             }
479                         ],
480 /*dbw2                      'sel_distribution_details' : [
481                             ['command'],
482                             function() {
483                                 JSAN.use('util.functional');
484
485                                 var list = util.functional.filter_list(
486                                     obj.sel_list,
487                                     function (o) {
488                                         return o.split(/_/)[0] == 'sstr';
489                                     }
490                                 );
491
492                                 list = util.functional.map_list(
493                                     list,
494                                     function (o) {
495                                         return o.split(/_/)[1];
496                                     }
497                                 );
498     
499                                 JSAN.use('circ.util');
500                                 for (var i = 0; i < list.length; i++) {
501                                     circ.util.show_copy_details( list[i] );
502                                 }
503                             }
504                         ],
505                         'cmd_edit_sstrs' : [
506                             ['command'],
507                             function() {
508                                 try {
509                                     JSAN.use('util.functional');
510
511                                     var list = util.functional.filter_list(
512                                         obj.sel_list,
513                                         function (o) {
514                                             return o.split(/_/)[0] == 'sstr';
515                                         }
516                                     );
517
518                                     list = util.functional.map_list(
519                                         list,
520                                         function (o) {
521                                             return o.split(/_/)[1];
522                                         }
523                                     );
524
525                                     JSAN.use('cat.util'); cat.util.spawn_copy_editor( { 'copy_ids' : list, 'edit' : 1 } );
526                                     obj.refresh_list();
527
528                                 } catch(E) {
529                                     obj.error.standard_unexpected_error_alert(document.getElementById('catStrings').getString('staff.cat.copy_browser.edit_items.error'),E);
530                                 }
531                             }
532                         ], dbw2*/
533
534 /*dbw2                      'cmd_print_spine_labels' : [
535                             ['command'],
536                             function() {
537                                 try {
538                                     JSAN.use('util.functional');
539                                     
540                                     var list = util.functional.filter_list(
541                                         obj.sel_list,
542                                         function (o) {
543                                             return o.split(/_/)[0] == 'sstr';
544                                         }
545                                     );
546
547                                     list = util.functional.map_list(
548                                         list,
549                                         function (o) {
550                                             return obj.map_sstr[ o ];
551                                         }
552                                     );
553
554                                     obj.data.temp_barcodes_for_labels = util.functional.map_list( list, function(o){return o.barcode();}) ; 
555                                     obj.data.stash('temp_barcodes_for_labels');
556                                     xulG.new_tab(
557                                         xulG.url_prefix( urls.XUL_SPINE_LABEL ),
558                                         { 'tab_name' : document.getElementById('catStrings').getString('staff.cat.copy_browser.print_spine.tab') },
559                                         {}
560                                     );
561                                 } catch(E) {
562                                     obj.error.standard_unexpected_error_alert(document.getElementById('catStrings').getString('staff.cat.copy_browser.print_spine.error'),E);
563                                 }
564                             }
565                         ]
566                         dbw2*/
567                     }
568                 }
569             );
570
571             obj.list_init(params);
572
573             obj.org_ids = obj.network.simple_request('FM_SDIST_AOU_IDS_RETRIEVE_VIA_RECORD_ID.authoritative',[ obj.docid ]);
574             if (typeof obj.org_ids.ilsevent != 'undefined') throw(obj.org_ids);
575             JSAN.use('util.functional'); 
576             obj.org_ids = util.functional.map_list( obj.org_ids, function (o) { return Number(o); });
577
578             var org = obj.data.hash.aou[ obj.data.list.au[0].ws_ou() ];
579             //obj.show_libs( org );
580
581             //obj.show_my_libs();
582
583             JSAN.use('util.file'); JSAN.use('util.widgets');
584
585             var file; var list_data; var ml; 
586
587             file = new util.file('offline_ou_list'); 
588             if (file._file.exists()) {
589                 list_data = file.get_object(); file.close();
590                 for (var i = 0; i < list_data[0].length; i++) { // make sure all entries are enabled
591                     list_data[0][i][2] = false;
592                 }
593                 ml = util.widgets.make_menulist( list_data[0], list_data[1] );
594                 ml.setAttribute('id','sdist_lib_menu'); document.getElementById('serial_dist_lib_menu').appendChild(ml);
595                 //TODO: class this menu properly
596                 for (var i = 0; i < obj.org_ids.length; i++) {
597                     ml.getElementsByAttribute('value',obj.org_ids[i])[0].setAttribute('class','has_distributions');
598                 }
599                 ml.firstChild.addEventListener(
600                     'popupshown',
601                     function(ev) {
602                         document.getElementById('legend').setAttribute('hidden','false');
603                     },
604                     false
605                 );
606                 ml.firstChild.addEventListener(
607                     'popuphidden',
608                     function(ev) {
609                         document.getElementById('legend').setAttribute('hidden','true');
610                     },
611                     false
612                 );
613                 ml.addEventListener(
614                     'command',
615                     function(ev) {
616                         if (document.getElementById('refresh_button')) document.getElementById('refresh_button').focus(); 
617                         JSAN.use('util.file'); var file = new util.file('manage_dists_prefs.'+obj.data.server_unadorned);
618                         util.widgets.save_attributes(file, { 'sdist_lib_menu' : [ 'value' ], 'show_sdists' : [ 'checked' ], 'show_groups' : [ 'checked' ] });
619                         obj.refresh_list();
620                     },
621                     false
622                 );
623             } else {
624                 throw(document.getElementById('catStrings').getString('staff.cat.copy_browser.missing_library') + '\n');
625             }
626
627             file = new util.file('manage_dists_prefs.'+obj.data.server_unadorned);
628             util.widgets.load_attributes(file);
629             obj.default_lib = ml.getAttribute('value');
630             ml.value = obj.default_lib;
631             if (! obj.default_lib) {
632                 obj.default_lib = org.id();
633                 ml.setAttribute('value',obj.default_lib);
634                 ml.value = obj.default_lib;
635             }
636
637             document.getElementById('show_sdists').addEventListener(
638                 'command',
639                 function(ev) {
640                     JSAN.use('util.file'); var file = new util.file('manage_dists_prefs.'+obj.data.server_unadorned);
641                     util.widgets.save_attributes(file, { 'sdist_lib_menu' : [ 'value' ], 'show_sdists' : [ 'checked' ], 'show_groups' : [ 'checked' ] });
642                 },
643                 false
644             );
645
646             document.getElementById('show_groups').addEventListener(
647                 'command',
648                 function(ev) {
649                     JSAN.use('util.file'); var file = new util.file('manage_dists_prefs.'+obj.data.server_unadorned);
650                     util.widgets.save_attributes(file, { 'sdist_lib_menu' : [ 'value' ], 'show_sdists' : [ 'checked' ], 'show_groups' : [ 'checked' ] });
651                 },
652                 false
653             );
654
655             obj.show_my_libs( obj.default_lib );
656
657             JSAN.use('util.exec'); var exec = new util.exec(20); exec.timer(obj.funcs,100);
658
659             obj.toggle_actions(); // disable menus initially
660
661         } catch(E) {
662             this.error.standard_unexpected_error_alert('serial/manage_dists.init: ',E);
663         }
664     },
665
666     'show_my_libs' : function(org) {
667         var obj = this;
668         try {
669             if (!org) {
670                 org = obj.data.hash.aou[ obj.data.list.au[0].ws_ou() ];
671             } else {
672                 if (typeof org != 'object') org = obj.data.hash.aou[ org ];
673             }
674             obj.show_libs( org, false );
675         } catch(E) {
676             alert(E);
677         }
678     },
679
680     'show_libs' : function(start_aou,show_open) {
681         var obj = this;
682         try {
683             if (!start_aou) throw('show_libs: Need a start_aou');
684             JSAN.use('OpenILS.data'); obj.data = new OpenILS.data(); obj.data.init({'via':'stash'});
685             JSAN.use('util.functional'); 
686
687             var parents = [];
688             var temp_aou = start_aou;
689             while ( temp_aou.parent_ou() ) {
690                 temp_aou = obj.data.hash.aou[ temp_aou.parent_ou() ];
691                 parents.push( temp_aou );
692             }
693             parents.reverse();
694
695             for (var i = 0; i < parents.length; i++) {
696                 obj.funcs.push(
697                     function(o,p) {
698                         return function() { 
699                             obj.append_org(o,p,{'container':'true','open':'true'}); 
700                         };
701                     }(parents[i], obj.data.hash.aou[ parents[i].parent_ou() ])
702                 );
703             }
704
705             obj.funcs.push(
706                 function(o,p) {
707                     return function() { obj.append_org(o,p); };
708                 }(start_aou,obj.data.hash.aou[ start_aou.parent_ou() ])
709             );
710
711             obj.funcs.push(
712                 function() {
713                     if (start_aou.children()) {
714                         var x = obj.map_tree[ 'aou_' + start_aou.id() ];
715                         x.setAttribute('container','true');
716                         if (show_open) x.setAttribute('open','true');
717                         for (var i = 0; i < start_aou.children().length; i++) {
718                             obj.funcs.push(
719                                 function(o,p) {
720                                     return function() { obj.append_org(o,p); };
721                                 }( start_aou.children()[i], start_aou )
722                             );
723                         }
724                     }
725                 }
726             );
727
728         } catch(E) {
729             alert(E);
730         }
731     },
732
733     'on_select' : function(list,twisty) {
734         var obj = this;
735         var sel_lists = {};
736
737         for (var i = 0; i < list.length; i++) {
738             var row_type = list[i].split('_')[0];
739             var id = list[i].split('_')[1];
740
741             if (!sel_lists[row_type]) sel_lists[row_type] = [];
742             sel_lists[row_type].push(id);
743
744             if (twisty) {
745                 switch(row_type) {
746                     case 'aou' : obj.on_click_aou(id,twisty); break;
747                     case 'sdist' : obj.on_select_sdist(id,twisty); break;
748                     default: break;
749                 }
750             }
751         }
752
753         if (!obj.focused_node_retrieve_id) return;
754
755         var row_type = obj.focused_node_retrieve_id.split('_')[0];
756         var id = obj.focused_node_retrieve_id.split('_')[1];
757
758         if (sel_lists[row_type]) { // the type focused is in the selection (usually the case)
759             switch(row_type) {
760                 case 'aou' : obj.on_click_aou(id,twisty); break;
761                 default: if (obj['on_click_' + row_type]) obj['on_click_' + row_type](sel_lists[row_type],twisty);
762             }
763         }
764     },
765
766     'on_select_sdist' : function(sdist_id,twisty) {
767         var obj = this;
768         try {
769             var sdist_tree = obj.map_sdist[ 'sdist_' + sdist_id ];
770             obj.funcs.push( function() { 
771                 document.getElementById('cmd_refresh_list').setAttribute('disabled','true'); 
772                 document.getElementById('sdist_lib_menu').setAttribute('disabled','true'); 
773             } );
774             if (sdist_tree.basic_summary()) {
775                 obj.funcs.push(
776                     function(c,a) {
777                         return function() {
778                             obj.append_member(c,a,[],'sbsum', false);
779                         }
780                     }( sdist_tree.basic_summary(), sdist_tree )
781                 );
782             }
783             if (sdist_tree.supplement_summary()) {
784                 obj.funcs.push(
785                     function(c,a) {
786                         return function() {
787                             obj.append_member(c,a,[],'sssum', false);
788                         }
789                     }( sdist_tree.supplement_summary(), sdist_tree )
790                 );
791             }
792             if (sdist_tree.index_summary()) {
793                 obj.funcs.push(
794                     function(c,a) {
795                         return function() {
796                             obj.append_member(c,a,[],'sisum', false);
797                         }
798                     }( sdist_tree.index_summary(), sdist_tree )
799                 );
800             }
801             if (sdist_tree.streams()) {
802                 for (var i = 0; i < sdist_tree.streams().length; i++) {
803                     obj.funcs.push(
804                         function(c,a) {
805                             return function() {
806                                 obj.append_member(c,a,[],'sstr', true);
807                             }
808                         }( sdist_tree.streams()[i], sdist_tree )
809                     )
810                 }
811             }
812             /* TODO: template editing would be convenient here, but a little too confusing
813             // add template nodes
814             var same_templates;
815             var has_bind_template;
816             if (sdist_tree.receive_unit_template()) {
817                 if (sdist_tree.bind_unit_template()) {
818                     has_bind_template = true;                    
819                     if (sdist_tree.receive_unit_template().id() == sdist_tree.bind_unit_template().id()) {
820                         same_templates = true;
821                         obj.funcs.push(
822                             function(c,a) {
823                                 return function() {
824                                     obj.append_member(c,a,[],'act', false, 'Receive/Bind Unit Template');
825                                 }
826                             }( sdist_tree.receive_unit_template(), sdist_tree )
827                         )
828                     }
829                 }
830
831                 if (!same_templates) {
832                     obj.funcs.push(
833                         function(c,a) {
834                             return function() {
835                                 obj.append_member(c,a,[],'act', false, 'Receive Unit Template');
836                             }
837                         }( sdist_tree.receive_unit_template(), sdist_tree )
838                     )
839                 }
840             }
841             if (has_bind_template && !same_templates) {
842                 obj.funcs.push(
843                     function(c,a) {
844                         return function() {
845                             obj.append_member(c,a,[],'act', false, 'Bind Unit Template');
846                         }
847                     }( sdist_tree.bind_unit_template(), sdist_tree )
848                 )
849             }
850             */
851             obj.funcs.push( function() { 
852                 document.getElementById('cmd_refresh_list').setAttribute('disabled','false'); 
853                 document.getElementById('sdist_lib_menu').setAttribute('disabled','false'); 
854             } );
855         } catch(E) {
856             alert(E);
857         }
858     },
859
860     'on_click_sdist' : function(sdist_ids,twisty) {
861         var obj = this;
862         try {
863             // draw sdist editor
864             if (typeof twisty == 'undefined') {
865                 var params = {};
866                 params.sdist_ids = sdist_ids;
867                 params.xul_id_prefix = 'sdist2';
868                 obj.editor_init('sdist', 'edit', params);
869             }
870         } catch(E) {
871             alert(E);
872         }
873     },
874
875     'on_click_sstr' : function(sstr_ids,twisty) {
876         var obj = this;
877         try {
878             // draw sstr editor
879             if (typeof twisty == 'undefined') {
880                 var params = {};
881                 params.sstr_ids = sstr_ids;
882                 obj.editor_init('sstr', 'edit', params);
883             }
884         } catch(E) {
885             alert(E);
886         }
887     },
888
889     'on_click_sbsum' : function(sbsum_ids,twisty) {
890         var obj = this;
891         try {
892             // draw sbsum editor
893             if (typeof twisty == 'undefined') {
894                 var params = {};
895                 params.sbsum_ids = sbsum_ids;
896                 obj.editor_init('sbsum', 'edit', params);
897             }
898         } catch(E) {
899             alert(E);
900         }
901     },
902
903     'on_click_sssum' : function(sssum_ids,twisty) {
904         var obj = this;
905         try {
906             // draw sssum editor
907             if (typeof twisty == 'undefined') {
908                 var params = {};
909                 params.sssum_ids = sssum_ids;
910                 obj.editor_init('sssum', 'edit', params);
911             }
912         } catch(E) {
913             alert(E);
914         }
915     },
916
917     'on_click_sisum' : function(sisum_ids,twisty) {
918         var obj = this;
919         try {
920             // draw sisum editor
921             if (typeof twisty == 'undefined') {
922                 var params = {};
923                 params.sisum_ids = sisum_ids;
924                 obj.editor_init('sisum', 'edit', params);
925             }
926         } catch(E) {
927             alert(E);
928         }
929     },
930
931     'on_click_aou' : function(org_id,twisty) {
932         var obj = this;
933         var org = obj.data.hash.aou[ org_id ];
934         var default_aou = obj.data.hash.aou[obj.default_lib];
935         obj.funcs.push( function() { 
936             document.getElementById('cmd_refresh_list').setAttribute('disabled','true'); 
937             document.getElementById('sdist_lib_menu').setAttribute('disabled','true'); 
938         } );
939         if (org.children()) {
940             for (var i = 0; i < org.children().length; i++) {
941                 var child = org.children()[i];
942                 if (orgIsMine(default_aou,child)) {
943                     obj.funcs.push(
944                         function(o,p) {
945                             return function() {
946                                 obj.append_org(o,p)
947                             }
948                         }(child,org)
949                     );
950                 }
951             }
952         } 
953         if (obj.map_sdist[ 'aou_' + org_id ]) {
954             for (var i = 0; i < obj.map_sdist[ 'aou_' + org_id ].length; i++) {
955                 obj.funcs.push(
956                     function(o,a) {
957                         return function() {
958                             obj.append_sdist(o,a);
959                         }
960                     }( org, obj.map_sdist[ 'aou_' + org_id ][i] )
961                 );
962             }
963         }
964         obj.funcs.push( function() { 
965             document.getElementById('cmd_refresh_list').setAttribute('disabled','false'); 
966             document.getElementById('sdist_lib_menu').setAttribute('disabled','false'); 
967         } );
968
969         // remove current editor
970         if (typeof twisty == 'undefined') {
971             document.getElementById('serial_manage_dists_editor_deck').selectedIndex = 0;
972         }
973     },
974
975     'append_org' : function (org,parent_org,params) {
976         var obj = this;
977         try {
978             if (obj.map_tree[ 'aou_' + org.id() ]) {
979                 var x = obj.map_tree[ 'aou_' + org.id() ];
980                 if (params) {
981                     for (var i in params) {
982                         x.setAttribute(i,params[i]);
983                     }
984                 }
985                 return x;
986             }
987
988             var data = {
989                 'row' : {
990                     'my' : {
991                         'aou' : org,
992                     }
993                 },
994                 'skip_all_columns_except' : [0,1,2],
995                 'retrieve_id' : 'aou_' + org.id(),
996                 'to_bottom' : true,
997                 'no_auto_select' : true,
998             };
999         
1000             var sdist_tree_list;
1001             if ( obj.org_ids.indexOf( Number( org.id() ) ) == -1 ) {
1002                 if ( get_bool( obj.data.hash.aout[ org.ou_type() ].can_have_vols() ) ) {
1003                     data.row.my.distribution_count = '0';
1004                 } else {
1005                     data.row.my.distribution_count = '';
1006                 }
1007             } else {
1008                 var d_count = 0;
1009                 sdist_tree_list = obj.network.simple_request(
1010                     'FM_SDIST_TREE_LIST_RETRIEVE_VIA_RECORD_ID_AND_ORG_IDS.authoritative',
1011                     [ ses(), obj.docid, [ org.id() ] ]
1012                 );
1013                 for (var i = 0; i < sdist_tree_list.length; i++) {
1014                     d_count++;
1015                     obj.map_sdist[ 'sdist_' + sdist_tree_list[i].id() ] = function(r){return r;}(sdist_tree_list[i]);
1016                     var streams = sdist_tree_list[i].streams();
1017                     for (var j = 0; j < streams.length; j++) {
1018                         obj.map_sstr[ 'sstr_' + streams[j].id() ] = function(r){return r;}(streams[j]);
1019                     }
1020                 }
1021                 data.row.my.distribution_count = d_count;
1022             }
1023             if (parent_org) {
1024                 data.node = obj.map_tree[ 'aou_' + parent_org.id() ];
1025             }
1026             var nparams = obj.list.append(data);
1027             var node = nparams.my_node;
1028             if (params) {
1029                 for (var i in params) {
1030                     node.setAttribute(i,params[i]);
1031                 }
1032             }
1033             obj.map_tree[ 'aou_' + org.id() ] = node;
1034
1035             if (org.children()) {
1036                 node.setAttribute('container','true');
1037             }
1038
1039             if (parent_org) {
1040                 if ( obj.data.hash.aou[ obj.data.list.au[0].ws_ou() ].parent_ou() == parent_org.id() ) {
1041                     data.node.setAttribute('open','true');
1042                 }
1043             } else {
1044                 obj.map_tree[ 'aou_' + org.id() ].setAttribute('open','true');
1045             }
1046
1047             if (sdist_tree_list) {
1048                 obj.map_sdist[ 'aou_' + org.id() ] = sdist_tree_list;
1049                 node.setAttribute('container','true');
1050             }
1051
1052             if (document.getElementById('show_sdists').checked) {
1053                 obj.funcs.push( function() { obj.on_click_aou( org.id() ); } );
1054                 node.setAttribute('open','true');
1055             }
1056
1057         } catch(E) {
1058             dump(E+'\n');
1059             alert(E);
1060         }
1061     },
1062
1063     'append_sdist' : function( org, sdist_tree, params ) {
1064         var obj = this;
1065         try {
1066             if (obj.map_tree[ 'sdist_' + sdist_tree.id() ]) {
1067                 var x = obj.map_tree[ 'sdist_' + sdist_tree.id() ];
1068                 if (params) {
1069                     for (var i in params) {
1070                         x.setAttribute(i,params[i]);
1071                     }
1072                 }
1073                 return x;
1074             }
1075
1076             var parent_node = obj.map_tree[ 'aou_' + org.id() ];
1077             var data = {
1078                 'row' : {
1079                     'my' : {
1080                         'aou' : org,
1081                         'sdist' : sdist_tree,
1082                         'distribution_count' : ''
1083                     }
1084                 },
1085                 'skip_all_columns_except' : [0,1,2],
1086                 'retrieve_id' : 'sdist_' + sdist_tree.id(),
1087                 'node' : parent_node,
1088                 'to_bottom' : true,
1089                 'no_auto_select' : true,
1090             };
1091             var nparams = obj.list.append(data);
1092             var node = nparams.my_node;
1093             obj.map_tree[ 'sdist_' + sdist_tree.id() ] =  node;
1094             if (params) {
1095                 for (var i in params) {
1096                     node.setAttribute(i,params[i]);
1097                 }
1098             }
1099             node.setAttribute('container','true');
1100             if (document.getElementById('show_groups').checked) {
1101                 node.setAttribute('open','true');
1102                 obj.funcs.push( function() { obj.on_select_sdist( sdist_tree.id(), true ); } );
1103             }
1104             var sstr_group_node_data = {
1105                 'row' : {
1106                     'my' : {
1107                         'label' : $('serialStrings').getString('serial.manage_dists.streams'),
1108                     }
1109                 },
1110                 'retrieve_id' : 'sstr-group_' + sdist_tree.id(),
1111                 'node' : node,
1112                 'to_bottom' : true,
1113                 'no_auto_select' : true,
1114             };
1115             nparams = obj.list.append(sstr_group_node_data);
1116             obj.map_tree[ 'sdist_sstr_group_' + sdist_tree.id() ] =  nparams.my_node;
1117         } catch(E) {
1118             dump(E+'\n');
1119             alert(E);
1120         }
1121     },
1122
1123     'append_member' : function( item, sdist_tree, attributes, type, group, label ) {
1124         var obj = this;
1125         try {
1126             if (obj.map_tree[ type + '_' + sdist_tree.id() + '_' + item.id() ]) {
1127                 var x = obj.map_tree[ type + '_' + item.id() ];
1128                 if (attributes) {
1129                     for (var i in attributes) {
1130                         x.setAttribute(i,attributes[i]);
1131                     }
1132                 }
1133                 return x;
1134             }
1135
1136             var parent_node;
1137             if (group) {
1138                 parent_node = obj.map_tree[ 'sdist_' + type + '_group_' + sdist_tree.id() ];
1139             } else {
1140                 parent_node = obj.map_tree[ 'sdist_' + sdist_tree.id() ];
1141             }
1142             var data = {
1143                 'row' : {
1144                     'my' : {
1145                         'aou' : obj.data.hash.aou[ sdist_tree.holding_lib() ],
1146                         'sdist' : sdist_tree,
1147                         'distribution_count' : ''
1148                     }
1149                 },
1150                 'retrieve_id' : type + '_' + item.id(),
1151                 'node' : parent_node,
1152                 'to_bottom' : true,
1153                 'no_auto_select' : true,
1154             };
1155             data['row']['my'][type] = item; // TODO: future optimization: get only the IDs of these leaves, then fetch the full row in 'retrieve_row'
1156             var nparams = obj.list.append(data);
1157             var node = nparams.my_node;
1158             obj.map_tree[ type + '_' + sdist_tree.id() + '_' + item.id() ] =  node;
1159             if (label) {
1160                 data['row']['my']['label'] = label;
1161             }
1162             if (attributes) {
1163                 for (var i in attributes) {
1164                     node.setAttribute(i,attributes[i]);
1165                 }
1166             }
1167
1168         } catch(E) {
1169             dump(E+'\n');
1170             alert(E);
1171         }
1172     },
1173
1174     'list_init' : function( params ) {
1175
1176         try {
1177             netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
1178             var obj = this;
1179             
1180             JSAN.use('circ.util');
1181             var columns = [
1182                 {
1183                     'id' : 'tree_location',
1184                     'label' : 'Location',
1185                     'flex' : 1, 'primary' : true, 'hidden' : false, 
1186                     'render' : function(my) { 
1187                         if (my.label) { return my.label; }
1188                         if (my.sstr) { return $('serialStrings').getFormattedString('serial.manage_dists.stream_num', [my.sstr.id()]); }
1189                         if (my.sbsum) { return $('serialStrings').getString('serial.manage_dists.sbsum'); }
1190                         if (my.sssum) { return $('serialStrings').getString('serial.manage_dists.sssum'); }
1191                         if (my.sisum) { return $('serialStrings').getString('serial.manage_dists.sisum'); }
1192                         if (my.sdist) { return my.sdist.label(); }
1193                         if (my.aou) { return $('serialStrings').getFormattedString('serial.manage_dists.library_label', [my.aou.shortname(), my.aou.name()]); }
1194                         return "???";
1195                     },
1196                 },
1197                 {
1198                     'id' : 'distribution_count',
1199                     'label' : $('serialStrings').getString('serial.manage_dists.distributions'),
1200                     'flex' : 0, 'primary' : false, 'hidden' : false, 
1201                     'render' : function(my) { return my.distribution_count; },
1202                 }
1203             ];
1204             JSAN.use('util.list'); obj.list = new util.list('sdists_tree');
1205             obj.list.init(
1206                 {
1207                     'no_auto_select' : true,
1208                     'columns' : columns,
1209                     'map_row_to_columns' : circ.util.std_map_row_to_columns(' '),
1210                     'retrieve_row' : function(params) {
1211
1212                         var row = params.row;
1213                         obj.funcs.push(
1214                             function() {
1215
1216                                 if (typeof params.on_retrieve == 'function') {
1217                                     params.on_retrieve(row);
1218                                 }
1219
1220                             }
1221                         );
1222
1223                         return row;
1224                     },
1225                     'on_click' : function(ev) {
1226                         netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserRead');
1227                         var row = {}; var col = {}; var nobj = {};
1228                         obj.list.node.treeBoxObject.getCellAt(ev.clientX,ev.clientY,row,col,nobj); 
1229                         if ((row.value == -1)||(nobj.value != 'twisty')) { return; } // on_click runs for twistys only
1230
1231                         var node = obj.list.node.contentView.getItemAtIndex(row.value);
1232                         var list = [ node.getAttribute('retrieve_id') ];
1233                         if (typeof obj.on_select == 'function') {
1234                             obj.on_select(list,true);
1235                         }
1236                         if (typeof window.xulG == 'object' && typeof window.xulG.on_select == 'function') {
1237                             window.xulG.on_select(list);
1238                         }
1239                     },
1240                     'on_select' : function(ev) {
1241                         JSAN.use('util.functional');
1242                         
1243                         // get the actual node clicked to determine which editor to use
1244                         if (obj.list.node.view.selection.currentIndex > -1) {
1245                             var node = obj.list.node.contentView.getItemAtIndex(obj.list.node.view.selection.currentIndex);
1246                             obj.focused_node_retrieve_id = node.getAttribute('retrieve_id');
1247                         }
1248
1249                         var sel = obj.list.retrieve_selection();
1250                         obj.controller.view.sel_clip.disabled = sel.length < 1;
1251                         obj.sel_list = util.functional.map_list(
1252                             sel,
1253                             function(o) { return o.getAttribute('retrieve_id'); }
1254                         );
1255                         obj.toggle_actions();
1256                         if (typeof obj.on_select == 'function') {
1257                             obj.on_select(obj.sel_list);
1258                         }
1259                         if (typeof window.xulG == 'object' && typeof window.xulG.on_select == 'function') {
1260                             window.xulG.on_select(obj.sel_list);
1261                         }
1262                     },
1263                 }
1264             );
1265
1266             obj.controller.render();
1267
1268         } catch(E) {
1269             this.error.sdump('D_ERROR','serial/manage_dists.list_init: ' + E + '\n');
1270             alert(E);
1271         }
1272     },
1273
1274     'toggle_actions' : function() {
1275         var obj = this;
1276         try {
1277             var found_aou = false; var found_sdist = false; var found_sstr = false; var found_sbsum = false; var found_sssum = false; var found_sisum = false; var found_sstr_group = false;
1278             for (var i = 0; i < obj.sel_list.length; i++) {
1279                 var type = obj.sel_list[i].split(/_/)[0];
1280                 switch(type) {
1281                     case 'aou' : 
1282                         found_aou = true; 
1283                     break;
1284                     case 'sdist' : found_sdist = true; break;
1285                     case 'sstr' : found_sstr = true; break;
1286                     case 'sbsum' : found_sbsum = true; break;
1287                     case 'sssum' : found_sssum = true; break;
1288                     case 'sisum' : found_sisum = true; break;
1289                     case 'sstr-group' : found_sstr_group = true; break;
1290                 }
1291             }
1292             obj.controller.view.cmd_add_sstr.setAttribute('disabled','true');
1293             obj.controller.view.cmd_delete_sstr.setAttribute('disabled','true');
1294             obj.controller.view.cmd_mark_library.setAttribute('disabled','true');
1295             obj.controller.view.cmd_delete_sdist.setAttribute('disabled','true');
1296             if (found_aou) {
1297                 obj.controller.view.cmd_mark_library.setAttribute('disabled','false');
1298             }
1299             if (found_sdist) {
1300                 obj.controller.view.cmd_delete_sdist.setAttribute('disabled','false');
1301                 obj.controller.view.cmd_add_sstr.setAttribute('disabled','false');
1302             }
1303             if (found_sstr_group) {
1304                 obj.controller.view.cmd_add_sstr.setAttribute('disabled','false');
1305             }
1306             if (found_sstr) {
1307                 obj.controller.view.cmd_delete_sstr.setAttribute('disabled','false');
1308                 obj.controller.view.cmd_transfer_sstrs.setAttribute('disabled','false');
1309             }
1310             if (found_sbsum) {
1311             }
1312             if (found_sssum) {
1313             }
1314             if (found_sisum) {
1315             }
1316         } catch(E) {
1317             obj.error.standard_unexpected_error_alert(document.getElementById('catStrings').getString('staff.cat.copy_browser.actions.error'),E);
1318         }
1319     },
1320
1321     'refresh_list' : function() { 
1322         try {
1323             var obj = this;
1324             obj.list.clear();
1325             obj.map_tree = {};
1326             obj.map_sdist = {};
1327             obj.map_sstr = {};
1328             obj.org_ids = obj.network.simple_request('FM_SDIST_AOU_IDS_RETRIEVE_VIA_RECORD_ID.authoritative',[ obj.docid ]);
1329             if (typeof obj.org_ids.ilsevent != 'undefined') throw(obj.org_ids);
1330             JSAN.use('util.functional'); 
1331             obj.org_ids = util.functional.map_list( obj.org_ids, function (o) { return Number(o); });
1332             /*
1333             var org = obj.data.hash.aou[ obj.data.list.au[0].ws_ou() ];
1334             obj.show_libs( org );
1335             */
1336             obj.default_lib = document.getElementById('sdist_lib_menu').value;
1337             obj.show_my_libs( obj.default_lib );
1338         } catch(E) {
1339             this.error.standard_unexpected_error_alert(document.getElementById('catStrings').getString('staff.cat.copy_browser.refresh_list.error'),E);
1340         }
1341     },
1342 };
1343
1344 dump('exiting serial/manage_dists.js\n');