1 dump('entering cat.record_buckets.js\n');
3 if (typeof cat == 'undefined') cat = {};
4 cat.record_buckets = function (params) {
6 JSAN.use('util.error'); this.error = new util.error();
7 JSAN.use('util.network'); this.network = new util.network();
9 JSAN.use('OpenILS.data'); this.data = new OpenILS.data(); this.data.init({'via':'stash'});
10 this.first_pause = true;
11 var x = document.getElementById("record_buckets_tabbox");
12 if (x) x.selectedIndex = 2;
15 cat.record_buckets.pick_file = function (defaultFileName) {
16 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
18 var nsIFilePicker = Components.interfaces.nsIFilePicker;
19 var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance( nsIFilePicker );
21 fp.init( window, "Save File As", nsIFilePicker.modeSave );
23 fp.defaultString = defaultFileName;
25 fp.appendFilters( nsIFilePicker.filterAll );
27 var result = fp.show();
28 if ( (result == nsIFilePicker.returnOK || result == nsIFilePicker.returnReplace) && fp.file ) {
35 cat.record_buckets.export_records = function(obj, output_type) {
37 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
38 obj.list2.select_all();
39 obj.data.stash_retrieve();
40 JSAN.use('util.functional');
42 var record_ids = util.functional.map_list(
43 obj.list2.dump_retrieve_ids(),
44 function (o) { return JSON2js(o).docid }
47 var persist = Components.classes["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"]
48 .createInstance(Components.interfaces.nsIWebBrowserPersist);
50 var proto_uri = 'http://' + window.location.hostname + '/exporter?format=' + output_type;
52 dump('Record Export URI is ' + proto_uri + '&id=' + record_ids.join('&id=') + '\n');
54 var uri = Components.classes["@mozilla.org/network/io-service;1"]
55 .getService(Components.interfaces.nsIIOService)
56 .newURI( proto_uri + '&id=' + record_ids.join('&id='), null, null );
58 var file = cat.record_buckets.pick_file('bucket.' + output_type);
61 persist.saveURI(uri,null,null,null,null,file);
63 alert("File not downloaded.");
67 obj.error.standard_unexpected_error_alert('Records could not be exported.',E);
72 cat.record_buckets.prototype = {
73 'selection_list1' : [],
74 'selection_list2' : [],
75 'bucket_id_name_map' : {},
77 'render_pending_records' : function() {
78 if (this.first_pause) {
79 this.first_pause = false;
81 alert("Action completed.");
85 for (var i = 0; i < obj.record_ids.length; i++) {
86 var item = obj.prep_record_for_list( obj.record_ids[i] );
87 if (item) obj.list1.append( item );
91 'init' : function( params ) {
95 obj.record_ids = params['record_ids'] || [];
97 JSAN.use('circ.util');
98 var columns = circ.util.columns(
100 'title' : { 'hidden' : false },
101 'author' : { 'hidden' : false },
102 'edition' : { 'hidden' : false },
103 'publisher' : { 'hidden' : false },
104 'pubdate' : { 'hidden' : false },
105 'isbn' : { 'hidden' : false },
106 'tcn' : { 'hidden' : false },
110 JSAN.use('util.list');
112 function retrieve_row(params) {
113 var row = params.row;
115 obj.network.simple_request( 'MODS_SLIM_RECORD_RETRIEVE.authoritative', [ row.my.docid ],
118 var record = req.getResultObject();
119 if (typeof req.ilsevent != 'undefined') throw(req);
121 if (typeof params.on_retrieve == 'function') { params.on_retrieve(row); }
124 obj.error.standard_unexpected_error_alert('Error retrieving mvr for record with id =' + row.my.docid, E);
129 obj.error.sdump('D_ERROR','retrieve_row: ' + E );
134 obj.list1 = new util.list('pending_records_list');
138 'map_row_to_columns' : circ.util.std_map_row_to_columns(),
139 'retrieve_row' : retrieve_row,
140 'on_select' : function(ev) {
142 JSAN.use('util.functional');
143 var sel = obj.list1.retrieve_selection();
144 obj.controller.view.sel_clip1.setAttribute('disabled', sel.length < 1 ? "true" : "false");
145 obj.selection_list1 = util.functional.map_list(
147 function(o) { return JSON2js(o.getAttribute('retrieve_id')); }
149 obj.error.sdump('D_TRACE','circ/record_buckets: selection list 1 = ' + js2JSON(obj.selection_list1) );
150 if (obj.selection_list1.length == 0) {
151 obj.controller.view.cmd_record_buckets_sel_add.setAttribute('disabled','true');
153 obj.controller.view.cmd_record_buckets_sel_add.setAttribute('disabled','false');
156 alert('FIXME: ' + E);
163 obj.render_pending_records();
165 obj.list2 = new util.list('records_in_bucket_list');
169 'map_row_to_columns' : circ.util.std_map_row_to_columns(),
170 'retrieve_row' : retrieve_row,
171 'on_select' : function(ev) {
173 JSAN.use('util.functional');
174 var sel = obj.list2.retrieve_selection();
175 obj.controller.view.sel_clip2.setAttribute('disabled', sel.length < 1 ? "true" : "false");
176 obj.selection_list2 = util.functional.map_list(
178 function(o) { return JSON2js(o.getAttribute('retrieve_id')); }
180 obj.error.sdump('D_TRACE','circ/record_buckets: selection list 2 = ' + js2JSON(obj.selection_list2) );
181 if (obj.selection_list2.length == 0) {
182 obj.controller.view.cmd_record_buckets_delete_item.setAttribute('disabled','true');
183 obj.controller.view.cmd_pending_buckets_to_record_buckets.setAttribute('disabled','true');
185 obj.controller.view.cmd_record_buckets_delete_item.setAttribute('disabled','false');
186 obj.controller.view.cmd_pending_buckets_to_record_buckets.setAttribute('disabled','false');
189 alert('FIXME: ' + E);
195 JSAN.use('util.controller'); obj.controller = new util.controller();
201 function() { obj.list2.save_columns(); }
205 function() { obj.list1.save_columns(); }
209 function() { obj.list2.clipboard(); }
213 function() { obj.list1.clipboard(); }
215 'record_buckets_menulist_placeholder' : [
219 JSAN.use('util.widgets'); JSAN.use('util.functional');
220 var buckets = obj.network.simple_request(
221 'BUCKET_RETRIEVE_VIA_USER',
222 [ ses(), obj.data.list.au[0].id() ]
224 if (typeof buckets.ilsevent != 'undefined') {
225 obj.error.standard_unexpected_error_alert('Could not retrieve your buckets.',buckets);
228 var items = [ ['Choose a bucket...',''], ['Retrieve shared bucket...',-1] ].concat(
229 util.functional.map_list(
230 util.functional.filter_list(
233 return o.btype() == 'staff_client';
237 obj.bucket_id_name_map[ o.id() ] = o.name();
238 return [ o.name(), o.id() ];
242 if (a[0] < b[0]) return -1;
243 if (a[0] > b[0]) return 1;
248 obj.error.sdump('D_TRACE','items = ' + js2JSON(items));
249 util.widgets.remove_children( e );
250 var ml = util.widgets.make_menulist(
254 ml.setAttribute('id','bucket_menulist');
255 ml.setAttribute('accesskey','');
257 function change_bucket(ev) {
258 var bucket_id = ev.target.value;
259 if (bucket_id < 0 ) {
260 bucket_id = window.prompt('Enter bucket number:');
261 ev.target.value = bucket_id;
262 ev.target.setAttribute('value',bucket_id);
264 if (!bucket_id) return;
265 var x = document.getElementById('info_box');
266 if (x) x.setAttribute('hidden','true');
267 x = document.getElementById('bucket_item_count');
268 if (x) x.setAttribute('label','');
269 obj.controller.view.cmd_record_buckets_delete_bucket.setAttribute('disabled','true');
270 obj.controller.view.cmd_record_buckets_refresh.setAttribute('disabled','true');
271 obj.controller.view.record_buckets_export_records.disabled = true;
272 obj.controller.view.cmd_merge_records.setAttribute('disabled','true');
273 obj.controller.view.cmd_delete_records.setAttribute('disabled','true');
274 obj.controller.view.cmd_sel_opac.setAttribute('disabled','true');
275 obj.controller.view.record_buckets_list_actions.disabled = true;
276 var bucket = obj.network.simple_request(
278 [ ses(), 'biblio', bucket_id ]
280 if (typeof bucket.ilsevent != 'undefined') {
281 if (bucket.ilsevent == 1506 /* CONTAINER_NOT_FOUND */) {
282 alert('Could not find a bucket with ID = ' + bucket_id);
284 obj.error.standard_unexpected_error_alert('Error retrieving bucket. Did you use a valid bucket id?',bucket);
289 obj.controller.view.cmd_record_buckets_delete_bucket.setAttribute('disabled','false');
290 obj.controller.view.cmd_record_buckets_refresh.setAttribute('disabled','false');
291 obj.controller.view.record_buckets_export_records.disabled = false;
292 obj.controller.view.cmd_merge_records.setAttribute('disabled','false');
293 obj.controller.view.cmd_delete_records.setAttribute('disabled','false');
294 obj.controller.view.cmd_sel_opac.setAttribute('disabled','false');
295 obj.controller.view.record_buckets_list_actions.disabled = false;
297 var x = document.getElementById('info_box');
298 x.setAttribute('hidden','false');
299 x = document.getElementById('bucket_number');
300 x.setAttribute('value',bucket.id());
301 x = document.getElementById('bucket_name');
302 x.setAttribute('value',bucket.name());
303 x = document.getElementById('bucket_owner');
304 var s = bucket.owner(); JSAN.use('patron.util');
305 if (s && typeof s != "object") s = patron.util.retrieve_fleshed_au_via_id(ses(),s);
306 x.setAttribute('value',s.family_name() + ' (' + s.card().barcode() + ") @ " + obj.data.hash.aou[ s.home_ou() ].shortname());
310 var items = bucket.items() || [];
312 var x = document.getElementById('bucket_item_count');
313 var catStrings = document.getElementById('catStrings');
314 if (x && catStrings) x.setAttribute('value',catStrings.getFormattedString('cat.total_bucket_items_in_bucket',[items.length]));
315 for (var i = 0; i < items.length; i++) {
316 var item = obj.prep_record_for_list(
317 items[i].target_biblio_record_entry(),
320 if (item) obj.list2.append( item );
324 ml.addEventListener( 'change_bucket', change_bucket , false);
325 ml.addEventListener( 'command', function() {
326 JSAN.use('util.widgets'); util.widgets.dispatch('change_bucket',ml);
328 obj.controller.view.bucket_menulist = ml;
329 JSAN.use('util.widgets'); util.widgets.dispatch('change_bucket',ml);
334 'cmd_record_buckets_refresh' : [
337 JSAN.use('util.widgets'); util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
341 'cmd_record_buckets_add' : [
344 var bucket_id = obj.controller.view.bucket_menulist.value;
345 if (!bucket_id) return;
346 for (var i = 0; i < obj.record_ids.length; i++) {
347 var bucket_item = new cbrebi();
348 bucket_item.isnew('1');
349 bucket_item.bucket(bucket_id);
350 bucket_item.target_biblio_record_entry( obj.record_ids[i] );
352 var robj = obj.network.simple_request('BUCKET_ITEM_CREATE',
353 [ ses(), 'biblio', bucket_item ]);
355 if (typeof robj == 'object') throw robj;
357 var item = obj.prep_record_for_list( obj.record_ids[i], robj );
360 obj.list2.append( item );
367 'cmd_record_buckets_sel_add' : [
370 var bucket_id = obj.controller.view.bucket_menulist.value;
371 if (!bucket_id) return;
372 for (var i = 0; i < obj.selection_list1.length; i++) {
373 var docid = obj.selection_list1[i].docid;
374 var bucket_item = new cbrebi();
375 bucket_item.isnew('1');
376 bucket_item.bucket(bucket_id);
377 bucket_item.target_biblio_record_entry( docid );
379 var robj = obj.network.simple_request('BUCKET_ITEM_CREATE',
380 [ ses(), 'biblio', bucket_item ]);
382 if (typeof robj == 'object') throw robj;
384 var item = obj.prep_record_for_list( docid, robj );
387 obj.list2.append( item );
395 'cmd_pending_buckets_to_record_buckets' : [
398 for (var i = 0; i < obj.selection_list2.length; i++) {
399 var docid = obj.selection_list2[i].docid;
400 var item = obj.prep_record_for_list( docid );
402 obj.list1.append( item );
403 obj.record_ids.push( docid );
409 'cmd_record_buckets_delete_item' : [
412 for (var i = 0; i < obj.selection_list2.length; i++) {
414 var bucket_item_id = obj.selection_list2[i].bucket_item_id;
415 var robj = obj.network.simple_request('BUCKET_ITEM_DELETE',
416 [ ses(), 'biblio', bucket_item_id ]);
417 if (typeof robj == 'object') throw robj;
422 alert("Action completed.");
425 JSAN.use('util.widgets');
426 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
431 'cmd_record_buckets_delete_bucket' : [
435 var bucket = obj.controller.view.bucket_menulist.value;
436 var name = obj.bucket_id_name_map[ bucket ];
437 var conf = window.confirm('Delete the bucket named ' + name + '?');
440 var robj = obj.network.simple_request('BUCKET_DELETE',[ses(),'biblio',bucket]);
441 if (typeof robj == 'object') throw robj;
442 alert("Action completed.");
443 var x = document.getElementById('info_box');
444 x.setAttribute('hidden','true');
445 obj.controller.view.cmd_record_buckets_delete_bucket.setAttribute('disabled','true');
446 obj.controller.view.cmd_record_buckets_refresh.setAttribute('disabled','true');
447 obj.controller.view.record_buckets_export_records.disabled = true;
448 obj.controller.view.cmd_merge_records.setAttribute('disabled','true');
449 obj.controller.view.cmd_delete_records.setAttribute('disabled','true');
450 obj.controller.view.cmd_sel_opac.setAttribute('disabled','true');
451 obj.controller.view.record_buckets_list_actions.disabled = true;
452 obj.controller.render('record_buckets_menulist_placeholder');
455 JSAN.use('util.widgets');
456 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
461 alert('FIXME -- ' + E);
465 'cmd_record_buckets_new_bucket' : [
469 var name = prompt('What would you like to name the bucket?','','Bucket Creation');
472 var bucket = new cbreb();
473 bucket.btype('staff_client');
474 bucket.owner( obj.data.list.au[0].id() );
477 var robj = obj.network.simple_request('BUCKET_CREATE',[ses(),'biblio',bucket]);
479 if (typeof robj == 'object') {
480 if (robj.ilsevent == 1710 /* CONTAINER_EXISTS */) {
481 alert('You already have a bucket with that name.');
488 alert('Bucket "' + name + '" created.');
490 obj.controller.render('record_buckets_menulist_placeholder');
491 obj.controller.view.bucket_menulist.value = robj;
494 JSAN.use('util.widgets');
495 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
505 'cmd_pending_buckets_csv_to_clipboard' : [ ['command'], function() { obj.list1.dump_csv_to_clipboard(); } ],
506 'cmd_record_buckets_csv_to_clipboard' : [ ['command'], function() { obj.list2.dump_csv_to_clipboard(); } ],
507 'cmd_pending_buckets_csv_to_printer' : [ ['command'], function() { obj.list1.dump_csv_to_printer(); } ],
508 'cmd_record_buckets_csv_printer' : [ ['command'], function() { obj.list2.dump_csv_to_printer(); } ],
509 'cmd_pending_buckets_csv_to_file' : [ ['command'], function() { obj.list1.dump_csv_to_file( { 'defaultFileName' : 'pending_records.txt' } ); } ],
510 'cmd_record_buckets_csv_file' : [ ['command'], function() { obj.list2.dump_csv_to_file( { 'defaultFileName' : 'bucket_records.txt' } ); } ],
512 'cmd_export_records_usmarc' : [
514 function () { return cat.record_buckets.export_records(obj, 'usmarc') }
517 'cmd_export_records_unimarc' : [
519 function () { return cat.record_buckets.export_records(obj, 'unimarc') }
522 'cmd_export_records_xml' : [
524 function () { return cat.record_buckets.export_records(obj, 'xml') }
527 'cmd_export_records_bre' : [
529 function () { return cat.record_buckets.export_records(obj, 'bre') }
532 'cmd_merge_records' : [
536 obj.list2.select_all();
537 obj.data.stash_retrieve();
538 JSAN.use('util.functional');
540 var record_ids = util.functional.map_list(
541 obj.list2.dump_retrieve_ids(),
543 return JSON2js(o).docid; // docid
547 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
548 var top_xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" >';
549 top_xml += '<description>Merge these records? (Select the "lead" record first)</description>';
550 top_xml += '<hbox><button id="lead" disabled="true" label="Merge" name="fancy_submit"/><button label="Cancel" accesskey="C" name="fancy_cancel"/></hbox></vbox>';
552 var xml = '<form xmlns="http://www.w3.org/1999/xhtml">';
553 xml += '<table><tr valign="top">';
554 for (var i = 0; i < record_ids.length; i++) {
555 xml += '<td><input value="Lead" id="record_' + record_ids[i] + '" type="radio" name="lead"';
556 xml += ' onclick="' + "try { var x = document.getElementById('lead'); x.setAttribute('value',";
557 xml += record_ids[i] + '); x.disabled = false; } catch(E) { alert(E); }">';
558 xml += '</input>Lead Record? #' + record_ids[i] + '</td>';
560 xml += '</tr><tr valign="top">';
561 for (var i = 0; i < record_ids.length; i++) {
562 xml += '<td nowrap="nowrap"><iframe src="' + urls.XUL_BIB_BRIEF;
563 xml += '?docid=' + record_ids[i] + '"/></td>';
565 xml += '</tr><tr valign="top">';
566 for (var i = 0; i < record_ids.length; i++) {
567 html = obj.network.simple_request('MARC_HTML_RETRIEVE',[ record_ids[i] ]);
568 xml += '<td nowrap="nowrap"><iframe style="min-height: 1000px; min-width: 300px;" flex="1" src="data:text/html,' + window.escape(html) + '"/></td>';
570 xml += '</tr></table></form>';
571 //obj.data.temp_merge_top = top_xml; obj.data.stash('temp_merge_top');
572 //obj.data.temp_merge_mid = xml; obj.data.stash('temp_merge_mid');
573 JSAN.use('util.window'); var win = new util.window();
574 var fancy_prompt_data = win.open(
575 urls.XUL_FANCY_PROMPT,
576 //+ '?xml_in_stash=temp_merge_mid'
577 //+ '&top_xml_in_stash=temp_merge_top'
578 //+ '&title=' + window.escape('Record Merging'),
579 'fancy_prompt', 'chrome,resizable,modal,width=700,height=500',
581 'top_xml' : top_xml, 'xml' : xml, 'title' : 'Record Merging'
584 //obj.data.stash_retrieve();
586 if (typeof fancy_prompt_data.fancy_status == 'undefined' || fancy_prompt_data.fancy_status == 'incomplete') { alert('Merge Aborted'); return; }
587 var robj = obj.network.simple_request('MERGE_RECORDS',
590 fancy_prompt_data.lead,
591 util.functional.filter_list( record_ids,
593 return o != fancy_prompt_data.lead;
598 if (typeof robj.ilsevent != 'undefined') {
601 alert('Records were successfully merged.');
604 obj.render_pending_records(); // FIXME -- need a generic refresh for lists
607 JSAN.use('util.widgets');
608 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
612 obj.error.standard_unexpected_error_alert('Records were not likely merged.',E);
618 'cmd_delete_records' : [
622 obj.list2.select_all();
623 obj.data.stash_retrieve();
624 JSAN.use('util.functional');
626 var record_ids = util.functional.map_list(
627 obj.list2.dump_retrieve_ids(),
629 return JSON2js(o).docid; // docid
633 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
634 var top_xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" >';
635 top_xml += '<description>Delete these records?</description>';
636 top_xml += '<hbox><button id="lead" disabled="false" label="Delete" name="fancy_submit"/><button label="Cancel" accesskey="C" name="fancy_cancel"/></hbox></vbox>';
638 var xml = '<form xmlns="http://www.w3.org/1999/xhtml">';
639 xml += '<table><tr valign="top">';
640 for (var i = 0; i < record_ids.length; i++) {
641 xml += '<td>Record #' + record_ids[i] + '</td>';
643 xml += '</tr><tr valign="top">';
644 for (var i = 0; i < record_ids.length; i++) {
645 xml += '<td nowrap="nowrap"><iframe src="' + urls.XUL_BIB_BRIEF;
646 xml += '?docid=' + record_ids[i] + '"/></td>';
648 xml += '</tr><tr valign="top">';
649 for (var i = 0; i < record_ids.length; i++) {
650 html = obj.network.simple_request('MARC_HTML_RETRIEVE',[ record_ids[i] ]);
651 xml += '<td nowrap="nowrap"><iframe style="min-height: 1000px; min-width: 300px;" flex="1" src="data:text/html,' + window.escape(html) + '"/></td>';
653 xml += '</tr></table></form>';
654 //obj.data.temp_merge_top = top_xml; obj.data.stash('temp_merge_top');
655 //obj.data.temp_merge_mid = xml; obj.data.stash('temp_merge_mid');
656 JSAN.use('util.window'); var win = new util.window();
657 var fancy_prompt_data = win.open(
658 urls.XUL_FANCY_PROMPT,
659 //+ '?xml_in_stash=temp_merge_mid'
660 //+ '&top_xml_in_stash=temp_merge_top'
661 //+ '&title=' + window.escape('Record Purging'),
662 'fancy_prompt', 'chrome,resizable,modal,width=700,height=500',
664 'top_xml' : top_xml, 'xml' : xml, 'title' : 'Record Purging'
667 //obj.data.stash_retrieve();
668 if (typeof fancy_prompt_data.fancy_status == 'undefined' || fancy_prompt_data.fancy_status != 'complete') { alert('Delete Aborted'); return; }
670 for (var i = 0; i < record_ids.length; i++) {
671 var robj = obj.network.simple_request('FM_BRE_DELETE',[ses(),record_ids[i]]);
672 if (typeof robj.ilsevent != 'undefined') {
673 if (!s) s = 'Error deleting these records:\n';
674 s += 'Record #' + record_ids[i] + ' : ' + robj.textcode + ' : ' + robj.desc + '\n';
677 if (s) { alert(s); } else { alert('Records deleted.'); }
679 obj.render_pending_records(); // FIXME -- need a generic refresh for lists
682 JSAN.use('util.widgets');
683 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
687 obj.error.standard_unexpected_error_alert('Records were not likely deleted.',E);
695 function() { alert('Not Yet Implemented'); }
701 obj.list2.select_all();
702 JSAN.use('util.functional');
703 var docids = util.functional.map_list(
704 obj.list2.dump_retrieve_ids(),
706 return JSON2js(o).docid; // docid
710 for (var i = 0; i < docids.length; i++) {
711 var doc_id = docids[i];
712 if (seen[doc_id]) continue; seen[doc_id] = true;
713 var opac_url = xulG.url_prefix( urls.opac_rdetail ) + '?r=' + doc_id;
714 var content_params = {
716 'authtime' : ses('authtime'),
717 'opac_url' : opac_url,
720 xulG.url_prefix(urls.XUL_OPAC_WRAPPER),
721 {'tab_name':'Retrieving title...'},
726 obj.error.standard_unexpected_error_alert('Showing in OPAC',E);
730 'record_buckets_export_records' : [ ['render'], function(){} ],
731 'record_buckets_list_actions' : [ ['render'], function(){} ]
735 this.controller.render();
737 if (typeof xulG == 'undefined') {
738 obj.controller.view.cmd_sel_opac.disabled = true;
739 obj.controller.view.cmd_sel_opac.setAttribute('disabled',true);
743 'prep_record_for_list' : function(docid,bucket_item_id) {
747 'retrieve_id' : js2JSON( { 'docid' : docid, 'bucket_item_id' : bucket_item_id } ),
751 'bucket_item_id' : bucket_item_id
757 obj.error.standard_unexpected_error_alert('Could not retrieve this record: ' + docid,E);
764 dump('exiting cat.record_buckets.js\n');