]> git.evergreen-ils.org Git - Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/cat/browse_list.js
some error handling
[Evergreen.git] / Evergreen / staff_client / chrome / content / evergreen / cat / browse_list.js
1 // find_this_id = document id
2
3 var org_shortname2id = {};
4 var my_treerow;
5 var browse_meter_per = 0;
6 var orgs_with_copies = [];
7 var orgs_with_copies_hash = {};
8
9 function my_init() {
10         timer_init('cat');
11         mw.sdump('D_CAT','TESTING: browse_list.js: ' + mw.G['main_test_variable'] + '\n');
12         var tc = document.getElementById('browse_list_tree_children');
13         build_tree_branch(tc,mw.G['org_tree'],true);
14         my_treerow = document.getElementById( 'org_unit_' + mw.G.user_ou.shortname() ).firstChild;
15         document.getElementById('browse_meter').value = 0;
16         document.getElementById('browse_meter').setAttribute('real', '0.0');
17         gather_copies();
18         //populate_tree();
19 }
20
21 function refresh_browse_list() {
22         mw.sdump('D_CAT','=-=-=-=-=-=-=-=-=\n\n\nrefresh_browse_list()\n');
23         // Prune tree
24         var nl = document.getElementsByTagName('treeitem');
25         for (var i = 0; i < nl.length; i++) {
26                 var v_treeitem = nl[i];
27                 if (v_treeitem.getAttribute('object_type') == 'volume') {
28                         var org_treechildren = v_treeitem.parentNode;
29                         var org_treeitem = org_treechildren.parentNode;
30                         org_treeitem.removeChild(org_treechildren);
31                         var org_treerow = org_treeitem.firstChild;
32                         org_treerow.childNodes[1].setAttribute('label','0');
33                         org_treerow.childNodes[2].setAttribute('label','0');
34                 }
35         }
36         document.getElementById('browse_meter').value = 0;
37         document.getElementById('browse_meter').setAttribute('real', '0.0');
38         gather_copies();
39 }
40
41 function button_toggle_my_libraries(ev) {
42         // label = Hide My Libraries
43         // alt_label = Show My Libraries
44         var target = document.getElementById('browse_list_button1');
45         if (!target) { mw.sdump('D_CAT','eh?\n'); return; }
46         swap_attributes('browse_list_button1','label','alt_label');
47         var toggle = cycle_attribute( target,'toggle', [ '1', '2' ] );
48         for (var i in mw.G.my_orgs) {
49                 var lib = mw.G.my_orgs[i];
50                 var item = document.getElementById('org_unit_'+lib.shortname());
51                 if (item) {
52                         if (toggle == '2') {
53                                 hide_branch(item);
54                         } else {
55                                 unhide_branch(item);
56                         }
57                 }
58         }
59 }
60
61 function button_toggle_libraries(ev) {
62         // label = Show Other Libraries With Copies
63         // alt_label = Show Just My Libraries
64         var target = document.getElementById('browse_list_button2');
65         if (!target) { mw.sdump('D_CAT','eh?\n'); return; }
66         swap_attributes('browse_list_button2','label','alt_label');
67         var toggle = cycle_attribute( target,'toggle',['1','2'] );
68         if (toggle == '1') {
69                 mw.sdump('D_CAT','Showing just my libraries...\n');
70                 /*hide_branch( document.getElementById('org_unit_PINES') );
71                 for (var i = 0; i < mw.G.my_orgs.length; i++) {
72                         unhide_branch(
73                                 document.getElementById( 'org_unit_' + mw.G.my_orgs[i].shortname() )
74                         );
75                 }*/
76                 var nl = document.getElementsByTagName('treeitem');
77                 for (var i = 0; i < nl.length; i++) {
78                         var item = nl[i];
79                         if (item.getAttribute('id').substr(0,9) != 'org_unit_') continue;
80                         if (mw.G.my_orgs_hash[ item.getAttribute('myid') ]) {
81                                 //item.setAttribute('hidden','false');
82                                 unhide_branch(item);
83                         } else {
84                                 //item.setAttribute('hidden','true');
85                                 hide_branch(item);
86                         }
87                 }
88         } else {
89                 mw.sdump('D_CAT','Showing other libraries with copies...\n');
90                 var nl = document.getElementsByTagName('treeitem');
91                 for (var i = 0; i < nl.length; i++) {
92                         var item = nl[i];
93                         if (item.getAttribute('copies') == 'true') {
94                                 //item.setAttribute('hidden','false');
95                                 //mw.sdump('D_CAT','\tunhiding ' + item.getAttribute('id') + '\n');
96                                 unhide_branch(item);
97                         } else {
98                                 //item.setAttribute('hidden','true');
99                                 //mw.sdump('D_CAT','\thiding ' + item.getAttribute('id') + '\n');
100                                 //hide_branch(item);
101                         }
102                 }
103
104         }
105 }
106
107 function unhide_branch(item,do_open,do_copies) {
108         if (item.getAttribute('id') == 'org_unit_PINES') { return; }
109         //mw.sdump('D_CAT','Unhiding ' + item.getAttribute('id') + '\n');
110         item.setAttribute('hidden','false');
111         if (do_open) {
112                 item.setAttribute('open','true');
113         }
114         if (do_copies) {
115                 item.setAttribute('copies','true');
116         }
117         if (item.parentNode && item.parentNode.setAttribute) {
118                 var id = item.parentNode.getAttribute('id');
119                 if (id.substr(0,7) != 'browse_' && id != 'org_unit_PINES') {
120                         unhide_branch(item.parentNode,do_open,do_copies);
121                 }
122         }
123 }
124
125 function hide_branch(item,do_open,do_copies) {
126         if (item.getAttribute('id') == 'org_unit_PINES') { return; }
127         //mw.sdump('D_CAT','Hiding ' + item.getAttribute('id') + '\n');
128         item.setAttribute('hidden','true');
129         if (do_open) {
130                 item.setAttribute('open','false');
131         }
132         if (do_copies) {
133                 item.setAttribute('copies','true');
134         }
135         if (item.parentNode && item.parentNode.setAttribute) {
136                 var id = item.parentNode.getAttribute('id');
137                 if (id.substr(0,7) != 'browse_' && id != 'org_unit_PINES') {
138                         hide_branch(item.parentNode,do_open,do_copies);
139                 }
140         }
141 }
142
143 function gather_copies() {
144         // loop the libs
145         mw.sdump('D_CAT','Hello : ' + timer_elapsed('world') + '\n');
146 /*      user_async_request(
147                         'open-ils.cat',
148                         'open-ils.cat.asset.copy_tree.global.retrieve',
149                         [ mw.G['auth_ses'][0], find_this_id  ],
150                         gather_copies_callback
151                 );
152 */
153         var orgs_with_copies = [];
154         try {
155                 orgs_with_copies = user_request(
156                         'open-ils.cat',
157                         'open-ils.cat.actor.org_unit.retrieve_by_title',
158                         [ find_this_id ]
159                 )[0];
160         } catch(E) {
161                 handle_error(E);
162         }
163         for (var i = 0; i < orgs_with_copies.length; i++) {
164                 orgs_with_copies_hash[ orgs_with_copies[i] ] = true;
165         }
166         var bucket = new Array();
167         for (var i = 0; i < mw.G.my_orgs.length; i++ ) {
168                 //if (find_id_object_in_list( mw.G.aout_list, mw.G.my_orgs[i].ou_type() ).can_have_vols() == '0')
169                 if ( mw.G.aout_list[ mw.G.my_orgs[i].ou_type() ].can_have_vols() == '0')
170                         continue;
171                 if ( ! orgs_with_copies_hash[ mw.G.my_orgs[i].id() ] ) continue;
172                 bucket.push( mw.G.my_orgs[i].id() );
173         }
174         document.getElementById('browse_libs').setAttribute('value','Retrieving my copies...');
175         user_async_request(
176                 'open-ils.cat',
177                 'open-ils.cat.asset.copy_tree.retrieve',
178                 [ mw.G['auth_ses'][0], find_this_id, bucket ],
179                 function (request) {
180                         gather_copies_callback(request);
181                         document.getElementById('browse_libs').setAttribute('value','Retrieving copies from other libraries...');
182                         gather_other_copies();
183                 }
184         );
185         mw.sdump('D_CAT','((((((((((((((((( Count = ' + counter_incr('world') + '\n');
186 }
187
188 function gather_other_copies() {
189         var w_s = 10; var c_s = 0;
190         var bucket = new Array();
191
192         var nl = document.getElementsByTagName('treeitem');
193         for (var i = 0; i < nl.length; i++) {
194                 var item = nl[i];
195                 if (item.getAttribute('can_have_vols') == '0') continue;
196                 //if ( find_id_object_in_list( mw.G.my_orgs, item.getAttribute('myid') ) ) { continue; }
197                 if ( mw.G.my_orgs_hash[ item.getAttribute('myid') ] ) { continue; }
198                 if ( ! orgs_with_copies_hash[ item.getAttribute('myid') ] ) continue;
199                 bucket.push( item.getAttribute('myid') );
200                 if (++c_s >= w_s) {
201                         user_async_request(
202                                 'open-ils.cat',
203                                 'open-ils.cat.asset.copy_tree.retrieve',
204                                 [ mw.G['auth_ses'][0], find_this_id, bucket ],
205                                 gather_copies_callback
206                         );
207                         mw.sdump('D_CAT','((((((((((((((((( Count = ' + counter_incr('world') + '\n');
208                         bucket = new Array();
209                         c_s = 0;
210                 }
211         }
212         if (bucket.length > 0) {
213                 user_async_request(
214                         'open-ils.cat',
215                         'open-ils.cat.asset.copy_tree.retrieve',
216                         [ mw.G['auth_ses'][0], find_this_id, bucket ],
217                         gather_copies_callback
218                 );
219                 mw.sdump('D_CAT','((((((((((((((((( Count = ' + counter_incr('world') + '\n');
220         }
221         browse_meter_per = 100 / counter_peek('world');
222         mw.sdump('D_CAT',timer_elapsed('world') + ' : World : ' + timer_elapsed('gather') + '\n');
223 }
224
225 function find_my_treerow_index() {
226         var nl = document.getElementById('browse_list_tree').getElementsByTagName('treerow');
227         var count = 0;
228         //mw.sdump('D_CAT','find_my_treerow:  count = ' + count + '  nl.length = ' + nl.length + '\n');
229         for (var i = 0; i < nl.length; i++) {
230                 var row = nl[i];
231                 var item = row.parentNode;
232                 if (item.getAttribute('id') == 'org_unit_' + mw.G.user_ou.shortname() ) {
233                         return count;
234                 }
235                 var open_attr = item.getAttribute('open');
236                 var hidden_prop = item.hidden;
237                 //mw.sdump('D_CAT','id = ' + item.getAttribute('id') + '   hidden_attr = ' + hidden_attr + '   hidden_prop = ' + hidden_prop + '\n');
238                 if (hidden_prop.toString() == 'false' && open_attr.toString() == 'true') {
239                         count++;
240                 }
241         }
242         return 0;
243 }
244
245 function gather_copies_callback(request) {
246         mw.sdump('D_CAT','gather_copies_callback : ' + timer_elapsed('gather') + ' : ' + ' count = ' + counter_incr('gather') + '\n');
247         var result = request.getResultObject();
248         var n_volumes = 0; var n_copies = 0; var flag = false;
249         //mw.sdump('D_CAT','copybrowser result = ' + js2JSON(result) + '\n=-=-=\n');
250         for (var y in result) {
251                 if (result[y] && (typeof(result[y])=='object')) {
252                         var volume = result[y]; n_volumes++;
253                         //mw.sdump('D_CAT','\nvolume = ' + js2JSON(volume) + '\n');
254                         mw.sdump('D_CAT',' volume id = ' + volume.id() + '\n');
255                         var lib = find_ou( mw.G.org_tree, volume.owning_lib() );
256                         //mw.sdump('D_CAT','lib = ' + js2JSON(lib) + '\n');
257                         if ( lib.shortname() == mw.G.user_ou.shortname() ) { flag = true; }
258                         var callnumber = volume.label();
259                         var copies = volume.copies();
260                         //mw.sdump('D_CAT','\tcopies = ' + js2JSON(copies) + '\n');
261                         var item = document.getElementById('org_unit_'+lib.shortname());
262                         if (!item) { mw.sdump('D_CAT','skipping\n'); continue; }
263
264                         var item_row = item.firstChild;
265                         var volumes_treecell;
266                         if (item_row.childNodes.length == 1) {
267                                 volumes_treecell = document.createElement('treecell');
268                                 volumes_treecell.setAttribute('label','0');
269                                 item_row.appendChild(volumes_treecell);
270                         } else {
271                                 volumes_treecell = item_row.childNodes[1];
272                         }
273                         volumes_treecell.setAttribute(
274                                 'label',
275                                 parseInt(volumes_treecell.getAttribute('label')) + 1
276                         );
277
278                         var copies_treecell;
279                         if (item_row.childNodes.length < 3) {
280                                 copies_treecell = document.createElement('treecell');
281                                 copies_treecell.setAttribute('label','0');
282                                 item_row.appendChild(copies_treecell);
283                         } else {
284                                 copies_treecell = item_row.childNodes[2];
285                         }
286                         copies_treecell.setAttribute(
287                                 'label',
288                                 parseInt(copies_treecell.getAttribute('label')) + copies.length
289                         );
290
291
292                         var cn_treechildren;
293                         var nl = item.getElementsByTagName('treechildren');
294                         //unhide_branch(item,false,true);
295                         item.setAttribute('copies',true);
296                         if (nl.length == 0) {
297                                 cn_treechildren = document.createElement('treechildren');
298                                 item.appendChild(cn_treechildren);
299                         } else {
300                                 cn_treechildren = nl[0];
301                         }
302
303                         var cn_treeitem = document.createElement('treeitem');
304                                 cn_treeitem.setAttribute('container','true');
305                                 cn_treeitem.setAttribute('open','true');
306                                 cn_treeitem.setAttribute('object_type','volume');
307                                 cn_treeitem.setAttribute('volume_id',volume.id());
308                                 cn_treeitem.setAttribute('callnumber',volume.label());
309                                 cn_treeitem.setAttribute('ou_id',lib.id());
310
311                         cn_treechildren.appendChild(cn_treeitem);
312
313                         var cn_treerow = document.createElement('treerow');
314                         cn_treeitem.appendChild(cn_treerow);
315
316                         var cn_treecell = document.createElement('treecell');
317                                 cn_treecell.setAttribute('label',callnumber);
318                         cn_treerow.appendChild(cn_treecell);
319
320                         var treechildren = document.createElement('treechildren');
321                         cn_treeitem.appendChild(treechildren);
322                         //mw.sdump('D_CAT', 'org_unit_'+lib+' item = '+item.tagName+'\n');
323                         for (var j = 0; j < copies.length; j++) {
324                                 var copy = copies[j]; n_copies++;
325                                 //mw.sdump('D_CAT','barcode: ' + copy.barcode() + '\n');
326
327                                 var treeitem = document.createElement('treeitem');
328                                         treeitem.setAttribute('open','true');
329                                         treeitem.setAttribute('container','true');
330                                         treeitem.setAttribute('class','barcode_row');
331                                         treeitem.setAttribute('object_type','copy');
332                                         treeitem.setAttribute('ou_shortname',lib.shortname());
333                                         treeitem.setAttribute('ou_id',lib.id());
334                                         treeitem.setAttribute('callnumber',callnumber);
335                                         treeitem.setAttribute('barcode',copy.barcode());
336                                         treeitem.setAttribute('copy_id',copy.id());
337                                         treeitem.setAttribute('volume_id',volume.id());
338                                         //treeitem.setAttribute('copy',js2JSON(copy));
339                                 treechildren.appendChild(treeitem);
340
341                                 var treerow = document.createElement('treerow');
342                                 treeitem.appendChild(treerow);
343
344                                 var list = [ 
345                                         copy.barcode() , '', '', lib.shortname() , callnumber , copy.copy_number() ,
346                                         //find_id_object_in_list( mw.G.acpl_list, copy.location() ).name() , 
347                                         mw.G.acpl_hash[ copy.location() ].name() ,
348                                         //find_ou( mw.G.org_tree, copy.circ_lib() ).shortname() , 
349                                         mw.G.org_tree_hash[ copy.circ_lib() ].shortname(),
350                                         yesno( copy.circulate() ) , yesno( copy.ref() ) ,
351                                         yesno( copy.opac_visible() ) , copy.circ_as_type() , copy.circ_modifier() ,
352                                         copy.loan_duration() , copy.fine_level() , copy.create_date() ,
353                                         copy.creator() , copy.edit_date() , copy.editor() , copy.deposit() ,
354                                         copy.deposit_amount() , copy.price() , copy.status()
355                                 ];
356
357                                 for (var i = 0; i < list.length; i++ ) {
358                                         var treecell = document.createElement('treecell');
359                                                 treecell.setAttribute('label',list[i]);
360                                         treerow.appendChild(treecell);
361                                 }
362                                                 
363                         }
364                 } else {
365                         mw.sdump('D_CAT','gather_copies problem: ' + result[y] + '\n');
366                         //throw(result[0]);
367                 }
368         }
369         var tree = document.getElementById('browse_list_tree');
370         if (tree.currentIndex != -1) {
371                 //mw.sdump('D_CAT','currentIndex != -1 = ' + tree.currentIndex + '\n');
372                 //tree.treeBoxObject.scrollToRow( tree.currentIndex );
373                 tree.treeBoxObject.ensureRowIsVisible( tree.currentIndex );
374         } else if (flag) {
375                 //mw.sdump('D_CAT','currentIndex == -1\n');
376                 var find = find_my_treerow_index();
377                 mw.sdump('D_CAT','find = ' + find + ' n_volumes = ' + n_volumes + ' n_copies = ' + n_copies + '\n');
378                 //alert('find = ' + find + ' n_volumes = ' + n_volumes + ' n_copies = ' + n_copies + '\n');
379                 if (find > 0) { 
380                         find = find + n_volumes + n_copies;
381                         tree.view.selection.select( find ); 
382                 }
383                 //tree.treeBoxObject.ensureRowIsVisible( find );
384         }
385         var meter = document.getElementById('browse_meter');
386         var real = parseFloat( meter.getAttribute('real') ) + browse_meter_per;
387         meter.setAttribute('real',real);
388         meter.value = Math.ceil( real );
389         if ( counter_peek('gather') == counter_peek('world') ) {
390                 document.getElementById('browse_libs').setAttribute('value','Finished');
391                 document.getElementById('browse_libs').setAttribute('hidden','true');
392                 meter.value = 100;
393                 meter.setAttribute('hidden','true');
394         }
395         mw.sdump('D_CAT','gather callback   done : ' + timer_elapsed('gather') + '\n');
396 }
397
398
399 function build_tree_branch(treechildren,org,hide) {
400         var id = org.id();
401         var name = org.name();
402         var shortname = org.shortname(); org_shortname2id[shortname] = id;
403         var children = org.children();
404         var flag = mw.G.aout_hash[ org.ou_type() ].can_have_vols() == '1';
405         var item = make_treeitem('org_unit_' + shortname, name, flag);
406         item.setAttribute('hidden',hide);
407         item.setAttribute('ou_id',org.id());
408         //if ( find_id_object_in_list( mw.G.my_orgs, id ) ) { 
409         if ( mw.G.my_orgs_hash[ id ] ) {
410                 item.setAttribute('open','true'); 
411                 item.setAttribute('hidden','false');
412                 item.setAttribute('myorg','true');
413         }
414         item.setAttribute( 
415                 'can_have_vols', 
416                 //find_id_object_in_list( mw.G.aout_list, org.ou_type() ).can_have_vols() 
417                 mw.G.aout_hash[ org.ou_type() ].can_have_vols()
418         );
419         item.setAttribute( 'myid', org.id() );
420         if (children && (children.length > 0)) {
421                 var n_treechildren = document.createElement('treechildren');
422                 for (var i in children) {
423                         var child = children[i];
424                         build_tree_branch(n_treechildren, child, true);
425                 }
426                 item.appendChild(n_treechildren);
427         }
428         treechildren.appendChild(item);
429 }
430
431 function make_treeitem(id,name,flag) {
432         var treeitem = document.createElement('treeitem');
433                 treeitem.setAttribute('id',id);
434                 treeitem.setAttribute('container','true');
435         var treerow = make_treerow(name,flag);
436                 treeitem.appendChild(treerow);
437                 treeitem.setAttribute('object_type','org_unit');
438         return treeitem;
439 }
440
441 function make_treerow(name,flag) {
442         var treerow = document.createElement('treerow');
443         var treecell = document.createElement('treecell');
444                 treecell.setAttribute('label',name);
445         treerow.appendChild(treecell);
446         treecell = document.createElement('treecell');
447                 if (flag) treecell.setAttribute('label',0);
448         treerow.appendChild(treecell);
449         treecell = document.createElement('treecell');
450                 if (flag) treecell.setAttribute('label',0);
451         treerow.appendChild(treecell);
452
453         return treerow;
454 }
455
456 function get_selected_rows_by_object_type(tree,object_type) {
457         var items = get_list_from_tree_selection(tree);
458         var command = "filter_list(items, function (obj) { return obj.getAttribute('object_type') == '" + object_type + "'; } );";
459         return eval(command);
460 }
461
462 function build_CopyBrowser_Context(ev) {
463         mw.sdump('D_CAT','build_CopyBrowser_Context: ev.target.tagName = ' + ev.target.tagName + '\n');
464         mw.sdump('D_CAT','this = ' + this.tagName + '\n');
465
466         var popup = document.getElementById('browse_menu');
467         empty_widget(popup);
468
469         var volume_flag = 0; var copy_flag = 0; var library_flag = 0;
470
471         var hitlist = document.getElementById('browse_list_tree');
472         var start = new Object(); var end = new Object();
473         var numRanges = hitlist.view.selection.getRangeCount();
474         for (var t=0; t<numRanges; t++){
475                 hitlist.view.selection.getRangeAt(t,start,end);
476                 for (var v=start.value; v<=end.value; v++){
477                         var i = hitlist.contentView.getItemAtIndex(v);
478                         //mw.sdump('D_CAT',i + ':' + i.firstChild.childNodes.length + '\n');
479                         switch( i.getAttribute('object_type') ) {
480                                 case 'volume' : volume_flag++; break;
481                                 case 'copy' : copy_flag++; break;
482                                 case 'org_unit' : if (i.getAttribute('can_have_vols') == '1') library_flag++; break;
483                         }
484                 }
485         }
486         mw.sdump('D_CAT','volume_flag = ' + volume_flag + ' copy_flag = ' + copy_flag + ' library_flag = ' + library_flag + '\n');
487         if (library_flag > 0) {
488                 var menuitem = document.createElement('menuitem');
489                 popup.appendChild(menuitem);
490                         menuitem.setAttribute('label','Add Volumes');
491                         menuitem.setAttribute('command','cmd_volume_add');
492                 popup.appendChild( document.createElement( 'menuseparator' ) );
493         }
494         if (volume_flag > 0) {
495                 var menuitem = document.createElement('menuitem');
496                 popup.appendChild(menuitem);
497                         if (volume_flag > 1) {
498                                 menuitem.setAttribute('label','Edit Volumes');
499                         } else {
500                                 menuitem.setAttribute('label','Edit Volume');
501                         }
502                         menuitem.setAttribute('command','cmd_volume_edit');
503                 popup.appendChild( document.createElement( 'menuseparator' ) );
504                 menuitem = document.createElement('menuitem');
505                 popup.appendChild(menuitem);
506                         menuitem.setAttribute('label','Add Copies');
507                         menuitem.setAttribute('command','cmd_copy_add');
508                 menuitem = document.createElement('menuitem');
509                 popup.appendChild( document.createElement( 'menuseparator' ) );
510         }
511         if (copy_flag > 0) {
512                 var menuitem = document.createElement('menuitem');
513                 popup.appendChild(menuitem);
514                         if (copy_flag > 1) {
515                                 menuitem.setAttribute('label','Edit Copies');
516                         } else {
517                                 menuitem.setAttribute('label','Edit Copy');
518                         }
519                         menuitem.setAttribute('command','cmd_copy_edit');
520                 popup.appendChild( document.createElement( 'menuseparator' ) );
521         }
522         if (volume_flag > 0) {
523                 var menuitem = document.createElement('menuitem');
524                 popup.appendChild(menuitem);
525                         if (volume_flag > 1) {
526                                 menuitem.setAttribute('label','Delete Volumes');
527                         } else {
528                                 menuitem.setAttribute('label','Delete Volume');
529                         }
530                         menuitem.setAttribute('command','cmd_volume_delete');
531                 popup.appendChild( document.createElement( 'menuseparator' ) );
532
533         }
534         if (copy_flag > 0) {
535                 var menuitem = document.createElement('menuitem');
536                 popup.appendChild(menuitem);
537                         if (copy_flag > 1) {
538                                 menuitem.setAttribute('label','Delete Copies');
539                         } else {
540                                 menuitem.setAttribute('label','Delete Copy');
541                         }
542                         menuitem.setAttribute('command','cmd_copy_delete');
543                 popup.appendChild( document.createElement( 'menuseparator' ) );
544         }
545
546         var menuitem = document.createElement('menuitem');
547         popup.appendChild(menuitem);
548                 menuitem.setAttribute('label','Refresh Listing');
549                 menuitem.setAttribute('command','cmd_refresh');
550 }
551
552 function volume_add(tab,params) {
553         mw.sdump('D_CAT','trying to volume_add()\n');
554         params['shortcut'] = 'volume_add';
555         var w;
556         //var items = get_selected_rows(tree);
557         var items = get_list_from_tree_selection(params.tree);
558         items = filter_list(
559                 items,
560                 function (obj) {
561                         return obj.getAttribute('object_type') == 'org_unit';
562                 }
563         );
564         var chrome = 'chrome://evergreen/content/cat/volume_copy_add_wizard.xul';
565         if (tab) {
566                 parentWindow.new_tab('main_tabbox');
567                 w = parentWindow.replace_tab('main_tabbox','Add Volume',chrome);
568         } else {
569                 w = mw.new_window( chrome );
570         }
571         mw.sdump('D_CAT','setting use_this_tree\n');
572         w.tree_items = items;
573         w.record_id = find_this_id;
574         w.params = params;
575 }
576
577 function copy_add(tab,params) {
578         mw.sdump('D_CAT','trying to copy_add()\n');
579         params['shortcut'] = 'copy_add';
580         var w;
581         //var items = get_selected_rows(tree);
582         var items = get_list_from_tree_selection(params.tree);
583         items = filter_list(
584                 items,
585                 function (obj) {
586                         return obj.getAttribute('object_type') == 'volume';
587                 }
588         );
589         var chrome = 'chrome://evergreen/content/cat/copy_add_wizard.xul';
590         if (tab) {
591                 parentWindow.new_tab('main_tabbox');
592                 w = parentWindow.replace_tab('main_tabbox','Add Copy',chrome);
593         } else {
594                 w = mw.new_window( chrome );
595         }
596         mw.sdump('D_CAT','setting use_this_tree\n');
597         w.tree_items = items;
598         w.record_id = find_this_id;
599         w.params = params;
600 }
601
602 function volume_edit(tab,params) {
603         mw.sdump('D_CAT','trying to volume_edit()\n');
604         params['shortcut'] = 'volume_edit';
605         var w;
606         //var items = get_selected_rows(tree);
607         var items = get_list_from_tree_selection(params.tree);
608         items = filter_list(
609                 items,
610                 function (obj) {
611                         return obj.getAttribute('object_type') == 'volume';
612                 }
613         );
614         var chrome = 'chrome://evergreen/content/cat/volume_edit_wizard.xul';
615         if (tab) {
616                 parentWindow.new_tab('main_tabbox');
617                 w = parentWindow.replace_tab('main_tabbox','Edit Volumes',chrome);
618         } else {
619                 w = mw.new_window( chrome );
620         }
621         mw.sdump('D_CAT','setting use_this_tree\n');
622         w.tree_items = items;
623         w.record_id = find_this_id;
624         w.params = params;
625
626 }
627
628 function volume_delete(tab,params) {
629         var volumes = get_selected_rows_by_object_type(params.tree,'volume'); 
630         var cn_list = [];
631         for (var i = 0; i < volumes.length; i++) {
632                 var cn = new acn();
633                 cn.id( volumes[i].getAttribute('volume_id') );
634                 cn.isdeleted( '1' );
635                 cn_list.push( cn );
636         }
637         try {
638                 var result = user_request(
639                                 'open-ils.cat',
640                                 'open-ils.cat.asset.volume_tree.fleshed.batch.update',
641                                 [ mw.G['auth_ses'][0], cn_list]
642                 );
643                 mw.sdump('D_CAT','volume_tree.fleshed.batch.update result: ' + js2JSON(result) + '\n');
644         } catch(E) {
645                 handle_error(E);
646         }
647         refresh_browse_list();
648 }
649
650 function copy_delete(tab,params) {
651         var copies = get_selected_rows_by_object_type(params.tree,'copy'); 
652         var cn_list = [];
653         for (var i = 0; i < copies.length; i++) {
654                 var cn = new acn();
655                 cn.id( copies[i].getAttribute('volume_id') );
656
657                 var cp = new acp();
658                 cp.id( copies[i].getAttribute('copy_id') );
659                 cp.isdeleted( '1' );
660
661                 cn.copies( [ cp ] );
662                 cn_list.push( cn );
663         }
664         try {
665                 var result = user_request(
666                                 'open-ils.cat',
667                                 'open-ils.cat.asset.volume_tree.fleshed.batch.update',
668                                 [ mw.G['auth_ses'][0], cn_list]
669                 );
670                 mw.sdump('D_CAT','volume_tree.fleshed.batch.update result: ' + js2JSON(result) + '\n');
671         } catch(E) {
672                 handle_error(E);
673         }
674         refresh_browse_list();
675 }