]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/cat/browse_list.js
a518bce62d17e7f33168716d665073bd7dc4562a
[working/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 = user_request(
154                 'open-ils.cat',
155                 'open-ils.cat.actor.org_unit.retrieve_by_title',
156                 [ find_this_id ]
157         )[0];
158         for (var i = 0; i < orgs_with_copies.length; i++) {
159                 orgs_with_copies_hash[ orgs_with_copies[i] ] = true;
160         }
161         var bucket = new Array();
162         for (var i = 0; i < mw.G.my_orgs.length; i++ ) {
163                 //if (find_id_object_in_list( mw.G.aout_list, mw.G.my_orgs[i].ou_type() ).can_have_vols() == '0')
164                 if ( mw.G.aout_list[ mw.G.my_orgs[i].ou_type() ].can_have_vols() == '0')
165                         continue;
166                 if ( ! orgs_with_copies_hash[ mw.G.my_orgs[i].id() ] ) continue;
167                 bucket.push( mw.G.my_orgs[i].id() );
168         }
169         document.getElementById('browse_libs').setAttribute('value','Retrieving my copies...');
170         user_async_request(
171                 'open-ils.cat',
172                 'open-ils.cat.asset.copy_tree.retrieve',
173                 [ mw.G['auth_ses'][0], find_this_id, bucket ],
174                 function (request) {
175                         gather_copies_callback(request);
176                         document.getElementById('browse_libs').setAttribute('value','Retrieving copies from other libraries...');
177                         gather_other_copies();
178                 }
179         );
180         mw.sdump('D_CAT','((((((((((((((((( Count = ' + counter_incr('world') + '\n');
181 }
182
183 function gather_other_copies() {
184         var w_s = 10; var c_s = 0;
185         var bucket = new Array();
186
187         var nl = document.getElementsByTagName('treeitem');
188         for (var i = 0; i < nl.length; i++) {
189                 var item = nl[i];
190                 if (item.getAttribute('can_have_vols') == '0') continue;
191                 //if ( find_id_object_in_list( mw.G.my_orgs, item.getAttribute('myid') ) ) { continue; }
192                 if ( mw.G.my_orgs_hash[ item.getAttribute('myid') ] ) { continue; }
193                 if ( ! orgs_with_copies_hash[ item.getAttribute('myid') ] ) continue;
194                 bucket.push( item.getAttribute('myid') );
195                 if (++c_s >= w_s) {
196                         user_async_request(
197                                 'open-ils.cat',
198                                 'open-ils.cat.asset.copy_tree.retrieve',
199                                 [ mw.G['auth_ses'][0], find_this_id, bucket ],
200                                 gather_copies_callback
201                         );
202                         mw.sdump('D_CAT','((((((((((((((((( Count = ' + counter_incr('world') + '\n');
203                         bucket = new Array();
204                         c_s = 0;
205                 }
206         }
207         if (bucket.length > 0) {
208                 user_async_request(
209                         'open-ils.cat',
210                         'open-ils.cat.asset.copy_tree.retrieve',
211                         [ mw.G['auth_ses'][0], find_this_id, bucket ],
212                         gather_copies_callback
213                 );
214                 mw.sdump('D_CAT','((((((((((((((((( Count = ' + counter_incr('world') + '\n');
215         }
216         browse_meter_per = 100 / counter_peek('world');
217         mw.sdump('D_CAT',timer_elapsed('world') + ' : World : ' + timer_elapsed('gather') + '\n');
218 }
219
220 function find_my_treerow_index() {
221         var nl = document.getElementById('browse_list_tree').getElementsByTagName('treerow');
222         var count = 0;
223         //mw.sdump('D_CAT','find_my_treerow:  count = ' + count + '  nl.length = ' + nl.length + '\n');
224         for (var i = 0; i < nl.length; i++) {
225                 var row = nl[i];
226                 var item = row.parentNode;
227                 if (item.getAttribute('id') == 'org_unit_' + mw.G.user_ou.shortname() ) {
228                         return count;
229                 }
230                 var open_attr = item.getAttribute('open');
231                 var hidden_prop = item.hidden;
232                 //mw.sdump('D_CAT','id = ' + item.getAttribute('id') + '   hidden_attr = ' + hidden_attr + '   hidden_prop = ' + hidden_prop + '\n');
233                 if (hidden_prop.toString() == 'false' && open_attr.toString() == 'true') {
234                         count++;
235                 }
236         }
237         return 0;
238 }
239
240 function gather_copies_callback(request) {
241         mw.sdump('D_CAT','gather_copies_callback : ' + timer_elapsed('gather') + ' : ' + ' count = ' + counter_incr('gather') + '\n');
242         var result = request.getResultObject();
243         var n_volumes = 0; var n_copies = 0; var flag = false;
244         //mw.sdump('D_CAT','copybrowser result = ' + js2JSON(result) + '\n=-=-=\n');
245         for (var y in result) {
246                 if (result[y] && (typeof(result[y])=='object')) {
247                         var volume = result[y]; n_volumes++;
248                         //mw.sdump('D_CAT','\nvolume = ' + js2JSON(volume) + '\n');
249                         mw.sdump('D_CAT',' volume id = ' + volume.id() + '\n');
250                         var lib = find_ou( mw.G.org_tree, volume.owning_lib() );
251                         //mw.sdump('D_CAT','lib = ' + js2JSON(lib) + '\n');
252                         if ( lib.shortname() == mw.G.user_ou.shortname() ) { flag = true; }
253                         var callnumber = volume.label();
254                         var copies = volume.copies();
255                         //mw.sdump('D_CAT','\tcopies = ' + js2JSON(copies) + '\n');
256                         var item = document.getElementById('org_unit_'+lib.shortname());
257                         if (!item) { mw.sdump('D_CAT','skipping\n'); continue; }
258
259                         var item_row = item.firstChild;
260                         var volumes_treecell;
261                         if (item_row.childNodes.length == 1) {
262                                 volumes_treecell = document.createElement('treecell');
263                                 volumes_treecell.setAttribute('label','0');
264                                 item_row.appendChild(volumes_treecell);
265                         } else {
266                                 volumes_treecell = item_row.childNodes[1];
267                         }
268                         volumes_treecell.setAttribute(
269                                 'label',
270                                 parseInt(volumes_treecell.getAttribute('label')) + 1
271                         );
272
273                         var copies_treecell;
274                         if (item_row.childNodes.length < 3) {
275                                 copies_treecell = document.createElement('treecell');
276                                 copies_treecell.setAttribute('label','0');
277                                 item_row.appendChild(copies_treecell);
278                         } else {
279                                 copies_treecell = item_row.childNodes[2];
280                         }
281                         copies_treecell.setAttribute(
282                                 'label',
283                                 parseInt(copies_treecell.getAttribute('label')) + copies.length
284                         );
285
286
287                         var cn_treechildren;
288                         var nl = item.getElementsByTagName('treechildren');
289                         //unhide_branch(item,false,true);
290                         item.setAttribute('copies',true);
291                         if (nl.length == 0) {
292                                 cn_treechildren = document.createElement('treechildren');
293                                 item.appendChild(cn_treechildren);
294                         } else {
295                                 cn_treechildren = nl[0];
296                         }
297
298                         var cn_treeitem = document.createElement('treeitem');
299                                 cn_treeitem.setAttribute('container','true');
300                                 cn_treeitem.setAttribute('open','true');
301                                 cn_treeitem.setAttribute('object_type','volume');
302                                 cn_treeitem.setAttribute('volume_id',volume.id());
303                                 cn_treeitem.setAttribute('callnumber',volume.label());
304                                 cn_treeitem.setAttribute('ou_id',lib.id());
305
306                         cn_treechildren.appendChild(cn_treeitem);
307
308                         var cn_treerow = document.createElement('treerow');
309                         cn_treeitem.appendChild(cn_treerow);
310
311                         var cn_treecell = document.createElement('treecell');
312                                 cn_treecell.setAttribute('label',callnumber);
313                         cn_treerow.appendChild(cn_treecell);
314
315                         var treechildren = document.createElement('treechildren');
316                         cn_treeitem.appendChild(treechildren);
317                         //mw.sdump('D_CAT', 'org_unit_'+lib+' item = '+item.tagName+'\n');
318                         for (var j = 0; j < copies.length; j++) {
319                                 var copy = copies[j]; n_copies++;
320                                 //mw.sdump('D_CAT','barcode: ' + copy.barcode() + '\n');
321
322                                 var treeitem = document.createElement('treeitem');
323                                         treeitem.setAttribute('open','true');
324                                         treeitem.setAttribute('container','true');
325                                         treeitem.setAttribute('class','barcode_row');
326                                         treeitem.setAttribute('object_type','copy');
327                                         treeitem.setAttribute('ou_shortname',lib.shortname());
328                                         treeitem.setAttribute('ou_id',lib.id());
329                                         treeitem.setAttribute('callnumber',callnumber);
330                                         treeitem.setAttribute('barcode',copy.barcode());
331                                         treeitem.setAttribute('copy_id',copy.id());
332                                         treeitem.setAttribute('volume_id',volume.id());
333                                         //treeitem.setAttribute('copy',js2JSON(copy));
334                                 treechildren.appendChild(treeitem);
335
336                                 var treerow = document.createElement('treerow');
337                                 treeitem.appendChild(treerow);
338
339                                 var list = [ 
340                                         copy.barcode() , '', '', lib.shortname() , callnumber , copy.copy_number() ,
341                                         //find_id_object_in_list( mw.G.acpl_list, copy.location() ).name() , 
342                                         mw.G.acpl_hash[ copy.location() ].name() ,
343                                         //find_ou( mw.G.org_tree, copy.circ_lib() ).shortname() , 
344                                         mw.G.org_tree_hash[ copy.circ_lib() ].shortname(),
345                                         yesno( copy.circulate() ) , yesno( copy.ref() ) ,
346                                         yesno( copy.opac_visible() ) , copy.circ_as_type() , copy.circ_modifier() ,
347                                         copy.loan_duration() , copy.fine_level() , copy.create_date() ,
348                                         copy.creator() , copy.edit_date() , copy.editor() , copy.deposit() ,
349                                         copy.deposit_amount() , copy.price() , copy.status()
350                                 ];
351
352                                 for (var i = 0; i < list.length; i++ ) {
353                                         var treecell = document.createElement('treecell');
354                                                 treecell.setAttribute('label',list[i]);
355                                         treerow.appendChild(treecell);
356                                 }
357                                                 
358                         }
359                 } else {
360                         mw.sdump('D_CAT','gather_copies problem: ' + result[y] + '\n');
361                         //throw(result[0]);
362                 }
363         }
364         var tree = document.getElementById('browse_list_tree');
365         if (tree.currentIndex != -1) {
366                 //mw.sdump('D_CAT','currentIndex != -1 = ' + tree.currentIndex + '\n');
367                 //tree.treeBoxObject.scrollToRow( tree.currentIndex );
368                 tree.treeBoxObject.ensureRowIsVisible( tree.currentIndex );
369         } else if (flag) {
370                 //mw.sdump('D_CAT','currentIndex == -1\n');
371                 var find = find_my_treerow_index();
372                 mw.sdump('D_CAT','find = ' + find + ' n_volumes = ' + n_volumes + ' n_copies = ' + n_copies + '\n');
373                 //alert('find = ' + find + ' n_volumes = ' + n_volumes + ' n_copies = ' + n_copies + '\n');
374                 if (find > 0) { 
375                         find = find + n_volumes + n_copies;
376                         tree.view.selection.select( find ); 
377                 }
378                 //tree.treeBoxObject.ensureRowIsVisible( find );
379         }
380         var meter = document.getElementById('browse_meter');
381         var real = parseFloat( meter.getAttribute('real') ) + browse_meter_per;
382         meter.setAttribute('real',real);
383         meter.value = Math.ceil( real );
384         if ( counter_peek('gather') == counter_peek('world') ) {
385                 document.getElementById('browse_libs').setAttribute('value','Finished');
386                 document.getElementById('browse_libs').setAttribute('hidden','true');
387                 meter.value = 100;
388                 meter.setAttribute('hidden','true');
389         }
390         mw.sdump('D_CAT','gather callback   done : ' + timer_elapsed('gather') + '\n');
391 }
392
393
394 function build_tree_branch(treechildren,org,hide) {
395         var id = org.id();
396         var name = org.name();
397         var shortname = org.shortname(); org_shortname2id[shortname] = id;
398         var children = org.children();
399         var flag = mw.G.aout_hash[ org.ou_type() ].can_have_vols() == '1';
400         var item = make_treeitem('org_unit_' + shortname, name, flag);
401         item.setAttribute('hidden',hide);
402         item.setAttribute('ou_id',org.id());
403         //if ( find_id_object_in_list( mw.G.my_orgs, id ) ) { 
404         if ( mw.G.my_orgs_hash[ id ] ) {
405                 item.setAttribute('open','true'); 
406                 item.setAttribute('hidden','false');
407                 item.setAttribute('myorg','true');
408         }
409         item.setAttribute( 
410                 'can_have_vols', 
411                 //find_id_object_in_list( mw.G.aout_list, org.ou_type() ).can_have_vols() 
412                 mw.G.aout_hash[ org.ou_type() ].can_have_vols()
413         );
414         item.setAttribute( 'myid', org.id() );
415         if (children && (children.length > 0)) {
416                 var n_treechildren = document.createElement('treechildren');
417                 for (var i in children) {
418                         var child = children[i];
419                         build_tree_branch(n_treechildren, child, true);
420                 }
421                 item.appendChild(n_treechildren);
422         }
423         treechildren.appendChild(item);
424 }
425
426 function make_treeitem(id,name,flag) {
427         var treeitem = document.createElement('treeitem');
428                 treeitem.setAttribute('id',id);
429                 treeitem.setAttribute('container','true');
430         var treerow = make_treerow(name,flag);
431                 treeitem.appendChild(treerow);
432                 treeitem.setAttribute('object_type','org_unit');
433         return treeitem;
434 }
435
436 function make_treerow(name,flag) {
437         var treerow = document.createElement('treerow');
438         var treecell = document.createElement('treecell');
439                 treecell.setAttribute('label',name);
440         treerow.appendChild(treecell);
441         treecell = document.createElement('treecell');
442                 if (flag) treecell.setAttribute('label',0);
443         treerow.appendChild(treecell);
444         treecell = document.createElement('treecell');
445                 if (flag) treecell.setAttribute('label',0);
446         treerow.appendChild(treecell);
447
448         return treerow;
449 }
450
451 function get_selected_rows_by_object_type(tree,object_type) {
452         var items = get_list_from_tree_selection(tree);
453         var command = "filter_list(items, function (obj) { return obj.getAttribute('object_type') == '" + object_type + "'; } );";
454         return eval(command);
455 }
456
457 function build_CopyBrowser_Context(ev) {
458         mw.sdump('D_CAT','build_CopyBrowser_Context: ev.target.tagName = ' + ev.target.tagName + '\n');
459         mw.sdump('D_CAT','this = ' + this.tagName + '\n');
460
461         var popup = document.getElementById('browse_menu');
462         empty_widget(popup);
463
464         var volume_flag = 0; var copy_flag = 0; var library_flag = 0;
465
466         var hitlist = document.getElementById('browse_list_tree');
467         var start = new Object(); var end = new Object();
468         var numRanges = hitlist.view.selection.getRangeCount();
469         for (var t=0; t<numRanges; t++){
470                 hitlist.view.selection.getRangeAt(t,start,end);
471                 for (var v=start.value; v<=end.value; v++){
472                         var i = hitlist.contentView.getItemAtIndex(v);
473                         //mw.sdump('D_CAT',i + ':' + i.firstChild.childNodes.length + '\n');
474                         switch( i.getAttribute('object_type') ) {
475                                 case 'volume' : volume_flag++; break;
476                                 case 'copy' : copy_flag++; break;
477                                 case 'org_unit' : if (i.getAttribute('can_have_vols') == '1') library_flag++; break;
478                         }
479                 }
480         }
481         mw.sdump('D_CAT','volume_flag = ' + volume_flag + ' copy_flag = ' + copy_flag + ' library_flag = ' + library_flag + '\n');
482         if (library_flag > 0) {
483                 var menuitem = document.createElement('menuitem');
484                 popup.appendChild(menuitem);
485                         menuitem.setAttribute('label','Add Volumes');
486                         menuitem.setAttribute('command','cmd_volume_add');
487                 popup.appendChild( document.createElement( 'menuseparator' ) );
488         }
489         if (volume_flag > 0) {
490                 var menuitem = document.createElement('menuitem');
491                 popup.appendChild(menuitem);
492                         if (volume_flag > 1) {
493                                 menuitem.setAttribute('label','Edit Volumes');
494                         } else {
495                                 menuitem.setAttribute('label','Edit Volume');
496                         }
497                         menuitem.setAttribute('command','cmd_volume_edit');
498                 popup.appendChild( document.createElement( 'menuseparator' ) );
499                 menuitem = document.createElement('menuitem');
500                 popup.appendChild(menuitem);
501                         menuitem.setAttribute('label','Add Copies');
502                         menuitem.setAttribute('command','cmd_copy_add');
503                 menuitem = document.createElement('menuitem');
504                 popup.appendChild( document.createElement( 'menuseparator' ) );
505         }
506         if (copy_flag > 0) {
507                 var menuitem = document.createElement('menuitem');
508                 popup.appendChild(menuitem);
509                         if (copy_flag > 1) {
510                                 menuitem.setAttribute('label','Edit Copies');
511                         } else {
512                                 menuitem.setAttribute('label','Edit Copy');
513                         }
514                         menuitem.setAttribute('command','cmd_copy_edit');
515                 popup.appendChild( document.createElement( 'menuseparator' ) );
516         }
517         if (volume_flag > 0) {
518                 var menuitem = document.createElement('menuitem');
519                 popup.appendChild(menuitem);
520                         if (volume_flag > 1) {
521                                 menuitem.setAttribute('label','Delete Volumes');
522                         } else {
523                                 menuitem.setAttribute('label','Delete Volume');
524                         }
525                         menuitem.setAttribute('command','cmd_volume_delete');
526                 popup.appendChild( document.createElement( 'menuseparator' ) );
527
528         }
529         if (copy_flag > 0) {
530                 var menuitem = document.createElement('menuitem');
531                 popup.appendChild(menuitem);
532                         if (copy_flag > 1) {
533                                 menuitem.setAttribute('label','Delete Copies');
534                         } else {
535                                 menuitem.setAttribute('label','Delete Copy');
536                         }
537                         menuitem.setAttribute('command','cmd_copy_delete');
538                 popup.appendChild( document.createElement( 'menuseparator' ) );
539         }
540
541         var menuitem = document.createElement('menuitem');
542         popup.appendChild(menuitem);
543                 menuitem.setAttribute('label','Refresh Listing');
544                 menuitem.setAttribute('command','cmd_refresh');
545 }
546
547 function volume_add(tab,params) {
548         mw.sdump('D_CAT','trying to volume_add()\n');
549         params['shortcut'] = 'volume_add';
550         var w;
551         //var items = get_selected_rows(tree);
552         var items = get_list_from_tree_selection(params.tree);
553         items = filter_list(
554                 items,
555                 function (obj) {
556                         return obj.getAttribute('object_type') == 'org_unit';
557                 }
558         );
559         var chrome = 'chrome://evergreen/content/cat/volume_copy_add_wizard.xul';
560         if (tab) {
561                 parentWindow.new_tab('main_tabbox');
562                 w = parentWindow.replace_tab('main_tabbox','Add Volume',chrome);
563         } else {
564                 w = mw.new_window( chrome );
565         }
566         mw.sdump('D_CAT','setting use_this_tree\n');
567         w.tree_items = items;
568         w.record_id = find_this_id;
569         w.params = params;
570 }
571
572 function copy_add(tab,params) {
573         mw.sdump('D_CAT','trying to copy_add()\n');
574         params['shortcut'] = 'copy_add';
575         var w;
576         //var items = get_selected_rows(tree);
577         var items = get_list_from_tree_selection(params.tree);
578         items = filter_list(
579                 items,
580                 function (obj) {
581                         return obj.getAttribute('object_type') == 'volume';
582                 }
583         );
584         var chrome = 'chrome://evergreen/content/cat/copy_add_wizard.xul';
585         if (tab) {
586                 parentWindow.new_tab('main_tabbox');
587                 w = parentWindow.replace_tab('main_tabbox','Add Copy',chrome);
588         } else {
589                 w = mw.new_window( chrome );
590         }
591         mw.sdump('D_CAT','setting use_this_tree\n');
592         w.tree_items = items;
593         w.record_id = find_this_id;
594         w.params = params;
595 }
596
597 function volume_edit(tab,params) {
598         mw.sdump('D_CAT','trying to volume_edit()\n');
599         params['shortcut'] = 'volume_edit';
600         var w;
601         //var items = get_selected_rows(tree);
602         var items = get_list_from_tree_selection(params.tree);
603         items = filter_list(
604                 items,
605                 function (obj) {
606                         return obj.getAttribute('object_type') == 'volume';
607                 }
608         );
609         var chrome = 'chrome://evergreen/content/cat/volume_edit_wizard.xul';
610         if (tab) {
611                 parentWindow.new_tab('main_tabbox');
612                 w = parentWindow.replace_tab('main_tabbox','Edit Volumes',chrome);
613         } else {
614                 w = mw.new_window( chrome );
615         }
616         mw.sdump('D_CAT','setting use_this_tree\n');
617         w.tree_items = items;
618         w.record_id = find_this_id;
619         w.params = params;
620
621 }
622
623 function volume_delete(tab,params) {
624         var volumes = get_selected_rows_by_object_type(params.tree,'volume'); 
625         var cn_list = [];
626         for (var i = 0; i < volumes.length; i++) {
627                 var cn = new acn();
628                 cn.id( volumes[i].getAttribute('volume_id') );
629                 cn.isdeleted( '1' );
630                 cn_list.push( cn );
631         }
632         var result = user_request(
633                         'open-ils.cat',
634                         'open-ils.cat.asset.volume_tree.fleshed.batch.update',
635                         [ mw.G['auth_ses'][0], cn_list]
636         );
637         mw.sdump('D_CAT','volume_tree.fleshed.batch.update result: ' + js2JSON(result) + '\n');
638         refresh_browse_list();
639 }
640
641 function copy_delete(tab,params) {
642         var copies = get_selected_rows_by_object_type(params.tree,'copy'); 
643         var cn_list = [];
644         for (var i = 0; i < copies.length; i++) {
645                 var cn = new acn();
646                 cn.id( copies[i].getAttribute('volume_id') );
647
648                 var cp = new acp();
649                 cp.id( copies[i].getAttribute('copy_id') );
650                 cp.isdeleted( '1' );
651
652                 cn.copies( [ cp ] );
653                 cn_list.push( cn );
654         }
655         var result = user_request(
656                         'open-ils.cat',
657                         'open-ils.cat.asset.volume_tree.fleshed.batch.update',
658                         [ mw.G['auth_ses'][0], cn_list]
659         );
660         mw.sdump('D_CAT','volume_tree.fleshed.batch.update result: ' + js2JSON(result) + '\n');
661         refresh_browse_list();
662 }