original legacy (ie. prototype) cat code
authorphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sun, 17 Jul 2005 15:19:23 +0000 (15:19 +0000)
committerphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sun, 17 Jul 2005 15:19:23 +0000 (15:19 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@1242 dcc99617-32d9-48b4-a31d-7c20da2025e4

29 files changed:
Evergreen/staff_client/chrome/content/evergreen/cat/browse_list.js [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/browse_list.xul [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/browse_list_overlay.xul [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/cat.js [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/cat.xul [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/cat_overlay.xul [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/copy.js [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/copy.xul [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/copy_add_wizard.xul [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/copy_display.xul [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/copy_edit.js [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/copy_edit.xul [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/copy_edit_overlay.xul [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/copy_overlay.xul [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/marc.js [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/marc.xul [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/marc_fixed.js [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/marc_keys.js [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/marc_overlay.xul [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/marc_rules.js [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/marc_validate.js [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/record_list.js [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/record_list.xul [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/record_list_overlay.xul [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/volume.js [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/volume_copy_add_overlay.xul [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/volume_copy_add_wizard.xul [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/volume_edit_overlay.xul [new file with mode: 0644]
Evergreen/staff_client/chrome/content/evergreen/cat/volume_edit_wizard.xul [new file with mode: 0644]

diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/browse_list.js b/Evergreen/staff_client/chrome/content/evergreen/cat/browse_list.js
new file mode 100644 (file)
index 0000000..e0654dd
--- /dev/null
@@ -0,0 +1,662 @@
+// find_this_id = document id
+
+var org_shortname2id = {};
+var my_treerow;
+var browse_meter_per = 0;
+var orgs_with_copies = [];
+var orgs_with_copies_hash = {};
+
+function my_init() {
+       timer_init('cat');
+       dump('TESTING: browse_list.js: ' + mw.G['main_test_variable'] + '\n');
+       var tc = document.getElementById('browse_list_tree_children');
+       build_tree_branch(tc,mw.G['org_tree'],true);
+       my_treerow = document.getElementById( 'org_unit_' + mw.G.user_ou.shortname() ).firstChild;
+       document.getElementById('browse_meter').value = 0;
+       document.getElementById('browse_meter').setAttribute('real', '0.0');
+       gather_copies();
+       //populate_tree();
+}
+
+function refresh_browse_list() {
+       dump('=-=-=-=-=-=-=-=-=\n\n\nrefresh_browse_list()\n');
+       // Prune tree
+       var nl = document.getElementsByTagName('treeitem');
+       for (var i = 0; i < nl.length; i++) {
+               var v_treeitem = nl[i];
+               if (v_treeitem.getAttribute('object_type') == 'volume') {
+                       var org_treechildren = v_treeitem.parentNode;
+                       var org_treeitem = org_treechildren.parentNode;
+                       org_treeitem.removeChild(org_treechildren);
+                       var org_treerow = org_treeitem.firstChild;
+                       org_treerow.childNodes[1].setAttribute('label','0');
+                       org_treerow.childNodes[2].setAttribute('label','0');
+               }
+       }
+       document.getElementById('browse_meter').value = 0;
+       document.getElementById('browse_meter').setAttribute('real', '0.0');
+       gather_copies();
+}
+
+function button_toggle_my_libraries(ev) {
+       // label = Hide My Libraries
+       // alt_label = Show My Libraries
+       var target = document.getElementById('browse_list_button1');
+       if (!target) { dump('eh?\n'); return; }
+       swap_attributes('browse_list_button1','label','alt_label');
+       var toggle = cycle_attribute( target,'toggle', [ '1', '2' ] );
+       for (var i in mw.G.my_orgs) {
+               var lib = mw.G.my_orgs[i];
+               var item = document.getElementById('org_unit_'+lib.shortname());
+               if (item) {
+                       if (toggle == '2') {
+                               hide_branch(item);
+                       } else {
+                               unhide_branch(item);
+                       }
+               }
+       }
+}
+
+function button_toggle_libraries(ev) {
+       // label = Show Other Libraries With Copies
+       // alt_label = Show Just My Libraries
+       var target = document.getElementById('browse_list_button2');
+       if (!target) { dump('eh?\n'); return; }
+       swap_attributes('browse_list_button2','label','alt_label');
+       var toggle = cycle_attribute( target,'toggle',['1','2'] );
+       if (toggle == '1') {
+               dump('Showing just my libraries...\n');
+               /*hide_branch( document.getElementById('org_unit_PINES') );
+               for (var i = 0; i < mw.G.my_orgs.length; i++) {
+                       unhide_branch(
+                               document.getElementById( 'org_unit_' + mw.G.my_orgs[i].shortname() )
+                       );
+               }*/
+               var nl = document.getElementsByTagName('treeitem');
+               for (var i = 0; i < nl.length; i++) {
+                       var item = nl[i];
+                       if (item.getAttribute('id').substr(0,9) != 'org_unit_') continue;
+                       if (mw.G.my_orgs_hash[ item.getAttribute('myid') ]) {
+                               //item.setAttribute('hidden','false');
+                               unhide_branch(item);
+                       } else {
+                               //item.setAttribute('hidden','true');
+                               hide_branch(item);
+                       }
+               }
+       } else {
+               dump('Showing other libraries with copies...\n');
+               var nl = document.getElementsByTagName('treeitem');
+               for (var i = 0; i < nl.length; i++) {
+                       var item = nl[i];
+                       if (item.getAttribute('copies') == 'true') {
+                               //item.setAttribute('hidden','false');
+                               //dump('\tunhiding ' + item.getAttribute('id') + '\n');
+                               unhide_branch(item);
+                       } else {
+                               //item.setAttribute('hidden','true');
+                               //dump('\thiding ' + item.getAttribute('id') + '\n');
+                               //hide_branch(item);
+                       }
+               }
+
+       }
+}
+
+function unhide_branch(item,do_open,do_copies) {
+       if (item.getAttribute('id') == 'org_unit_PINES') { return; }
+       //dump('Unhiding ' + item.getAttribute('id') + '\n');
+       item.setAttribute('hidden','false');
+       if (do_open) {
+               item.setAttribute('open','true');
+       }
+       if (do_copies) {
+               item.setAttribute('copies','true');
+       }
+       if (item.parentNode && item.parentNode.setAttribute) {
+               var id = item.parentNode.getAttribute('id');
+               if (id.substr(0,7) != 'browse_' && id != 'org_unit_PINES') {
+                       unhide_branch(item.parentNode,do_open,do_copies);
+               }
+       }
+}
+
+function hide_branch(item,do_open,do_copies) {
+       if (item.getAttribute('id') == 'org_unit_PINES') { return; }
+       //dump('Hiding ' + item.getAttribute('id') + '\n');
+       item.setAttribute('hidden','true');
+       if (do_open) {
+               item.setAttribute('open','false');
+       }
+       if (do_copies) {
+               item.setAttribute('copies','true');
+       }
+       if (item.parentNode && item.parentNode.setAttribute) {
+               var id = item.parentNode.getAttribute('id');
+               if (id.substr(0,7) != 'browse_' && id != 'org_unit_PINES') {
+                       hide_branch(item.parentNode,do_open,do_copies);
+               }
+       }
+}
+
+function gather_copies() {
+       // loop the libs
+       dump('Hello : ' + timer_elapsed('world') + '\n');
+/*     user_async_request(
+                       'open-ils.cat',
+                       'open-ils.cat.asset.copy_tree.global.retrieve',
+                       [ mw.G['auth_ses'][0], find_this_id  ],
+                       gather_copies_callback
+               );
+*/
+       var orgs_with_copies = user_request(
+               'open-ils.cat',
+               'open-ils.cat.actor.org_unit.retrieve_by_title',
+               [ find_this_id ]
+       )[0];
+       for (var i = 0; i < orgs_with_copies.length; i++) {
+               orgs_with_copies_hash[ orgs_with_copies[i] ] = true;
+       }
+       var bucket = new Array();
+       for (var i = 0; i < mw.G.my_orgs.length; i++ ) {
+               //if (find_id_object_in_list( mw.G.aout_list, mw.G.my_orgs[i].ou_type() ).can_have_vols() == '0')
+               if ( mw.G.aout_list[ mw.G.my_orgs[i].ou_type() ].can_have_vols() == '0')
+                       continue;
+               if ( ! orgs_with_copies_hash[ mw.G.my_orgs[i].id() ] ) continue;
+               bucket.push( mw.G.my_orgs[i].id() );
+       }
+       document.getElementById('browse_libs').setAttribute('value','Retrieving my copies...');
+       user_async_request(
+               'open-ils.cat',
+               'open-ils.cat.asset.copy_tree.retrieve',
+               [ mw.G['auth_ses'][0], find_this_id, bucket ],
+               function (request) {
+                       gather_copies_callback(request);
+                       document.getElementById('browse_libs').setAttribute('value','Retrieving copies from other libraries...');
+                       gather_other_copies();
+               }
+       );
+       dump('((((((((((((((((( Count = ' + counter_incr('world') + '\n');
+}
+
+function gather_other_copies() {
+       var w_s = 10; var c_s = 0;
+       var bucket = new Array();
+
+       var nl = document.getElementsByTagName('treeitem');
+       for (var i = 0; i < nl.length; i++) {
+               var item = nl[i];
+               if (item.getAttribute('can_have_vols') == '0') continue;
+               //if ( find_id_object_in_list( mw.G.my_orgs, item.getAttribute('myid') ) ) { continue; }
+               if ( mw.G.my_orgs_hash[ item.getAttribute('myid') ] ) { continue; }
+               if ( ! orgs_with_copies_hash[ item.getAttribute('myid') ] ) continue;
+               bucket.push( item.getAttribute('myid') );
+               if (++c_s >= w_s) {
+                       user_async_request(
+                               'open-ils.cat',
+                               'open-ils.cat.asset.copy_tree.retrieve',
+                               [ mw.G['auth_ses'][0], find_this_id, bucket ],
+                               gather_copies_callback
+                       );
+                       dump('((((((((((((((((( Count = ' + counter_incr('world') + '\n');
+                       bucket = new Array();
+                       c_s = 0;
+               }
+       }
+       if (bucket.length > 0) {
+               user_async_request(
+                       'open-ils.cat',
+                       'open-ils.cat.asset.copy_tree.retrieve',
+                       [ mw.G['auth_ses'][0], find_this_id, bucket ],
+                       gather_copies_callback
+               );
+               dump('((((((((((((((((( Count = ' + counter_incr('world') + '\n');
+       }
+       browse_meter_per = 100 / counter_peek('world');
+       dump(timer_elapsed('world') + ' : World : ' + timer_elapsed('gather') + '\n');
+}
+
+function find_my_treerow_index() {
+       var nl = document.getElementById('browse_list_tree').getElementsByTagName('treerow');
+       var count = 0;
+       //dump('find_my_treerow:  count = ' + count + '  nl.length = ' + nl.length + '\n');
+       for (var i = 0; i < nl.length; i++) {
+               var row = nl[i];
+               var item = row.parentNode;
+               if (item.getAttribute('id') == 'org_unit_' + mw.G.user_ou.shortname() ) {
+                       return count;
+               }
+               var open_attr = item.getAttribute('open');
+               var hidden_prop = item.hidden;
+               //dump('id = ' + item.getAttribute('id') + '   hidden_attr = ' + hidden_attr + '   hidden_prop = ' + hidden_prop + '\n');
+               if (hidden_prop.toString() == 'false' && open_attr.toString() == 'true') {
+                       count++;
+               }
+       }
+       return 0;
+}
+
+function gather_copies_callback(request) {
+       dump('gather_copies_callback : ' + timer_elapsed('gather') + ' : ' + ' count = ' + counter_incr('gather') + '\n');
+       var result = request.getResultObject();
+       var n_volumes = 0; var n_copies = 0; var flag = false;
+       //dump('copybrowser result = ' + js2JSON(result) + '\n=-=-=\n');
+       for (var y in result) {
+               if (result[y] && (typeof(result[y])=='object')) {
+                       var volume = result[y]; n_volumes++;
+                       //dump('\nvolume = ' + js2JSON(volume) + '\n');
+                       dump(' volume id = ' + volume.id() + '\n');
+                       var lib = find_ou( mw.G.org_tree, volume.owning_lib() );
+                       //dump('lib = ' + js2JSON(lib) + '\n');
+                       if ( lib.shortname() == mw.G.user_ou.shortname() ) { flag = true; }
+                       var callnumber = volume.label();
+                       var copies = volume.copies();
+                       //dump('\tcopies = ' + js2JSON(copies) + '\n');
+                       var item = document.getElementById('org_unit_'+lib.shortname());
+                       if (!item) { dump('skipping\n'); continue; }
+
+                       var item_row = item.firstChild;
+                       var volumes_treecell;
+                       if (item_row.childNodes.length == 1) {
+                               volumes_treecell = document.createElement('treecell');
+                               volumes_treecell.setAttribute('label','0');
+                               item_row.appendChild(volumes_treecell);
+                       } else {
+                               volumes_treecell = item_row.childNodes[1];
+                       }
+                       volumes_treecell.setAttribute(
+                               'label',
+                               parseInt(volumes_treecell.getAttribute('label')) + 1
+                       );
+
+                       var copies_treecell;
+                       if (item_row.childNodes.length < 3) {
+                               copies_treecell = document.createElement('treecell');
+                               copies_treecell.setAttribute('label','0');
+                               item_row.appendChild(copies_treecell);
+                       } else {
+                               copies_treecell = item_row.childNodes[2];
+                       }
+                       copies_treecell.setAttribute(
+                               'label',
+                               parseInt(copies_treecell.getAttribute('label')) + copies.length
+                       );
+
+
+                       var cn_treechildren;
+                       var nl = item.getElementsByTagName('treechildren');
+                       //unhide_branch(item,false,true);
+                       item.setAttribute('copies',true);
+                       if (nl.length == 0) {
+                               cn_treechildren = document.createElement('treechildren');
+                               item.appendChild(cn_treechildren);
+                       } else {
+                               cn_treechildren = nl[0];
+                       }
+
+                       var cn_treeitem = document.createElement('treeitem');
+                               cn_treeitem.setAttribute('container','true');
+                               cn_treeitem.setAttribute('open','true');
+                               cn_treeitem.setAttribute('object_type','volume');
+                               cn_treeitem.setAttribute('volume_id',volume.id());
+                               cn_treeitem.setAttribute('callnumber',volume.label());
+                               cn_treeitem.setAttribute('ou_id',lib.id());
+
+                       cn_treechildren.appendChild(cn_treeitem);
+
+                       var cn_treerow = document.createElement('treerow');
+                       cn_treeitem.appendChild(cn_treerow);
+
+                       var cn_treecell = document.createElement('treecell');
+                               cn_treecell.setAttribute('label',callnumber);
+                       cn_treerow.appendChild(cn_treecell);
+
+                       var treechildren = document.createElement('treechildren');
+                       cn_treeitem.appendChild(treechildren);
+                       //dump( 'org_unit_'+lib+' item = '+item.tagName+'\n');
+                       for (var j = 0; j < copies.length; j++) {
+                               var copy = copies[j]; n_copies++;
+                               //dump('barcode: ' + copy.barcode() + '\n');
+
+                               var treeitem = document.createElement('treeitem');
+                                       treeitem.setAttribute('open','true');
+                                       treeitem.setAttribute('container','true');
+                                       treeitem.setAttribute('class','barcode_row');
+                                       treeitem.setAttribute('object_type','copy');
+                                       treeitem.setAttribute('ou_shortname',lib.shortname());
+                                       treeitem.setAttribute('ou_id',lib.id());
+                                       treeitem.setAttribute('callnumber',callnumber);
+                                       treeitem.setAttribute('barcode',copy.barcode());
+                                       treeitem.setAttribute('copy_id',copy.id());
+                                       treeitem.setAttribute('volume_id',volume.id());
+                                       //treeitem.setAttribute('copy',js2JSON(copy));
+                               treechildren.appendChild(treeitem);
+
+                               var treerow = document.createElement('treerow');
+                               treeitem.appendChild(treerow);
+
+                               var list = [ 
+                                       copy.barcode() , '', '', lib.shortname() , callnumber , copy.copy_number() ,
+                                       //find_id_object_in_list( mw.G.acpl_list, copy.location() ).name() , 
+                                       mw.G.acpl_hash[ copy.location() ].name() ,
+                                       //find_ou( mw.G.org_tree, copy.circ_lib() ).shortname() , 
+                                       mw.G.org_tree_hash[ copy.circ_lib() ].shortname(),
+                                       yesno( copy.circulate() ) , yesno( copy.ref() ) ,
+                                       yesno( copy.opac_visible() ) , copy.circ_as_type() , copy.circ_modifier() ,
+                                       copy.loan_duration() , copy.fine_level() , copy.create_date() ,
+                                       copy.creator() , copy.edit_date() , copy.editor() , copy.deposit() ,
+                                       copy.deposit_amount() , copy.price() , copy.status()
+                               ];
+
+                               for (var i = 0; i < list.length; i++ ) {
+                                       var treecell = document.createElement('treecell');
+                                               treecell.setAttribute('label',list[i]);
+                                       treerow.appendChild(treecell);
+                               }
+                                               
+                       }
+               } else {
+                       dump('gather_copies problem: ' + result[y] + '\n');
+                       //throw(result[0]);
+               }
+       }
+       var tree = document.getElementById('browse_list_tree');
+       if (tree.currentIndex != -1) {
+               //dump('currentIndex != -1 = ' + tree.currentIndex + '\n');
+               //tree.treeBoxObject.scrollToRow( tree.currentIndex );
+               tree.treeBoxObject.ensureRowIsVisible( tree.currentIndex );
+       } else if (flag) {
+               //dump('currentIndex == -1\n');
+               var find = find_my_treerow_index();
+               dump('find = ' + find + ' n_volumes = ' + n_volumes + ' n_copies = ' + n_copies + '\n');
+               //alert('find = ' + find + ' n_volumes = ' + n_volumes + ' n_copies = ' + n_copies + '\n');
+               if (find > 0) { 
+                       find = find + n_volumes + n_copies;
+                       tree.view.selection.select( find ); 
+               }
+               //tree.treeBoxObject.ensureRowIsVisible( find );
+       }
+       var meter = document.getElementById('browse_meter');
+       var real = parseFloat( meter.getAttribute('real') ) + browse_meter_per;
+       meter.setAttribute('real',real);
+       meter.value = Math.ceil( real );
+       if ( counter_peek('gather') == counter_peek('world') ) {
+               document.getElementById('browse_libs').setAttribute('value','Finished');
+               document.getElementById('browse_libs').setAttribute('hidden','true');
+               meter.value = 100;
+               meter.setAttribute('hidden','true');
+       }
+       dump('gather callback   done : ' + timer_elapsed('gather') + '\n');
+}
+
+
+function build_tree_branch(treechildren,org,hide) {
+       var id = org.id();
+       var name = org.name();
+       var shortname = org.shortname(); org_shortname2id[shortname] = id;
+       var children = org.children();
+       var flag = mw.G.aout_hash[ org.ou_type() ].can_have_vols() == '1';
+       var item = make_treeitem('org_unit_' + shortname, name, flag);
+       item.setAttribute('hidden',hide);
+       item.setAttribute('ou_id',org.id());
+       //if ( find_id_object_in_list( mw.G.my_orgs, id ) ) { 
+       if ( mw.G.my_orgs_hash[ id ] ) {
+               item.setAttribute('open','true'); 
+               item.setAttribute('hidden','false');
+               item.setAttribute('myorg','true');
+       }
+       item.setAttribute( 
+               'can_have_vols', 
+               //find_id_object_in_list( mw.G.aout_list, org.ou_type() ).can_have_vols() 
+               mw.G.aout_hash[ org.ou_type() ].can_have_vols()
+       );
+       item.setAttribute( 'myid', org.id() );
+       if (children && (children.length > 0)) {
+               var n_treechildren = document.createElement('treechildren');
+               for (var i in children) {
+                       var child = children[i];
+                       build_tree_branch(n_treechildren, child, true);
+               }
+               item.appendChild(n_treechildren);
+       }
+       treechildren.appendChild(item);
+}
+
+function make_treeitem(id,name,flag) {
+       var treeitem = document.createElement('treeitem');
+               treeitem.setAttribute('id',id);
+               treeitem.setAttribute('container','true');
+       var treerow = make_treerow(name,flag);
+               treeitem.appendChild(treerow);
+               treeitem.setAttribute('object_type','org_unit');
+       return treeitem;
+}
+
+function make_treerow(name,flag) {
+       var treerow = document.createElement('treerow');
+       var treecell = document.createElement('treecell');
+               treecell.setAttribute('label',name);
+       treerow.appendChild(treecell);
+       treecell = document.createElement('treecell');
+               if (flag) treecell.setAttribute('label',0);
+       treerow.appendChild(treecell);
+       treecell = document.createElement('treecell');
+               if (flag) treecell.setAttribute('label',0);
+       treerow.appendChild(treecell);
+
+       return treerow;
+}
+
+function get_selected_rows_by_object_type(tree,object_type) {
+       var items = get_list_from_tree_selection(tree);
+       var command = "filter_list(items, function (obj) { return obj.getAttribute('object_type') == '" + object_type + "'; } );";
+       return eval(command);
+}
+
+function build_CopyBrowser_Context(ev) {
+       dump('build_CopyBrowser_Context: ev.target.tagName = ' + ev.target.tagName + '\n');
+       dump('this = ' + this.tagName + '\n');
+
+       var popup = document.getElementById('browse_menu');
+       empty_widget(popup);
+
+       var volume_flag = 0; var copy_flag = 0; var library_flag = 0;
+
+       var hitlist = document.getElementById('browse_list_tree');
+       var start = new Object(); var end = new Object();
+       var numRanges = hitlist.view.selection.getRangeCount();
+       for (var t=0; t<numRanges; t++){
+               hitlist.view.selection.getRangeAt(t,start,end);
+               for (var v=start.value; v<=end.value; v++){
+                       var i = hitlist.contentView.getItemAtIndex(v);
+                       //dump(i + ':' + i.firstChild.childNodes.length + '\n');
+                       switch( i.getAttribute('object_type') ) {
+                               case 'volume' : volume_flag++; break;
+                               case 'copy' : copy_flag++; break;
+                               case 'org_unit' : if (i.getAttribute('can_have_vols') == '1') library_flag++; break;
+                       }
+               }
+       }
+       dump('volume_flag = ' + volume_flag + ' copy_flag = ' + copy_flag + ' library_flag = ' + library_flag + '\n');
+       if (library_flag > 0) {
+               var menuitem = document.createElement('menuitem');
+               popup.appendChild(menuitem);
+                       menuitem.setAttribute('label','Add Volumes');
+                       menuitem.setAttribute('command','cmd_volume_add');
+               popup.appendChild( document.createElement( 'menuseparator' ) );
+       }
+       if (volume_flag > 0) {
+               var menuitem = document.createElement('menuitem');
+               popup.appendChild(menuitem);
+                       if (volume_flag > 1) {
+                               menuitem.setAttribute('label','Edit Volumes');
+                       } else {
+                               menuitem.setAttribute('label','Edit Volume');
+                       }
+                       menuitem.setAttribute('command','cmd_volume_edit');
+               popup.appendChild( document.createElement( 'menuseparator' ) );
+               menuitem = document.createElement('menuitem');
+               popup.appendChild(menuitem);
+                       menuitem.setAttribute('label','Add Copies');
+                       menuitem.setAttribute('command','cmd_copy_add');
+               menuitem = document.createElement('menuitem');
+               popup.appendChild( document.createElement( 'menuseparator' ) );
+       }
+       if (copy_flag > 0) {
+               var menuitem = document.createElement('menuitem');
+               popup.appendChild(menuitem);
+                       if (copy_flag > 1) {
+                               menuitem.setAttribute('label','Edit Copies');
+                       } else {
+                               menuitem.setAttribute('label','Edit Copy');
+                       }
+                       menuitem.setAttribute('command','cmd_copy_edit');
+               popup.appendChild( document.createElement( 'menuseparator' ) );
+       }
+       if (volume_flag > 0) {
+               var menuitem = document.createElement('menuitem');
+               popup.appendChild(menuitem);
+                       if (volume_flag > 1) {
+                               menuitem.setAttribute('label','Delete Volumes');
+                       } else {
+                               menuitem.setAttribute('label','Delete Volume');
+                       }
+                       menuitem.setAttribute('command','cmd_volume_delete');
+               popup.appendChild( document.createElement( 'menuseparator' ) );
+
+       }
+       if (copy_flag > 0) {
+               var menuitem = document.createElement('menuitem');
+               popup.appendChild(menuitem);
+                       if (copy_flag > 1) {
+                               menuitem.setAttribute('label','Delete Copies');
+                       } else {
+                               menuitem.setAttribute('label','Delete Copy');
+                       }
+                       menuitem.setAttribute('command','cmd_copy_delete');
+               popup.appendChild( document.createElement( 'menuseparator' ) );
+       }
+
+       var menuitem = document.createElement('menuitem');
+       popup.appendChild(menuitem);
+               menuitem.setAttribute('label','Refresh Listing');
+               menuitem.setAttribute('command','cmd_refresh');
+}
+
+function volume_add(tab,params) {
+       dump('trying to volume_add()\n');
+       params['shortcut'] = 'volume_add';
+       var w;
+       //var items = get_selected_rows(tree);
+       var items = get_list_from_tree_selection(params.tree);
+       items = filter_list(
+               items,
+               function (obj) {
+                       return obj.getAttribute('object_type') == 'org_unit';
+               }
+       );
+       var chrome = 'chrome://evergreen/content/cat/volume_copy_add_wizard.xul';
+       if (tab) {
+               parentWindow.new_tab('main_tabbox');
+               w = parentWindow.replace_tab('main_tabbox','Add Volume',chrome);
+       } else {
+               w = mw.new_window( chrome );
+       }
+       dump('setting use_this_tree\n');
+       w.tree_items = items;
+       w.record_id = find_this_id;
+       w.params = params;
+}
+
+function copy_add(tab,params) {
+       dump('trying to copy_add()\n');
+       params['shortcut'] = 'copy_add';
+       var w;
+       //var items = get_selected_rows(tree);
+       var items = get_list_from_tree_selection(params.tree);
+       items = filter_list(
+               items,
+               function (obj) {
+                       return obj.getAttribute('object_type') == 'volume';
+               }
+       );
+       var chrome = 'chrome://evergreen/content/cat/copy_add_wizard.xul';
+       if (tab) {
+               parentWindow.new_tab('main_tabbox');
+               w = parentWindow.replace_tab('main_tabbox','Add Copy',chrome);
+       } else {
+               w = mw.new_window( chrome );
+       }
+       dump('setting use_this_tree\n');
+       w.tree_items = items;
+       w.record_id = find_this_id;
+       w.params = params;
+}
+
+function volume_edit(tab,params) {
+       dump('trying to volume_edit()\n');
+       params['shortcut'] = 'volume_edit';
+       var w;
+       //var items = get_selected_rows(tree);
+       var items = get_list_from_tree_selection(params.tree);
+       items = filter_list(
+               items,
+               function (obj) {
+                       return obj.getAttribute('object_type') == 'volume';
+               }
+       );
+       var chrome = 'chrome://evergreen/content/cat/volume_edit_wizard.xul';
+       if (tab) {
+               parentWindow.new_tab('main_tabbox');
+               w = parentWindow.replace_tab('main_tabbox','Edit Volumes',chrome);
+       } else {
+               w = mw.new_window( chrome );
+       }
+       dump('setting use_this_tree\n');
+       w.tree_items = items;
+       w.record_id = find_this_id;
+       w.params = params;
+
+}
+
+function volume_delete(tab,params) {
+       var volumes = get_selected_rows_by_object_type(params.tree,'volume'); 
+       var cn_list = [];
+       for (var i = 0; i < volumes.length; i++) {
+               var cn = new acn();
+               cn.id( volumes[i].getAttribute('volume_id') );
+               cn.isdeleted( '1' );
+               cn_list.push( cn );
+       }
+       var result = user_request(
+                       'open-ils.cat',
+                       'open-ils.cat.asset.volume_tree.fleshed.batch.update',
+                       [ mw.G['auth_ses'][0], cn_list]
+       );
+       dump('volume_tree.fleshed.batch.update result: ' + js2JSON(result) + '\n');
+       refresh_browse_list();
+}
+
+function copy_delete(tab,params) {
+       var copies = get_selected_rows_by_object_type(params.tree,'copy'); 
+       var cn_list = [];
+       for (var i = 0; i < copies.length; i++) {
+               var cn = new acn();
+               cn.id( copies[i].getAttribute('volume_id') );
+
+               var cp = new acp();
+               cp.id( copies[i].getAttribute('copy_id') );
+               cp.isdeleted( '1' );
+
+               cn.copies( [ cp ] );
+               cn_list.push( cn );
+       }
+       var result = user_request(
+                       'open-ils.cat',
+                       'open-ils.cat.asset.volume_tree.fleshed.batch.update',
+                       [ mw.G['auth_ses'][0], cn_list]
+       );
+       dump('volume_tree.fleshed.batch.update result: ' + js2JSON(result) + '\n');
+       refresh_browse_list();
+}
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/browse_list.xul b/Evergreen/staff_client/chrome/content/evergreen/cat/browse_list.xul
new file mode 100644 (file)
index 0000000..0084fac
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0"?>
+<!-- Application: Evergreen Staff Client -->
+<!-- Screen: Cataloger's Search Result Screen -->
+
+<!-- Stylesheets -->
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://evergreen/skin/evergreen.css" type="text/css"?>
+<?xml-stylesheet href="chrome://evergreen/skin/cat.css" type="text/css"?>
+
+<!-- Localization -->
+<!DOCTYPE window SYSTEM "chrome://evergreen/locale/cat.dtd">
+
+<window id="browse_list_win" title="&browse_list.win_title;" 
+       orient="vertical" style="overflow: scroll" width="800" height="500"
+       onload="my_init();"
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+       <!-- Overlays for this XUL file -->
+       <?xul-overlay href="chrome://evergreen/content/OpenSRF/OpenSRF.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/util/util.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/cat/browse_list_overlay.xul"?>
+
+       <!-- OpenSRF -->
+       <script>var myPackageDir = "evergreen";</script>
+       <OpenSRF id="OpenSRF_js" />
+
+       <!-- The logic for this app -->
+       <Evergreen id="browse_list_js" />
+
+       <!-- XUL'ified abstraction for logic to attach to widgets -->
+       <commandset id="browse_list_cmds" />
+
+       <!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+       <keyset id="browse_list_keys" />
+
+       <!-- Context menus -->
+       <popupset id="browse_list_popupset" />
+
+       <!-- Layout to be filled in by overlays and javascript -->
+       <vbox id="browse_list_vbox" class="test_class"/>
+
+</window>
+
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/browse_list_overlay.xul b/Evergreen/staff_client/chrome/content/evergreen/cat/browse_list_overlay.xul
new file mode 100644 (file)
index 0000000..6fd2212
--- /dev/null
@@ -0,0 +1,116 @@
+<?xml version="1.0"?>
+<!DOCTYPE overlay SYSTEM "chrome://evergreen/locale/cat.dtd">
+<overlay id="browse_list_overlay" 
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+<!-- The javascript logic for the staff client -->
+<Evergreen id="browse_list_js">
+       <!--<script src="chrome://evergreen/content/evergreen/fieldmapper.js" />-->
+       <util id="util_js"/>
+       <script src="browse_list.js" />
+</Evergreen>
+
+<!-- Some logic abstracted a bit.  Sort of like an API list -->
+<commandset id="browse_list_cmds">
+       <command id="cmd_edit_browse" oncommand="spawn_editors();"/>
+       <command id="cmd_volume_add" oncommand="volume_add(false,{ 'tree' : 'browse_list_tree', 'refresh_func' : refresh_browse_list });"/>
+       <command id="cmd_volume_edit" oncommand="volume_edit(false,{ 'tree' : 'browse_list_tree', 'refresh_func' : refresh_browse_list });"/>
+       <command id="cmd_volume_delete" oncommand="volume_delete(false,{ 'tree' : 'browse_list_tree', 'refresh_func' : refresh_browse_list });"/>
+       <command id="cmd_copy_add" oncommand="copy_add(false,{ 'tree' : 'browse_list_tree', 'refresh_func' : refresh_browse_list });"/>
+       <command id="cmd_copy_edit" oncommand="spawn_batch_copy_editor(true, { 'tree' : document.getElementById('browse_list_tree') , 'refresh_func' : refresh_browse_list });"/>
+       <command id="cmd_copy_delete" oncommand="copy_delete(false,{ 'tree' : 'browse_list_tree', 'refresh_func' : refresh_browse_list });"/>
+       <command id="cmd_toggle_my_libs" oncommand="button_toggle_my_libraries(event);"/>
+       <command id="cmd_toggle_libs" oncommand="button_toggle_libraries(event);"/>
+       <command id="cmd_refresh" oncommand="refresh_browse_list();"/>
+       <command id="cmd_alert" oncommand="alert('Not Yet Implemented');"/>
+</commandset>
+
+<!-- Context menus -->
+<popupset id="browse_list_popupset">
+       <popup id="browse_menu" onpopupshowing="build_CopyBrowser_Context(event);">
+       <!--
+               <menuitem id="browse_menu1" label="Add Volume" command="cmd_volume_add"/>
+               <menuitem id="browse_menu2" label="Edit Volume" command="cmd_alert" disabled="true"/>
+               <menuseparator id="browse_menu_sep1"/>
+               <menuitem id="browse_menu3" label="Add Copy" command="cmd_copy_add" disabled="true"/>
+               <menuitem id="browse_menu4" label="Edit Copy" command="cmd_copy_edit"/>
+               <menuseparator id="browse_menu_sep2"/>
+               <menuitem id="browse_menu5" label="Refresh Display" command="cmd_refresh"/>
+       -->
+       </popup>
+</popupset>
+
+<!-- The top level widget for the cat client -->
+<vbox id="browse_list_vbox" flex="1">
+       <hbox id="browse_list_buttonbox"/>
+       <tree id="browse_list_tree"/>
+</vbox>
+
+<hbox id="browse_list_buttonbox">
+       <!--
+       <button id="browse_list_button1" label="Hide My Libraries" alt_label="Show My Libraries" toggle="1" command="cmd_toggle_my_libs"/>
+       -->
+       <button id="browse_list_button3" label="Refresh" command="cmd_refresh"/>
+       <button id="browse_list_button2" label="Show Other Libraries With Copies" alt_label="Show Just My Libraries" toggle="1" command="cmd_toggle_libs"/>
+       <label id="browse_libs"/>
+       <progressmeter id="browse_meter" mode="normal" value="0" flex="1"/>
+</hbox>
+
+<tree id="browse_list_tree" enableColumnDrag="true" flex="1">
+       <treecols id="browse_list_treecols">
+               <treecol id="browse1" label="&browse_list.location;" flex="2" primary="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse1b" label="Volumes" flex="0"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse1a" label="Copies" flex="0"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse2" label="&browse_list.library;" flex="1"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse3" label="&browse_list.callnumber;" flex="1"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse4" label="&browse_list.copy_number;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse4aa" label="&browse_list.location2;" flex="1"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse4a" label="&browse_list.circ_lib;" flex="1"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse4b" label="&browse_list.circulate;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse4bb" label="&browse_list.ref;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse4bbb" label="&browse_list.opac_visible;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse4c" label="&browse_list.circ_as_type;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse4d" label="&browse_list.circ_modifier;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse4e" label="&browse_list.loan_duration;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse4f" label="&browse_list.fine_level;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse5" label="&browse_list.create_date;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse6" label="&browse_list.creator;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse7" label="&browse_list.edit_date;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse8" label="&browse_list.editor;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse9" label="&browse_list.deposit;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse10" label="&browse_list.deposit_amount;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse11" label="&browse_list.price;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="browse12" label="&browse_list.status;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+       </treecols>
+       <treechildren id="browse_list_tree_children" context="browse_menu"/>
+</tree>
+
+<!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+<keyset id="browse_list_keys">
+       <key id="" modifiers="accel" key="A" command="cmd_"/>
+</keyset>
+
+</overlay>
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/cat.js b/Evergreen/staff_client/chrome/content/evergreen/cat/cat.js
new file mode 100644 (file)
index 0000000..031783b
--- /dev/null
@@ -0,0 +1,58 @@
+function my_init() {
+       document.getElementById('search-entry-box').focus();
+       dump('TESTING: cat.js: ' + mw.G['main_test_variable'] + '\n');
+       populate_lib_list(
+               'search-copy-count-menu',
+               'search-copy-count-popup',
+               mw.G.user_ou
+       );
+}
+
+function search(s_type, s_loc, s_fmt, s_ord, s_term) {
+       var w_type = document.getElementById(s_type);
+       var w_loc = document.getElementById(s_loc);
+       var w_fmt = document.getElementById(s_fmt);
+       var w_term = document.getElementById(s_term);
+       var w_order = document.getElementById(s_ord);
+       var frame_box = document.getElementById('cat_result_box');
+       while (frame_box.lastChild) { frame_box.removeChild(frame_box.lastChild); }
+       switch(w_type.value) {
+               case 'barcode':
+                       alert('Not Yet Implemented');
+                       break;
+               case 'id':
+                       alert('Not Yet Implemented');
+                       break;
+               case 'title': case 'author': case 'tcn': case 'subject':
+                       var frame = document.createElement('iframe');
+                       frame_box.appendChild(frame);
+                       frame.setAttribute('flex','1');
+                       frame.setAttribute('src','chrome://evergreen/content/cat/record_list.xul');
+                       frame.contentWindow.parentWindow = parentWindow;
+                       frame.contentWindow.search_term = w_term.value;
+                       frame.contentWindow.search_type = w_type.value;
+                       frame.contentWindow.search_location = w_loc.value;
+                       frame.contentWindow.search_order = w_order.value;
+                       frame.contentWindow.catWindow = this;
+                       frame.contentWindow.tabWindow = tabWindow;
+                       frame.contentWindow.mw = mw;
+                       frame.contentWindow.am_i_a_top_level_tab = false;
+                       dump('here ====>\n');
+                       frame.contentWindow.addEventListener('load',function (e) { dump('here1<==\n'); this.test_hash['hello1'] = 'boo'; }, false);
+                       frame.contentWindow.addEventListener('load',function (e) { dump('here2<==\n'); this.test_hash['hello2'] = 'boo'; }, false);
+                       break;
+               case 'isbn':
+                       alert('Not Yet Implemented');
+                       break;
+               case 'callnumber':
+                       alert('Not Yet Implemented');
+                       break;
+               case 'all':
+                       alert('Not Yet Implemented');
+                       break;
+               default:
+                       alert('This case is not handled: ' + w_type.value);
+                       break;
+       }
+}
+
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/cat.xul b/Evergreen/staff_client/chrome/content/evergreen/cat/cat.xul
new file mode 100644 (file)
index 0000000..9685fa4
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!-- Application: Evergreen Staff Client -->
+<!-- Screen: Cataloger's Search Screen -->
+
+<!-- Stylesheets -->
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://evergreen/skin/evergreen.css" type="text/css"?>
+<?xml-stylesheet href="chrome://evergreen/skin/cat.css" type="text/css"?>
+
+<!-- Localization -->
+<!DOCTYPE page SYSTEM "chrome://evergreen/locale/cat.dtd">
+
+<page id="cat_win" title="&cat.title;" 
+       orient="vertical" style="overflow: scroll"
+       onload="my_init();"
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+       <!-- Overlays for this XUL file -->
+       <?xul-overlay href="chrome://evergreen/content/OpenSRF/OpenSRF.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/util/util.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/cat/cat_overlay.xul"?>
+
+       <!-- OpenSRF -->
+       <script>var myPackageDir = "evergreen";</script>
+       <OpenSRF id="OpenSRF_js" />
+
+       <!-- The logic for this app -->
+       <Evergreen id="cat_js" />
+
+       <!-- XUL'ified abstraction for logic to attach to widgets -->
+       <commandset id="cat_cmds" />
+
+       <!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+       <keyset id="cat_keys" />
+
+       <!-- Layout to be filled in by overlays and javascript -->
+       <vbox id="cat_vbox" class="test_class"/>
+
+</page>
+
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/cat_overlay.xul b/Evergreen/staff_client/chrome/content/evergreen/cat/cat_overlay.xul
new file mode 100644 (file)
index 0000000..1640a46
--- /dev/null
@@ -0,0 +1,179 @@
+<?xml version="1.0"?>
+<!DOCTYPE overlay SYSTEM "chrome://evergreen/locale/cat.dtd">
+<overlay id="cat_overlay" 
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+<!-- The javascript logic for the staff client -->
+<Evergreen id="cat_js">
+       <script>var ses;</script>
+       <util id="util_js"/>
+       <script src="cat.js" />
+</Evergreen>
+
+<!-- Some logic abstracted a bit.  Sort of like an API list -->
+<commandset id="cat_cmds">
+       <command id="cmd_search" oncommand="
+               search(
+                       'search-type-menu',
+                       'search-copy-count-menu',
+                       'search-format-menu',
+                       'search-order-menu',
+                       'search-entry-box'
+               );
+       "/>
+       <command id="cmd_test" oncommand="
+               /*spawn_copy_browser( document.getElementById('search-entry-box').value );*/
+               spawn_marc_editor( document.getElementById('search-entry-box').value );
+       "/>
+       <command id="cmd_alert" oncommand="
+               alert('Not Yet Implemented');
+       
+       "/>
+</commandset>
+
+<!-- The top level widget for the cat client -->
+<vbox id="cat_vbox" flex="1" style="min-width: 100px; overflow: scroll;">
+       <vbox id="cat_search_box"/>
+       <vbox id="cat_result_box" flex="1"/>
+</vbox>
+
+<!-- The search box -->
+<vbox id="cat_search_box">
+       <groupbox id="search_groupbox"/>
+</vbox>
+
+<groupbox id="search_groupbox">
+       <caption label="&cat.search_criteria;"/>
+       <grid id="search_grid"/>
+</groupbox>
+
+<grid id="search_grid">
+       <columns> 
+               <column/> <column/> 
+               <column/> <column/> 
+               <column/>
+               <column flex="1"/> 
+       </columns>
+       <rows>
+               <row id="search_row1"/>
+               <row id="search_row2"/>
+               <row id="search_row3"/>
+       </rows>
+</grid>
+
+<row id="search_row1">
+       <label 
+               value="&cat.search_type;" 
+               control="search-type-menu" 
+               accesskey="&cat.search_type.key;"
+       />
+       <menulist id="search-type-menu"/>
+
+       <label
+               value="&cat.search_term;" 
+               control="search-entry-box" 
+               accesskey="&cat.search_term.key;"
+       />
+       <textbox id="search-entry-box" flex="1"/>
+
+
+       <!--<label 
+               value="&cat.search_location;" 
+               control="search-location-menu" 
+               accesskey="&cat.search_location.key;"
+       />
+       <menulist id="search-location-menu"/>-->
+</row>
+<row id="search_row2">
+       <label 
+               value="&cat.search_format;" 
+               control="search-format-menu" 
+               accesskey="&cat.search_format.key;"
+       />
+       <menulist id="search-format-menu"/>
+       <label 
+               value="&cat.search_count_copy;" 
+               control="search-copy-count-menu" 
+               accesskey="&cat.search_count_copy.key;"
+       />
+       <menulist id="search-copy-count-menu"/>
+
+</row>
+<row id="search_row3">
+       <label 
+               value="&cat.search_order;" 
+               control="search-order-menu" 
+               accesskey="&cat.search_order.key;"
+       />
+       <menulist id="search-order-menu"/>
+       <spacer/>
+       <hbox>
+               <button label="&cat.search_submit;" accesskey="&cat.search_submit.key;" command="cmd_search"/>
+               <button label="&cat.search_advanced;" accesskey="&cat.search_advanced.key;" command="cmd_alert"/>
+       </hbox>
+
+
+</row>
+
+<!-- The search location -->
+<!-- This should be populated by a script -->
+<menulist id="search-location-menu">
+       <menupopup id="search-location-popup">
+               <menuitem label="This Library (Athens-Clarke County Library)" value="PINES.ARL.ATH" />
+               <menuitem label="This Library System (Athens Regional Library)" value="PINES.ARL" />
+               <menuitem label="All PINES Libraries" value="PINES" />
+       </menupopup>
+</menulist>
+
+<menulist id="search-copy-count-menu">
+       <menupopup id="search-copy-count-popup"/>
+</menulist>
+
+
+
+<!-- The search format -->
+<menulist id="search-format-menu">
+       <menupopup id="search-format-popup" command="cmd_alert">
+               <menuitem label="&cat.type_of_material;" value="all" />
+               <menuitem label="&cat.fixed.BKS;" value="BKS" />
+               <menuitem label="&cat.fixed.SER;" value="SER" />
+               <menuitem label="&cat.fixed.VIS;" value="VIS" />
+               <menuitem label="&cat.fixed.MIX;" value="MIX" />
+               <menuitem label="&cat.fixed.MAP;" value="MAP" />
+               <menuitem label="&cat.fixed.SCO;" value="SCO" />
+               <menuitem label="&cat.fixed.REC;" value="REC" />
+               <menuitem label="&cat.fixed.COM;" value="COM" />
+       </menupopup>
+</menulist>
+
+<!-- The search order -->
+<menulist id="search-order-menu">
+       <menupopup id="search-order-popup" command="cmd_alert">
+               <menuitem label="&cat.search_title;" value="title" />
+               <menuitem label="&cat.search_author;" value="author" />
+               <menuitem label="&cat.search_pubyear;" value="pubyear" />
+       </menupopup>
+</menulist>
+
+
+<!-- The search type -->
+<menulist id="search-type-menu">
+       <menupopup id="search-type-popup">
+               <menuitem label="&cat.search_barcode;" value="barcode" />
+               <menuitem label="&cat.search_tcn;" value="tcn" />
+               <menuitem label="&cat.search_isbn;" value="isbn" />
+               <menuitem label="&cat.search_title;" value="title" selected="true"/>
+               <menuitem label="&cat.search_author;" value="author" />
+               <menuitem label="&cat.search_subject;" value="subject" />
+               <menuitem label="&cat.search_callnumber;" value="callnumber" />
+               <menuitem label="&cat.search_id;" value="id" />
+               <menuitem label="&cat.search_all;" value="all" />
+       </menupopup>
+</menulist>
+
+<!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+<keyset id="cat_keys">
+       <key id="" modifiers="accel" key="A" command="cmd_"/>
+</keyset>
+
+</overlay>
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/copy.js b/Evergreen/staff_client/chrome/content/evergreen/cat/copy.js
new file mode 100644 (file)
index 0000000..e9b9418
--- /dev/null
@@ -0,0 +1,294 @@
+var local_stat_cats;
+var local_stat_cat_entries = {};
+
+function my_init() {
+       dump('entering my_init for copy.js\n');
+       dump('TESTING: copy.js: ' + mw.G['main_test_variable'] + '\n');
+       dump('real_parentWindow: ' + real_parentWindow + '\n');
+       populate_copy_status_list('copy-status-menu','copy-status-popup','0');
+       populate_copy_location_list('shelving-location-menu','shelving-location-popup');
+       populate_lib_list_with_branch('circulating-library-menu','circulating-library-popup', mw.G.user_ou, mw.G.org_tree, true );
+       dump('super_dump cn_list = ' + super_dump_norecurse(cn_list) + '\n');
+       dump('my_init: cn_list = ' + js2JSON(cn_list) + '\n');
+       /*cn_list = fixJSON(cn_list);
+       dump('super_dump cn_list = ' + super_dump_norecurse(cn_list) + '\n');
+       dump('my_init: cn_list = ' + js2JSON(cn_list) + '\n');*/
+       var pertinent_libs = [];
+       for (var i = 0; i < cn_list.length; i++) {
+               var cn = cn_list[i];
+               for (var j = 0; j < cn.copies().length; j++) {
+                       var cp = cn.copies()[j];
+                       add_to_listbox(
+                               i,j,
+                               mw.G.org_tree_hash[ cn.owning_lib() ].shortname(),
+                               cn.label(),
+                               cp.barcode()
+                       );
+               }
+               pertinent_libs.push( cn.owning_lib() );
+       }
+       local_stat_cats = mw.G.asc_list;
+       populate_listbox_with_local_stat_cats_myself(
+               local_stat_cats,
+               local_stat_cat_entries,
+               'local_attr_listbox',
+               pertinent_libs,
+               'open-ils.circ',
+               'open-ils.circ.stat_cat.asset.multirange.intersect.retrieve',
+               false
+       );
+       if (params.select_all) {
+               document.getElementById('ephemeral_listbox').selectAll();
+               apply_attributes();
+       }
+}
+
+function transfer_attributes(event) {
+       var items = event.target.selectedItems;
+       dump('selectedItems.length = ' + items.length + '\n');
+       if (items.length == 0) { return; }
+
+       // Dump items
+       var dump_copies = map_list(
+               items,
+               function (obj) {
+                       var cnp = obj.getAttribute('cn_pos');
+                       var cpp = obj.getAttribute('cp_pos');
+                       return cn_list[cnp].copies()[cpp];
+               }
+       );
+       for (var i in dump_copies) {
+               dump('\n\n\n,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_\n\n\n');
+               dump( js2JSON(dump_copies[i]) );
+               dump('\n\n\n,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_\n\n\n');
+       }
+
+       // Transfer values from first item to XUL
+
+       var cp_pos = items[0].getAttribute('cp_pos');
+       var cn_pos = items[0].getAttribute('cn_pos');
+       var cp_list = cn_list[cn_pos].copies();
+       var copy = cp_list[cp_pos];
+       if (copy.circ_lib()) document.getElementById('circulating-library-menu').value =
+               copy.circ_lib().id();
+       if (copy.location()) document.getElementById('shelving-location-menu').value = 
+               copy.location().id();
+       if (copy.status()) document.getElementById('copy-status-menu').value =
+               copy.status().id();
+       if (copy.loan_duration()) document.getElementById('loan-duration-menu').value =
+               copy.loan_duration();
+       if (copy.fine_level()) document.getElementById('fine-level-menu').value =
+               copy.fine_level();
+       if (copy.circulate()) document.getElementById('circulate_menu').value =
+               copy.circulate();
+       if (copy.deposit()) document.getElementById('deposit_menu').value =
+               copy.deposit();
+       if (copy.deposit_amount()) document.getElementById('deposit_amount').value =
+               copy.deposit_amount();
+       if (copy.price()) document.getElementById('price').value =
+               copy.price();
+       if (copy.ref()) document.getElementById('reference_menu').value =
+               copy.ref();
+       if (copy.opac_visible()) document.getElementById('opac_visible_menu').value =
+               copy.opac_visible();
+
+       for (var i in copy.stat_cat_entries()) {
+               var entry = copy.stat_cat_entries()[i];
+               var menuitem = document.getElementById('menuitem_stat_cat_entry_' + entry.id());
+               if (menuitem) {
+                       menuitem.parentNode.parentNode.selectedItem = menuitem;
+               }
+       }
+       dump('select fired\n');
+}
+
+
+function save_attributes() {
+       real_parentWindow.cn_list = cn_list;
+       real_parentWindow.document.getElementById('volume_add').canAdvance = true;
+       //window.close();
+}
+
+function apply_attributes() {
+       var circ_lib = document.getElementById('circulating-library-menu').value;
+       var shelving_loc = document.getElementById('shelving-location-menu').value;
+       var copy_status = document.getElementById('copy-status-menu').value;
+       var loan_duration = document.getElementById('loan-duration-menu').value;
+       var fine_level = document.getElementById('fine-level-menu').value;
+       var circulate = document.getElementById('circulate_menu').value;
+       var deposit = document.getElementById('deposit_menu').value;
+       var deposit_amount = document.getElementById('deposit_amount').value;
+       var price = document.getElementById('price').value;
+       var ref = document.getElementById('reference_menu').value;
+       var opac = document.getElementById('opac_visible_menu').value;
+       var listbox = document.getElementById('ephemeral_listbox');
+       var items = listbox.selectedItems;
+       dump('selectedItems.length = ' + items.length + '\n');
+       for (var i = 0; i < items.length; i++) {
+               var listitem = items[i];
+               var cn_pos = listitem.getAttribute('cn_pos');
+               var cp_pos = listitem.getAttribute('cp_pos');
+               var copy_node = cn_list[cn_pos].copies()[cp_pos];
+               copy_node.circ_lib(     mw.G.org_tree_hash[ circ_lib ]);
+               copy_node.location(     mw.G.acpl_hash[ shelving_loc ]);
+               copy_node.status(       mw.G.ccs_hash[ copy_status ]);
+               copy_node.loan_duration(loan_duration);
+               copy_node.fine_level(fine_level);
+               copy_node.circulate(circulate);
+               copy_node.deposit(deposit);
+               copy_node.deposit_amount(deposit_amount);
+               copy_node.price(price);
+               copy_node.ref(ref);
+               copy_node.opac_visible(opac);
+               copy_node.ischanged(1);
+       }
+
+       dump('changed cn_list: ' + js2JSON(cn_list) + '\n');
+}
+
+function apply_attribute(ev) {
+       dump('Entering apply_attribute with element id = ');
+       var popup_id;
+       if (ev.target.tagName == 'menuitem') {
+               popup_id = ev.target.parentNode.getAttribute('id');
+       } else {
+               popup_id = ev.target.getAttribute('id');
+       }
+       dump(popup_id + '\n');
+       dump('ev.target = ' + ev.target + '  .tagName = ' + ev.target.tagName + '\n');
+
+       var circ_lib = document.getElementById('circulating-library-menu').value;
+       var shelving_loc = document.getElementById('shelving-location-menu').value;
+       var copy_status = document.getElementById('copy-status-menu').value;
+       var loan_duration = document.getElementById('loan-duration-menu').value;
+       var fine_level = document.getElementById('fine-level-menu').value;
+       var circulate = document.getElementById('circulate_menu').value;
+       var deposit = document.getElementById('deposit_menu').value;
+       var deposit_amount = document.getElementById('deposit_amount').value;
+       var price = document.getElementById('price').value;
+       var ref = document.getElementById('reference_menu').value;
+       var opac = document.getElementById('opac_visible_menu').value;
+       var listbox = document.getElementById('ephemeral_listbox');
+       var items = listbox.selectedItems;
+
+       dump('selectedItems.length = ' + items.length + '\n');
+       dump('before  cn_list: ' + js2JSON(cn_list) + '\n');
+       for (var i = 0; i < items.length; i++) {
+               var listitem = items[i];
+               var cn_pos = listitem.getAttribute('cn_pos');
+               var cp_pos = listitem.getAttribute('cp_pos');
+               var copy_node = cn_list[cn_pos].copies()[cp_pos];
+
+               dump('\n\n\n\n+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+\n\n\n\n');
+               dump('Setting copy ' + copy_node.id() + '...\n');
+               switch(popup_id) {
+                       case 'circulating-library-popup':
+                               dump('\tbefore circ_lib = ' + js2JSON(copy_node.circ_lib()) + '\n');
+                               copy_node.circ_lib(     mw.G.org_tree_hash[ circ_lib ] );
+                               dump('\tafter  circ_lib = ' + js2JSON(copy_node.circ_lib()) + '\n');
+                               break;
+                       case 'shelving-location-popup':
+                               dump('\tbefore location = ' + js2JSON(copy_node.location()) + '\n');
+                               copy_node.location(     mw.G.acpl_hash[ shelving_loc ] );
+                               dump('\tafter  location = ' + js2JSON(copy_node.location()) + '\n');
+                               break;
+                       case 'copy-status-popup':
+                               dump('\tbefore status = ' + js2JSON(copy_node.status()) + '\n');
+                               copy_node.status(       mw.G.ccs_hash[ copy_status ]);
+                               dump('\tafter  status = ' + js2JSON(copy_node.status()) + '\n');
+                               break;
+                       case 'loan-duration-popup':
+                               dump('\tbefore loan_duration = ' + js2JSON(copy_node.loan_duration()) + '\n');
+                               copy_node.loan_duration(loan_duration);
+                               dump('\tafter  loan_duration = ' + js2JSON(copy_node.loan_duration()) + '\n');
+                               break;
+                       case 'fine-level-popup':
+                               dump('\tbefore fine_level = ' + js2JSON(copy_node.fine_level()) + '\n');
+                               copy_node.fine_level(fine_level);
+                               dump('\tafter  fine_level = ' + js2JSON(copy_node.fine_level()) + '\n');
+                               break;
+                       case 'circulate_popup':
+                               dump('\tbefore circulate = ' + js2JSON(copy_node.circulate()) + '\n');
+                               copy_node.circulate(circulate);
+                               dump('\tafter  circulate = ' + js2JSON(copy_node.circulate()) + '\n');
+                               break;
+                       case 'deposit_popup':
+                               dump('\tbefore deposit = ' + js2JSON(copy_node.deposit()) + '\n');
+                               copy_node.deposit(deposit);
+                               dump('\tafter  deposit = ' + js2JSON(copy_node.deposit()) + '\n');
+                               break;
+                       case 'deposit_amount':
+                               dump('\tbefore deposit_amount = ' + js2JSON(copy_node.deposit_amount()) + '\n');
+                               copy_node.deposit_amount(deposit_amount);
+                               dump('\tafter  deposit_amount = ' + js2JSON(copy_node.deposit_amount()) + '\n');
+                               break;
+                       case 'price':
+                               dump('\tbefore price = ' + js2JSON(copy_node.price()) + '\n');
+                               copy_node.price(price);
+                               dump('\tafter  price = ' + js2JSON(copy_node.price()) + '\n');
+                               break;
+                       case 'reference_popup':
+                               dump('\tbefore ref = ' + js2JSON(copy_node.ref()) + '\n');
+                               copy_node.ref(ref);
+                               dump('\tafter  ref = ' + js2JSON(copy_node.ref()) + '\n');
+                               break;
+                       case 'opac_visible_popup':
+                               dump('\tbefore opac_visible = ' + js2JSON(copy_node.opac_visible()) + '\n');
+                               copy_node.opac_visible(opac);
+                               dump('\tafter  opac_visible = ' + js2JSON(copy_node.opac_visible()) + '\n');
+                               break;
+                       default:
+                               dump('\t++++++++ Unhandled.. this should be a stat_cat: ' + popup_id + ' / ' + ev.target.tagName + '\n');
+                               update_stat_cat_entry(copy_node,ev.target);
+                               break;
+               }
+               dump('\n\n\n\n+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+\n\n\n\n');
+               copy_node.ischanged(1);
+       }
+
+       dump('changed cn_list: ' + js2JSON(cn_list) + '\n');
+}
+
+function update_stat_cat_entry(copy,menuitem) {
+       dump('\tupdate_stat_cat_entry: value = ' + menuitem.value + '\n');
+       var entries = copy.stat_cat_entries();
+       //dump('\n\n\ncopy = ' + js2JSON(copy) + '\n');
+       //dump('\n\n\ncopy.stat_cat_entries() = ' + js2JSON(copy.stat_cat_entries()) + '\n');
+       var stat_cat_id = menuitem.getAttribute('stat_cat');
+       var entry = find_attr_object_in_list(entries,'stat_cat',stat_cat_id);
+       if (entry) {
+               dump('\tReplacing old stat_cat_entry with ');
+
+               entries = filter_list(
+                       entries,
+                       function (obj) {
+                               return (obj.id() != entry.id());
+                       }
+               );
+
+       } else {
+               dump('\tAppending new stat_cat_entry = ');
+       }
+       dump(js2JSON(local_stat_cat_entries[menuitem.value]) + '\n');
+       entries.push( local_stat_cat_entries[ menuitem.value ] );
+       copy.stat_cat_entries( entries );
+}
+
+function add_to_listbox(cn_pos,cp_pos,name,callnumber,barcode) {
+       dump('xul: name = ' + name + ' cn = ' + callnumber + ' bc = ' + barcode + '\n');
+       var listbox = document.getElementById('ephemeral_listbox');
+       var listitem = document.createElement('listitem');
+               listitem.setAttribute('cn_pos',cn_pos);
+               listitem.setAttribute('cp_pos',cp_pos);
+       listbox.appendChild(listitem);
+       var listcell1 = document.createElement('listcell');
+               listcell1.setAttribute('label',name);
+       listitem.appendChild(listcell1);
+       var listcell2 = document.createElement('listcell');
+               listcell2.setAttribute('label',callnumber);
+       listitem.appendChild(listcell2);
+       var listcell3 = document.createElement('listcell');
+               listcell3.setAttribute('label',barcode);
+       listitem.appendChild(listcell3);
+}
+
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/copy.xul b/Evergreen/staff_client/chrome/content/evergreen/cat/copy.xul
new file mode 100644 (file)
index 0000000..863d991
--- /dev/null
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+<!-- Application: Evergreen Staff Client -->
+<!-- Screen: Cataloger's Copy Screen -->
+
+<!-- Stylesheets -->
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://evergreen/skin/evergreen.css" type="text/css"?>
+<?xml-stylesheet href="chrome://evergreen/skin/cat.css" type="text/css"?>
+
+<!-- Localization -->
+<!DOCTYPE page SYSTEM "chrome://evergreen/locale/cat.dtd">
+
+<page id="copy_win" title="&copy.title;" 
+       orient="vertical" style="overflow: scroll" persist="width height"
+       onload="
+               dump('start onload: ' + timer_elapsed('cat') + '\n');
+               my_init();
+               dump('end onload: ' + timer_elapsed('cat') + '\n');
+       "
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+       <!-- Overlays for this XUL file -->
+       <?xul-overlay href="chrome://evergreen/content/OpenSRF/OpenSRF.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/util/util.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/cat/copy_overlay.xul"?>
+
+       <!-- OpenSRF -->
+       <script>var myPackageDir = "evergreen";</script>
+       <script src="chrome://evergreen/content/util/util.js" />
+       <script>timer_init('cat');</script>
+       <OpenSRF id="OpenSRF_js" />
+
+       <!-- The logic for this app -->
+       <Evergreen id="copy_js" />
+
+       <!-- XUL'ified abstraction for logic to attach to widgets -->
+       <commandset id="copy_cmds" />
+
+       <!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+       <keyset id="copy_keys" />
+
+       <!-- Layout to be filled in by overlays and javascript -->
+       <vbox id="copy_vbox" class="test_class"/>
+
+</page>
+
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/copy_add_wizard.xul b/Evergreen/staff_client/chrome/content/evergreen/cat/copy_add_wizard.xul
new file mode 100644 (file)
index 0000000..dbe8abb
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<!-- This DTD declaration needs to be fixed for Mozilla locales -->
+<!DOCTYPE wizard SYSTEM "chrome://evergreen/locale/cat.dtd">
+<wizard id="volume_add" title="&copy.wizard.title;" 
+       orient="vertical" style="overflow: auto"
+       onload="my_init();" width="800" height="600"
+       onwizardfinish="send_to_bill();"
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+       <!-- Overlays for this XUL file -->
+       <?xul-overlay href="chrome://evergreen/content/OpenSRF/OpenSRF.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/util/util.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/cat/volume_copy_add_overlay.xul"?>
+
+       <!-- OpenSRF -->
+       <script>var myPackageDir = "evergreen";</script>
+       <OpenSRF id="OpenSRF_js" />
+
+       <!-- The logic for this app -->
+       <Evergreen id="volume_js" />
+
+       <!-- XUL'ified abstraction for logic to attach to widgets -->
+       <commandset id="volume_cmds" />
+
+       <!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+       <keyset id="volume_keys" />
+
+       <!-- Layout to be filled in by overlays and javascript -->
+       <!--<wizardpage id="page1"/>-->
+       <wizardpage id="page2"/>
+       <wizardpage id="page3"/>
+       <wizardpage id="page4"/>
+
+</wizard>
+
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/copy_display.xul b/Evergreen/staff_client/chrome/content/evergreen/cat/copy_display.xul
new file mode 100644 (file)
index 0000000..ccb841c
--- /dev/null
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<!-- Application: Evergreen Staff Client -->
+<!-- Screen: About -->
+
+<!-- Stylesheets -->
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://evergreen/skin/evergreen.css" type="text/css"?>
+
+<window id="copy_display_win" title="hello"
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+       <?xul-overlay href="chrome://evergreen/content/OpenSRF/OpenSRF.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/util/util.xul"?>
+       <OpenSRF id="OpenSRF_js"/>
+       <util id="util_js"/>
+
+       <vbox id="copy_display_vbox" flex="1" pack="center" align="center">
+               <label name="click_label" datum="1" click_evt="click_evt"/>
+               <label name="edit_date" datum="1" render_filter="^(.){10}" click_evt="click_evt" />
+               <label name="call_number" datum="1" render_path="label" click_evt="click_evt" />
+               <label name="fine_level" datum="1" click_evt="click_evt"/>
+               <label name="creator" datum="1" render_path="usrname" click_evt="click_evt"/>
+               <label name="creator" datum="1" render_path="home_ou/name" click_evt="click_evt"/>
+               <textbox name="status" datum="1" change_evt="edit_evt" click_evt="click_evt"/>
+               <textbox name="circulate" datum="1" change_evt="edit_evt" click_evt="click_evt"/>
+               <label name="circ_as_type" datum="1" click_evt="click_evt"/>
+               <label name="stat_cat_entries" datum="1" click_evt="click_evt"/>
+               <label name="isnew" datum="1" click_evt="click_evt"/>
+               <label name="editor" datum="1" render_path="usrname" click_evt="click_evt"/>
+               <label name="ischanged" datum="1" click_evt="click_evt"/>
+               <label name="id" datum="1" click_evt="click_evt"/>
+               <label name="isdeleted" datum="1" click_evt="click_evt"/>
+               <textbox name="deposit" datum="1" change_evt="edit_evt" click_evt="click_evt"/>
+               <label name="location" datum="1" click_evt="click_evt"/>
+               <label name="loan_duration" datum="1" click_evt="click_evt"/>
+               <label name="ref" datum="1" click_evt="click_evt"/>
+               <label name="create_date" datum="1" click_evt="click_evt"/>
+               <textbox name="barcode" datum="1" change_evt="validate_evt,edit_evt" click_evt="click_evt" />
+               <label name="deposit_amount" datum="1" click_evt="click_evt"/>
+               <textbox name="opac_visible" datum="1" change_evt="edit_evt" click_evt="click_evt"/>
+               <label name="copy_number" datum="1" click_evt="click_evt"/>
+               <textbox name="price" datum="1" change_evt="edit_evt" click_evt="click_evt"/>
+               <label name="circ_modifier" datum="1" click_evt="click_evt"/>
+               <label name="circ_lib" datum="1" render_path="name" click_evt="click_evt"/>
+       </vbox>
+
+</window>
+
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/copy_edit.js b/Evergreen/staff_client/chrome/content/evergreen/cat/copy_edit.js
new file mode 100644 (file)
index 0000000..9e1e0d9
--- /dev/null
@@ -0,0 +1,89 @@
+var cn_list;
+
+function copy_edit_init() {
+       dump('entering my_init for copy_edit.js\n');
+       dump('TESTING: copy_edit.js: ' + mw.G['main_test_variable'] + '\n');
+       dump('Gathering copies to put in the acn object...\n');
+       var list = get_list_from_tree_selection( params.tree );
+       dump('list.length = ' + list.length + '\n');
+       var filtered_list = filter_list(
+               list,
+               function (obj) {
+                       return (obj.getAttribute('object_type') == 'copy');
+               }
+       );
+       dump('filtered_list.length = ' + filtered_list.length + '\n');
+       var id_mapped_list  = map_list(
+               filtered_list,
+               function (obj) {
+                       return obj.getAttribute('copy_id');
+               }
+       );
+       dump('id_mapped_list.length = ' + id_mapped_list.length + '\n');
+       var result = user_request(
+               'open-ils.search',
+               'open-ils.search.asset.copy.fleshed.batch.retrieve', 
+               [ id_mapped_list ]
+       )[0];
+       dump('result.length = ' + result.length + '\n');
+       cn_list = new Array();
+       for (var i in result) {
+               cn_list[i] = new acn();
+               cn_list[i].label( filtered_list[i].getAttribute('callnumber') );
+               cn_list[i].owning_lib( filtered_list[i].getAttribute('ou_id') );
+               cn_list[i].copies( [ result[i] ] );
+       }
+       dump('cn_list = ' + js2JSON(cn_list) + '\n');
+       spawn_copy_editor();
+}
+
+function spawn_copy_editor() {
+       dump('trying to spawn_copy_editor()\n');
+       var params = { 'select_all' : false };
+       var chrome = 'chrome://evergreen/content/cat/copy.xul';
+       var frame = document.getElementById('copy_edit_frame');
+       frame.setAttribute('src',chrome);
+       frame.setAttribute('flex','1');
+       frame.contentWindow.cn_list = cn_list;
+       frame.contentWindow.mw = mw;
+       frame.contentWindow.real_parentWindow = this;
+       frame.contentWindow.parentWindow = parentWindow;
+       frame.contentWindow.params = params;
+}
+
+function save_edited_copies() {
+       //dump('trying to save ====================================================================================\n\n\n');
+       //dump('cn_list = ' + js2JSON(cn_list) + '\n\n');
+       var copies = [];
+       for (var i = 0; i < cn_list.length; i++) {
+               var cn_copies = cn_list[i].copies();
+               for (var j = 0; j < cn_copies.length; j++) {
+                       copies.push( cn_copies[j] );
+               }
+       }
+       //dump('copies = ' + js2JSON(copies) + '\n\n');
+       try {
+               var result = user_request(
+                       'open-ils.cat',
+                       'open-ils.cat.asset.copy.fleshed.batch.update',
+                       [ mw.G.auth_ses[0], copies ]
+               )[0];
+               if (result == '1') {
+                       alert('Successfully updated these copies.\n');
+               } else {
+                       throw('There was an error updating the copies.\n');
+               }
+               dump('Result = ' + js2JSON(result) + '\n');
+               refresh_spawning_browse_list();
+       } catch(E) {
+               handle_error(E);
+       }
+}
+
+function refresh_spawning_browse_list() {
+       try {
+               params.refresh_func();
+       } catch(E) {
+               dump('refresh_spawning_browse_list error: ' + js2JSON(E) + '\n');
+       }
+}
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/copy_edit.xul b/Evergreen/staff_client/chrome/content/evergreen/cat/copy_edit.xul
new file mode 100644 (file)
index 0000000..268721c
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!-- Application: Evergreen Staff Client -->
+<!-- Screen: Cataloger's Copy Screen -->
+
+<!-- Stylesheets -->
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://evergreen/skin/evergreen.css" type="text/css"?>
+<?xml-stylesheet href="chrome://evergreen/skin/cat.css" type="text/css"?>
+
+<!-- Localization -->
+<!DOCTYPE page SYSTEM "chrome://evergreen/locale/cat.dtd">
+
+<page id="copy_edit_win" title="&copy.title;" 
+       orient="vertical" style="overflow: scroll" persist="width height"
+       onload=" copy_edit_init(); "
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+       <!-- Overlays for this XUL file -->
+       <?xul-overlay href="chrome://evergreen/content/OpenSRF/OpenSRF.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/util/util.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/cat/copy_edit_overlay.xul"?>
+
+       <!-- OpenSRF -->
+       <script>var myPackageDir = "evergreen";</script>
+       <script src="chrome://evergreen/content/util/util.js" />
+       <script>timer_init('cat');</script>
+       <OpenSRF id="OpenSRF_js" />
+
+       <!-- The logic for this app -->
+       <Evergreen id="copy_edit_js" />
+
+       <!-- XUL'ified abstraction for logic to attach to widgets -->
+       <commandset id="copy_edit_cmds" />
+
+       <!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+       <keyset id="copy_edit_keys" />
+
+       <!-- Layout to be filled in by overlays and javascript -->
+       <vbox id="copy_edit_vbox" class="test_class"/>
+
+</page>
+
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/copy_edit_overlay.xul b/Evergreen/staff_client/chrome/content/evergreen/cat/copy_edit_overlay.xul
new file mode 100644 (file)
index 0000000..8e9d987
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!DOCTYPE overlay SYSTEM "chrome://evergreen/locale/cat.dtd">
+<overlay id="copy_edit_overlay" 
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+<!-- The javascript logic for the staff client -->
+<Evergreen id="copy_edit_js">
+       <util id="util_js"/>
+       <!--<script src="chrome://evergreen/content/util/RemoteRequest.js" />
+       <script src="chrome://evergreen/content/util/ses.js" />-->
+       <script src="copy_edit.js" />
+</Evergreen>
+
+<!-- Some logic abstracted a bit.  Sort of like an API list -->
+<commandset id="copy_edit_cmds">
+       <command id="cmd_alert" oncommand="
+               alert(event.target.tagName + '  Not Yet Implemented');
+       "/>
+       <command id="cmd_edit_save" oncommand="
+               save_edited_copies();
+       "/>
+       <command id="cmd_refresh_parent" oncommand="
+               refresh_spawning_browse_list();
+       "/>
+</commandset>
+
+<vbox id="copy_edit_vbox" flex="1">
+       <iframe id="copy_edit_frame" flex="1"/>
+       <hbox id="copy_edit_hbox" flex="0">
+               <spacer id="copy_edit_spacer" flex="1"/>
+               <button id="copy_edit_save" label="Save Changes" command="cmd_edit_save"/>
+       </hbox>
+</vbox>
+
+<!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+<keyset id="copy_edit_keys">
+       <key id="" modifiers="accel" key="A" command="cmd_"/>
+</keyset>
+
+</overlay>
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/copy_overlay.xul b/Evergreen/staff_client/chrome/content/evergreen/cat/copy_overlay.xul
new file mode 100644 (file)
index 0000000..cdb35fa
--- /dev/null
@@ -0,0 +1,315 @@
+<?xml version="1.0"?>
+<!DOCTYPE overlay SYSTEM "chrome://evergreen/locale/cat.dtd">
+<overlay id="copy_overlay" 
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+<!-- The javascript logic for the staff client -->
+<Evergreen id="copy_js">
+       <util id="util_js"/>
+       <!--<script src="chrome://evergreen/content/util/RemoteRequest.js" />
+       <script src="chrome://evergreen/content/util/ses.js" />-->
+       <script src="copy.js" />
+</Evergreen>
+
+<!-- Some logic abstracted a bit.  Sort of like an API list -->
+<commandset id="copy_cmds">
+       <command id="cmd_alert" oncommand="
+               alert(event.target.tagName + '  Not Yet Implemented');
+       "/>
+       <command id="cmd_apply" oncommand="
+               apply_attribute(event);
+       "/>
+       <command id="cmd_save" oncommand="
+               save_attributes();
+       "/>
+</commandset>
+
+<!-- The top level widget for the cat client -->
+<vbox id="copy_vbox" flex="1">
+       <vbox flex="1">
+               <hbox flex="1">
+                       <deck id="pines_info_deck"/>
+                       <splitter collapse="after"> <grippy/> </splitter>
+                       <vbox>
+                               <deck id="local_info_deck"/>
+                               <!--
+                               <splitter collapse="after"> <grippy/> </splitter>
+                               <vbox>
+                                       <listbox id="notes_listbox"/>   
+                                       <hbox id="note_button_box"/>
+                               </vbox>
+                               -->
+                       </vbox>
+               </hbox>
+               <hbox id="copy_button_box"/>
+       </vbox>
+       <splitter collapse="after"> <grippy/> </splitter>
+       <vbox flex="1">
+               <deck id="bottom_deck"/>
+       </vbox>
+</vbox>
+
+<hbox id="copy_button_box">
+       <!--
+       <button label="&copy.save;" accesskey="&copy.save.key;" command="cmd_alert"/>
+       <spacer flex="1"/>
+       <button label="&copy.reload;" accesskey="&copy.reload.key;" command="cmd_alert"/>
+       <button label="&copy.bucket;" accesskey="&copy.bucket.key;" command="cmd_alert"/>
+       <button label="&copy.clone;" accesskey="&copy.clone.key;" command="cmd_alert"/>
+       <button label="&copy.transfer;" accesskey="&copy.transfer.key;" command="cmd_alert"/>
+       <button label="&copy.delete;" accesskey="&copy.delete.key;" command="cmd_alert"/>
+       <button id="apply_attr_button" label="Apply these Attributes to the selected Copies" command="cmd_apply"/>
+       <button id="save_attr_button" label="Save Changes" command="cmd_save"/>
+       -->
+       <description>Any change made above affects the copies selected below.</description>
+</hbox>
+
+<hbox id="note_button_box">
+       <hbox flex="1">
+               <button label="&copy.notes.delete;" accesskey="&copy.notes.delete.key;" command="cmd_alert"/>
+               <button label="&copy.notes.add;" accesskey="&copy.notes.add.key;" command="cmd_alert"/>
+       </hbox>
+       <button label="&copy.close;" accesskey="&copy.close.key;" oncommand="window.close();"/>
+</hbox>
+
+<deck id="bottom_deck" flex="1">
+       <vbox>
+               <listbox id="ephemeral_listbox" flex="1" seltype="multiple" onselect="transfer_attributes(event);">
+                       <listhead>
+                               <listheader/>
+                               <listheader label="Location"/>
+                               <listheader label="Call Number"/>
+                               <listheader label="Barcode"/>
+                       </listhead>
+                       <listcols>
+                               <listcol/>
+                               <listcol flex="1"/>
+                               <listcol flex="1"/>
+                               <listcol flex="1"/>
+                       </listcols>
+               </listbox>
+       </vbox>
+</deck>
+
+
+<deck id="pines_info_deck" flex="1">
+       <vbox>
+               <listbox id="pines_attr_listbox"/>
+       </vbox>
+</deck>
+
+<deck id="local_info_deck" flex="1">
+       <vbox>
+               <listbox id="local_attr_listbox"/>
+               <hbox pack="end"><button disabled="true" label="&copy.edit_categories;" command="cmd_alert"/></hbox>
+       </vbox>
+</deck>
+
+<!-- At some point we will programatically populate these grids and menus -->
+
+<menulist id="shelving-location-menu">
+       <menupopup id="shelving-location-popup" command="cmd_apply">
+               <menuitem id="shelving-location-prompt" label="Select one..." hidden="true"/>
+       </menupopup>
+</menulist>
+
+<listbox id="notes_listbox" flex="1">
+       <listhead>
+               <listheader label="&copy.notes.opac;"/>
+               <listheader label="&copy.notes.date;"/>
+               <listheader label="&copy.notes.from;"/>
+               <listheader label="&copy.notes;"/>
+       </listhead>
+       <listcols>
+               <listcol/>
+               <listcol/>
+               <listcol/>
+               <listcol flex="1"/>
+       </listcols>
+       <!--
+       <listitem allowevents="true">
+               <listcell>
+                       <checkbox/>
+               </listcell>
+               <listcell label="2004-12-01"/>
+               <listcell label="Admin"/>
+               <listcell label="Legacy Fields: Item Type = BOOK, Item Cat1 = FICTION, Item Cat2 = ADULT"/>
+       </listitem>
+       -->
+</listbox>
+
+<listbox id="local_attr_listbox" flex="1">
+       <listhead>
+               <listheader />
+               <listheader label="&copy.local.attr;"/>
+               <listheader label="&copy.local.attr.value;"/>
+       </listhead>
+       <listcols>
+               <listcol />
+               <listcol flex="1"/>
+               <listcol flex="2"/>
+       </listcols>
+       <!--
+       <listitem allowevents="true">
+               <listcell label="&copy.attr.stat.genre;"/>
+               <listcell>
+                       <menulist id="stat-genre-menu"/>
+                       <hbox pack="end" flex="1">
+                               <button disabled="true" label="&copy.edit_entries;" command="cmd_alert"/>
+                       </hbox>
+               </listcell>
+       </listitem>
+       <listitem allowevents="true">
+               <listcell label="&copy.attr.stat.audience;"/>
+               <listcell>
+                       <menulist id="stat-audience-menu"/>
+                       <hbox pack="end" flex="1">
+                               <button disabled="true" label="&copy.edit_entries;" command="cmd_alert"/>
+                       </hbox>
+               </listcell>
+       </listitem>
+       -->
+</listbox>
+
+<listbox id="pines_attr_listbox" flex="1">
+       <listhead>
+               <listheader label="&copy.pines.attr;"/>
+               <listheader label="&copy.pines.attr.value;"/>
+       </listhead>
+       <listcols>
+               <listcol flex="1"/>
+               <listcol flex="2"/>
+       </listcols>
+       <listitem allowevents="true" hidden="true">
+               <listcell label="&copy.attr.barcode;"/>
+               <listcell label="330620563200"/>
+       </listitem>
+       <listitem allowevents="true">
+               <listcell label="&copy.attr.copy_status;"/>
+               <listcell>
+                       <menulist id="copy-status-menu"/>
+               </listcell>
+       </listitem>
+       <listitem allowevents="true">
+               <listcell label="&copy.attr.shelving_location;"/>
+               <listcell>
+                       <menulist id="shelving-location-menu"/>
+                       <!--<hbox pack="end" flex="1">
+                               <button disabled="true" label="&copy.edit_entries;" command="cmd_alert"/>
+                       </hbox>-->
+               </listcell>
+       </listitem>
+
+       <listitem allowevents="true">
+               <listcell label="&copy.attr.circulating_lib;"/>
+               <listcell>
+                       <menulist id="circulating-library-menu"/>
+               </listcell>
+       </listitem>
+       <listitem allowevents="true">
+               <listcell label="&copy.attr.loan_duration;"/>
+               <listcell>
+                       <menulist id="loan-duration-menu"/>
+               </listcell>
+       </listitem>
+       <listitem allowevents="true">
+               <listcell label="&copy.attr.fine_level;"/>
+               <listcell>
+                       <menulist id="fine-level-menu"/>
+               </listcell>
+       </listitem>
+       <listitem allowevents="true">
+               <listcell label="&copy.attr.circulate;"/>
+               <listcell>
+                       <menulist id="circulate_menu"/>
+               </listcell>
+       </listitem>
+       <listitem allowevents="true">
+               <listcell label="&copy.attr.deposit;"/>
+               <listcell>
+                       <menulist id="deposit_menu"/>
+                       <label value="&copy.attr.deposit_amount;"/>
+                       <textbox id="deposit_amount" size="6" onchange="apply_attribute(event);" value="0.00"/>
+               </listcell>
+       </listitem>
+       <listitem allowevents="true">
+               <listcell label="&copy.attr.price;"/>
+               <listcell>
+                       <textbox id="price" size="6" onchange="apply_attribute(event);" value="0.00"/>
+               </listcell>
+       </listitem>
+       <listitem allowevents="true">
+               <listcell label="&copy.attr.reference_material;"/>
+               <listcell>
+                       <menulist id="reference_menu"/>
+               </listcell>
+       </listitem>
+       <listitem allowevents="true">
+               <listcell label="&copy.attr.opac_visible;"/>
+               <listcell>
+                       <menulist id="opac_visible_menu"/>
+               </listcell>
+       </listitem>
+</listbox>
+
+<menulist id="opac_visible_menu">
+       <menupopup id="opac_visible_popup" command="cmd_apply">
+               <menuitem label="&copy.attr.opac_visible.yes;" value="1" selected="true"/>
+               <menuitem label="&copy.attr.opac_visible.no;" value="0"/>
+       </menupopup>
+</menulist>
+
+<menulist id="reference_menu">
+       <menupopup id="reference_popup" command="cmd_apply" >
+               <menuitem label="&copy.attr.reference_material.no;" value="0" selected="true"/>
+               <menuitem label="&copy.attr.reference_material.yes;" value="1"/>
+       </menupopup>
+</menulist>
+
+<menulist id="deposit_menu">
+       <menupopup id="deposit_popup" command="cmd_apply">
+               <menuitem label="&copy.attr.deposit.no;" value="0" selected="true"/>
+               <menuitem label="&copy.attr.deposit.yes;" value="1"/>
+       </menupopup>
+</menulist>
+
+<menulist id="circulate_menu">
+       <menupopup id="circulate_popup" command="cmd_apply">
+               <menuitem label="&copy.attr.circulate.yes;" value="1" selected="true"/>
+               <menuitem label="&copy.attr.circulate.no;" value="0"/>
+       </menupopup>
+</menulist>
+
+<menulist id="fine-level-menu">
+       <menupopup id="fine-level-popup" command="cmd_apply">
+               <menuitem label="&copy.attr.fine_level.normal;" value="2" selected="true"/>
+               <menuitem label="&copy.attr.fine_level.high;" value="3"/>
+               <menuitem label="&copy.attr.fine_level.low;" value="1"/>
+       </menupopup>
+</menulist>
+
+<menulist id="loan-duration-menu">
+       <menupopup id="loan-duration-popup" command="cmd_apply">
+               <menuitem label="&copy.attr.loan_duration.normal;" value="2" selected="true"/>
+               <menuitem label="&copy.attr.loan_duration.long;" value="3"/>
+               <menuitem label="&copy.attr.loan_duration.short;" value="1"/>
+       </menupopup>
+</menulist>
+
+<menulist id="circulating-library-menu">
+       <menupopup id="circulating-library-popup" command="cmd_apply">
+       </menupopup>
+</menulist>
+
+<menulist id="copy-status-menu">
+       <menupopup id="copy-status-popup" command="cmd_apply">
+               <!-- <menuitem label="&copy.attr.copy_status.example1;" value="&copy.attr.copy_status.example1;"/> -->
+       </menupopup>
+</menulist>
+
+<!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+<keyset id="copy_keys">
+       <key id="" modifiers="accel" key="A" command="cmd_"/>
+</keyset>
+
+</overlay>
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/marc.js b/Evergreen/staff_client/chrome/content/evergreen/cat/marc.js
new file mode 100644 (file)
index 0000000..4e6da64
--- /dev/null
@@ -0,0 +1,888 @@
+dump('loading marc.js\n');
+
+var character_measure = {};
+var tree;
+var meta;
+var backup_tree;
+
+function my_init() {
+       dump('Entering my_init() : ' + timer_elapsed('cat') + '\n');
+       dump('TESTING: marc.js: ' + mw.G['main_test_variable'] + '\n');
+
+       dump("DOC ID " + find_this_id + "\n" );
+
+       if (! params.import_tree ) {
+               tree = retrieve_record( find_this_id );
+               meta = retrieve_meta_record( find_this_id );
+               document.getElementById('meta_create_date').setAttribute('value',
+                       meta.create_date().split('.')[0]        
+               );
+               document.getElementById('meta_creator').setAttribute('value',
+                       meta.creator()  
+               );
+               document.getElementById('meta_edit_date').setAttribute('value',
+                       meta.edit_date().split('.')[0]
+               );
+               document.getElementById('meta_editor').setAttribute('value',
+                       meta.editor()   
+               );
+               document.getElementById('meta_tcn_publisher').setAttribute('value',
+                       meta.tcn_value()        
+               );
+               var text = document.createTextNode(
+                       record_columns[1] + ' / ' + record_columns[2]
+               );
+               document.getElementById('meta_title_author').appendChild(
+                       text
+               );
+       } else {
+               tree = params.import_tree;
+               if (tree.name() == 'collection') { 
+                       tree = find_list(
+                               tree.children(),
+                               function (obj) {
+                                       return (obj.name() == 'record');
+                               }
+                       ); 
+               }
+       }
+       //dump('Retrieved: ' + js2JSON(tree) + '\n');
+       //dump('Retrieved: ' + js2JSON(meta) + '\n');
+       build_grid( 
+               document.getElementById('ctrl_rows'), 
+               document.getElementById('data_rows'), 
+               tree
+       );
+       fixed_fields_show_only('fixed_grid','BKS');
+       apply_event_listeners('fixed_grid','fixed');
+       character_measure = measure_character('marc_win','M');
+       window.addEventListener('resize',my_resize_handler,false);
+       handle_tag_change();
+       document.getElementById('data_rows').firstChild.firstChild.firstChild.focus();
+       dump('Exiting my_init() : ' + timer_elapsed('cat') + '\n');
+}
+
+function measure_character(w,c) {
+       var el = document.getElementById(w);
+       var b = document.createElement('hbox');
+       var l = document.createElement('label');
+       l.setAttribute('class','marc');
+       el.appendChild(b);
+       b.appendChild(l);
+       var lwidth = l.boxObject.width;
+       l.value = c;
+       lwidth = Math.abs( l.boxObject.width - lwidth);
+       var lheight = l.boxObject.height;
+       b.removeChild(l); el.removeChild(b);
+       return { "width" : lwidth, "height" : lheight };
+}
+
+function my_resize_handler(ev) {
+       dump('resize\n');
+       resizeAllWrappers('ctrl_rows');
+       resizeAllWrappers('data_rows');
+}
+
+function retrieve_record(id) {
+       dump('Entering retrieve_record() : ' + timer_elapsed('cat') + '\n');
+       var result = user_request(
+               'open-ils.cat',
+               'open-ils.cat.biblio.record.tree.retrieve',
+               [ id ]
+       );
+       //var result = [ JSON2js( test_nodeset() ) ];
+       /*var result = user_request(
+               'open-ils.cat',
+               'open-ils.cat.biblio.record.tree.retrieve.test',
+               [ id ]
+       );*/
+       if (typeof(result[0]) != 'object') {
+               alert( 'user_request gave ' + js2JSON(result) );
+               dump('Exiting retrieve_record() : ' + timer_elapsed('cat') + '\n');
+               return 0;
+       } else {
+               /*
+               dump('Entering nodeset2tree() : ' + timer_elapsed('cat') + '\n');
+               result[0] = nodeset2tree( result[0] )[0];
+               dump('Exiting nodeset2tree() : ' + timer_elapsed('cat') + '\n');
+               */
+               dump('Exiting retrieve_record() : ' + timer_elapsed('cat') + '\n');
+               return result[0];
+       }
+}
+
+function retrieve_meta_record(id) {
+       dump('Entering retrieve_meta_record() : ' + timer_elapsed('cat') + '\n');
+       var result = user_request(
+               'open-ils.cat',
+               'open-ils.cat.biblio.record.metadata.retrieve',
+               [ id ]
+       );
+       if (typeof(result[0]) != 'object') {
+               alert( 'user_request gave ' + js2JSON(result) );
+               dump('Exiting retrieve_meta_record() : ' + timer_elapsed('cat') + '\n');
+               return 0;
+       } else {
+               dump('Exiting retrieve_meta_record() : ' + timer_elapsed('cat') + '\n');
+               return result[0][0];
+       }
+}
+
+
+
+function empty_me(p) {
+       while (p.lastChild) {
+               //dump('emptying ' + p.lastChild.tagName + '\n');
+               empty_me(p.lastChild);
+               p.removeChild(p.lastChild);
+       }
+}
+
+function empty_grid( ctrl_rows, data_rows ) {
+       var rows = document.getElementById(ctrl_rows);
+       empty_me(rows);
+       rows = document.getElementById(data_rows);
+       empty_me(rows);
+}
+
+function build_grid( ctrl_rows, data_rows, root ) {
+       dump('Entering build_grid() : ' + timer_elapsed('cat') + '\n');
+       var ctrl_count = 1; var data_count = 1;
+       //dump( 'what is root?\n' + pretty_print(js2JSON(root)) + '\n');
+       dump('root.children.length = ' + root.children.length + '\n');
+       root_loop: 
+       var children = root.children();
+       for (var i in children) {
+               var node = children[i];
+               var node_type = node.node_type();
+               var row = {};
+               switch(node_type) {
+                       case '18': /* namespace */ 
+                               break;
+                       case '1': /* element */
+                               row = get_row(node);
+                               switch(row.type) {
+                                       case 'leader': case 'controlfield':
+                                                       populate_xul_row( 
+                                                               ctrl_rows, 
+                                                               row, 
+                                                               'ctrl_' + ctrl_count++
+                                                       );
+                                               break;
+                                       case 'datafield':
+                                                       populate_xul_row( 
+                                                               data_rows, 
+                                                               row, 
+                                                               'data_' + data_count++
+                                                       );
+                                               break;
+                                       default:
+                                               dump('Unexpected row type: ' + 
+                                                       js2JSON(node) + '\n');
+                                               break;
+                               }
+                               break;
+                       default: /* eh? */
+                               dump( 'Did not expect node_type = ' + node_type + 
+                                       ' : ' + js2JSON(node) + '\n');
+                               break;
+               }
+               //dump( i + ' ' + dump_ns_node(node) + '\n');
+       }
+       dump('Exiting build_grid() : ' + timer_elapsed('cat') + '\n');
+}
+
+function get_row( top ) {
+       var row = { 
+               'field' : { 'id' : '1' },
+               'tag' : { 'value' : '', 'id' : '-1' },
+               'ind1' : { 'value' : '', 'id' : '-1' },
+               'ind2' : { 'value' : '', 'id' : '-1' },
+               'data' : { 'value' : '', 'id' : '-1' }
+       };
+       var name = top.name(); 
+       var id = top.intra_doc_id(); 
+       var children = top.children();
+       row.field.id = id;
+       dump('Making row.... row.field.id = <' + id + '>\n');
+       if (name == 'leader') { row.tag.value = 'LDR'; row.tag.id = id; }
+       row.type = name;
+       top_loop:
+       for (var i in children) {
+               var node = children[i];
+               var node_type = node.node_type();
+               var node_name = node.name();
+               var node_value = node.value();
+               var node_id = node.intra_doc_id();
+               var node_children = node.children();
+               switch(node_type) {
+                       case '18': /* namespace */ 
+                               continue top_loop;
+                       case '2': /* attribute */ 
+                               switch(node_name) {
+                                       case 'tag':
+                                               row.tag.value = node_value;
+                                               row.tag.id = node_id;
+                                               break;
+                                       case 'ind1':
+                                               row.ind1.value = node_value;
+                                               row.ind1.id = node_id;
+                                               break;
+                                       case 'ind2':
+                                               row.ind2.value = node_value;
+                                               row.ind2.id = node_id;
+                                               break;
+                                       default:
+                                               dump('\tattribute surprise on node_name = ' +
+                                                       node_name + ' : ' 
+                                                       + js2JSON(node) + '\n');
+                                               break;
+                               }
+                               break;
+                       case '1': /* element */
+                               switch(node_name) {
+                                       case 'subfield':
+                                               row.data.value = row.data.value + 
+                                               String.fromCharCode(8225) +
+                                               node_children[0].value() + ' ' + 
+                                               node_children[1].value() + ' ';
+                                               row.data.id = node_id;
+                                               break;
+                                       default:
+                                               dump('\telement surprise on node_name = ' +
+                                                       node_name + ' : ' 
+                                                       + js2JSON(node) + '\n');
+                                               break;
+                               }
+                               break;
+                       case '3': /* textNode */
+                               row.data.value = node_value;
+                               row.data.id = node_id;
+                               break;
+                       default: /* eh? */
+                               dump('\tunknown type surprise on node_type = ' +
+                                       node_type + ' : '  +
+                                       js2JSON(node) + '\n');
+                               break;
+               }
+       }
+       //dump(js2JSON(row) + '\n');
+       return row;
+}
+
+function build_xul_row( id, type ) {
+       switch(type) {
+               case 'leader': case 'controlfield':
+                       return build_ctrl_row( id );
+                       break;
+               case 'datafield':
+                       return build_data_row( id );
+                       break;
+               default:
+                       dump('Unexpected row type\n');
+                       break;
+       }
+}
+
+function build_data_row( id ) {
+       //dump('Entering build_xul_row() : ' + timer_elapsed('cat') + '\n');
+       var xul_row = document.createElement('row');
+       xul_row.setAttribute('id',id);
+       xul_row.setAttribute('class','field_row data_row');
+       //xul_rows.appendChild(xul_row);
+
+       /* the elements in the row */
+       var wrapper1 = document.createElement('hbox');
+       wrapper1.setAttribute( 'class', 'marc_wrapper marc_tag_wrapper');
+       var xul_col1 = document.createElement('textbox');
+               xul_col1.setAttribute( 'cols', '3');
+               xul_col1.setAttribute( 'rows', '1');
+               xul_col1.setAttribute( 'multiline', 'true');
+               xul_col1.setAttribute( 'size', '3');
+               xul_col1.setAttribute( 'class', 'marc marc_tag');
+               wrapper1.appendChild(xul_col1);
+               xul_row.appendChild(wrapper1);
+       var wrapper2 = document.createElement('hbox');
+       wrapper2.setAttribute( 'class', 'marc_wrapper marc_ind_wrapper marc_ind1_wrapper');
+       var xul_col2 = document.createElement('textbox');
+               xul_col2.setAttribute( 'cols', '1');
+               xul_col2.setAttribute( 'rows', '1');
+               xul_col2.setAttribute( 'multiline', 'true');
+               xul_col2.setAttribute( 'size', '1');
+               xul_col2.setAttribute( 'class', 'marc marc_ind marc_ind1');
+               wrapper2.appendChild(xul_col2);
+               xul_row.appendChild(wrapper2);
+       var wrapper3 = document.createElement('hbox');
+       wrapper3.setAttribute( 'class', 'marc_wrapper marc_ind_wrapper marc_ind2_wrapper');
+       var xul_col3 = document.createElement('textbox');
+               xul_col3.setAttribute( 'cols', '1');
+               xul_col3.setAttribute( 'rows', '1');
+               xul_col3.setAttribute( 'multiline', 'true');
+               xul_col3.setAttribute( 'size', '1');
+               xul_col3.setAttribute( 'class', 'marc marc_ind marc_ind2');
+               wrapper3.appendChild(xul_col3);
+               xul_row.appendChild(wrapper3);
+       var wrapper4 = document.createElement('hbox');
+       wrapper4.setAttribute( 'class', 'marc_wrapper marc_data_wrapper');
+       var xul_col4 = document.createElement('textbox');
+               xul_col4.setAttribute( 'subfields', 'true');
+               xul_col4.setAttribute( 'cols', '60');
+               xul_col4.setAttribute( 'size', '60');
+               xul_col4.setAttribute( 'rows', '1');
+               xul_col4.setAttribute( 'multiline', 'true');
+               xul_col4.setAttribute( 'class', 'marc marc_data resizable');
+               xul_col4.setAttribute( 'flex', '1');
+               wrapper4.appendChild(xul_col4);
+               xul_row.appendChild(wrapper4);
+
+       return xul_row;
+       //dump('Exiting build_xul_row() : ' + timer_elapsed('cat') + '\n');
+}
+
+function build_ctrl_row( id ) {
+       //dump('Entering build_xul_row() : ' + timer_elapsed('cat') + '\n');
+       var xul_row = document.createElement('row');
+       xul_row.setAttribute('class','field_row ctrl_row');
+       xul_row.setAttribute('id',id);
+       //xul_rows.appendChild(xul_row);
+
+       /* the elements in the row */
+       var wrapper1 = document.createElement('hbox');
+       wrapper1.setAttribute( 'class', 'marc_wrapper marc_tag_wrapper ctrl_wrapper');
+       var xul_col1 = document.createElement('textbox');
+               xul_col1.setAttribute( 'cols', '3');
+               xul_col1.setAttribute( 'rows', '1');
+               xul_col1.setAttribute( 'multiline', 'true');
+               xul_col1.setAttribute( 'size', '3');
+               xul_col1.setAttribute( 'class', 'marc marc_tag ctrl');
+               xul_col1.setAttribute( 'disabled', 'true');
+               wrapper1.appendChild(xul_col1);
+               xul_row.appendChild(wrapper1);
+       var wrapper4 = document.createElement('hbox');
+       wrapper4.setAttribute( 'class', 'marc_wrapper marc_data_wrapper ctrl_wrapper');
+       var xul_col4 = document.createElement('textbox');
+               xul_col4.setAttribute( 'cols', '60');
+               xul_col4.setAttribute( 'size', '60');
+               xul_col4.setAttribute( 'rows', '1');
+               xul_col4.setAttribute( 'multiline', 'true');
+               xul_col4.setAttribute( 'class', 'marc marc_data ctrl');
+               xul_col4.setAttribute( 'flex', '1');
+               xul_col4.setAttribute( 'disabled', 'true');
+               wrapper4.appendChild(xul_col4);
+               xul_row.appendChild(wrapper4);
+
+       return xul_row;
+       //dump('Exiting build_xul_row() : ' + timer_elapsed('cat') + '\n');
+}
+
+
+function apply_event_listeners(c,which) {
+       switch(which) {
+               case 'ctrl':
+                       break;
+               case 'data':
+                       c[0].firstChild.addEventListener("change",handle_tag_change,false);
+                       c[0].firstChild.addEventListener("keypress",handle_keypress,false);
+                       c[1].firstChild.addEventListener("keypress",handle_keypress,false);
+                       c[1].firstChild.addEventListener("change",handle_tag_change,false);
+                       c[2].firstChild.addEventListener("keypress",handle_keypress,false);
+                       c[2].firstChild.addEventListener("change",handle_tag_change,false);
+                       c[3].firstChild.addEventListener("keypress",handle_keypress,false);
+                       c[3].firstChild.addEventListener("change",handle_tag_change,false);
+                       c[3].firstChild.addEventListener("change",handle_change,false);
+                       break;
+               case 'fixed':
+                       var g = document.getElementById(c);
+                       var nl = g.getElementsByTagName('textbox');
+                       for (var i in nl) {
+                               if (typeof(nl[i])=='object') {
+                                       nl[i].addEventListener("change",handle_fixed_change,false);
+                               }
+                       }
+                       break;
+       }
+}
+
+function populate_xul_row( xul_rows, row, id ) {
+
+       var r = document.getElementById(id);
+       if (!r) {
+               r = build_xul_row(id,row.type);
+               xul_rows.appendChild(r);
+               //r = document.getElementById(id);
+       }
+       r.setAttribute('notempty','true');
+       r.setAttribute('mynode',row.field.id);
+       var c = r.childNodes;
+       switch(row.type) {
+               case 'leader': case 'controlfield':
+                       c[0].firstChild.value = row.tag.value;
+                       c[0].firstChild.select();
+                       c[0].firstChild.setAttribute('mynode', row.tag.id);
+                       c[1].firstChild.value = row.data.value;
+                       c[1].firstChild.select();
+                       c[1].firstChild.setAttribute('mynode', row.data.id);
+                       apply_event_listeners(c,'ctrl');
+                       break;
+               case 'datafield':
+                       c[0].firstChild.value = row.tag.value;
+                       c[0].firstChild.select();
+                       c[0].firstChild.setAttribute('mynode', row.tag.id);
+                       c[1].firstChild.value = row.ind1.value;
+                       c[1].firstChild.select();
+                       c[1].firstChild.setAttribute('mynode', row.ind1.id);
+                       c[2].firstChild.value = row.ind2.value;
+                       c[2].firstChild.select();
+                       c[2].firstChild.setAttribute('mynode', row.ind2.id);
+                       c[3].firstChild.value = row.data.value;
+                       c[3].firstChild.select();
+                       c[3].firstChild.setAttribute('mynode', row.data.id);
+                       apply_event_listeners(c,'data');
+                       break;
+       }
+       //resizeWrapper(c3);
+}
+
+function handle_change(ev) {
+       dump('handle_change\n');
+       var t = ev.target;
+       // parse subfields
+       resizeWrapper(t);
+}
+
+function resizeWrapper(t) {
+       if (t.tagName != 'textbox') { return; }
+       var wrapper = t.parentNode;
+       var width = wrapper.boxObject.width;
+       var height = wrapper.boxObject.height;
+
+       /*var lwidth = character_measure.width * t.value.length; // linux */
+       var lwidth = (character_measure.width*2+5) * t.value.length; // windows
+       var lheight = character_measure.height;
+
+       if (width == 0) { width = lwidth; }
+       var xrows = Math.ceil( lwidth / width );
+       if (xrows < 1) { xrows = 1; }
+       var xheight = (xrows * (lheight+5)); 
+
+       //dump(wrapper.parentNode.id + ' wrapper: ' + width + 'x' + height + ' label: ' + lwidth + 'x' + lheight + '\n');
+       wrapper.setAttribute('style','min-height: ' + xheight + 'px;');
+}
+
+function resizeAllWrappers(rows) {
+       dump('Entering resizeAllWrappers() : ' + timer_elapsed('cat') + '\n');
+       var p = document.getElementById(rows);
+       var c = p.childNodes;
+       for (var r in c) {
+               if (typeof(c[r])=='object') {
+                       if (c[r].getAttribute('notempty')) {
+                               resizeWrapper(c[r].lastChild.firstChild);
+                       } else {
+                               p.removeChild(c[r]);
+                       }
+               }
+       }
+       dump('Exiting resizeAllWrappers() : ' + timer_elapsed('cat') + '\n');
+}
+
+function find_element_with_id(ns_slice,id) {
+       // we might change this in the future to be a hash lookup
+       // { node id => [lvl 1 index, lvl 2 index, lvl 3 index]  }
+       // with the hash being populated when the tree is generated
+       // and updated when we go to insert nodes
+       //dump('Find ' + id + ' in ' + js2JSON(ns_slice) + '\n');
+       //dump('Find ' + id + '\n');
+       for (i in ns_slice) {
+               if (ns_slice[i].intra_doc_id() == id) {
+                       //dump('Found at index ' + i + '\n');
+                       return i;
+               }
+       }
+       dump(id + 'not found in' + js2JSON(ns_slice) + '\n');
+}
+
+function delete_children(branch) {
+       var children = branch.children();
+       for (var c in children) {
+               children[c].isdeleted(1);
+               dump( children[c].name() + ':' +
+                       children[c].id() + ':' +
+                       children[c].intra_doc_id() + '.is_deleted = 1\n');
+               if (children[c].children()) {
+                       delete_children(children[c]);
+               }
+       }
+}
+
+function submit_marc() {
+       // walk through the marc grid and compare with the tree
+       // 1) updates and deletes
+
+dump('Updates and Deletes\n');
+       backup_tree = JSON2js( js2JSON( tree ) );
+
+       var tree_fields = tree.children(); // LEVEL 1
+       var ctrl_rows = document.getElementById('ctrl_rows').childNodes;
+       for (var r = 0; r < ctrl_rows.length ; r++) {
+               //if (r == 0) { continue; } // skip leader for now
+               //dump( r + '\n');
+               var tag_node_id;
+               try {
+                       tag_node_id = ctrl_rows[r].getAttribute('mynode');
+               } catch(E) {
+                       dump('Could not find mynode in ctrl_rows[' + r + ']\n');
+                       continue;
+               }
+               //dump( r + ':' + ctrl_rows[r].tagName + ':' + tag_node_id + '\n' );
+               if (tag_node_id) {
+dump('Processing ctrl_rows[' + r + '], tag_node_id = ' + tag_node_id + '\n');
+                       if (tag_node_id < 0) { continue; } // new node, handle elsewhere
+dump('1st find =========================================\n')
+                       var tree_pos = find_element_with_id(tree_fields,tag_node_id);
+                       if (tree_pos == null) { alert('tree_pos problem!'); }
+                       var tree_field = tree_fields[tree_pos];
+
+                       if (ctrl_rows[r].getAttribute('hidden') == 'true') {
+                               tree_field.isdeleted(1);
+                               dump( tree_field.name() + ':' +
+                                       tree_field.id() + ':' +
+                                       tree_field.intra_doc_id() + '.isdeleted = 1\n');
+                               delete_children(tree_field);
+                               continue;
+                       }
+
+                       var col1 = ctrl_rows[r].childNodes[0].firstChild;
+                       var col2 = ctrl_rows[r].childNodes[1].firstChild;
+                       var id1 = col1.getAttribute('mynode');
+                       var id2 = col2.getAttribute('mynode');
+                       dump('id1 = ' + id1 + ' col1.value = ' + col1.value + '  id2 = ' + id2 + ' col2.value = ' + col2.value + '\n');
+                       var tree_field_children = tree_field.children(); // LEVEL 2
+
+                       if (r == 0) { // leader is special.  Only one child
+                               if (tree_field_children[0].value() != col2.value) {
+                                       tree_field_children[0].value(col2.value);
+                                       tree_field_children[0].ischanged(1);
+                                       dump( tree_field_children[0].name() + ':' +
+                                               tree_field_children[0].id() + ':' +
+                                               tree_field_children[0].intra_doc_id() +
+                                               '.ischanged = 1\n');
+                               }
+                               continue;
+                       }
+
+dump('2nd find =========================================\n')
+                       var tree_tag = find_element_with_id(tree_field_children,id1);
+dump('3rd find =========================================\n')
+                       var tree_value = find_element_with_id(tree_field_children,id2);
+                       if (tree_tag == null) { alert('tree_tag problem!'); }
+                       if (tree_value == null) { alert('tree_value problem!'); }
+                       if (tree_field_children[tree_tag].value() != col1.value) {
+                               tree_field_children[tree_tag].value(col1.value);
+                               tree_field_children[tree_tag].ischanged(1);
+                               dump( tree_field_children[tree_tag].name() + ':' +
+                                       tree_field_children[tree_tag].id() + ':' +
+                                       tree_field_children[tree_tag].intra_doc_id() +
+                                       '.ischanged = 1\n');
+                       }
+                       if (tree_field_children[tree_value].value() != col2.value) {
+                               tree_field_children[tree_value].value(col2.value);
+                               tree_field_children[tree_value].ischanged(1);
+                               dump( tree_field_children[tree_value].name() + ':' +
+                                       tree_field_children[tree_value].id() + ':' +
+                                       tree_field_children[tree_value].intra_doc_id() +
+                                       '.ischanged = 1\n');
+                       }
+               }
+       }
+       var data_rows = document.getElementById('data_rows').childNodes;
+       for (var r = 0; r < data_rows.length ; r++ ) {
+               var tag_node_id;
+               try {
+                       tag_node_id = data_rows[r].getAttribute('mynode');
+               } catch(E) {
+                       continue;
+               }
+               //dump( r + ':' + data_rows[r].tagName + ':' + tag_node_id + '\n' );
+               if (tag_node_id) {
+dump('Processing data_rows[' + r + '], tag_node_id = ' + tag_node_id + '\n');
+                       if (tag_node_id < 0) { continue; } // new node, handle elsewhere
+dump('4th find =========================================\n')
+                       var tree_pos = find_element_with_id(tree_fields,tag_node_id);
+                       if (tree_pos == null) { alert('tree_pos problem!'); }
+                       var tree_field = tree_fields[tree_pos];
+
+                       if (data_rows[r].getAttribute('hidden') == 'true') {
+                               tree_field.isdeleted(1);
+                               dump(tree_field.name() + ':' +
+                                       tree_field.id() + ':' +
+                                       tree_field.intra_doc_id() +
+                                       '.isdeleted = 1\n');
+                               delete_children(tree_field);
+                               continue;
+                       }
+
+                       var col1 = data_rows[r].childNodes[0].firstChild;
+                       var col2 = data_rows[r].childNodes[1].firstChild;
+                       var col3 = data_rows[r].childNodes[2].firstChild;
+                       var col4 = data_rows[r].childNodes[3].firstChild;
+                       var id1 = col1.getAttribute('mynode');
+                       var id2 = col2.getAttribute('mynode');
+                       var id3 = col3.getAttribute('mynode');
+                       var id4 = col4.getAttribute('mynode');
+                       var tree_field_children = tree_field.children(); // LEVEL 2
+dump('5th find =========================================\n')
+                       var tree_tag = find_element_with_id(tree_field_children,id1);
+dump('6th find =========================================\n')
+                       var tree_ind1 = find_element_with_id(tree_field_children,id2);
+dump('7th find =========================================\n')
+                       var tree_ind2 = find_element_with_id(tree_field_children,id3);
+dump('8th find =========================================\n')
+                       var tree_data = find_element_with_id(tree_field_children,id4);
+                       if (tree_tag == null) { alert('tree_tag problem!'); }
+                       if (tree_ind1 == null) { alert('tree_ind1 problem!'); }
+                       if (tree_ind2 == null) { alert('tree_ind2 problem!'); }
+                       if (tree_data == null) { alert('tree_data problem!'); }
+                       if (tree_field_children[tree_tag].value() != col1.value) {
+                               tree_field_children[tree_tag].value(col1.value);
+                               tree_field_children[tree_tag].ischanged(1);
+                               dump( tree_field_children[tree_tag].name() + ':' +
+                                       tree_field_children[tree_tag].id() + ':' +
+                                       tree_field_children[tree_tag].intra_doc_id() +
+                                       '.is_changed = 1\n');
+                       }
+                       if (tree_field_children[tree_ind1].value() != col2.value) {
+                               tree_field_children[tree_ind1].value(col2.value);
+                               tree_field_children[tree_ind1].ischanged(1);
+                               dump( tree_field_children[tree_ind1].name() + ':' +
+                                       tree_field_children[tree_ind1].id() + ':' +
+                                       tree_field_children[tree_ind1].intra_doc_id() +
+                                       '.is_changed = 1\n');
+                       }
+                       if (tree_field_children[tree_ind2].value() != col3.value) {
+                               tree_field_children[tree_ind2].value(col3.value);
+                               tree_field_children[tree_ind2].ischanged(1);
+                               dump( tree_field_children[tree_ind2].name() + ':' +
+                                       tree_field_children[tree_ind2].id() + ':' +
+                                       tree_field_children[tree_ind2].intra_doc_id() +
+                                       '.is_changed = 1\n');
+                       }
+                       process_subfields(tree_field_children,col4.value); // LEVEL 3
+               }
+       }
+
+
+       // 2) inserts
+dump('Inserts\n');
+
+       for (var r = 0; r < ctrl_rows.length ; r++) {
+               var newnode;
+               try {
+                       newnode = ctrl_rows[r].getAttribute('newnode');
+               } catch(E) {
+                       continue;
+               }
+               if (newnode=='true') {
+dump('New node = ctrl_rows[' + r + ']');
+                       if (ctrl_rows[r].getAttribute('hidden')=='true') { continue; }
+                       var col1 = ctrl_rows[r].childNodes[0].firstChild.value;
+                       var col2 = ctrl_rows[r].childNodes[1].firstChild.value;
+                       var level1 = new brn(); 
+                               populate_node( level1, 1, 'controlfield' );
+                       var level2a = new brn(); 
+                               populate_node( level2a, 2, 'tag' );
+                               level2a.value(col1);
+                       var level2b = new brn();
+                               populate_node( level2b, 3, null );
+                               level2b.value(col2);
+                       level1.children([ level2a, level2b ]);
+                       ctrl_rows[r].setAttribute('mynode', level1.intra_doc_id());
+dump(' with intra_doc_id = ' + level1.intra_doc_id() + '\n');
+                       insert_into_tree(tree.children(),ctrl_rows[r],level1);
+               }
+       }
+
+       for (var r = 0; r < data_rows.length ; r++) {
+               var newnode;
+               try {
+                       newnode = data_rows[r].getAttribute('newnode');
+               } catch(E) {
+                       continue;
+               }
+               if (newnode=='true') {
+dump('New node = data_rows[' + r + ']');
+                       if (data_rows[r].getAttribute('hidden')=='true') { continue; }
+                       var col1 = data_rows[r].childNodes[0].firstChild.value;
+                       var col2 = data_rows[r].childNodes[1].firstChild.value;
+                       var col3 = data_rows[r].childNodes[2].firstChild.value;
+                       var col4 = data_rows[r].childNodes[3].firstChild.value;
+                       var level1 = new brn(); 
+                               populate_node( level1, 1, 'datafield' );
+                       var level2a = new brn(); 
+                               populate_node( level2a, 2, 'tag' );
+                               level2a.value(col1);
+                       var level2b = new brn();
+                               populate_node( level2b, 2, 'ind1' );
+                               level2b.value(col2);
+                       var level2c = new brn();
+                               populate_node( level2c, 2, 'ind2' );
+                               level2c.value(col3);
+                       level1.children([ level2a, level2b, level2c ]);
+                       process_subfields(level1.children(),col4);
+                       data_rows[r].setAttribute('mynode', level1.intra_doc_id());
+dump(' with intra_doc_id = ' + level1.intra_doc_id() + '\n');
+                       insert_into_tree(tree.children(),data_rows[r],level1);
+               }
+
+       }
+       //dump('******\nSending: ' + pretty_print(js2JSON(tree)) + '\n');
+       dump('Auth session: ' + mw.G['auth_ses'][0] + '\n');
+       try {
+               if (params.import_tree) {
+                       tree = user_request(
+                                       'open-ils.cat',
+                                       'open-ils.cat.biblio.record.tree.import',
+                                       [ mw.G['auth_ses'][0], tree ]
+                       )[0];
+       
+               } else {
+                       tree = user_request(
+                                       'open-ils.cat',
+                                       'open-ils.cat.biblio.record.tree.commit',
+                                       [ mw.G['auth_ses'][0], tree ]
+                       )[0];
+               }
+               if (typeof(tree) == 'object') {
+                       dump('\n\n\n\nnew tree = ' + js2JSON(tree) + '\n');
+                       params.import_tree = false;
+                       new_node_id = -1;
+                       empty_grid('ctrl_rows','data_rows');
+                       build_grid( 
+                               document.getElementById('ctrl_rows'), 
+                               document.getElementById('data_rows'), 
+                               tree
+                       );
+                       handle_tag_change();
+                       my_resize_handler();
+                       alert('MARC record successfully updated.');
+               } else {
+                       throw('result: ' + tree + '\n');
+               }
+       } catch(E) {
+               dump('backup_tree\n');
+               tree = backup_tree;
+               handle_tag_change();
+               my_resize_handler();
+               handle_error(E);
+       }
+}
+
+function insert_into_tree(branch,r,n) {
+       var s = nextSibling_not_hidden(r);
+       if (s) {
+               dump('9th find =========================================\n')
+               dump('s = ' + s + '\n');
+               dump('s.getAttribute mynode = <' + s.getAttribute('mynode') + '>\n');
+               var pos = find_element_with_id(branch,s.getAttribute('mynode'));
+               branch.splice(pos,0,n);
+       } else {
+               branch.push(n);
+       }
+}
+
+var new_node_id = -1;
+function populate_node(node,ntype,name) {
+       node.intra_doc_id( new_node_id-- );
+       node.isnew( 1 );
+       node.node_type( ntype );
+       node.name( name );
+       dump( node.name() + ':' + node.intra_doc_id() + '.is_new = 1\n');
+}
+
+function process_subfields(tfc,datastring) {
+       dump('process_subfields: <' + tfc + '> <' + datastring + '>\n');
+       var orig_subfields = [];
+       //dump('\n');
+       for (var i in tfc) {
+               dump(i + ' : ' + typeof(tfc[i]) + ' : ' + js2JSON(tfc[i]) + ' : node_type() = ' + tfc[i].node_type() + '\n');
+               try {
+                       if (tfc[i].node_type() == 1) {
+                               var orig_data = tfc[i].children()[1].value();
+                               orig_data = orig_data.replace(/^\s+/,'').replace(/\s+$/,'');
+                               orig_subfields.push( [ 
+                                       i, // subfield node index
+                                       tfc[i].children()[0].value(), // subf indicator
+                                       orig_data // data
+                               ] );
+                       }
+
+               } catch(E) {
+                       dump('\tan error? gasp: ' + js2JSON(E) + '\n');
+                       continue;
+               }
+       }
+       datastring = datastring.replace(/^\s+/,'').replace(/\s+$/,'');
+       var local_subf_array = datastring.split(String.fromCharCode(8225));
+       // Our validation routines should assert that the beginning of
+       // a data string start with the subfield delimiter symbol.  We're
+       // passing the buck of the 'implicit' subfield-a check elsewhere.
+       local_subf_array.shift();
+       dump('orig_subfields = ' + js2JSON(orig_subfields) + '\n');
+       dump('local_subfields = ' + js2JSON(local_subf_array) + '\n');
+       for (var i in local_subf_array) {
+               if ((local_subf_array[i]=='')||(local_subf_array==null)) { continue; }
+               var s_ind = local_subf_array[i].substr(0,1);
+               var s_data = local_subf_array[i].substr(1).replace(/^\s+/,'').replace(/\s+$/,'');
+               dump('Processing code = ' + s_ind + ' and value = ' + s_data + '\n');
+               if (!orig_subfields[i]) { // new subfield
+                       dump('making new subfield : i = ' + i + '\n');
+                       var level1 = new brn(); 
+                               populate_node( level1, 1, 'subfield' );
+                       var level2a = new brn(); 
+                               populate_node( level2a, 2, 'code' );
+                               level2a.value(s_ind);
+                       var level2b = new brn();
+                               populate_node( level2b, 3, null );
+                               level2b.value(s_data);
+                       level1.children([ level2a, level2b ]);
+                       tfc.push(level1);
+                       dump('New node = ' + js2JSON(level1) + '\n');
+               } else {
+                       var orig_node = orig_subfields[i][0];
+                       var orig_ind = orig_subfields[i][1];
+                       var orig_data = orig_subfields[i][2];
+                       if (orig_ind != s_ind) { // update subf indicator
+                               tfc[orig_node].children()[0].value(s_ind);
+                               tfc[orig_node].children()[0].ischanged(1);
+                               dump( tfc[orig_node].children()[0].name() + ':' +
+                                       tfc[orig_node].children()[0].id() + ':' +
+                                       tfc[orig_node].children()[0].intra_doc_id() +
+                                       '.is_changed = 1\n');
+                       dump('Updated node = ' + js2JSON(tfc[orig_node].children()[0]) + '\n');
+                       }
+                       if (orig_data != s_data) { // update subf data
+                               tfc[orig_node].children()[1].value(s_data);
+                               tfc[orig_node].children()[1].ischanged(1);
+                               dump( tfc[orig_node].children()[1].name() + ':' +
+                                       tfc[orig_node].children()[1].id() + ':' +
+                                       tfc[orig_node].children()[1].intra_doc_id() +
+                                       '.is_changed = 1\n');
+                       dump('Updated node = ' + js2JSON(tfc[orig_node].children()[1]) + '\n');
+                       }
+               }
+       }
+       // delete any remaining
+       for (var i = local_subf_array.length; i < orig_subfields.length; i++) {
+               var orig_node = orig_subfields[i][0];
+               tfc[orig_node].isdeleted(1);
+               dump( tfc[orig_node].name() + ':' +
+                       tfc[orig_node].id() + ':' +
+                       tfc[orig_node].intra_doc_id() + '.is_deleted = 1\n');
+               delete_children(tfc[orig_node]);
+       }
+}
+
+
+
+function test_nodeset() {
+       return null;
+}
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/marc.xul b/Evergreen/staff_client/chrome/content/evergreen/cat/marc.xul
new file mode 100644 (file)
index 0000000..c618d57
--- /dev/null
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<!-- Application: Evergreen Staff Client -->
+<!-- Screen: Cataloger's MARC Screen -->
+
+<!-- Stylesheets -->
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://evergreen/skin/evergreen.css" type="text/css"?>
+<?xml-stylesheet href="chrome://evergreen/skin/cat.css" type="text/css"?>
+<?xml-stylesheet href="chrome://evergreen/skin/marc.css" type="text/css"?>
+
+<!-- Localization -->
+<!DOCTYPE window SYSTEM "chrome://evergreen/locale/cat.dtd">
+
+<window id="marc_win" title="&cat.title;" 
+       orient="vertical" style="overflow: scroll" 
+       width="800" height="600" persist="width height"
+       onload="
+               dump('start onload: ' + timer_elapsed('cat') + '\n');
+               my_init();
+               dump('end onload: ' + timer_elapsed('cat') + '\n');
+       "
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+       <!-- Overlays for this XUL file -->
+       <?xul-overlay href="chrome://evergreen/content/OpenSRF/OpenSRF.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/util/util.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/cat/marc_overlay.xul"?>
+
+       <!-- OpenSRF -->
+       <script>var myPackageDir = "evergreen";</script>
+       <script src="chrome://evergreen/content/util/util.js" />
+       <script>timer_init('cat');</script>
+       <OpenSRF id="OpenSRF_js" />
+
+       <!-- The logic for this app -->
+       <Evergreen id="marc_js" />
+
+       <!-- XUL'ified abstraction for logic to attach to widgets -->
+       <commandset id="marc_cmds" />
+
+       <!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+       <keyset id="marc_keys" />
+
+       <!-- Layout to be filled in by overlays and javascript -->
+       <vbox id="marc_vbox" class="test_class"/>
+
+</window>
+
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/marc_fixed.js b/Evergreen/staff_client/chrome/content/evergreen/cat/marc_fixed.js
new file mode 100644 (file)
index 0000000..9ec8342
--- /dev/null
@@ -0,0 +1,149 @@
+function pad_fixed(value,field) {
+       var padding = '';
+       if (field == '008') {
+               for (var i = value.length; i<40; i++) {
+                       padding = padding + ' ';
+               }
+       } else if (field == 'LDR') {
+               for (var i = value.length; i<24; i++) {
+                       padding = padding + ' ';
+               }
+       }
+       return padding;
+}
+
+
+function handle_fixed_change(ev) {
+       dump('Entering handle_fixed_change\n');
+       if (ev.target.tagName != 'textbox') { dump('early exit\n'); return; }
+       var t = ev.target;
+       var field = t.getAttribute('field');
+       var spos = t.getAttribute('spos');
+       var epos = t.getAttribute('epos');
+       var size = t.getAttribute('size');
+       if ( (epos - spos + 1) != size ) { 
+               dump('Invalid fixed field DTD: field='+field+' spos='+spos+
+                       ' epos='+epos+' size='+size+'\n');
+               alert('Invalid fixed field DTD: field='+field+' spos='+spos+
+                       ' epos='+epos+' size='+size+'\n');
+       }
+       if (t.value.length > size) {
+               t.value = t.value.substr(0,size);
+       } else if (t.value.length < size) {
+               var padding = '';
+               for (var i = 0; i<(size-t.value.length); i++) {
+                       padding = padding + ' ';
+               }
+               t.value = t.value + padding;
+       }
+       var fixed = find_textbox('ctrl_rows', field);
+       //dump('length of fixed: ' + fixed.value.length + '\n');
+       fixed.value = fixed.value + pad_fixed(fixed.value,field);
+       dump('length of fixed: ' + fixed.value.length + '\n');
+
+       //dump('field='+field+' spos='+spos+' epos='+epos+' size='+size+' t="'+t.value+'"\n');
+       dump('replacing "'+fixed.value+'"\n');
+       fixed.value = fixed.value.substr(0,spos) + t.value + fixed.value.substr(1+Number(epos));
+       dump('     with "'+fixed.value+'"\n');
+}
+
+function find_textbox(where, field) {
+       var rows = document.getElementById(where).childNodes;
+       var ideal_sibling;
+       for (var r in rows) {
+               if (typeof(rows[r])=='object') {
+                       //dump(r + ':' + rows[r] + '\n');
+                       var t = rows[r].childNodes[0].firstChild;
+                       if (t.value == field) {
+                               return rows[r].childNodes[1].firstChild;
+                       } else if (t.value < field) {
+                               ideal_sibling = rows[r];
+                       }
+               }
+       }
+       var new_r = build_ctrl_row('ctrl_' + new_row_id--);
+       new_r.setAttribute('notempty','true');                  
+       new_r.setAttribute('newnode','true');
+       if (ideal_sibling.nextSibling) {
+               rows.insertBefore(new_r,ideal_sibling.nextSibling);
+       } else {
+               rows.appendChild(new_r);
+       }
+       new_r.childNodes[0].firstChild.value = field;
+       new_r.childNodes[1].firstChild.value = padding;
+       return new_r.childNodes[1].firstChild;
+}
+
+function fixed_fields_update_all(grid) {
+       var g = document.getElementById(grid);
+       var nl = g.getElementsByTagName('textbox');
+       for (var i in nl) {
+               if (typeof(nl[i])=='object') {
+                       var t = nl[i];
+                       var field = t.getAttribute('field');
+                       var spos = t.getAttribute('spos');
+                       var epos = t.getAttribute('epos');
+                       var size = t.getAttribute('size');
+                       var data = find_textbox('ctrl_rows',field);
+                       data.value = data.value + pad_fixed(data.value,field);
+                       t.value = data.value.substr(spos,size);
+               }
+       }
+}
+
+
+function fixed_fields_hide_all(grid) {
+       var g = document.getElementById(grid);
+       var nl = g.getElementsByTagName('label');
+       for (var i in nl) {
+               if (typeof(nl[i])=='object') {
+                       nl[i].setAttribute('hidden','true');
+               }
+       }
+       nl = g.getElementsByTagName('textbox');
+       for (var i in nl) {
+               if (typeof(nl[i])=='object') {
+                       nl[i].setAttribute('hidden','true');
+               }
+       }
+}
+
+function fixed_fields_show_all(grid) {
+       var g = document.getElementById(grid);
+       var nl = g.getElementsByTagName('label');
+       for (var i in nl) {
+               if (typeof(nl[i])=='object') {
+                       nl[i].setAttribute('hidden','false');
+               }
+       }
+       nl = g.getElementsByTagName('textbox');
+       for (var i in nl) {
+               if (typeof(nl[i])=='object') {
+                       nl[i].setAttribute('hidden','false');
+               }
+       }
+}
+
+function fixed_fields_show_only(grid,attr) {
+       fixed_fields_hide_all(grid);
+       fixed_fields_update_all(grid);
+       var g = document.getElementById(grid);
+       var nl = g.getElementsByTagName('label');
+       for (var i in nl) {
+               if (typeof(nl[i])=='object') {
+                       if (nl[i].getAttribute(attr) == 'true') {
+                               nl[i].setAttribute('hidden','false');
+                       }
+               }
+       }
+       nl = g.getElementsByTagName('textbox');
+       for (var i in nl) {
+               if (typeof(nl[i])=='object') {
+                       if (nl[i].getAttribute(attr) == 'true') {
+                               nl[i].setAttribute('hidden','false');
+                       }
+               }
+       }
+}
+
+
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/marc_keys.js b/Evergreen/staff_client/chrome/content/evergreen/cat/marc_keys.js
new file mode 100644 (file)
index 0000000..a702638
--- /dev/null
@@ -0,0 +1,221 @@
+function handle_keyup(ev) {
+       if (ev.target.tagName != 'textbox') { return; }
+       //dump('keyCode:' + ev.keyCode + ' charCode:' + ev.charCode + ' shift:' + ev.shiftKey + ' ctrl:' + ev.ctrlKey + ' meta:' + ev.metaKey + '\n');
+       resizeWrapper(ev.target);
+}
+
+function handle_keypress(ev) {
+       dump('keyCode:' + ev.keyCode + ' charCode:' + ev.charCode + ' shift:' + ev.shiftKey + ' ctrl:' + ev.ctrlKey + ' meta:' + ev.metaKey + '\n');
+       if (ev.target.tagName != 'textbox') { return; }
+       var rstatus = false;
+       if (ev.charCode) {
+               switch(ev.charCode) {
+                       case 100: 
+                               if (ev.ctrlKey) { /* control+d */
+                                       rstatus = handle_key_c_d(ev);
+                               }
+                               break;
+               }
+       } else if (ev.keyCode) {
+               switch(ev.keyCode) {
+                       case 13: /* enter */
+                       case 77: /* mac enter */
+                               rstatus = handle_key_enter(ev);
+                               break;
+                       case 46: 
+                               if (ev.ctrlKey) { /* control+del */
+                                       rstatus = handle_key_c_del(ev);
+                               }
+                               break;
+                       case 9: 
+                               if (ev.shiftKey) { /* shift+tab */
+                                       rstatus = navigate_col_left(ev.target,true);
+                               } else { /* tab */
+                                       rstatus = navigate_col_right(ev.target,true);
+                               }
+                               break;
+               }
+       }
+       resizeWrapper(ev.target);
+       if (rstatus) {
+               ev.preventDefault();
+       }
+       return rstatus;
+}
+
+function handle_key_c_d(ev) {
+       if (ev.target.tagName != 'textbox') { return; }
+       var t = ev.target;
+       if ((ev.ctrlKey)&&(ev.charCode==100)&&(t.getAttribute('subfields')=='true')) {
+               var n_ev = document.createEvent("KeyEvents");
+               if (n_ev) { /* the best way... fake a keypress */
+                       n_ev.initKeyEvent("keypress", 1, 1, null, 0, 0, 0, 0, 0, 8225);
+                       t.inputField.dispatchEvent(n_ev);
+               } else { /* this destroys the widget's undo buffer */
+                       var s_start = t.selectionStart; var s_end = t.selectionEnd;
+                       var first_half = t.value.substr(0,s_start);
+                       var second_half = t.value.substr(s_end);
+                       t.value = first_half + String.fromCharCode(8225) + second_half;
+                       t.setSelectionRange(s_start+1,s_start+1);
+               }
+               return true;
+       } else {
+               return false;
+       }
+}
+
+function handle_key_c_del(ev) {
+       // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
+       if (ev.target.tagName != 'textbox') { return; }
+       var t = ev.target;
+       var r = t.parentNode.parentNode;
+       if ((ev.ctrlKey)&&(ev.keyCode==46)) {
+               r.setAttribute('hidden','true');
+               handle_tag_change(ev);
+               if (! navigate_row_down(t,which_col_am_i(t),false) ) {
+                       navigate_row_up(t,which_col_am_i(t),false);
+                       dump("let's go up\n");
+               }
+               return true;
+       } else {
+               return false;
+       }
+}
+
+var new_row_id = -1;
+function handle_key_enter(ev) {
+       // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
+       if (ev.target.tagName != 'textbox') { return; }
+       var t = ev.target; 
+       if ((ev.keyCode == 13) || (ev.keyCode == 77)) {
+               if (ev.ctrlKey) { // add new row
+                       var new_r = build_data_row('data_' + new_row_id--);
+                       new_r.setAttribute('notempty','true');                  
+                       new_r.setAttribute('newnode','true');                   
+                       var w = t.parentNode;
+                       var r = w.parentNode;
+                       var rows = r.parentNode;
+                       var sibling_row;
+                       if (ev.shiftKey) {
+                               sibling_row = r;
+                       } else {
+                               sibling_row = r.nextSibling;
+                       }
+                       if (sibling_row) {
+                               rows.insertBefore(new_r,sibling_row);
+                       } else {
+                               rows.appendChild(new_r);
+                       }
+                       var c = new_r.childNodes;
+                       apply_event_listeners(c,'data');
+                       c[1].firstChild.value = ' '; // indicator 1
+                       c[2].firstChild.value = ' '; // indicator 2
+                       c[0].firstChild.focus();
+                       return true;
+               } else { // move to next row
+                       navigate_row_down(t,which_col_am_i(t),true);
+                       return true;
+               }
+       } else {
+               return false;
+       }
+}
+
+function which_col_am_i(t) {
+       var r = t.parentNode.parentNode;
+       for (var i in r.childNodes) {
+               if (t == r.childNodes[i].firstChild) {
+                       return i;
+               }
+       }
+}
+
+function nextSibling_not_hidden(e) {
+       var s = e.nextSibling;
+       while ((s)&&(s.getAttribute('hidden')=='true')) {
+               s = s.nextSibling;
+       }
+       return s;
+}
+
+function previousSibling_not_hidden(e) {
+       var s = e.previousSibling;
+       while ((s)&&(s.getAttribute('hidden')=='true')) {
+               s = s.previousSibling;
+       }
+       return s;
+}
+
+function navigate_row_down(t,c,wrap) {
+       // rows -> row (r) -> wrapper -> textbox (t)
+       var r = t.parentNode.parentNode;
+       var sibling_row = nextSibling_not_hidden(r);
+       if (sibling_row) {
+               sibling_row.childNodes[c].firstChild.focus();
+               if (c == 0) {
+                       sibling_row.childNodes[c].firstChild.select();
+               }
+       } else {
+               if (wrap) {
+                       r.parentNode.firstChild.childNodes[c].firstChild.focus();
+               } else {
+                       return false;
+               }
+       }
+       return true;
+}
+
+function navigate_row_up(t,c,wrap) {
+       // rows -> row (r) -> wrapper -> textbox (t)
+       var r = t.parentNode.parentNode;
+       var sibling_row = previousSibling_not_hidden(r);
+       if (sibling_row) {
+               sibling_row.childNodes[c].firstChild.focus();
+       } else {
+               if (wrap) {
+                       r.parentNode.lastChild.childNodes[c].firstChild.focus();
+               } else {
+                       return false;
+               }
+       }
+       return true;
+}
+
+function navigate_col_left(t,wrap) {
+       // rows -> row -> wrapper (w) -> textbox (t)
+       var w = t.parentNode;
+       var sibling_wrapper = w.previousSibling;
+       if (sibling_wrapper) {
+               sibling_wrapper.firstChild.focus();
+               if (sibling_wrapper.parentNode.childNodes[3] != sibling_wrapper) {
+                       sibling_wrapper.firstChild.select();
+               }
+       } else {
+               if (wrap) {
+                       return navigate_row_up(t,3,false);
+               } else {
+                       return false;
+               }
+       }
+       return true;
+}
+
+function navigate_col_right(t,wrap) {
+       // rows -> row -> wrapper (w) -> textbox (t)
+       var w = t.parentNode;
+       var sibling_wrapper = w.nextSibling;
+       if (sibling_wrapper) {
+               sibling_wrapper.firstChild.focus();
+               if (sibling_wrapper.parentNode.childNodes[3] != sibling_wrapper) {
+                       sibling_wrapper.firstChild.select();
+               }
+       } else {
+               if (wrap) {
+                       return navigate_row_down(t,0);
+               } else {
+                       return false;
+               }
+       }
+       return true;
+}
+
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/marc_overlay.xul b/Evergreen/staff_client/chrome/content/evergreen/cat/marc_overlay.xul
new file mode 100644 (file)
index 0000000..641fc9b
--- /dev/null
@@ -0,0 +1,936 @@
+<?xml version="1.0"?>
+<!DOCTYPE overlay SYSTEM "chrome://evergreen/locale/cat.dtd">
+<overlay id="marc_overlay" 
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+<!-- The javascript logic for the staff client -->
+<Evergreen id="marc_js">
+       <!--<script src="chrome://evergreen/content/evergreen/fieldmapper.js" />-->
+       <!--<script src="chrome://evergreen/content/util/RemoteRequest.js" />
+       <script src="chrome://evergreen/content/util/ses.js" />-->
+       <util id="util_js"/>
+       <script src="marc_rules.js" />
+       <script src="marc_validate.js" />
+       <script src="marc_fixed.js" />
+       <script src="marc_keys.js" />
+       <script src="marc.js" />
+</Evergreen>
+
+<!-- Some logic abstracted a bit.  Sort of like an API list -->
+<commandset id="marc_cmds">
+       <command id="cmd_marc_validate" oncommand="
+               alert('Feature Not Yet Implemented');
+               validate_marc();
+       "/>
+       <command id="cmd_marc_explain" oncommand="
+               explain_marc();
+       "/>
+       <command id="cmd_marc_submit" oncommand="
+               submit_marc();
+       "/>
+       <command id="cmd_marc_reload" oncommand="
+               alert('Feature Not Yet Implemented');
+               reload_marc();
+       "/>
+       <command id="cmd_marc_export" oncommand="
+               alert('Feature Not Yet Implemented');
+               export_marc();
+       "/>
+       <command id="cmd_marc_legend" oncommand="
+               legend_marc();
+       "/>
+       <command id="cmd_close_window" oncommand="
+               dump('close editor\n');
+               if (am_i_a_top_level_tab) {
+                       tabWindow.close_tab('main_tabbox');
+               } else {
+                       window.close();
+               }
+       "/>
+       <command id="cmd_marc_fixed_BKS" oncommand="
+               document.getElementById('ctrl_deck').setAttribute('selectedIndex',0);
+               fixed_fields_show_only('fixed_grid','BKS');
+       "/>
+       <command id="cmd_marc_fixed_SER" oncommand="
+               document.getElementById('ctrl_deck').setAttribute('selectedIndex',0);
+               fixed_fields_show_only('fixed_grid','SER');
+       "/>
+       <command id="cmd_marc_fixed_VIS" oncommand="
+               alert('Feature Not Yet Implemented');
+               document.getElementById('ctrl_deck').setAttribute('selectedIndex',0);
+               fixed_fields_show_only('fixed_grid','VIS');
+       "/>
+       <command id="cmd_marc_fixed_MIX" oncommand="
+               alert('Feature Not Yet Implemented');
+               document.getElementById('ctrl_deck').setAttribute('selectedIndex',0);
+               fixed_fields_show_only('fixed_grid','MIX');
+       "/>
+       <command id="cmd_marc_fixed_MAP" oncommand="
+               alert('Feature Not Yet Implemented');
+               document.getElementById('ctrl_deck').setAttribute('selectedIndex',0);
+               fixed_fields_show_only('fixed_grid','MAP');
+       "/>
+       <command id="cmd_marc_fixed_SCO" oncommand="
+               alert('Feature Not Yet Implemented');
+               document.getElementById('ctrl_deck').setAttribute('selectedIndex',0);
+               fixed_fields_show_only('fixed_grid','SCO');
+       "/>
+       <command id="cmd_marc_fixed_REC" oncommand="
+               alert('Feature Not Yet Implemented');
+               document.getElementById('ctrl_deck').setAttribute('selectedIndex',0);
+               fixed_fields_show_only('fixed_grid','REC');
+       "/>
+       <command id="cmd_marc_fixed_COM" oncommand="
+               alert('Feature Not Yet Implemented');
+               document.getElementById('ctrl_deck').setAttribute('selectedIndex',0);
+               fixed_fields_show_only('fixed_grid','COM');
+       "/>
+       <command id="cmd_marc_control_fields" oncommand="
+               var deck = document.getElementById('data_deck');
+               if (deck.getAttribute('selectedIndex') == '1') {
+                       deck.setAttribute('selectedIndex','0');
+               } else {
+                       deck.setAttribute('selectedIndex','1');
+               }
+       "/>
+       <command id="cmd_marc_cover_art" oncommand="
+               var box = document.getElementById('art_groupbox');
+               if (box.getAttribute('hidden') == 'true') {
+                       box.setAttribute('hidden','false');
+               } else {
+                       box.setAttribute('hidden','true');
+               }
+       "/>
+       <command id="cmd_marc_meta_data" oncommand="
+               var box = document.getElementById('meta_groupbox');
+               if (box.getAttribute('hidden') == 'true') {
+                       box.setAttribute('hidden','false');
+               } else {
+                       box.setAttribute('hidden','true');
+               }
+       "/>
+
+</commandset>
+
+<!-- The top level widget for the cat client -->
+<vbox id="marc_vbox" flex="1">
+       <toolbox id="marc_toolbox"/>
+<!--   <deck id="meta_deck"/>
+       <splitter collapse="before"> <grippy/> </splitter> -->
+       <deck id="ctrl_deck"/>
+       <splitter collapse="before"> <grippy/> </splitter>
+       <deck id="data_deck"/>
+       <hbox id="marc_buttons_box"/>
+</vbox>
+
+<hbox id="marc_buttons_box" class="marc_buttons_box">
+       <button label="&marc.file.close;" accesskey="&marc.file.close.key;" key="file-close-key" command="cmd_close_window"/>
+       <button label="&marc.file.reload;" accesskey="&marc.file.reload.key;" key="file-reload-key" command="cmd_marc_reload"/>
+       <button label="&marc.file.publish;" accesskey="&marc.file.publish.key;" key="file-publish-key" command="cmd_marc_submit"/>
+</hbox>
+
+<!-- The main top level menubar -->
+<toolbox id="marc_toolbox">
+       <menubar id="marc_menubar">
+               <menu id="marc-file" label="&marc.file;" accesskey="&marc.file.key;"/>
+               <menu id="marc-display" label="&marc.display;" accesskey="&marc.display.key;"/>
+       </menubar>
+</toolbox>
+
+<!-- The File menu on the marc menu -->
+<menu id="marc-file">
+       <menupopup id="marc-popup">
+               <menuitem label="&marc.file.validate;" accesskey="&marc.file.validate.key;" key="file-validate-key" command="cmd_marc_validate"/>
+               <menuseparator />
+               <menuitem label="&marc.file.reload;" accesskey="&marc.file.reload.key;" key="file-reload-key" command="cmd_marc_reload"/>
+               <menuitem label="&marc.file.export;" accesskey="&marc.file.export.key;" key="file-export-key" command="cmd_marc_export"/>
+               <menuitem label="&marc.file.publish;" accesskey="&marc.file.publish.key;" key="file-publish-key" command="cmd_marc_submit"/>
+               <menuseparator />
+               <menuitem label="&marc.file.close;" accesskey="&marc.file.close.key;" key="file-close-key" command="cmd_close_window"/>
+       </menupopup>
+</menu>
+
+<!-- The Display menu on the marc menu -->
+<menu id="marc-display">
+       <menupopup id="display-popup">
+               <menuitem id="explain_marc" label="&marc.display.explain;" accesskey="&marc.display.explain.key;" key="display-explain-key" command="cmd_marc_explain"/>
+               <menuitem label="&marc.display.legend;" accesskey="&marc.display.legend.key;" key="file-legend-key" command="cmd_marc_legend"/>
+               <menuseparator />
+               <menuitem label="&marc.display.cover_art;" accesskey="&marc.display.cover_art.key;" key="file-cover-art-key" command="cmd_marc_cover_art"/>
+               <menuitem label="&marc.display.meta_data;" accesskey="&marc.display.meta_data.key;" key="file-meta-data-key" command="cmd_marc_meta_data"/>
+               <menuitem label="&marc.display.control_fields;" accesskey="&marc.display.control_fields.key;" key="file-control-fields-key" command="cmd_marc_control_fields"/>
+               <menuseparator />
+               <menuitem type="radio" name="fixed_field_display" label="&marc.display.fixed.BKS;" accesskey="&marc.display.fixed.BKS.key;" key="file-fixed-BKS-key" command="cmd_marc_fixed_BKS"/>
+               <menuitem type="radio" name="fixed_field_display" label="&marc.display.fixed.SER;" accesskey="&marc.display.fixed.SER.key;" key="file-fixed-SER-key" command="cmd_marc_fixed_SER"/>
+               <menuitem type="radio" name="fixed_field_display" label="&marc.display.fixed.VIS;" accesskey="&marc.display.fixed.VIS.key;" key="file-fixed-VIS-key" command="cmd_marc_fixed_VIS"/>
+               <menuitem type="radio" name="fixed_field_display" label="&marc.display.fixed.MIX;" accesskey="&marc.display.fixed.MIX.key;" key="file-fixed-MIX-key" command="cmd_marc_fixed_MIX"/>
+               <menuitem type="radio" name="fixed_field_display" label="&marc.display.fixed.MAP;" accesskey="&marc.display.fixed.MAP.key;" key="file-fixed-MAP-key" command="cmd_marc_fixed_MAP"/>
+               <menuitem type="radio" name="fixed_field_display" label="&marc.display.fixed.SCO;" accesskey="&marc.display.fixed.SCO.key;" key="file-fixed-SCO-key" command="cmd_marc_fixed_SCO"/>
+               <menuitem type="radio" name="fixed_field_display" label="&marc.display.fixed.REC;" accesskey="&marc.display.fixed.REC.key;" key="file-fixed-REC-key" command="cmd_marc_fixed_REC"/>
+               <menuitem type="radio" name="fixed_field_display" label="&marc.display.fixed.COM;" accesskey="&marc.display.fixed.COM.key;" key="file-fixed-COM-key" command="cmd_marc_fixed_COM"/>
+       </menupopup>
+</menu>
+
+<deck id="meta_deck" flex="0">
+</deck>
+
+<deck id="ctrl_deck" flex="1">
+       <hbox flex="1">
+               <groupbox id="art_groupbox" hidden="true"/>
+               <vbox flex="1" style="overflow: auto;">
+                       <groupbox id="meta_groupbox"/>
+                       <groupbox id="fixed_groupbox"/>
+               </vbox>
+       </hbox>
+</deck>
+
+<deck id="data_deck" flex="1">
+       <groupbox id="data_groupbox"/>
+       <groupbox id="ctrl_groupbox"/>
+       <groupbox id="help_groupbox"/>
+</deck>
+
+<groupbox id="meta_groupbox" flex="1" hidden="true">
+       <caption label="&marc.groupbox.meta;"/>
+       <grid id="meta_grid"/>
+</groupbox>
+
+<groupbox id="data_groupbox"> 
+       <caption label="&marc.groupbox.data;"/>
+       <grid id="data_grid"/>
+</groupbox>
+
+<groupbox id="ctrl_groupbox">
+       <caption label="&marc.groupbox.control;"/>
+       <grid id="ctrl_grid"/>
+</groupbox>
+
+<groupbox id="fixed_groupbox">
+       <caption label="&marc.groupbox.fixed;"/>
+       <grid id="fixed_grid"/>
+</groupbox>
+
+<groupbox id="art_groupbox">
+       <caption label="&marc.groupbox.cover;"/>
+       <image src="chrome://evergreen/content/images/noimage.jpg"/>
+</groupbox>
+
+<grid id="meta_grid" flex="1" class="meta_grid">
+       <columns class="fixed_columns">
+               <column/> 
+               <column flex="1"/> 
+               <column/> <column /> <column/> <column />
+       </columns>
+       <rows>
+               <row id="meta_row1"/>
+               <row id="meta_row2"/>
+       </rows>
+</grid>
+               
+<row id="meta_row1">
+       <label value="Title/Author"/>
+       <description id="meta_title_author"/>
+       <label value="Creation Date"/>
+       <label id="meta_create_date"/>
+       <label value="Created By"/>
+       <label id="meta_creator"/>
+</row>
+<row id="meta_row2">
+       <label value="TCN/Publisher/etc"/>
+       <label id="meta_tcn_publisher"/>
+       <label value="Modification Date"/>
+       <label id="meta_edit_date"/>
+       <label value="Last Modified By"/>
+       <label id="meta_editor"/>
+</row>
+
+<grid id="fixed_grid" flex="1" class="fixed_grid">
+       <columns class="fixed_columns">
+               <column/> <column flex="1"/> <column/> <column flex="1"/>
+               <column/> <column flex="1"/> <column/> <column flex="1"/>
+               <column/> <column flex="1"/> <column/> <column flex="1"/>
+       </columns>
+       <rows class="fixed_rows">
+               <row id="fixed_row1" class="fixed_row"/>
+               <row id="fixed_row2" class="fixed_row"/>
+               <row id="fixed_row3" class="fixed_row"/>
+               <row id="fixed_row4" class="fixed_row"/>
+       </rows>
+</grid>
+
+<row id="fixed_row1">
+       <hbox>
+               <label 
+                       value="&marc.LDR.type.short;" 
+                       tooltiptext="&marc.LDR.type.desc;"
+                       onclick="window.open('&marc.LDR.type.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="true" VIS="true" MIX="true" 
+                       MAP="true" SCO="true" REC="true" COM="true" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.LDR.type.field;"
+                       spos="&marc.LDR.type.field_start_pos;"
+                       epos="&marc.LDR.type.field_end_pos;"
+                       size="&marc.LDR.type.field_size;"
+                       BKS="true" SER="true" VIS="true" MIX="true" 
+                       MAP="true" SCO="true" REC="true" COM="true" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.LDR.elvl.short;" 
+                       tooltiptext="&marc.LDR.elvl.desc;"
+                       onclick="window.open('&marc.LDR.elvl.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="true" VIS="true" MIX="true" 
+                       MAP="true" SCO="true" REC="true" COM="true" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.LDR.elvl.field;"
+                       spos="&marc.LDR.elvl.field_start_pos;"
+                       epos="&marc.LDR.elvl.field_end_pos;"
+                       size="&marc.LDR.elvl.field_size;"
+                       BKS="true" SER="true" VIS="true" MIX="true" 
+                       MAP="true" SCO="true" REC="true" COM="true" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.008.srce.short;" 
+                       tooltiptext="&marc.008.srce.desc;"
+                       onclick="window.open('&marc.008.srce.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="true" VIS="true" MIX="true" 
+                       MAP="true" SCO="true" REC="true" COM="true" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.srce.field;"
+                       spos="&marc.008.srce.field_start_pos;"
+                       epos="&marc.008.srce.field_end_pos;"
+                       size="&marc.008.srce.field_size;"
+                       BKS="true" SER="true" VIS="true" MIX="true" 
+                       MAP="true" SCO="true" REC="true" COM="true" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.008.BKS.VIS.SCO.REC.COM.audn.short;" 
+                       tooltiptext="&marc.008.BKS.VIS.SCO.REC.COM.audn.desc;"
+                       onclick="window.open('&marc.008.BKS.VIS.SCO.REC.COM.audn.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="false" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+               <label 
+                       value="&marc.008.BKS.SER.VIS.MAP.COM.gpub.short;" 
+                       tooltiptext="&marc.008.BKS.SER.VIS.MAP.COM.gpub.desc;"
+                       onclick="window.open('&marc.008.BKS.SER.VIS.MAP.COM.gpub.help;');"
+                       class="fixed_label"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.BKS.VIS.SCO.REC.COM.audn.field;"
+                       spos="&marc.008.BKS.VIS.SCO.REC.COM.audn.field_start_pos;"
+                       epos="&marc.008.BKS.VIS.SCO.REC.COM.audn.field_end_pos;"
+                       size="&marc.008.BKS.VIS.SCO.REC.COM.audn.field_size;"
+                       BKS="true" SER="false" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+               <textbox
+                       field="&marc.008.BKS.SER.VIS.MAP.COM.gpub.field;"
+                       spos="&marc.008.BKS.SER.VIS.MAP.COM.gpub.field_start_pos;"
+                       epos="&marc.008.BKS.SER.VIS.MAP.COM.gpub.field_end_pos;"
+                       size="&marc.008.BKS.SER.VIS.MAP.COM.gpub.field_size;"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.LDR.ctrl.short;" 
+                       tooltiptext="&marc.LDR.ctrl.desc;"
+                       onclick="window.open('&marc.LDR.ctrl.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="true" VIS="true" MIX="true" 
+                       MAP="true" SCO="true" REC="true" COM="true" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.LDR.ctrl.field;"
+                       spos="&marc.LDR.ctrl.field_start_pos;"
+                       epos="&marc.LDR.ctrl.field_end_pos;"
+                       size="&marc.LDR.ctrl.field_size;"
+                       BKS="true" SER="true" VIS="true" MIX="true" 
+                       MAP="true" SCO="true" REC="true" COM="true" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.008.lang.short;" 
+                       tooltiptext="&marc.008.lang.desc;"
+                       onclick="window.open('&marc.008.lang.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="true" VIS="true" MIX="true" 
+                       MAP="true" SCO="true" REC="true" COM="true" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.lang.field;"
+                       spos="&marc.008.lang.field_start_pos;"
+                       epos="&marc.008.lang.field_end_pos;"
+                       size="&marc.008.lang.field_size;"
+                       BKS="true" SER="true" VIS="true" MIX="true" 
+                       MAP="true" SCO="true" REC="true" COM="true" 
+                       onclick="this.select();"
+               />
+       </hbox>
+</row>
+<row id="fixed_row2">
+       <hbox>
+               <label 
+                       value="&marc.LDR.blvl.short;" 
+                       tooltiptext="&marc.LDR.blvl.desc;"
+                       onclick="window.open('&marc.LDR.blvl.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="true" VIS="true" MIX="true" 
+                       MAP="true" SCO="true" REC="true" COM="true" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.LDR.blvl.field;"
+                       spos="&marc.LDR.blvl.field_start_pos;"
+                       epos="&marc.LDR.blvl.field_end_pos;"
+                       size="&marc.LDR.blvl.field_size;"
+                       BKS="true" SER="true" VIS="true" MIX="true" 
+                       MAP="true" SCO="true" REC="true" COM="true" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.008.BKS.SER.MIX.SCO.REC.form.short;" 
+                       tooltiptext="&marc.008.BKS.SER.MIX.SCO.REC.form.desc;"
+                       onclick="window.open('&marc.008.BKS.SER.MIX.SCO.REC.form.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.BKS.SER.MIX.SCO.REC.form.field;"
+                       spos="&marc.008.BKS.SER.MIX.SCO.REC.form.field_start_pos;"
+                       epos="&marc.008.BKS.SER.MIX.SCO.REC.form.field_end_pos;"
+                       size="&marc.008.BKS.SER.MIX.SCO.REC.form.field_size;"
+                       BKS="true" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.008.BKS.SER.conf.short;" 
+                       tooltiptext="&marc.008.BKS.SER.conf.desc;"
+                       onclick="window.open('&marc.008.BKS.SER.conf.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.BKS.SER.conf.field;"
+                       spos="&marc.008.BKS.SER.conf.field_start_pos;"
+                       epos="&marc.008.BKS.SER.conf.field_end_pos;"
+                       size="&marc.008.BKS.SER.conf.field_size;"
+                       BKS="true" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.008.BKS.biog.short;" 
+                       tooltiptext="&marc.008.BKS.biog.desc;"
+                       onclick="window.open('&marc.008.BKS.biog.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="false" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+               <label 
+                       value="&marc.008.SER.freq.short;" 
+                       tooltiptext="&marc.008.SER.freq.desc;"
+                       onclick="window.open('&marc.008.SER.freq.help;');"
+                       class="fixed_label"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.BKS.biog.field;"
+                       spos="&marc.008.BKS.biog.field_start_pos;"
+                       epos="&marc.008.BKS.biog.field_end_pos;"
+                       size="&marc.008.BKS.biog.field_size;"
+                       BKS="true" SER="false" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+               <textbox
+                       field="&marc.008.SER.freq.field;"
+                       spos="&marc.008.SER.freq.field_start_pos;"
+                       epos="&marc.008.SER.freq.field_end_pos;"
+                       size="&marc.008.SER.freq.field_size;"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.008.mrec.short;" 
+                       tooltiptext="&marc.008.mrec.desc;"
+                       onclick="window.open('&marc.008.mrec.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.mrec.field;"
+                       spos="&marc.008.mrec.field_start_pos;"
+                       epos="&marc.008.mrec.field_end_pos;"
+                       size="&marc.008.mrec.field_size;"
+                       BKS="true" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.008.ctry.short;" 
+                       tooltiptext="&marc.008.ctry.desc;"
+                       onclick="window.open('&marc.008.ctry.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.ctry.field;"
+                       spos="&marc.008.ctry.field_start_pos;"
+                       epos="&marc.008.ctry.field_end_pos;"
+                       size="&marc.008.ctry.field_size;"
+                       BKS="true" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+       </hbox>
+</row>
+
+<row id="fixed_row3">
+       <hbox>
+               <label 
+                       value="&marc.008.SER.succ.short;" 
+                       tooltiptext="&marc.008.SER.succ.desc;"
+                       onclick="window.open('&marc.008.SER.succ.help;');"
+                       class="fixed_label"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.SER.succ.field;"
+                       spos="&marc.008.SER.succ.field_start_pos;"
+                       epos="&marc.008.SER.succ.field_end_pos;"
+                       size="&marc.008.SER.succ.field_size;"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.008.BKS.cont.short;" 
+                       tooltiptext="&marc.008.BKS.cont.desc;"
+                       onclick="window.open('&marc.008.BKS.cont.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="false" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+               <label 
+                       value="&marc.008.SER.orig.short;" 
+                       tooltiptext="&marc.008.SER.orig.desc;"
+                       onclick="window.open('&marc.008.SER.orig.help;');"
+                       class="fixed_label"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.BKS.cont.field;"
+                       spos="&marc.008.BKS.cont.field_start_pos;"
+                       epos="&marc.008.BKS.cont.field_end_pos;"
+                       size="&marc.008.BKS.cont.field_size;"
+                       BKS="true" SER="false" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+               <textbox
+                       field="&marc.008.SER.orig.field;"
+                       spos="&marc.008.SER.orig.field_start_pos;"
+                       epos="&marc.008.SER.orig.field_end_pos;"
+                       size="&marc.008.SER.orig.field_size;"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.008.BKS.SER.VIS.MAP.COM.gpub.short;" 
+                       tooltiptext="&marc.008.BKS.SER.VIS.MAP.COM.gpub.desc;"
+                       onclick="window.open('&marc.008.BKS.SER.VIS.MAP.COM.gpub.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="false" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+               <label 
+                       value="&marc.008.SER.entw.short;" 
+                       tooltiptext="&marc.008.SER.entw.desc;"
+                       onclick="window.open('&marc.008.SER.entw.help;');"
+                       class="fixed_label"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.BKS.SER.VIS.MAP.COM.gpub.field;"
+                       spos="&marc.008.BKS.SER.VIS.MAP.COM.gpub.field_start_pos;"
+                       epos="&marc.008.BKS.SER.VIS.MAP.COM.gpub.field_end_pos;"
+                       size="&marc.008.BKS.SER.VIS.MAP.COM.gpub.field_size;"
+                       BKS="true" SER="false" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+               <textbox
+                       field="&marc.008.SER.entw.field;"
+                       spos="&marc.008.SER.entw.field_start_pos;"
+                       epos="&marc.008.SER.entw.field_end_pos;"
+                       size="&marc.008.SER.entw.field_size;"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.008.BKS.litf.short;" 
+                       tooltiptext="&marc.008.BKS.litf.desc;"
+                       onclick="window.open('&marc.008.BKS.litf.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="false" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+               <label 
+                       value="&marc.008.SER.regl.short;" 
+                       tooltiptext="&marc.008.SER.regl.desc;"
+                       onclick="window.open('&marc.008.SER.regl.help;');"
+                       class="fixed_label"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.BKS.litf.field;"
+                       spos="&marc.008.BKS.litf.field_start_pos;"
+                       epos="&marc.008.BKS.litf.field_end_pos;"
+                       size="&marc.008.BKS.litf.field_size;"
+                       BKS="true" SER="false" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+               <textbox
+                       field="&marc.008.SER.regl.field;"
+                       spos="&marc.008.SER.regl.field_start_pos;"
+                       epos="&marc.008.SER.regl.field_end_pos;"
+                       size="&marc.008.SER.regl.field_size;"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.008.BKS.MAP.indx.short;" 
+                       tooltiptext="&marc.008.BKS.MAP.indx.desc;"
+                       onclick="window.open('&marc.008.BKS.MAP.indx.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="false" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+               <label 
+                       value="&marc.008.SER.issn.short;" 
+                       tooltiptext="&marc.008.SER.issn.desc;"
+                       onclick="window.open('&marc.008.SER.issn.help;');"
+                       class="fixed_label"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.BKS.MAP.indx.field;"
+                       spos="&marc.008.BKS.MAP.indx.field_start_pos;"
+                       epos="&marc.008.BKS.MAP.indx.field_end_pos;"
+                       size="&marc.008.BKS.MAP.indx.field_size;"
+                       BKS="true" SER="false" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+               <textbox
+                       field="&marc.008.SER.issn.field;"
+                       spos="&marc.008.SER.issn.field_start_pos;"
+                       epos="&marc.008.SER.issn.field_end_pos;"
+                       size="&marc.008.SER.issn.field_size;"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.008.SER.alph.short;" 
+                       tooltiptext="&marc.008.SER.alph.desc;"
+                       onclick="window.open('&marc.008.SER.alph.help;');"
+                       class="fixed_label"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.SER.alph.field;"
+                       spos="&marc.008.SER.alph.field_start_pos;"
+                       epos="&marc.008.SER.alph.field_end_pos;"
+                       size="&marc.008.SER.alph.field_size;"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+       </hbox>
+</row>
+
+<row id="fixed_row4">
+       <hbox>
+               <label 
+                       value="&marc.LDR.desc.short;" 
+                       tooltiptext="&marc.LDR.desc.desc;"
+                       onclick="window.open('&marc.LDR.desc.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="true" VIS="true" MIX="true" 
+                       MAP="true" SCO="true" REC="true" COM="true" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.LDR.desc.field;"
+                       spos="&marc.LDR.desc.field_start_pos;"
+                       epos="&marc.LDR.desc.field_end_pos;"
+                       size="&marc.LDR.desc.field_size;"
+                       BKS="true" SER="true" VIS="true" MIX="true" 
+                       MAP="true" SCO="true" REC="true" COM="true" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.008.BKS.ills.short;" 
+                       tooltiptext="&marc.008.BKS.ills.desc;"
+                       onclick="window.open('&marc.008.BKS.ills.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="false" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+               <label 
+                       value="&marc.008.SER.srtp.short;" 
+                       tooltiptext="&marc.008.SER.srtp.desc;"
+                       onclick="window.open('&marc.008.SER.srtp.help;');"
+                       class="fixed_label"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.BKS.ills.field;"
+                       spos="&marc.008.BKS.ills.field_start_pos;"
+                       epos="&marc.008.BKS.ills.field_end_pos;"
+                       size="&marc.008.BKS.ills.field_size;"
+                       BKS="true" SER="false" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+               <textbox
+                       field="&marc.008.SER.srtp.field;"
+                       spos="&marc.008.SER.srtp.field_start_pos;"
+                       epos="&marc.008.SER.srtp.field_end_pos;"
+                       size="&marc.008.SER.srtp.field_size;"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.008.BKS.fest.short;" 
+                       tooltiptext="&marc.008.BKS.fest.desc;"
+                       onclick="window.open('&marc.008.BKS.fest.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="false" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+               <label 
+                       value="&marc.008.SER.cont.short;" 
+                       tooltiptext="&marc.008.SER.cont.desc;"
+                       onclick="window.open('&marc.008.SER.cont.help;');"
+                       class="fixed_label"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.BKS.fest.field;"
+                       spos="&marc.008.BKS.fest.field_start_pos;"
+                       epos="&marc.008.BKS.fest.field_end_pos;"
+                       size="&marc.008.BKS.fest.field_size;"
+                       BKS="true" SER="false" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+               <textbox
+                       field="&marc.008.SER.cont.field;"
+                       spos="&marc.008.SER.cont.field_start_pos;"
+                       epos="&marc.008.SER.cont.field_end_pos;"
+                       size="&marc.008.SER.cont.field_size;"
+                       BKS="false" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.008.dtst.short;" 
+                       tooltiptext="&marc.008.dtst.desc;"
+                       onclick="window.open('&marc.008.dtst.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.dtst.field;"
+                       spos="&marc.008.dtst.field_start_pos;"
+                       epos="&marc.008.dtst.field_end_pos;"
+                       size="&marc.008.dtst.field_size;"
+                       BKS="true" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.008.date1.short;" 
+                       tooltiptext="&marc.008.date1.desc;"
+                       onclick="window.open('&marc.008.dates.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.date1.field;"
+                       spos="&marc.008.date1.field_start_pos;"
+                       epos="&marc.008.date1.field_end_pos;"
+                       size="&marc.008.date1.field_size;"
+                       BKS="true" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+       </hbox>
+       <hbox>
+               <label 
+                       value="&marc.008.date2.short;" 
+                       tooltiptext="&marc.008.date2.desc;"
+                       onclick="window.open('&marc.008.dates.help;');"
+                       class="fixed_label"
+                       BKS="true" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+               />
+       </hbox>
+       <hbox>
+               <textbox
+                       field="&marc.008.date2.field;"
+                       spos="&marc.008.date2.field_start_pos;"
+                       epos="&marc.008.date2.field_end_pos;"
+                       size="&marc.008.date2.field_size;"
+                       BKS="true" SER="true" VIS="false" MIX="false" 
+                       MAP="false" SCO="false" REC="false" COM="false" 
+                       onclick="this.select();"
+               />
+       </hbox>
+</row>
+
+<grid id="ctrl_grid" flex="1" class="ctrl_grid">
+       <columns id="ctrl_columns">
+               <column id="ctrl_column1"/>
+               <column id="ctrl_column2" flex="1"/>
+       </columns>
+       <rows id="ctrl_rows"/>
+</grid>
+
+<grid id="data_grid" flex="1" class="data_grid">
+       <columns id="data_columns">
+               <column id="data_column1"/>
+               <column id="data_column2"/>
+               <column id="data_column3"/>
+               <column id="data_column4" flex="1"/>
+       </columns>
+       <rows id="data_rows"/>
+</grid>
+
+<!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+<keyset id="marc_keys">
+       <key id="marc-close-editor-key" modifiers="accel" key="&marc.close.editor.key;" command="cmd_close_window"/>
+       <key id="" modifiers="accel" key="A" command="cmd_"/>
+</keyset>
+
+</overlay>
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/marc_rules.js b/Evergreen/staff_client/chrome/content/evergreen/cat/marc_rules.js
new file mode 100644 (file)
index 0000000..b9e8031
--- /dev/null
@@ -0,0 +1,2 @@
+
+var marc_rules = {"001":{"desc":"CONTROL NUMBER","repeat":"NR"},"002":{"desc":"LOCALLY DEFINED (UNOFFICIAL)","repeat":"NR"},"003":{"desc":"CONTROL NUMBER IDENTIFIER","repeat":"NR"},"005":{"desc":"DATE AND TIME OF LATEST TRANSACTION","repeat":"NR"},"006":{"desc":"FIXED-LENGTH DATA ELEMENTS--ADDITIONAL MATERIAL CHARACTERISTICS--GENERAL INFORMATION","repeat":"R"},"007":{"desc":"PHYSICAL DESCRIPTION FIXED FIELD--GENERAL INFORMATION","repeat":"R"},"008":{"desc":"FIXED-LENGTH DATA ELEMENTS--GENERAL INFORMATION","repeat":"NR"},"010":{"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"LC control number ","repeat":"NR"},"b":{"desc":"NUCMC control number ","repeat":"R"},"desc":"LIBRARY OF CONGRESS CONTROL NUMBER","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR","z":{"desc":"Canceled/invalid LC control number ","repeat":"R"}},"013":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Number ","repeat":"NR"},"b":{"desc":"Country ","repeat":"NR"},"c":{"desc":"Type of number ","repeat":"NR"},"d":{"desc":"Date ","repeat":"R"},"desc":"PATENT CONTROL INFORMATION","e":{"desc":"Status ","repeat":"R"},"f":{"desc":"Party to document ","repeat":"R"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"015":{"2":{"desc":"Source ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"National bibliography number ","repeat":"R"},"desc":"NATIONAL BIBLIOGRAPHY NUMBER","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"016":{"2":{"desc":"Source ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Record control number ","repeat":"NR"},"desc":"NATIONAL BIBLIOGRAPHIC AGENCY CONTROL NUMBER","ind1":{"allowed":" 7","desc":"National bibliographic agency"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","z":{"desc":"Canceled or invalid record control number ","repeat":"R"}},"017":{"2":{"desc":"Source ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Copyright registration number ","repeat":"R"},"b":{"desc":"Assigning agency ","repeat":"NR"},"desc":"COPYRIGHT OR LEGAL DEPOSIT NUMBER","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"018":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Copyright article-fee code ","repeat":"NR"},"desc":"COPYRIGHT ARTICLE-FEE CODE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"020":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"International Standard Book Number ","repeat":"NR"},"c":{"desc":"Terms of availability ","repeat":"NR"},"desc":"INTERNATIONAL STANDARD BOOK NUMBER","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","z":{"desc":"Canceled/invalid ISBN ","repeat":"R"}},"022":{"2":{"desc":"Source ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"International Standard Serial Number ","repeat":"NR"},"desc":"INTERNATIONAL STANDARD SERIAL NUMBER","ind1":{"allowed":" 01","desc":"Level of international interest"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","y":{"desc":"Incorrect ISSN ","repeat":"R"},"z":{"desc":"Canceled ISSN ","repeat":"R"}},"024":{"2":{"desc":"Source of number or code ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Standard number or code ","repeat":"NR"},"c":{"desc":"Terms of availability ","repeat":"NR"},"d":{"desc":"Additional codes following the standard number or code ","repeat":"NR"},"desc":"OTHER STANDARD IDENTIFIER","ind1":{"allowed":"0123478","desc":"Type of standard number or code"},"ind2":{"allowed":" 01","desc":"Difference indicator"},"repeat":"R","z":{"desc":"Canceled/invalid standard number or code ","repeat":"R"}},"025":{"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Overseas acquisition number ","repeat":"R"},"desc":"OVERSEAS ACQUISITION NUMBER","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"026":{"2":{"desc":"Source ","repeat":"NR"},"5":{"desc":"Institution to which field applies ","repeat":"R"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"First and second groups of characters ","repeat":"R"},"b":{"desc":"Third and fourth groups of characters ","repeat":"R"},"c":{"desc":"Date ","repeat":"NR"},"d":{"desc":"Number of volume or part ","repeat":"R"},"desc":"FINGERPRINT IDENTIFIER","e":{"desc":"Unparsed fingerprint ","repeat":"NR"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"027":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Standard technical report number ","repeat":"NR"},"desc":"STANDARD TECHNICAL REPORT NUMBER","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","z":{"desc":"Canceled/invalid number ","repeat":"R"}},"028":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Publisher number ","repeat":"NR"},"b":{"desc":"Source ","repeat":"NR"},"desc":"PUBLISHER NUMBER","ind1":{"allowed":"012345","desc":"Type of publisher number"},"ind2":{"allowed":"0123","desc":"Note/added entry controller"},"repeat":"R"},"030":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"CODEN ","repeat":"NR"},"desc":"CODEN DESIGNATION","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","z":{"desc":"Canceled/invalid CODEN ","repeat":"R"}},"032":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Postal registration number ","repeat":"NR"},"b":{"desc":"Source (agency assigning number) ","repeat":"NR"},"desc":"POSTAL REGISTRATION NUMBER","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"033":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Formatted date/time ","repeat":"R"},"b":{"desc":"Geographic classification area code ","repeat":"R"},"c":{"desc":"Geographic classification subarea code ","repeat":"R"},"desc":"DATE/TIME AND PLACE OF AN EVENT","ind1":{"allowed":" 012","desc":"Type of date in subfield $a"},"ind2":{"allowed":" 012","desc":"Type of event"},"repeat":"R"},"034":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Category of scale ","repeat":"NR"},"b":{"desc":"Constant ratio linear horizontal scale ","repeat":"R"},"c":{"desc":"Constant ratio linear vertical scale ","repeat":"R"},"d":{"desc":"Coordinates--westernmost longitude ","repeat":"NR"},"desc":"CODED CARTOGRAPHIC MATHEMATICAL DATA","e":{"desc":"Coordinates--easternmost longitude ","repeat":"NR"},"f":{"desc":"Coordinates--northernmost latitude ","repeat":"NR"},"g":{"desc":"Coordinates--southernmost latitude ","repeat":"NR"},"h":{"desc":"Angular scale ","repeat":"R"},"ind1":{"allowed":"013","desc":"Type of scale"},"ind2":{"allowed":" 01","desc":"Type of ring"},"j":{"desc":"Declination--northern limit ","repeat":"NR"},"k":{"desc":"Declination--southern limit ","repeat":"NR"},"m":{"desc":"Right ascension--eastern limit ","repeat":"NR"},"n":{"desc":"Right ascension--western limit ","repeat":"NR"},"p":{"desc":"Equinox ","repeat":"NR"},"repeat":"R","s":{"desc":"G-ring latitude ","repeat":"R"},"t":{"desc":"G-ring longitude ","repeat":"R"}},"035":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"System control number ","repeat":"NR"},"desc":"SYSTEM CONTROL NUMBER","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","z":{"desc":"Canceled/invalid control number ","repeat":"R"}},"036":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Original study number ","repeat":"NR"},"b":{"desc":"Source (agency assigning number) ","repeat":"NR"},"desc":"ORIGINAL STUDY NUMBER FOR COMPUTER DATA FILES","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"037":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Stock number ","repeat":"NR"},"b":{"desc":"Source of stock number/acquisition ","repeat":"NR"},"c":{"desc":"Terms of availability ","repeat":"R"},"desc":"SOURCE OF ACQUISITION","f":{"desc":"Form of issue ","repeat":"R"},"g":{"desc":"Additional format characteristics ","repeat":"R"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"n":{"desc":"Note ","repeat":"R"},"repeat":"R"},"038":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Record content licensor ","repeat":"NR"},"desc":"RECORD CONTENT LICENSOR","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"040":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Original cataloging agency ","repeat":"NR"},"b":{"desc":"Language of cataloging ","repeat":"NR"},"c":{"desc":"Transcribing agency ","repeat":"NR"},"d":{"desc":"Modifying agency ","repeat":"R"},"desc":"CATALOGING SOURCE","e":{"desc":"Description conventions ","repeat":"NR"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"041":{"2":{"desc":"Source of code ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Language code of text/sound track or separate title ","repeat":"R"},"b":{"desc":"Language code of summary or abstract/overprinted title or subtitle ","repeat":"R"},"d":{"desc":"Language code of sung or spoken text ","repeat":"R"},"desc":"LANGUAGE CODE","e":{"desc":"Language code of librettos ","repeat":"R"},"f":{"desc":"Language code of table of contents ","repeat":"R"},"g":{"desc":"Language code of accompanying material other than librettos ","repeat":"R"},"h":{"desc":"Language code of original and/or intermediate translations of text ","repeat":"R"},"ind1":{"allowed":"01","desc":"Translation indication"},"ind2":{"allowed":" 7","desc":"Source of code"},"repeat":"R"},"042":{"a":{"desc":"Authentication code ","repeat":"R"},"desc":"AUTHENTICATION CODE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"043":{"2":{"desc":"Source of local code ","repeat":"R"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Geographic area code ","repeat":"R"},"b":{"desc":"Local GAC code ","repeat":"R"},"c":{"desc":"ISO code ","repeat":"R"},"desc":"GEOGRAPHIC AREA CODE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"044":{"2":{"desc":"Source of local subentity code ","repeat":"R"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"MARC country code ","repeat":"R"},"b":{"desc":"Local subentity code ","repeat":"R"},"c":{"desc":"ISO country code ","repeat":"R"},"desc":"COUNTRY OF PUBLISHING/PRODUCING ENTITY CODE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"045":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Time period code ","repeat":"R"},"b":{"desc":"Formatted 9999 B.C. through C.E. time period ","repeat":"R"},"c":{"desc":"Formatted pre-9999 B.C. time period ","repeat":"R"},"desc":"TIME PERIOD OF CONTENT","ind1":{"allowed":" 012","desc":"Type of time period in subfield $b or $c"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"046":{"2":{"desc":"Source of date ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Type of date code ","repeat":"NR"},"b":{"desc":"Date 1 (B.C. date) ","repeat":"NR"},"c":{"desc":"Date 1 (C.E. date) ","repeat":"NR"},"d":{"desc":"Date 2 (B.C. date) ","repeat":"NR"},"desc":"SPECIAL CODED DATES","e":{"desc":"Date 2 (C.E. date) ","repeat":"NR"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"j":{"desc":"Date resource modified ","repeat":"NR"},"k":{"desc":"Beginning or single date created ","repeat":"NR"},"l":{"desc":"Ending date created ","repeat":"NR"},"m":{"desc":"Beginning of date valid ","repeat":"NR"},"n":{"desc":"End of date valid ","repeat":"NR"},"repeat":"R"},"047":{"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Form of musical composition code ","repeat":"R"},"desc":"FORM OF MUSICAL COMPOSITION CODE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"048":{"8":{"desc":"Field link and sequence number","repeat":"R"},"a":{"desc":"Performer or ensemble ","repeat":"R"},"b":{"desc":"Soloist ","repeat":"R"},"desc":"NUMBER OF MUSICAL INSTRUMENTS OR VOICES CODE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"050":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Classification number ","repeat":"R"},"b":{"desc":"Item number ","repeat":"NR"},"desc":"LIBRARY OF CONGRESS CALL NUMBER","ind1":{"allowed":" 01","desc":"Existence in LC collection"},"ind2":{"allowed":"04","desc":"Source of call number"},"repeat":"R"},"051":{"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Classification number ","repeat":"NR"},"b":{"desc":"Item number ","repeat":"NR"},"c":{"desc":"Copy information ","repeat":"NR"},"desc":"LIBRARY OF CONGRESS COPY, ISSUE, OFFPRINT STATEMENT","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"052":{"2":{"desc":"Code source ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Geographic classification area code ","repeat":"NR"},"b":{"desc":"Geographic classification subarea code ","repeat":"R"},"d":{"desc":"Populated place name ","repeat":"R"},"desc":"GEOGRAPHIC CLASSIFICATION","ind1":{"allowed":" 17","desc":"Code source"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"055":{"2":{"desc":"Source of call/class number ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Classification number ","repeat":"NR"},"b":{"desc":"Item number ","repeat":"NR"},"desc":"CLASSIFICATION NUMBERS ASSIGNED IN CANADA","ind1":{"allowed":" 01","desc":"Existence in NLC collection"},"ind2":{"allowed":"0123456789","desc":"Type, completeness, source of class/call number"},"repeat":"R"},"060":{"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Classification number ","repeat":"R"},"b":{"desc":"Item number ","repeat":"NR"},"desc":"NATIONAL LIBRARY OF MEDICINE CALL NUMBER","ind1":{"allowed":" 01","desc":"Existence in NLM collection"},"ind2":{"allowed":"04","desc":"Source of call number"},"repeat":"R"},"061":{"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Classification number ","repeat":"R"},"b":{"desc":"Item number ","repeat":"NR"},"c":{"desc":"Copy information ","repeat":"NR"},"desc":"NATIONAL LIBRARY OF MEDICINE COPY STATEMENT","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"066":{"a":{"desc":"Primary G0 character set ","repeat":"NR"},"b":{"desc":"Primary G1 character set ","repeat":"NR"},"c":{"desc":"Alternate G0 or G1 character set ","repeat":"R"},"desc":"CHARACTER SETS PRESENT","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"070":{"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Classification number ","repeat":"R"},"b":{"desc":"Item number ","repeat":"NR"},"desc":"NATIONAL AGRICULTURAL LIBRARY CALL NUMBER","ind1":{"allowed":"01","desc":"Existence in NAL collection"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"071":{"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Classification number ","repeat":"R"},"b":{"desc":"Item number ","repeat":"NR"},"c":{"desc":"Copy information ","repeat":"NR"},"desc":"NATIONAL AGRICULTURAL LIBRARY COPY STATEMENT","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"072":{"2":{"desc":"Source ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Subject category code ","repeat":"NR"},"desc":"SUBJECT CATEGORY CODE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":"07","desc":"Source specified in subfield $2"},"repeat":"R","x":{"desc":"Subject category code subdivision ","repeat":"R"}},"074":{"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"GPO item number ","repeat":"NR"},"desc":"GPO ITEM NUMBER","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","z":{"desc":"Canceled/invalid GPO item number ","repeat":"R"}},"080":{"2":{"desc":"Edition identifier ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Universal Decimal Classification number ","repeat":"NR"},"b":{"desc":"Item number ","repeat":"NR"},"desc":"UNIVERSAL DECIMAL CLASSIFICATION NUMBER","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","x":{"desc":"Common auxiliary subdivision ","repeat":"R"}},"082":{"2":{"desc":"Edition number ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Classification number ","repeat":"R"},"b":{"desc":"Item number ","repeat":"NR"},"desc":"DEWEY DECIMAL CLASSIFICATION NUMBER","ind1":{"allowed":"01","desc":"Type of edition"},"ind2":{"allowed":" 04","desc":"Source of classification number"},"repeat":"R"},"084":{"2":{"desc":"Source of number ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Classification number ","repeat":"R"},"b":{"desc":"Item number ","repeat":"NR"},"desc":"OTHER CLASSIFICATION NUMBER","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"086":{"2":{"desc":"Number source ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Classification number ","repeat":"NR"},"desc":"GOVERNMENT DOCUMENT CLASSIFICATION NUMBER","ind1":{"allowed":" 01","desc":"Number source"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","z":{"desc":"Canceled/invalid classification number ","repeat":"R"}},"088":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Report number ","repeat":"NR"},"desc":"REPORT NUMBER","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","z":{"desc":"Canceled/invalid report number ","repeat":"R"}},"100":{"4":{"desc":"Relator code ","repeat":"R"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Personal name ","repeat":"NR"},"b":{"desc":"Numeration ","repeat":"NR"},"c":{"desc":"Titles and other words associated with a name ","repeat":"R"},"d":{"desc":"Dates associated with a name ","repeat":"NR"},"desc":"MAIN ENTRY--PERSONAL NAME","e":{"desc":"Relator term ","repeat":"R"},"f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"ind1":{"allowed":"013","desc":"Type of personal name entry element"},"ind2":{"allowed":" ","desc":"Undefined"},"j":{"desc":"Attribution qualifier ","repeat":"R"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"n":{"desc":"Number of part/section of a work ","repeat":"R"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"q":{"desc":"Fuller form of name ","repeat":"NR"},"repeat":"NR","t":{"desc":"Title of a work ","repeat":"NR"},"u":{"desc":"Affiliation ","repeat":"NR"}},"110":{"4":{"desc":"Relator code ","repeat":"R"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Corporate name or jurisdiction name as entry element ","repeat":"NR"},"b":{"desc":"Subordinate unit ","repeat":"R"},"c":{"desc":"Location of meeting ","repeat":"NR"},"d":{"desc":"Date of meeting or treaty signing ","repeat":"R"},"desc":"MAIN ENTRY--CORPORATE NAME","e":{"desc":"Relator term ","repeat":"R"},"f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"ind1":{"allowed":"012","desc":"Type of corporate name entry element"},"ind2":{"allowed":" ","desc":"Undefined"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"n":{"desc":"Number of part/section/meeting ","repeat":"R"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"repeat":"NR","t":{"desc":"Title of a work ","repeat":"NR"},"u":{"desc":"Affiliation ","repeat":"NR"}},"111":{"4":{"desc":"Relator code ","repeat":"R"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Meeting name or jurisdiction name as entry element ","repeat":"NR"},"c":{"desc":"Location of meeting ","repeat":"NR"},"d":{"desc":"Date of meeting ","repeat":"NR"},"desc":"MAIN ENTRY--MEETING NAME","e":{"desc":"Subordinate unit ","repeat":"R"},"f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"ind1":{"allowed":"012","desc":"Type of meeting name entry element"},"ind2":{"allowed":" ","desc":"Undefined"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"n":{"desc":"Number of part/section/meeting ","repeat":"R"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"q":{"desc":"Name of meeting following jurisdiction name entry element ","repeat":"NR"},"repeat":"NR","t":{"desc":"Title of a work ","repeat":"NR"},"u":{"desc":"Affiliation ","repeat":"NR"}},"130":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Uniform title ","repeat":"NR"},"d":{"desc":"Date of treaty signing ","repeat":"R"},"desc":"MAIN ENTRY--UNIFORM TITLE","f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":"0-9","desc":"Nonfiling characters"},"ind2":{"allowed":" ","desc":"Undefined"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"m":{"desc":"Medium of performance for music ","repeat":"R"},"n":{"desc":"Number of part/section of a work ","repeat":"R"},"o":{"desc":"Arranged statement for music ","repeat":"NR"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"r":{"desc":"Key for music ","repeat":"NR"},"repeat":"NR","s":{"desc":"Version ","repeat":"NR"},"t":{"desc":"Title of a work ","repeat":"NR"}},"210":{"2":{"desc":"Source ","repeat":"R"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Abbreviated title ","repeat":"NR"},"b":{"desc":"Qualifying information ","repeat":"NR"},"desc":"ABBREVIATED TITLE","ind1":{"allowed":"01","desc":"Title added entry"},"ind2":{"allowed":" 0","desc":"Type"},"repeat":"R"},"222":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Key title ","repeat":"NR"},"b":{"desc":"Qualifying information ","repeat":"NR"},"desc":"KEY TITLE","ind1":{"allowed":" ","desc":"Specifies whether variant title and/or added entry is required"},"ind2":{"allowed":"0-9","desc":"Nonfiling characters"},"repeat":"R"},"240":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Uniform title ","repeat":"NR"},"d":{"desc":"Date of treaty signing ","repeat":"R"},"desc":"UNIFORM TITLE","f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Uniform title printed or displayed"},"ind2":{"allowed":"0-9","desc":"Nonfiling characters"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"m":{"desc":"Medium of performance for music ","repeat":"R"},"n":{"desc":"Number of part/section of a work ","repeat":"R"},"o":{"desc":"Arranged statement for music ","repeat":"NR"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"r":{"desc":"Key for music ","repeat":"NR"},"repeat":"NR","s":{"desc":"Version ","repeat":"NR"}},"242":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Title ","repeat":"NR"},"b":{"desc":"Remainder of title ","repeat":"NR"},"c":{"desc":"Statement of responsibility, etc. ","repeat":"NR"},"desc":"TRANSLATION OF TITLE BY CATALOGING AGENCY","h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Title added entry"},"ind2":{"allowed":"0-9","desc":"Nonfiling characters"},"n":{"desc":"Number of part/section of a work ","repeat":"R"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"repeat":"R","y":{"desc":"Language code of translated title ","repeat":"NR"}},"243":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Uniform title ","repeat":"NR"},"d":{"desc":"Date of treaty signing ","repeat":"R"},"desc":"COLLECTIVE UNIFORM TITLE","f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Uniform title printed or displayed"},"ind2":{"allowed":"0-9","desc":"Nonfiling characters"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"m":{"desc":"Medium of performance for music ","repeat":"R"},"n":{"desc":"Number of part/section of a work ","repeat":"R"},"o":{"desc":"Arranged statement for music ","repeat":"NR"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"r":{"desc":"Key for music ","repeat":"NR"},"repeat":"NR","s":{"desc":"Version ","repeat":"NR"}},"245":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Title ","repeat":"NR"},"b":{"desc":"Remainder of title ","repeat":"NR"},"c":{"desc":"Statement of responsibility, etc. ","repeat":"NR"},"desc":"TITLE STATEMENT","f":{"desc":"Inclusive dates ","repeat":"NR"},"g":{"desc":"Bulk dates ","repeat":"NR"},"h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Title added entry"},"ind2":{"allowed":"0-9","desc":"Nonfiling characters"},"k":{"desc":"Form ","repeat":"R"},"n":{"desc":"Number of part/section of a work ","repeat":"R"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"repeat":"NR","s":{"desc":"Version ","repeat":"NR"}},"246":{"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Title proper/short title ","repeat":"NR"},"b":{"desc":"Remainder of title ","repeat":"NR"},"desc":"VARYING FORM OF TITLE","f":{"desc":"Date or sequential designation ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"h":{"desc":"Medium ","repeat":"NR"},"i":{"desc":"Display text ","repeat":"NR"},"ind1":{"allowed":"0123","desc":"Note/added entry controller"},"ind2":{"allowed":" 012345678","desc":"Type of title"},"n":{"desc":"Number of part/section of a work ","repeat":"R"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"repeat":"R"},"247":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Title ","repeat":"NR"},"b":{"desc":"Remainder of title ","repeat":"NR"},"desc":"FORMER TITLE","f":{"desc":"Date or sequential designation ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Title added entry"},"ind2":{"allowed":"01","desc":"Note controller"},"n":{"desc":"Number of part/section of a work ","repeat":"R"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"repeat":"R","x":{"desc":"International Standard Serial Number ","repeat":"NR"}},"250":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Edition statement ","repeat":"NR"},"b":{"desc":"Remainder of edition statement ","repeat":"NR"},"desc":"EDITION STATEMENT","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"254":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Musical presentation statement ","repeat":"NR"},"desc":"MUSICAL PRESENTATION STATEMENT","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"255":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Statement of scale ","repeat":"NR"},"b":{"desc":"Statement of projection ","repeat":"NR"},"c":{"desc":"Statement of coordinates ","repeat":"NR"},"d":{"desc":"Statement of zone ","repeat":"NR"},"desc":"CARTOGRAPHIC MATHEMATICAL DATA","e":{"desc":"Statement of equinox ","repeat":"NR"},"f":{"desc":"Outer G-ring coordinate pairs ","repeat":"NR"},"g":{"desc":"Exclusion G-ring coordinate pairs ","repeat":"NR"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"256":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Computer file characteristics ","repeat":"NR"},"desc":"COMPUTER FILE CHARACTERISTICS","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"257":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Country of producing entity ","repeat":"NR"},"desc":"COUNTRY OF PRODUCING ENTITY FOR ARCHIVAL FILMS","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"260":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Place of publication, distribution, etc. ","repeat":"R"},"b":{"desc":"Name of publisher, distributor, etc. ","repeat":"R"},"c":{"desc":"Date of publication, distribution, etc. ","repeat":"R"},"d":{"desc":"Plate or publisher's number for music (Pre-AACR 2) ","repeat":"NR"},"desc":"PUBLICATION, DISTRIBUTION, ETC. (IMPRINT)","e":{"desc":"Place of manufacture ","repeat":"NR"},"f":{"desc":"Manufacturer ","repeat":"NR"},"g":{"desc":"Date of manufacture ","repeat":"NR"},"ind1":{"allowed":" 23","desc":"Sequence of publishing statements"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"261":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Producing company ","repeat":"R"},"b":{"desc":"Releasing company (primary distributor) ","repeat":"R"},"d":{"desc":"Date of production, release, etc. ","repeat":"R"},"desc":"IMPRINT STATEMENT FOR FILMS (Pre-AACR 1 Revised)","e":{"desc":"Contractual producer ","repeat":"R"},"f":{"desc":"Place of production, release, etc. ","repeat":"R"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"262":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Place of production, release, etc. ","repeat":"NR"},"b":{"desc":"Publisher or trade name ","repeat":"NR"},"c":{"desc":"Date of production, release, etc. ","repeat":"NR"},"desc":"IMPRINT STATEMENT FOR SOUND RECORDINGS (Pre-AACR 2)","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"k":{"desc":"Serial identification ","repeat":"NR"},"l":{"desc":"Matrix and/or take number ","repeat":"NR"},"repeat":"NR"},"263":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Projected publication date ","repeat":"NR"},"desc":"PROJECTED PUBLICATION DATE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"270":{"4":{"desc":"Relator code ","repeat":"R"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Address ","repeat":"R"},"b":{"desc":"City ","repeat":"NR"},"c":{"desc":"State or province ","repeat":"NR"},"d":{"desc":"Country ","repeat":"NR"},"desc":"ADDRESS","e":{"desc":"Postal code ","repeat":"NR"},"f":{"desc":"Terms preceding attention name ","repeat":"NR"},"g":{"desc":"Attention name ","repeat":"NR"},"h":{"desc":"Attention position ","repeat":"NR"},"i":{"desc":"Type of address ","repeat":"NR"},"ind1":{"allowed":" 12","desc":"Level"},"ind2":{"allowed":" 07","desc":"Type of address"},"j":{"desc":"Specialized telephone number ","repeat":"R"},"k":{"desc":"Telephone number ","repeat":"R"},"l":{"desc":"Fax number ","repeat":"R"},"m":{"desc":"Electronic mail address ","repeat":"R"},"n":{"desc":"TDD or TTY number ","repeat":"R"},"p":{"desc":"Contact person ","repeat":"R"},"q":{"desc":"Title of contact person ","repeat":"R"},"r":{"desc":"Hours ","repeat":"R"},"repeat":"R","z":{"desc":"Public note ","repeat":"R"}},"300":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Extent ","repeat":"R"},"b":{"desc":"Other physical details ","repeat":"NR"},"c":{"desc":"Dimensions ","repeat":"R"},"desc":"PHYSICAL DESCRIPTION","e":{"desc":"Accompanying material ","repeat":"NR"},"f":{"desc":"Type of unit ","repeat":"R"},"g":{"desc":"Size of unit ","repeat":"R"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"306":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Playing time ","repeat":"R"},"desc":"PLAYING TIME","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"307":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Hours ","repeat":"NR"},"b":{"desc":"Additional information ","repeat":"NR"},"desc":"HOURS, ETC.","ind1":{"allowed":" 8","desc":"Display constant controller"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"310":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Current publication frequency ","repeat":"NR"},"b":{"desc":"Date of current publication frequency ","repeat":"NR"},"desc":"CURRENT PUBLICATION FREQUENCY","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"321":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Former publication frequency ","repeat":"NR"},"b":{"desc":"Dates of former publication frequency ","repeat":"NR"},"desc":"FORMER PUBLICATION FREQUENCY","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"340":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Material base and configuration ","repeat":"R"},"b":{"desc":"Dimensions ","repeat":"R"},"c":{"desc":"Materials applied to surface ","repeat":"R"},"d":{"desc":"Information recording technique ","repeat":"R"},"desc":"PHYSICAL MEDIUM","e":{"desc":"Support ","repeat":"R"},"f":{"desc":"Production rate/ratio ","repeat":"R"},"h":{"desc":"Location within medium ","repeat":"R"},"i":{"desc":"Technical specifications of medium ","repeat":"R"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"342":{"2":{"desc":"Reference method used ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Name ","repeat":"NR"},"b":{"desc":"Coordinate or distance units ","repeat":"NR"},"c":{"desc":"Latitude resolution ","repeat":"NR"},"d":{"desc":"Longitude resolution ","repeat":"NR"},"desc":"GEOSPATIAL REFERENCE DATA","e":{"desc":"Standard parallel or oblique line latitude ","repeat":"R"},"f":{"desc":"Oblique line longitude ","repeat":"R"},"g":{"desc":"Longitude of central meridian or projection center ","repeat":"NR"},"h":{"desc":"Latitude of projection origin or projection center ","repeat":"NR"},"i":{"desc":"False easting ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Geospatial reference dimension"},"ind2":{"allowed":"012345678","desc":"Geospatial reference method"},"j":{"desc":"False northing ","repeat":"NR"},"k":{"desc":"Scale factor ","repeat":"NR"},"l":{"desc":"Height of perspective point above surface ","repeat":"NR"},"m":{"desc":"Azimuthal angle ","repeat":"NR"},"o":{"desc":"Landsat number and path number ","repeat":"NR"},"p":{"desc":"Zone identifier ","repeat":"NR"},"q":{"desc":"Ellipsoid name ","repeat":"NR"},"r":{"desc":"Semi-major axis ","repeat":"NR"},"repeat":"R","s":{"desc":"Denominator of flattening ratio ","repeat":"NR"},"t":{"desc":"Vertical resolution ","repeat":"NR"},"u":{"desc":"Vertical encoding method ","repeat":"NR"},"v":{"desc":"Local planar, local, or other projection or grid description ","repeat":"NR"},"w":{"desc":"Local planar or local georeference information ","repeat":"NR"}},"343":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Planar coordinate encoding method ","repeat":"NR"},"b":{"desc":"Planar distance units ","repeat":"NR"},"c":{"desc":"Abscissa resolution ","repeat":"NR"},"d":{"desc":"Ordinate resolution ","repeat":"NR"},"desc":"PLANAR COORDINATE DATA","e":{"desc":"Distance resolution ","repeat":"NR"},"f":{"desc":"Bearing resolution ","repeat":"NR"},"g":{"desc":"Bearing units ","repeat":"NR"},"h":{"desc":"Bearing reference direction ","repeat":"NR"},"i":{"desc":"Bearing reference meridian ","repeat":"NR"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"351":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Organization ","repeat":"R"},"b":{"desc":"Arrangement ","repeat":"R"},"c":{"desc":"Hierarchical level ","repeat":"NR"},"desc":"ORGANIZATION AND ARRANGEMENT OF MATERIALS","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"352":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Direct reference method ","repeat":"NR"},"b":{"desc":"Object type ","repeat":"R"},"c":{"desc":"Object count ","repeat":"R"},"d":{"desc":"Row count ","repeat":"NR"},"desc":"DIGITAL GRAPHIC REPRESENTATION","e":{"desc":"Column count ","repeat":"NR"},"f":{"desc":"Vertical count ","repeat":"NR"},"g":{"desc":"VPF topology level ","repeat":"NR"},"i":{"desc":"Indirect reference description ","repeat":"NR"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"q":{"desc":"Format of the digital image ","repeat":"R"},"repeat":"R"},"355":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Security classification ","repeat":"NR"},"b":{"desc":"Handling instructions ","repeat":"R"},"c":{"desc":"External dissemination information ","repeat":"R"},"d":{"desc":"Downgrading or declassification event ","repeat":"NR"},"desc":"SECURITY CLASSIFICATION CONTROL","e":{"desc":"Classification system ","repeat":"NR"},"f":{"desc":"Country of origin code ","repeat":"NR"},"g":{"desc":"Downgrading date ","repeat":"NR"},"h":{"desc":"Declassification date ","repeat":"NR"},"ind1":{"allowed":"0123458","desc":"Controlled element"},"ind2":{"allowed":" ","desc":"Undefined"},"j":{"desc":"Authorization ","repeat":"R"},"repeat":"R"},"357":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Originator control term ","repeat":"NR"},"b":{"desc":"Originating agency ","repeat":"R"},"c":{"desc":"Authorized recipients of material ","repeat":"R"},"desc":"ORIGINATOR DISSEMINATION CONTROL","g":{"desc":"Other restrictions ","repeat":"R"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"362":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Dates of publication and/or sequential designation ","repeat":"NR"},"desc":"DATES OF PUBLICATION AND/OR SEQUENTIAL DESIGNATION","ind1":{"allowed":"01","desc":"Format of date"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","z":{"desc":"Source of information ","repeat":"NR"}},"365":{"2":{"desc":"Source of price type code ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Price type code ","repeat":"NR"},"b":{"desc":"Price amount ","repeat":"NR"},"c":{"desc":"Currency code ","repeat":"NR"},"d":{"desc":"Unit of pricing ","repeat":"NR"},"desc":"TRADE PRICE","e":{"desc":"Price note ","repeat":"NR"},"f":{"desc":"Price effective from ","repeat":"NR"},"g":{"desc":"Price effective until ","repeat":"NR"},"h":{"desc":"Tax rate 1 ","repeat":"NR"},"i":{"desc":"Tax rate 2 ","repeat":"NR"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"j":{"desc":"ISO country code ","repeat":"NR"},"k":{"desc":"MARC country code ","repeat":"NR"},"m":{"desc":"Identification of pricing entity ","repeat":"NR"},"repeat":"R"},"366":{"2":{"desc":"Source of availability status code ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Publishers' compressed title identification ","repeat":"NR"},"b":{"desc":"Detailed date of publication ","repeat":"NR"},"c":{"desc":"Availability status code ","repeat":"NR"},"d":{"desc":"Expected next availability date ","repeat":"NR"},"desc":"TRADE AVAILABILITY INFORMATION","e":{"desc":"Note ","repeat":"NR"},"f":{"desc":"Publishers' discount category ","repeat":"NR"},"g":{"desc":"Date made out of print ","repeat":"NR"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"j":{"desc":"ISO country code ","repeat":"NR"},"k":{"desc":"MARC country code ","repeat":"NR"},"m":{"desc":"Identification of agency ","repeat":"NR"},"repeat":"R"},"400":{"4":{"desc":"Relator code ","repeat":"R"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number  ","repeat":"R"},"a":{"desc":"Personal name ","repeat":"NR"},"b":{"desc":"Numeration ","repeat":"NR"},"c":{"desc":"Titles and other words associated with a name ","repeat":"R"},"d":{"desc":"Dates associated with a name ","repeat":"NR"},"desc":"SERIES STATEMENT/ADDED ENTRY--PERSONAL NAME ","e":{"desc":"Relator term ","repeat":"R"},"f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"ind1":{"allowed":"013","desc":"Type of personal name entry element"},"ind2":{"allowed":"01","desc":"Pronoun represents main entry"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"n":{"desc":"Number of part/section of a work ","repeat":"R"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"repeat":"R","t":{"desc":"Title of a work ","repeat":"NR"},"u":{"desc":"Affiliation ","repeat":"NR"},"v":{"desc":"Volume number/sequential designation  ","repeat":"NR"},"x":{"desc":"International Standard Serial Number  ","repeat":"NR"}},"410":{"4":{"desc":"Relator code ","repeat":"R"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Corporate name or jurisdiction name as entry element ","repeat":"NR"},"b":{"desc":"Subordinate unit ","repeat":"R"},"c":{"desc":"Location of meeting ","repeat":"NR"},"d":{"desc":"Date of meeting or treaty signing ","repeat":"R"},"desc":"SERIES STATEMENT/ADDED ENTRY--CORPORATE NAME","e":{"desc":"Relator term ","repeat":"R"},"f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"ind1":{"allowed":"012","desc":"Type of corporate name entry element"},"ind2":{"allowed":"01","desc":"Pronoun represents main entry"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"n":{"desc":"Number of part/section/meeting ","repeat":"R"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"repeat":"R","t":{"desc":"Title of a work ","repeat":"NR"},"u":{"desc":"Affiliation ","repeat":"NR"},"v":{"desc":"Volume number/sequential designation  ","repeat":"NR"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"}},"411":{"4":{"desc":"Relator code ","repeat":"R"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Meeting name or jurisdiction name as entry element ","repeat":"NR"},"c":{"desc":"Location of meeting ","repeat":"NR"},"d":{"desc":"Date of meeting ","repeat":"NR"},"desc":"SERIES STATEMENT/ADDED ENTRY--MEETING NAME","e":{"desc":"Subordinate unit ","repeat":"R"},"f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"ind1":{"allowed":"012","desc":"Type of meeting name entry element"},"ind2":{"allowed":"01","desc":"Pronoun represents main entry"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"n":{"desc":"Number of part/section/meeting ","repeat":"R"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"q":{"desc":"Name of meeting following jurisdiction name entry element ","repeat":"NR"},"repeat":"R","t":{"desc":"Title of a work ","repeat":"NR"},"u":{"desc":"Affiliation ","repeat":"NR"},"v":{"desc":"Volume number/sequential designation  ","repeat":"NR"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"}},"440":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Title ","repeat":"NR"},"desc":"SERIES STATEMENT/ADDED ENTRY--TITLE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":"0-9","desc":"Nonfiling characters"},"n":{"desc":"Number of part/section of a work ","repeat":"R"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"repeat":"R","v":{"desc":"Volume number/sequential designation  ","repeat":"NR"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"}},"490":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Series statement ","repeat":"R"},"desc":"SERIES STATEMENT","ind1":{"allowed":"01","desc":"Specifies whether series is traced"},"ind2":{"allowed":" ","desc":"Undefined"},"l":{"desc":"Library of Congress call number ","repeat":"NR"},"repeat":"R","v":{"desc":"Volume number/sequential designation  ","repeat":"R"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"}},"500":{"3":{"desc":"Materials specified ","repeat":"NR"},"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"General note ","repeat":"NR"},"desc":"GENERAL NOTE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"501":{"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"With note ","repeat":"NR"},"desc":"WITH NOTE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"502":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Dissertation note ","repeat":"NR"},"desc":"DISSERTATION NOTE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"504":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Bibliography, etc. note ","repeat":"NR"},"b":{"desc":"Number of references ","repeat":"NR"},"desc":"BIBLIOGRAPHY, ETC. NOTE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"505":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Formatted contents note ","repeat":"NR"},"desc":"FORMATTED CONTENTS NOTE","g":{"desc":"Miscellaneous information ","repeat":"R"},"ind1":{"allowed":"0128","desc":"Display constant controller"},"ind2":{"allowed":" 0","desc":"Level of content designation"},"r":{"desc":"Statement of responsibility ","repeat":"R"},"repeat":"R","t":{"desc":"Title ","repeat":"R"},"u":{"desc":"Uniform Resource Identifier ","repeat":"R"}},"506":{"3":{"desc":"Materials specified ","repeat":"NR"},"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Terms governing access ","repeat":"NR"},"b":{"desc":"Jurisdiction ","repeat":"R"},"c":{"desc":"Physical access provisions ","repeat":"R"},"d":{"desc":"Authorized users ","repeat":"R"},"desc":"RESTRICTIONS ON ACCESS NOTE","e":{"desc":"Authorization ","repeat":"R"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","u":{"desc":"Uniform Resource Identifier ","repeat":"R"}},"507":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Representative fraction of scale note ","repeat":"NR"},"b":{"desc":"Remainder of scale note ","repeat":"NR"},"desc":"SCALE NOTE FOR GRAPHIC MATERIAL","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"NR"},"508":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Creation/production credits note ","repeat":"NR"},"desc":"CREATION/PRODUCTION CREDITS NOTE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"510":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Name of source ","repeat":"NR"},"b":{"desc":"Coverage of source ","repeat":"NR"},"c":{"desc":"Location within source ","repeat":"NR"},"desc":"CITATION/REFERENCES NOTE","ind1":{"allowed":"01234","desc":"Coverage/location in source"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","x":{"desc":"International Standard Serial Number ","repeat":"NR"}},"511":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Participant or performer note ","repeat":"NR"},"desc":"PARTICIPANT OR PERFORMER NOTE","ind1":{"allowed":"01","desc":"Display constant controller"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"513":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Type of report ","repeat":"NR"},"b":{"desc":"Period covered ","repeat":"NR"},"desc":"TYPE OF REPORT AND PERIOD COVERED NOTE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"514":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Attribute accuracy report ","repeat":"NR"},"b":{"desc":"Attribute accuracy value ","repeat":"R"},"c":{"desc":"Attribute accuracy explanation ","repeat":"R"},"d":{"desc":"Logical consistency report ","repeat":"NR"},"desc":"DATA QUALITY NOTE","e":{"desc":"Completeness report ","repeat":"NR"},"f":{"desc":"Horizontal position accuracy report ","repeat":"NR"},"g":{"desc":"Horizontal position accuracy value ","repeat":"R"},"h":{"desc":"Horizontal position accuracy explanation ","repeat":"R"},"i":{"desc":"Vertical positional accuracy report ","repeat":"NR"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"j":{"desc":"Vertical positional accuracy value ","repeat":"R"},"k":{"desc":"Vertical positional accuracy explanation ","repeat":"R"},"m":{"desc":"Cloud cover ","repeat":"NR"},"repeat":"NR","u":{"desc":"Uniform Resource Identifier ","repeat":"R"},"z":{"desc":"Display note ","repeat":"R"}},"515":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Numbering peculiarities note ","repeat":"NR"},"desc":"NUMBERING PECULIARITIES NOTE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"516":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Type of computer file or data note ","repeat":"NR"},"desc":"TYPE OF COMPUTER FILE OR DATA NOTE","ind1":{"allowed":" 8","desc":"Display constant controller"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"518":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Date/time and place of an event note ","repeat":"NR"},"desc":"DATE/TIME AND PLACE OF AN EVENT NOTE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"520":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Summary, etc. note ","repeat":"NR"},"b":{"desc":"Expansion of summary note ","repeat":"NR"},"desc":"SUMMARY, ETC.","ind1":{"allowed":" 01238","desc":"Display constant controller"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","u":{"desc":"Uniform Resource Identifier ","repeat":"R"}},"521":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Target audience note ","repeat":"R"},"b":{"desc":"Source ","repeat":"NR"},"desc":"TARGET AUDIENCE NOTE","ind1":{"allowed":" 012348","desc":"Display constant controller"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"522":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Geographic coverage note ","repeat":"NR"},"desc":"GEOGRAPHIC COVERAGE NOTE","ind1":{"allowed":" 8","desc":"Display constant controller"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"524":{"2":{"desc":"Source of schema used ","repeat":"NR"},"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Preferred citation of described materials note ","repeat":"NR"},"desc":"PREFERRED CITATION OF DESCRIBED MATERIALS NOTE","ind1":{"allowed":" 8","desc":"Display constant controller"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"525":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Supplement note ","repeat":"NR"},"desc":"SUPPLEMENT NOTE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"526":{"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Program name ","repeat":"NR"},"b":{"desc":"Interest level ","repeat":"NR"},"c":{"desc":"Reading level ","repeat":"NR"},"d":{"desc":"Title point value ","repeat":"NR"},"desc":"STUDY PROGRAM INFORMATION NOTE","i":{"desc":"Display text ","repeat":"NR"},"ind1":{"allowed":"08","desc":"Display constant controller"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","x":{"desc":"Nonpublic note ","repeat":"R"},"z":{"desc":"Public note ","repeat":"R"}},"530":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Additional physical form available note ","repeat":"NR"},"b":{"desc":"Availability source ","repeat":"NR"},"c":{"desc":"Availability conditions ","repeat":"NR"},"d":{"desc":"Order number ","repeat":"NR"},"desc":"ADDITIONAL PHYSICAL FORM AVAILABLE NOTE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","u":{"desc":"Uniform Resource Identifier ","repeat":"R"}},"533":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"7":{"desc":"Fixed-length data elements of reproduction ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Type of reproduction ","repeat":"NR"},"b":{"desc":"Place of reproduction ","repeat":"R"},"c":{"desc":"Agency responsible for reproduction ","repeat":"R"},"d":{"desc":"Date of reproduction ","repeat":"NR"},"desc":"REPRODUCTION NOTE","e":{"desc":"Physical description of reproduction ","repeat":"NR"},"f":{"desc":"Series statement of reproduction ","repeat":"R"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"m":{"desc":"Dates and/or sequential designation of issues reproduced ","repeat":"R"},"n":{"desc":"Note about reproduction ","repeat":"R"},"repeat":"R"},"534":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Main entry of original ","repeat":"NR"},"b":{"desc":"Edition statement of original ","repeat":"NR"},"c":{"desc":"Publication, distribution, etc. of original ","repeat":"NR"},"desc":"ORIGINAL VERSION NOTE","e":{"desc":"Physical description, etc. of original ","repeat":"NR"},"f":{"desc":"Series statement of original ","repeat":"R"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"k":{"desc":"Key title of original ","repeat":"R"},"l":{"desc":"Location of original ","repeat":"NR"},"m":{"desc":"Material specific details ","repeat":"NR"},"n":{"desc":"Note about original ","repeat":"R"},"p":{"desc":"Introductory phrase ","repeat":"NR"},"repeat":"R","t":{"desc":"Title statement of original ","repeat":"NR"},"x":{"desc":"International Standard Serial Number ","repeat":"R"},"z":{"desc":"International Standard Book Number ","repeat":"R"}},"535":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Custodian ","repeat":"NR"},"b":{"desc":"Postal address ","repeat":"R"},"c":{"desc":"Country ","repeat":"R"},"d":{"desc":"Telecommunications address ","repeat":"R"},"desc":"LOCATION OF ORIGINALS/DUPLICATES NOTE","g":{"desc":"Repository location code ","repeat":"NR"},"ind1":{"allowed":"12","desc":"Additional information about custodian"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"536":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Text of note ","repeat":"NR"},"b":{"desc":"Contract number ","repeat":"R"},"c":{"desc":"Grant number ","repeat":"R"},"d":{"desc":"Undifferentiated number ","repeat":"R"},"desc":"FUNDING INFORMATION NOTE","e":{"desc":"Program element number ","repeat":"R"},"f":{"desc":"Project number ","repeat":"R"},"g":{"desc":"Task number ","repeat":"R"},"h":{"desc":"Work unit number ","repeat":"R"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"538":{"3":{"desc":"Materials specified  ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"System details note ","repeat":"NR"},"desc":"SYSTEM DETAILS NOTE","i":{"desc":"Display text ","repeat":"NR"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","u":{"desc":"Uniform Resource Identifier ","repeat":"R"}},"540":{"3":{"desc":"Materials specified ","repeat":"NR"},"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Terms governing use and reproduction ","repeat":"NR"},"b":{"desc":"Jurisdiction ","repeat":"NR"},"c":{"desc":"Authorization ","repeat":"NR"},"d":{"desc":"Authorized users ","repeat":"NR"},"desc":"TERMS GOVERNING USE AND REPRODUCTION NOTE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","u":{"desc":"Uniform Resource Identifier ","repeat":"R"}},"541":{"3":{"desc":"Materials specified ","repeat":"NR"},"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Source of acquisition ","repeat":"NR"},"b":{"desc":"Address ","repeat":"NR"},"c":{"desc":"Method of acquisition ","repeat":"NR"},"d":{"desc":"Date of acquisition ","repeat":"NR"},"desc":"IMMEDIATE SOURCE OF ACQUISITION NOTE","e":{"desc":"Accession number ","repeat":"NR"},"f":{"desc":"Owner ","repeat":"NR"},"h":{"desc":"Purchase price ","repeat":"NR"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"n":{"desc":"Extent ","repeat":"R"},"o":{"desc":"Type of unit ","repeat":"R"},"repeat":"R"},"544":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Custodian ","repeat":"R"},"b":{"desc":"Address ","repeat":"R"},"c":{"desc":"Country ","repeat":"R"},"d":{"desc":"Title ","repeat":"R"},"desc":"LOCATION OF OTHER ARCHIVAL MATERIALS NOTE","e":{"desc":"Provenance ","repeat":"R"},"ind1":{"allowed":" 01","desc":"Relationship"},"ind2":{"allowed":" ","desc":"Undefined"},"n":{"desc":"Note ","repeat":"R"},"repeat":"R"},"545":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Biographical or historical note ","repeat":"NR"},"b":{"desc":"Expansion ","repeat":"NR"},"desc":"BIOGRAPHICAL OR HISTORICAL DATA","ind1":{"allowed":" 01","desc":"Type of data"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","u":{"desc":"Uniform Resource Identifier ","repeat":"R"}},"546":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Language note ","repeat":"NR"},"b":{"desc":"Information code or alphabet ","repeat":"R"},"desc":"LANGUAGE NOTE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"547":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Former title complexity note ","repeat":"NR"},"desc":"FORMER TITLE COMPLEXITY NOTE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"550":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Issuing body note ","repeat":"NR"},"desc":"ISSUING BODY NOTE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"552":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Entity type label ","repeat":"NR"},"b":{"desc":"Entity type definition and source ","repeat":"NR"},"c":{"desc":"Attribute label ","repeat":"NR"},"d":{"desc":"Attribute definition and source ","repeat":"NR"},"desc":"ENTITY AND ATTRIBUTE INFORMATION NOTE","e":{"desc":"Enumerated domain value ","repeat":"R"},"f":{"desc":"Enumerated domain value definition and source ","repeat":"R"},"g":{"desc":"Range domain minimum and maximum ","repeat":"NR"},"h":{"desc":"Codeset name and source ","repeat":"NR"},"i":{"desc":"Unrepresentable domain ","repeat":"NR"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"j":{"desc":"Attribute units of measurement and resolution ","repeat":"NR"},"k":{"desc":"Beginning date and ending date of attribute values ","repeat":"NR"},"l":{"desc":"Attribute value accuracy ","repeat":"NR"},"m":{"desc":"Attribute value accuracy explanation ","repeat":"NR"},"n":{"desc":"Attribute measurement frequency ","repeat":"NR"},"o":{"desc":"Entity and attribute overview ","repeat":"R"},"p":{"desc":"Entity and attribute detail citation ","repeat":"R"},"repeat":"R","u":{"desc":"Uniform Resource Identifier ","repeat":"R"},"z":{"desc":"Display note ","repeat":"R"}},"555":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Cumulative index/finding aids note ","repeat":"NR"},"b":{"desc":"Availability source ","repeat":"R"},"c":{"desc":"Degree of control ","repeat":"NR"},"d":{"desc":"Bibliographic reference ","repeat":"NR"},"desc":"CUMULATIVE INDEX/FINDING AIDS NOTE","ind1":{"allowed":" 08","desc":"Display constant controller"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","u":{"desc":"Uniform Resource Identifier ","repeat":"R"}},"556":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Information about documentation note ","repeat":"NR"},"desc":"INFORMATION ABOUT DOCUMENTATION NOTE","ind1":{"allowed":" 8","desc":"Display constant controller"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","z":{"desc":"International Standard Book Number ","repeat":"R"}},"561":{"3":{"desc":"Materials specified ","repeat":"NR"},"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"History ","repeat":"NR"},"desc":"OWNERSHIP AND CUSTODIAL HISTORY","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"562":{"3":{"desc":"Materials specified ","repeat":"NR"},"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Identifying markings ","repeat":"R"},"b":{"desc":"Copy identification ","repeat":"R"},"c":{"desc":"Version identification ","repeat":"R"},"d":{"desc":"Presentation format ","repeat":"R"},"desc":"COPY AND VERSION IDENTIFICATION NOTE","e":{"desc":"Number of copies ","repeat":"R"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"563":{"3":{"desc":"Materials specified ","repeat":"NR"},"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Binding note ","repeat":"NR"},"desc":"BINDING INFORMATION","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","u":{"desc":"Uniform Resource Identifier ","repeat":"R"}},"565":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Number of cases/variables ","repeat":"NR"},"b":{"desc":"Name of variable ","repeat":"R"},"c":{"desc":"Unit of analysis ","repeat":"R"},"d":{"desc":"Universe of data ","repeat":"R"},"desc":"CASE FILE CHARACTERISTICS NOTE","e":{"desc":"Filing scheme or code ","repeat":"R"},"ind1":{"allowed":" 08","desc":"Display constant controller"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"567":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Methodology note ","repeat":"NR"},"desc":"METHODOLOGY NOTE","ind1":{"allowed":" 8","desc":"Display constant controller"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"580":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Linking entry complexity note ","repeat":"NR"},"desc":"LINKING ENTRY COMPLEXITY NOTE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"581":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Publications about described materials note","repeat":"NR"},"desc":"PUBLICATIONS ABOUT DESCRIBED MATERIALS NOTE","ind1":{"allowed":" 8","desc":"Display constant controller"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","z":{"desc":"International Standard Book Number ","repeat":"R"}},"583":{"2":{"desc":"Source of term ","repeat":"NR"},"3":{"desc":"Materials specified ","repeat":"NR"},"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Action ","repeat":"NR"},"b":{"desc":"Action identification ","repeat":"R"},"c":{"desc":"Time/date of action ","repeat":"R"},"d":{"desc":"Action interval ","repeat":"R"},"desc":"ACTION NOTE","e":{"desc":"Contingency for action ","repeat":"R"},"f":{"desc":"Authorization ","repeat":"R"},"h":{"desc":"Jurisdiction ","repeat":"R"},"i":{"desc":"Method of action ","repeat":"R"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"j":{"desc":"Site of action ","repeat":"R"},"k":{"desc":"Action agent ","repeat":"R"},"l":{"desc":"Status ","repeat":"R"},"n":{"desc":"Extent ","repeat":"R"},"o":{"desc":"Type of unit ","repeat":"R"},"repeat":"R","u":{"desc":"Uniform Resource Identifier ","repeat":"R"},"x":{"desc":"Nonpublic note ","repeat":"R"},"z":{"desc":"Public note ","repeat":"R"}},"584":{"3":{"desc":"Materials specified ","repeat":"NR"},"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Accumulation ","repeat":"R"},"b":{"desc":"Frequency of use ","repeat":"R"},"desc":"ACCUMULATION AND FREQUENCY OF USE NOTE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"585":{"3":{"desc":"Materials specified ","repeat":"NR"},"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Exhibitions note ","repeat":"NR"},"desc":"EXHIBITIONS NOTE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"586":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Awards note ","repeat":"NR"},"desc":"AWARDS NOTE","ind1":{"allowed":" 8","desc":"Display constant controller"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"600":{"2":{"desc":"Source of heading or term ","repeat":"NR"},"3":{"desc":"Materials specified ","repeat":"NR"},"4":{"desc":"Relator code ","repeat":"R"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Personal name ","repeat":"NR"},"b":{"desc":"Numeration ","repeat":"NR"},"c":{"desc":"Titles and other words associated with a name","repeat":"R"},"d":{"desc":"Dates associated with a name ","repeat":"NR"},"desc":"SUBJECT ADDED ENTRY--PERSONAL NAME","e":{"desc":"Relator term ","repeat":"R"},"f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":"013","desc":"Type of personal name entry element"},"ind2":{"allowed":"01234567","desc":"Thesaurus"},"j":{"desc":"Attribution qualifier ","repeat":"R"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"m":{"desc":"Medium of performance for music ","repeat":"R"},"n":{"desc":"Number of part/section of a work ","repeat":"R"},"o":{"desc":"Arranged statement for music ","repeat":"NR"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"q":{"desc":"Fuller form of name ","repeat":"NR"},"r":{"desc":"Key for music ","repeat":"NR"},"repeat":"R","s":{"desc":"Version ","repeat":"NR"},"t":{"desc":"Title of a work ","repeat":"NR"},"u":{"desc":"Affiliation ","repeat":"NR"},"v":{"desc":"Form subdivision ","repeat":"R"},"x":{"desc":"General subdivision ","repeat":"R"},"y":{"desc":"Chronological subdivision ","repeat":"R"},"z":{"desc":"Geographic subdivision ","repeat":"R"}},"610":{"2":{"desc":"Source of heading or term ","repeat":"NR"},"3":{"desc":"Materials specified ","repeat":"NR"},"4":{"desc":"Relator code ","repeat":"R"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Corporate name or jurisdiction name as entry element ","repeat":"NR"},"b":{"desc":"Subordinate unit ","repeat":"R"},"c":{"desc":"Location of meeting ","repeat":"NR"},"d":{"desc":"Date of meeting or treaty signing ","repeat":"R"},"desc":"SUBJECT ADDED ENTRY--CORPORATE NAME","e":{"desc":"Relator term ","repeat":"R"},"f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":"012","desc":"Type of corporate name entry element"},"ind2":{"allowed":"01234567","desc":"Thesaurus"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"m":{"desc":"Medium of performance for music ","repeat":"R"},"n":{"desc":"Number of part/section/meeting ","repeat":"R"},"o":{"desc":"Arranged statement for music ","repeat":"NR"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"r":{"desc":"Key for music ","repeat":"NR"},"repeat":"R","s":{"desc":"Version ","repeat":"NR"},"t":{"desc":"Title of a work ","repeat":"NR"},"u":{"desc":"Affiliation ","repeat":"NR"},"v":{"desc":"Form subdivision ","repeat":"R"},"x":{"desc":"General subdivision ","repeat":"R"},"y":{"desc":"Chronological subdivision ","repeat":"R"},"z":{"desc":"Geographic subdivision ","repeat":"R"}},"611":{"2":{"desc":"Source of heading or term ","repeat":"NR"},"3":{"desc":"Materials specified ","repeat":"NR"},"4":{"desc":"Relator code ","repeat":"R"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Meeting name or jurisdiction name as entry element ","repeat":"NR"},"c":{"desc":"Location of meeting ","repeat":"NR"},"d":{"desc":"Date of meeting ","repeat":"NR"},"desc":"SUBJECT ADDED ENTRY--MEETING NAME","e":{"desc":"Subordinate unit ","repeat":"R"},"f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":"012","desc":"Type of meeting name entry element"},"ind2":{"allowed":"01234567","desc":"Thesaurus"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"n":{"desc":"Number of part/section/meeting ","repeat":"R"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"q":{"desc":"Name of meeting following jurisdiction name entry element ","repeat":"NR"},"repeat":"R","s":{"desc":"Version ","repeat":"NR"},"t":{"desc":"Title of a work ","repeat":"NR"},"u":{"desc":"Affiliation ","repeat":"NR"},"v":{"desc":"Form subdivision ","repeat":"R"},"x":{"desc":"General subdivision ","repeat":"R"},"y":{"desc":"Chronological subdivision ","repeat":"R"},"z":{"desc":"Geographic subdivision ","repeat":"R"}},"630":{"2":{"desc":"Source of heading or term ","repeat":"NR"},"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Uniform title ","repeat":"NR"},"d":{"desc":"Date of treaty signing ","repeat":"R"},"desc":"SUBJECT ADDED ENTRY--UNIFORM TITLE","f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":"0-9","desc":"Nonfiling characters"},"ind2":{"allowed":"01234567","desc":"Thesaurus"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"m":{"desc":"Medium of performance for music ","repeat":"R"},"n":{"desc":"Number of part/section of a work ","repeat":"R"},"o":{"desc":"Arranged statement for music ","repeat":"NR"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"r":{"desc":"Key for music ","repeat":"NR"},"repeat":"R","s":{"desc":"Version ","repeat":"NR"},"t":{"desc":"Title of a work ","repeat":"NR"},"v":{"desc":"Form subdivision ","repeat":"R"},"x":{"desc":"General subdivision ","repeat":"R"},"y":{"desc":"Chronological subdivision ","repeat":"R"},"z":{"desc":"Geographic subdivision ","repeat":"R"}},"648":{"2":{"desc":"Source of heading or term ","repeat":"NR"},"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Chronological term ","repeat":"NR"},"desc":"SUBJECT ADDED ENTRY--CHRONOLOGICAL TERM","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":"01234567","desc":"Thesaurus"},"repeat":"R","v":{"desc":"Form subdivision ","repeat":"R"},"x":{"desc":"General subdivision ","repeat":"R"},"y":{"desc":"Chronological subdivision ","repeat":"R"},"z":{"desc":"Geographic subdivision ","repeat":"R"}},"650":{"2":{"desc":"Source of heading or term ","repeat":"NR"},"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Topical term or geographic name as entry element ","repeat":"NR"},"b":{"desc":"Topical term following geographic name as entry element ","repeat":"NR"},"c":{"desc":"Location of event ","repeat":"NR"},"d":{"desc":"Active dates ","repeat":"NR"},"desc":"SUBJECT ADDED ENTRY--TOPICAL TERM","e":{"desc":"Relator term ","repeat":"NR"},"ind1":{"allowed":" 012","desc":"Level of subject"},"ind2":{"allowed":"01234567","desc":"Thesaurus"},"repeat":"R","v":{"desc":"Form subdivision ","repeat":"R"},"x":{"desc":"General subdivision ","repeat":"R"},"y":{"desc":"Chronological subdivision ","repeat":"R"},"z":{"desc":"Geographic subdivision ","repeat":"R"}},"651":{"2":{"desc":"Source of heading or term ","repeat":"NR"},"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Geographic name ","repeat":"NR"},"desc":"SUBJECT ADDED ENTRY--GEOGRAPHIC NAME","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":"01234567","desc":"Thesaurus"},"repeat":"R","v":{"desc":"Form subdivision ","repeat":"R"},"x":{"desc":"General subdivision ","repeat":"R"},"y":{"desc":"Chronological subdivision ","repeat":"R"},"z":{"desc":"Geographic subdivision ","repeat":"R"}},"653":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Uncontrolled term ","repeat":"R"},"desc":"INDEX TERM--UNCONTROLLED","ind1":{"allowed":" 012","desc":"Level of index term"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"654":{"2":{"desc":"Source of heading or term ","repeat":"NR"},"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Focus term ","repeat":"R"},"b":{"desc":"Non-focus term ","repeat":"R"},"c":{"desc":"Facet/hierarchy designation ","repeat":"R"},"desc":"SUBJECT ADDED ENTRY--FACETED TOPICAL TERMS","ind1":{"allowed":" 012","desc":"Level of subject"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","v":{"desc":"Form subdivision ","repeat":"R"},"y":{"desc":"Chronological subdivision ","repeat":"R"},"z":{"desc":"Geographic subdivision ","repeat":"R"}},"655":{"2":{"desc":"Source of term ","repeat":"NR"},"3":{"desc":"Materials specified ","repeat":"NR"},"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Genre/form data or focus term ","repeat":"NR"},"b":{"desc":"Non-focus term ","repeat":"R"},"c":{"desc":"Facet/hierarchy designation ","repeat":"R"},"desc":"INDEX TERM--GENRE/FORM","ind1":{"allowed":" 0","desc":"Type of heading"},"ind2":{"allowed":"01234567","desc":"Thesaurus"},"repeat":"R","v":{"desc":"Form subdivision ","repeat":"R"},"x":{"desc":"General subdivision ","repeat":"R"},"y":{"desc":"Chronological subdivision ","repeat":"R"},"z":{"desc":"Geographic subdivision ","repeat":"R"}},"656":{"2":{"desc":"Source of term ","repeat":"NR"},"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Occupation ","repeat":"NR"},"desc":"INDEX TERM--OCCUPATION","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":"7","desc":"Source of term"},"k":{"desc":"Form ","repeat":"NR"},"repeat":"R","v":{"desc":"Form subdivision ","repeat":"R"},"x":{"desc":"General subdivision ","repeat":"R"},"y":{"desc":"Chronological subdivision ","repeat":"R"},"z":{"desc":"Geographic subdivision ","repeat":"R"}},"657":{"2":{"desc":"Source of term ","repeat":"NR"},"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Function ","repeat":"NR"},"desc":"INDEX TERM--FUNCTION","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":"7","desc":"Source of term"},"repeat":"R","v":{"desc":"Form subdivision ","repeat":"R"},"x":{"desc":"General subdivision ","repeat":"R"},"y":{"desc":"Chronological subdivision ","repeat":"R"},"z":{"desc":"Geographic subdivision ","repeat":"R"}},"658":{"2":{"desc":"Source of term or code ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Main curriculum objective ","repeat":"NR"},"b":{"desc":"Subordinate curriculum objective ","repeat":"R"},"c":{"desc":"Curriculum code ","repeat":"NR"},"d":{"desc":"Correlation factor ","repeat":"NR"},"desc":"INDEX TERM--CURRICULUM OBJECTIVE","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"700":{"3":{"desc":"Materials specified ","repeat":"NR"},"4":{"desc":"Relator code ","repeat":"R"},"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Personal name ","repeat":"NR"},"b":{"desc":"Numeration ","repeat":"NR"},"c":{"desc":"Titles and other words associated with a name ","repeat":"R"},"d":{"desc":"Dates associated with a name ","repeat":"NR"},"desc":"ADDED ENTRY--PERSONAL NAME","e":{"desc":"Relator term ","repeat":"R"},"f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":"013","desc":"Type of personal name entry element"},"ind2":{"allowed":" 2","desc":"Type of added entry"},"j":{"desc":"Attribution qualifier ","repeat":"R"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"m":{"desc":"Medium of performance for music ","repeat":"R"},"n":{"desc":"Number of part/section of a work ","repeat":"R"},"o":{"desc":"Arranged statement for music ","repeat":"NR"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"q":{"desc":"Fuller form of name ","repeat":"NR"},"r":{"desc":"Key for music ","repeat":"NR"},"repeat":"R","s":{"desc":"Version ","repeat":"NR"},"t":{"desc":"Title of a work ","repeat":"NR"},"u":{"desc":"Affiliation ","repeat":"NR"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"}},"710":{"3":{"desc":"Materials specified ","repeat":"NR"},"4":{"desc":"Relator code ","repeat":"R"},"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Corporate name or jurisdiction name as entry element ","repeat":"NR"},"b":{"desc":"Subordinate unit ","repeat":"R"},"c":{"desc":"Location of meeting ","repeat":"NR"},"d":{"desc":"Date of meeting or treaty signing ","repeat":"R"},"desc":"ADDED ENTRY--CORPORATE NAME","e":{"desc":"Relator term ","repeat":"R"},"f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":"012","desc":"Type of corporate name entry element"},"ind2":{"allowed":" 2","desc":"Type of added entry"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"m":{"desc":"Medium of performance for music ","repeat":"R"},"n":{"desc":"Number of part/section/meeting ","repeat":"R"},"o":{"desc":"Arranged statement for music ","repeat":"NR"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"r":{"desc":"Key for music ","repeat":"NR"},"repeat":"R","s":{"desc":"Version ","repeat":"NR"},"t":{"desc":"Title of a work ","repeat":"NR"},"u":{"desc":"Affiliation ","repeat":"NR"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"}},"711":{"3":{"desc":"Materials specified ","repeat":"NR"},"4":{"desc":"Relator code ","repeat":"R"},"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Meeting name or jurisdiction name as entry element ","repeat":"NR"},"c":{"desc":"Location of meeting ","repeat":"NR"},"d":{"desc":"Date of meeting ","repeat":"NR"},"desc":"ADDED ENTRY--MEETING NAME","e":{"desc":"Subordinate unit ","repeat":"R"},"f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":"012","desc":"Type of meeting name entry element"},"ind2":{"allowed":" 2","desc":"Type of added entry"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"n":{"desc":"Number of part/section/meeting ","repeat":"R"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"q":{"desc":"Name of meeting following jurisdiction name entry element ","repeat":"NR"},"repeat":"R","s":{"desc":"Version ","repeat":"NR"},"t":{"desc":"Title of a work ","repeat":"NR"},"u":{"desc":"Affiliation ","repeat":"NR"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"}},"720":{"4":{"desc":"Relator code ","repeat":"R"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Name ","repeat":"NR"},"desc":"ADDED ENTRY--UNCONTROLLED NAME","e":{"desc":"Relator term ","repeat":"R"},"ind1":{"allowed":" 12","desc":"Type of name"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"730":{"3":{"desc":"Materials specified ","repeat":"NR"},"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Uniform title ","repeat":"NR"},"d":{"desc":"Date of treaty signing ","repeat":"R"},"desc":"ADDED ENTRY--UNIFORM TITLE","f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":"0-9","desc":"Nonfiling characters"},"ind2":{"allowed":" 2","desc":"Type of added entry"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"m":{"desc":"Medium of performance for music ","repeat":"R"},"n":{"desc":"Number of part/section of a work ","repeat":"R"},"o":{"desc":"Arranged statement for music ","repeat":"NR"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"r":{"desc":"Key for music ","repeat":"NR"},"repeat":"R","s":{"desc":"Version ","repeat":"NR"},"t":{"desc":"Title of a work ","repeat":"NR"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"}},"740":{"5":{"desc":"Institution to which field applies ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Uncontrolled related/analytical title ","repeat":"NR"},"desc":"ADDED ENTRY--UNCONTROLLED RELATED/ANALYTICAL TITLE","h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":"0-9","desc":"Nonfiling characters"},"ind2":{"allowed":" 2","desc":"Type of added entry"},"n":{"desc":"Number of part/section of a work ","repeat":"R"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"repeat":"R"},"752":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Country ","repeat":"NR"},"b":{"desc":"State, province, territory ","repeat":"NR"},"c":{"desc":"County, region, islands area ","repeat":"NR"},"d":{"desc":"City ","repeat":"NR"},"desc":"ADDED ENTRY--HIERARCHICAL PLACE NAME","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"753":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Make and model of machine ","repeat":"NR"},"b":{"desc":"Programming language ","repeat":"NR"},"c":{"desc":"Operating system ","repeat":"NR"},"desc":"SYSTEM DETAILS ACCESS TO COMPUTER FILES","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"754":{"2":{"desc":"Source of taxonomic identification ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Taxonomic name ","repeat":"R"},"c":{"desc":"Taxonomic category ","repeat":"R"},"d":{"desc":"Common or alternative name ","repeat":"R"},"desc":"ADDED ENTRY--TAXONOMIC IDENTIFICATION","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R","x":{"desc":"Non-public note ","repeat":"R"},"z":{"desc":"Public note ","repeat":"R"}},"760":{"6":{"desc":"Linkage ","repeat":"NR"},"7":{"desc":"Control subfield ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Main entry heading ","repeat":"NR"},"b":{"desc":"Edition ","repeat":"NR"},"c":{"desc":"Qualifying information ","repeat":"NR"},"d":{"desc":"Place, publisher, and date of publication ","repeat":"NR"},"desc":"MAIN SERIES ENTRY","g":{"desc":"Relationship information ","repeat":"R"},"h":{"desc":"Physical description ","repeat":"NR"},"i":{"desc":"Display text ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Note controller"},"ind2":{"allowed":" 8","desc":"Display constant controller"},"m":{"desc":"Material-specific details ","repeat":"NR"},"n":{"desc":"Note ","repeat":"R"},"o":{"desc":"Other item identifier ","repeat":"R"},"repeat":"R","s":{"desc":"Uniform title ","repeat":"NR"},"t":{"desc":"Title ","repeat":"NR"},"w":{"desc":"Record control number ","repeat":"R"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"},"y":{"desc":"CODEN designation ","repeat":"NR"}},"762":{"6":{"desc":"Linkage ","repeat":"NR"},"7":{"desc":"Control subfield ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Main entry heading ","repeat":"NR"},"b":{"desc":"Edition ","repeat":"NR"},"c":{"desc":"Qualifying information ","repeat":"NR"},"d":{"desc":"Place, publisher, and date of publication ","repeat":"NR"},"desc":"SUBSERIES ENTRY","g":{"desc":"Relationship information ","repeat":"R"},"h":{"desc":"Physical description ","repeat":"NR"},"i":{"desc":"Display text ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Note controller"},"ind2":{"allowed":" 8","desc":"Display constant controller"},"m":{"desc":"Material-specific details ","repeat":"NR"},"n":{"desc":"Note ","repeat":"R"},"o":{"desc":"Other item identifier ","repeat":"R"},"repeat":"R","s":{"desc":"Uniform title ","repeat":"NR"},"t":{"desc":"Title ","repeat":"NR"},"w":{"desc":"Record control number ","repeat":"R"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"},"y":{"desc":"CODEN designation ","repeat":"NR"}},"765":{"6":{"desc":"Linkage ","repeat":"NR"},"7":{"desc":"Control subfield ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Main entry heading ","repeat":"NR"},"b":{"desc":"Edition ","repeat":"NR"},"c":{"desc":"Qualifying information ","repeat":"NR"},"d":{"desc":"Place, publisher, and date of publication ","repeat":"NR"},"desc":"ORIGINAL LANGUAGE ENTRY","g":{"desc":"Relationship information ","repeat":"R"},"h":{"desc":"Physical description ","repeat":"NR"},"i":{"desc":"Display text ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Note controller"},"ind2":{"allowed":" 8","desc":"Display constant controller"},"k":{"desc":"Series data for related item ","repeat":"R"},"m":{"desc":"Material-specific details ","repeat":"NR"},"n":{"desc":"Note ","repeat":"R"},"o":{"desc":"Other item identifier ","repeat":"R"},"r":{"desc":"Report number ","repeat":"R"},"repeat":"R","s":{"desc":"Uniform title ","repeat":"NR"},"t":{"desc":"Title ","repeat":"NR"},"u":{"desc":"Standard Technical Report Number ","repeat":"NR"},"w":{"desc":"Record control number ","repeat":"R"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"},"y":{"desc":"CODEN designation ","repeat":"NR"},"z":{"desc":"International Standard Book Number ","repeat":"R"}},"767":{"6":{"desc":"Linkage ","repeat":"NR"},"7":{"desc":"Control subfield ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Main entry heading ","repeat":"NR"},"b":{"desc":"Edition ","repeat":"NR"},"c":{"desc":"Qualifying information ","repeat":"NR"},"d":{"desc":"Place, publisher, and date of publication ","repeat":"NR"},"desc":"TRANSLATION ENTRY","g":{"desc":"Relationship information ","repeat":"R"},"h":{"desc":"Physical description ","repeat":"NR"},"i":{"desc":"Display text ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Note controller"},"ind2":{"allowed":" 8","desc":"Display constant controller"},"k":{"desc":"Series data for related item ","repeat":"R"},"m":{"desc":"Material-specific details ","repeat":"NR"},"n":{"desc":"Note ","repeat":"R"},"o":{"desc":"Other item identifier ","repeat":"R"},"r":{"desc":"Report number ","repeat":"R"},"repeat":"R","s":{"desc":"Uniform title ","repeat":"NR"},"t":{"desc":"Title ","repeat":"NR"},"u":{"desc":"Standard Technical Report Number ","repeat":"NR"},"w":{"desc":"Record control number ","repeat":"R"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"},"y":{"desc":"CODEN designation ","repeat":"NR"},"z":{"desc":"International Standard Book Number ","repeat":"R"}},"770":{"6":{"desc":"Linkage ","repeat":"NR"},"7":{"desc":"Control subfield ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Main entry heading ","repeat":"NR"},"b":{"desc":"Edition ","repeat":"NR"},"c":{"desc":"Qualifying information ","repeat":"NR"},"d":{"desc":"Place, publisher, and date of publication ","repeat":"NR"},"desc":"SUPPLEMENT/SPECIAL ISSUE ENTRY","g":{"desc":"Relationship information ","repeat":"R"},"h":{"desc":"Physical description ","repeat":"NR"},"i":{"desc":"Display text ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Note controller"},"ind2":{"allowed":" 8","desc":"Display constant controller"},"k":{"desc":"Series data for related item ","repeat":"R"},"m":{"desc":"Material-specific details ","repeat":"NR"},"n":{"desc":"Note ","repeat":"R"},"o":{"desc":"Other item identifier ","repeat":"R"},"r":{"desc":"Report number ","repeat":"R"},"repeat":"R","s":{"desc":"Uniform title ","repeat":"NR"},"t":{"desc":"Title ","repeat":"NR"},"u":{"desc":"Standard Technical Report Number ","repeat":"NR"},"w":{"desc":"Record control number ","repeat":"R"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"},"y":{"desc":"CODEN designation ","repeat":"NR"},"z":{"desc":"International Standard Book Number ","repeat":"R"}},"772":{"6":{"desc":"Linkage ","repeat":"NR"},"7":{"desc":"Control subfield ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Main entry heading ","repeat":"NR"},"b":{"desc":"Edition ","repeat":"NR"},"c":{"desc":"Qualifying information ","repeat":"NR"},"d":{"desc":"Place, publisher, and date of publication ","repeat":"NR"},"desc":"SUPPLEMENT PARENT ENTRY","g":{"desc":"Relationship information ","repeat":"R"},"h":{"desc":"Physical description ","repeat":"NR"},"i":{"desc":"Display text ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Note controller"},"ind2":{"allowed":" 08","desc":"Display constant controller"},"k":{"desc":"Series data for related item ","repeat":"R"},"m":{"desc":"Material-specific details ","repeat":"NR"},"n":{"desc":"Note ","repeat":"R"},"o":{"desc":"Other item identifier ","repeat":"R"},"r":{"desc":"Report number ","repeat":"R"},"repeat":"R","s":{"desc":"Uniform title ","repeat":"NR"},"t":{"desc":"Title ","repeat":"NR"},"u":{"desc":"Standard Technical Report Number ","repeat":"NR"},"w":{"desc":"Record control number ","repeat":"R"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"},"y":{"desc":"CODEN designation ","repeat":"NR"},"z":{"desc":"International Stan dard Book Number ","repeat":"R"}},"773":{"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"7":{"desc":"Control subfield ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Main entry heading ","repeat":"NR"},"b":{"desc":"Edition ","repeat":"NR"},"d":{"desc":"Place, publisher, and date of publication ","repeat":"NR"},"desc":"HOST ITEM ENTRY","g":{"desc":"Relationship information ","repeat":"R"},"h":{"desc":"Physical description ","repeat":"NR"},"i":{"desc":"Display text ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Note controller"},"ind2":{"allowed":" 8","desc":"Display constant controller"},"k":{"desc":"Series data for related item ","repeat":"R"},"m":{"desc":"Material-specific details ","repeat":"NR"},"n":{"desc":"Note ","repeat":"R"},"o":{"desc":"Other item identifier ","repeat":"R"},"p":{"desc":"Abbreviated title ","repeat":"NR"},"q":{"desc":"Enumeration and first page ","repeat":"NR"},"r":{"desc":"Report number ","repeat":"R"},"repeat":"R","s":{"desc":"Uniform title ","repeat":"NR"},"t":{"desc":"Title ","repeat":"NR"},"u":{"desc":"Standard Technical Report Number ","repeat":"NR"},"w":{"desc":"Record control number ","repeat":"R"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"},"y":{"desc":"CODEN designation ","repeat":"NR"},"z":{"desc":"International Standard Book Number ","repeat":"R"}},"774":{"6":{"desc":"Linkage ","repeat":"NR"},"7":{"desc":"Control subfield ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Main entry heading ","repeat":"NR"},"b":{"desc":"Edition ","repeat":"NR"},"c":{"desc":"Qualifying information ","repeat":"NR"},"d":{"desc":"Place, publisher, and date of publication ","repeat":"NR"},"desc":"CONSTITUENT UNIT ENTRY","g":{"desc":"Relationship information ","repeat":"R"},"h":{"desc":"Physical description ","repeat":"NR"},"i":{"desc":"Display text ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Note controller"},"ind2":{"allowed":" 8","desc":"Display constant controller"},"k":{"desc":"Series data for related item ","repeat":"R"},"m":{"desc":"Material-specific details ","repeat":"NR"},"n":{"desc":"Note ","repeat":"R"},"o":{"desc":"Other item identifier ","repeat":"R"},"r":{"desc":"Report number ","repeat":"R"},"repeat":"R","s":{"desc":"Uniform title ","repeat":"NR"},"t":{"desc":"Title ","repeat":"NR"},"u":{"desc":"Standard Technical Report Number ","repeat":"NR"},"w":{"desc":"Record control number ","repeat":"R"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"},"y":{"desc":"CODEN designation ","repeat":"NR"},"z":{"desc":"International Standard Book Number ","repeat":"R"}},"775":{"6":{"desc":"Linkage ","repeat":"NR"},"7":{"desc":"Control subfield ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Main entry heading ","repeat":"NR"},"b":{"desc":"Edition ","repeat":"NR"},"c":{"desc":"Qualifying information ","repeat":"NR"},"d":{"desc":"Place, publisher, and date of publication ","repeat":"NR"},"desc":"OTHER EDITION ENTRY","e":{"desc":"Language code ","repeat":"NR"},"f":{"desc":"Country code ","repeat":"NR"},"g":{"desc":"Relationship information ","repeat":"R"},"h":{"desc":"Physical description ","repeat":"NR"},"i":{"desc":"Display text ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Note controller"},"ind2":{"allowed":" 8","desc":"Display constant controller"},"k":{"desc":"Series data for related item ","repeat":"R"},"m":{"desc":"Material-specific details ","repeat":"NR"},"n":{"desc":"Note ","repeat":"R"},"o":{"desc":"Other item identifier ","repeat":"R"},"r":{"desc":"Report number ","repeat":"R"},"repeat":"R","s":{"desc":"Uniform title ","repeat":"NR"},"t":{"desc":"Title ","repeat":"NR"},"u":{"desc":"Standard Technical Report Number ","repeat":"NR"},"w":{"desc":"Record control number ","repeat":"R"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"},"y":{"desc":"CODEN designation ","repeat":"NR"},"z":{"desc":"International Standard Book Number ","repeat":"R"}},"776":{"6":{"desc":"Linkage ","repeat":"NR"},"7":{"desc":"Control subfield ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Main entry heading ","repeat":"NR"},"b":{"desc":"Edition ","repeat":"NR"},"c":{"desc":"Qualifying information ","repeat":"NR"},"d":{"desc":"Place, publisher, and date of publication ","repeat":"NR"},"desc":"ADDITIONAL PHYSICAL FORM ENTRY","g":{"desc":"Relationship information ","repeat":"R"},"h":{"desc":"Physical description ","repeat":"NR"},"i":{"desc":"Display text ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Note controller"},"ind2":{"allowed":" 8","desc":"Display constant controller"},"k":{"desc":"Series data for related item ","repeat":"R"},"m":{"desc":"Material-specific details ","repeat":"NR"},"n":{"desc":"Note ","repeat":"R"},"o":{"desc":"Other item identifier ","repeat":"R"},"r":{"desc":"Report number ","repeat":"R"},"repeat":"R","s":{"desc":"Uniform title ","repeat":"NR"},"t":{"desc":"Title ","repeat":"NR"},"u":{"desc":"Standard Technical Report Number ","repeat":"NR"},"w":{"desc":"Record control number ","repeat":"R"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"},"y":{"desc":"CODEN designation ","repeat":"NR"},"z":{"desc":"International Standard Book Number ","repeat":"R"}},"777":{"6":{"desc":"Linkage ","repeat":"NR"},"7":{"desc":"Control subfield ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Main entry heading ","repeat":"NR"},"b":{"desc":"Edition ","repeat":"NR"},"c":{"desc":"Qualifying information ","repeat":"NR"},"d":{"desc":"Place, publisher, and date of publication ","repeat":"NR"},"desc":"ISSUED WITH ENTRY","g":{"desc":"Relationship information ","repeat":"R"},"h":{"desc":"Physical description ","repeat":"NR"},"i":{"desc":"Display text ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Note controller"},"ind2":{"allowed":" 8","desc":"Display constant controller"},"k":{"desc":"Series data for related item ","repeat":"R"},"m":{"desc":"Material-specific details ","repeat":"NR"},"n":{"desc":"Note ","repeat":"R"},"o":{"desc":"Other item identifier ","repeat":"R"},"repeat":"R","s":{"desc":"Uniform title ","repeat":"NR"},"t":{"desc":"Title ","repeat":"NR"},"w":{"desc":"Record control number ","repeat":"R"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"},"y":{"desc":"CODEN designation ","repeat":"NR"}},"780":{"6":{"desc":"Linkage ","repeat":"NR"},"7":{"desc":"Control subfield ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Main entry heading ","repeat":"NR"},"b":{"desc":"Edition ","repeat":"NR"},"c":{"desc":"Qualifying information ","repeat":"NR"},"d":{"desc":"Place, publisher, and date of publication ","repeat":"NR"},"desc":"PRECEDING ENTRY","g":{"desc":"Relationship information ","repeat":"R"},"h":{"desc":"Physical description ","repeat":"NR"},"i":{"desc":"Display text ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Note controller"},"ind2":{"allowed":"01234567","desc":"Type of relationship"},"k":{"desc":"Series data for related item ","repeat":"R"},"m":{"desc":"Material-specific details ","repeat":"NR"},"n":{"desc":"Note ","repeat":"R"},"o":{"desc":"Other item identifier ","repeat":"R"},"r":{"desc":"Report number ","repeat":"R"},"repeat":"R","s":{"desc":"Uniform title ","repeat":"NR"},"t":{"desc":"Title ","repeat":"NR"},"u":{"desc":"Standard Technical Report Number ","repeat":"NR"},"w":{"desc":"Record control number ","repeat":"R"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"},"y":{"desc":"CODEN designation ","repeat":"NR"},"z":{"desc":"International Standard Book Number ","repeat":"R"}},"785":{"6":{"desc":"Linkage ","repeat":"NR"},"7":{"desc":"Control subfield ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Main entry heading ","repeat":"NR"},"b":{"desc":"Edition ","repeat":"NR"},"c":{"desc":"Qualifying information ","repeat":"NR"},"d":{"desc":"Place, publisher, and date of publication ","repeat":"NR"},"desc":"SUCCEEDING ENTRY","g":{"desc":"Relationship information ","repeat":"R"},"h":{"desc":"Physical description ","repeat":"NR"},"i":{"desc":"Display text ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Note controller"},"ind2":{"allowed":"012345678","desc":"Type of relationship"},"k":{"desc":"Series data for related item ","repeat":"R"},"m":{"desc":"Material-specific details ","repeat":"NR"},"n":{"desc":"Note ","repeat":"R"},"o":{"desc":"Other item identifier ","repeat":"R"},"r":{"desc":"Report number ","repeat":"R"},"repeat":"R","s":{"desc":"Uniform title ","repeat":"NR"},"t":{"desc":"Title ","repeat":"NR"},"u":{"desc":"Standa rd Technical Report Number ","repeat":"NR"},"w":{"desc":"Record control number ","repeat":"R"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"},"y":{"desc":"CODEN designation ","repeat":"NR"},"z":{"desc":"International Standard Book Number ","repeat":"R"}},"786":{"6":{"desc":"Linkage ","repeat":"NR"},"7":{"desc":"Control subfield ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Main entry heading ","repeat":"NR"},"b":{"desc":"Edition ","repeat":"NR"},"c":{"desc":"Qualifying information ","repeat":"NR"},"d":{"desc":"Place, publisher, and date of publication ","repeat":"NR"},"desc":"DATA SOURCE ENTRY","g":{"desc":"Relationship information ","repeat":"R"},"h":{"desc":"Physical description ","repeat":"NR"},"i":{"desc":"Display text ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Note controller"},"ind2":{"allowed":" 8","desc":"Display constant controller"},"j":{"desc":"Period of content ","repeat":"NR"},"k":{"desc":"Series data for related item ","repeat":"R"},"m":{"desc":"Material-specific details ","repeat":"NR"},"n":{"desc":"Note ","repeat":"R"},"o":{"desc":"Other item identifier ","repeat":"R"},"p":{"desc":"Abbreviated title ","repeat":"NR"},"r":{"desc":"Report number ","repeat":"R"},"repeat":"R","s":{"desc":"Uniform title ","repeat":"NR"},"t":{"desc":"Title ","repeat":"NR"},"u":{"desc":"Standard Technical Report Number ","repeat":"NR"},"v":{"desc":"Source Contribution ","repeat":"NR"},"w":{"desc":"Record control number ","repeat":"R"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"},"y":{"desc":"CODEN designation ","repeat":"NR"},"z":{"desc":"International Standard Book Number ","repeat":"R"}},"787":{"6":{"desc":"Linkage ","repeat":"NR"},"7":{"desc":"Control subfield ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Main entry heading ","repeat":"NR"},"b":{"desc":"Edition ","repeat":"NR"},"c":{"desc":"Qualifying information ","repeat":"NR"},"d":{"desc":"Place, publisher, and date of publication ","repeat":"NR"},"desc":"NONSPECIFIC RELATIONSHIP ENTRY","g":{"desc":"Relationship information ","repeat":"R"},"h":{"desc":"Physical description ","repeat":"NR"},"i":{"desc":"Display text ","repeat":"NR"},"ind1":{"allowed":"01","desc":"Note controller"},"ind2":{"allowed":" 8","desc":"Display constant controller"},"k":{"desc":"Series data for related item ","repeat":"R"},"m":{"desc":"Material-specific details ","repeat":"NR"},"n":{"desc":"Note ","repeat":"R"},"o":{"desc":"Other item identifier ","repeat":"R"},"r":{"desc":"Report number ","repeat":"R"},"repeat":"R","s":{"desc":"Uniform title ","repeat":"NR"},"t":{"desc":"Title ","repeat":"NR"},"u":{"desc":"Standard Technical Report Number ","repeat":"NR"},"w":{"desc":"Record control number ","repeat":"R"},"x":{"desc":"International Standard Serial Number ","repeat":"NR"},"y":{"desc":"CODEN designation ","repeat":"NR"},"z":{"desc":"International Standard Book Number ","repeat":"R"}},"800":{"4":{"desc":"Relator code ","repeat":"R"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Personal name ","repeat":"NR"},"b":{"desc":"Numeration ","repeat":"NR"},"c":{"desc":"Titles and other words associated with a name ","repeat":"R"},"d":{"desc":"Dates associated with a name ","repeat":"NR"},"desc":"SERIES ADDED ENTRY--PERSONAL NAME","e":{"desc":"Relator term ","repeat":"R"},"f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":"013","desc":"Type of personal name entry element"},"ind2":{"allowed":" ","desc":"Undefined"},"j":{"desc":"Attribution qualifier ","repeat":"R"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"m":{"desc":"Medium of performance for music ","repeat":"R"},"n":{"desc":"Number of part/section of a work  ","repeat":"R"},"o":{"desc":"Arranged statement for music ","repeat":"NR"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"q":{"desc":"Fuller form of name ","repeat":"NR"},"r":{"desc":"Key for music ","repeat":"NR"},"repeat":"R","s":{"desc":"Version ","repeat":"NR"},"t":{"desc":"Title of a work ","repeat":"NR"},"u":{"desc":"Affiliation ","repeat":"NR"},"v":{"desc":"Volume/sequential designation  ","repeat":"NR"}},"810":{"4":{"desc":"Relator code ","repeat":"R"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Corporate name or jurisdiction name as entry element ","repeat":"NR"},"b":{"desc":"Subordinate unit ","repeat":"R"},"c":{"desc":"Location of meeting ","repeat":"NR"},"d":{"desc":"Date of meeting or treaty signing ","repeat":"R"},"desc":"SERIES ADDED ENTRY--CORPORATE NAME","e":{"desc":"Relator term ","repeat":"R"},"f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":"012","desc":"Type of corporate name entry element"},"ind2":{"allowed":" ","desc":"Undefined"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"m":{"desc":"Medium of performance for music ","repeat":"R"},"n":{"desc":"Number of part/section/meeting ","repeat":"R"},"o":{"desc":"Arranged statement for music ","repeat":"NR"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"r":{"desc":"Key for music ","repeat":"NR"},"repeat":"R","s":{"desc":"Version ","repeat":"NR"},"t":{"desc":"Title of a work ","repeat":"NR"},"u":{"desc":"Affiliation ","repeat":"NR"},"v":{"desc":"Volume/sequential designation ","repeat":"NR"}},"811":{"4":{"desc":"Relator code ","repeat":"R"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Meeting name or jurisdiction name as entry element ","repeat":"NR"},"c":{"desc":"Location of meeting ","repeat":"NR"},"d":{"desc":"Date of meeting ","repeat":"NR"},"desc":"SERIES ADDED ENTRY--MEETING NAME","e":{"desc":"Subordinate unit ","repeat":"R"},"f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":"012","desc":"Type of meeting name entry element"},"ind2":{"allowed":" ","desc":"Undefined"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"n":{"desc":"Number of part/section/meeting ","repeat":"R"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"q":{"desc":"Name of meeting following jurisdiction name entry element ","repeat":"NR"},"repeat":"R","s":{"desc":"Version ","repeat":"NR"},"t":{"desc":"Title of a work ","repeat":"NR"},"u":{"desc":"Affiliation ","repeat":"NR"},"v":{"desc":"Volume/sequential designation ","repeat":"NR"}},"830":{"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Uniform title ","repeat":"NR"},"d":{"desc":"Date of treaty signing ","repeat":"R"},"desc":"SERIES ADDED ENTRY--UNIFORM TITLE","f":{"desc":"Date of a work ","repeat":"NR"},"g":{"desc":"Miscellaneous information ","repeat":"NR"},"h":{"desc":"Medium ","repeat":"NR"},"ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":"0-9","desc":"Nonfiling characters"},"k":{"desc":"Form subheading ","repeat":"R"},"l":{"desc":"Language of a work ","repeat":"NR"},"m":{"desc":"Medium of performance for music ","repeat":"R"},"n":{"desc":"Number of part/section of a work ","repeat":"R"},"o":{"desc":"Arranged statement for music ","repeat":"NR"},"p":{"desc":"Name of part/section of a work ","repeat":"R"},"r":{"desc":"Key for music ","repeat":"NR"},"repeat":"R","s":{"desc":"Version ","repeat":"NR"},"t":{"desc":"Title of a work ","repeat":"NR"},"v":{"desc":"Volume/sequential designation ","repeat":"NR"}},"841":{"desc":"HOLDINGS CODED DATA VALUES","repeat":"NR"},"842":{"desc":"TEXTUAL PHYSICAL FORM DESIGNATOR","repeat":"NR"},"843":{"desc":"REPRODUCTION NOTE","repeat":"R"},"844":{"desc":"NAME OF UNIT","repeat":"NR"},"845":{"desc":"TERMS GOVERNING USE AND REPRODUCTION NOTE","repeat":"R"},"850":{"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Holding institution ","repeat":"R"},"desc":"HOLDING INSTITUTION","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"},"852":{"2":{"desc":"Source of classification or shelving scheme ","repeat":"NR"},"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Sequence number ","repeat":"NR"},"a":{"desc":"Location ","repeat":"NR"},"b":{"desc":"Sublocation or collection ","repeat":"R"},"c":{"desc":"Shelving location ","repeat":"R"},"desc":"LOCATION","e":{"desc":"Address ","repeat":"R"},"f":{"desc":"Coded location qualifier ","repeat":"R"},"g":{"desc":"Non-coded location qualifier ","repeat":"R"},"h":{"desc":"Classification part ","repeat":"NR"},"i":{"desc":"Item part ","repeat":"R"},"ind1":{"allowed":" 012345678","desc":"Shelving scheme"},"ind2":{"allowed":" 012","desc":"Shelving order"},"j":{"desc":"Shelving control number ","repeat":"NR"},"k":{"desc":"Call number prefix ","repeat":"R"},"l":{"desc":"Shelving form of title ","repeat":"NR"},"m":{"desc":"Call number suffix ","repeat":"R"},"n":{"desc":"Country code ","repeat":"NR"},"p":{"desc":"Piece designation ","repeat":"NR"},"q":{"desc":"Piece physical condition ","repeat":"NR"},"repeat":"R","s":{"desc":"Copyright article-fee code ","repeat":"R"},"t":{"desc":"Copy number ","repeat":"NR"},"x":{"desc":"Nonpublic note ","repeat":"R"},"z":{"desc":"Public note ","repeat":"R"}},"853":{"desc":"CAPTIONS AND PATTERN--BASIC BIBLIOGRAPHIC UNIT","repeat":"R"},"854":{"desc":"CAPTIONS AND PATTERN--SUPPLEMENTARY MATERIAL","repeat":"R"},"855":{"desc":"CAPTIONS AND PATTERN--INDEXES","repeat":"R"},"856":{"2":{"desc":"Access method ","repeat":"NR"},"3":{"desc":"Materials specified ","repeat":"NR"},"6":{"desc":"Linkage ","repeat":"NR"},"8":{"desc":"Field link and sequence number ","repeat":"R"},"a":{"desc":"Host name ","repeat":"R"},"b":{"desc":"Access number ","repeat":"R"},"c":{"desc":"Compression information ","repeat":"R"},"d":{"desc":"Path ","repeat":"R"},"desc":"ELECTRONIC LOCATION AND ACCESS","f":{"desc":"Electronic name ","repeat":"R"},"h":{"desc":"Processor of request ","repeat":"NR"},"i":{"desc":"Instruction ","repeat":"R"},"ind1":{"allowed":" 012347","desc":"Access method"},"ind2":{"allowed":" 0128","desc":"Relationship"},"j":{"desc":"Bits per second ","repeat":"NR"},"k":{"desc":"Password ","repeat":"NR"},"l":{"desc":"Logon ","repeat":"NR"},"m":{"desc":"Contact for access assistance ","repeat":"R"},"n":{"desc":"Name of location of host ","repeat":"NR"},"o":{"desc":"Operating system ","repeat":"NR"},"p":{"desc":"Port ","repeat":"NR"},"q":{"desc":"Electronic format type ","repeat":"NR"},"r":{"desc":"Settings ","repeat":"NR"},"repeat":"R","s":{"desc":"File size ","repeat":"R"},"t":{"desc":"Terminal emulation ","repeat":"R"},"u":{"desc":"Uniform Resource Identifier ","repeat":"R"},"v":{"desc":"Hours access method available ","repeat":"R"},"w":{"desc":"Record control number ","repeat":"R"},"x":{"desc":"Nonpublic note ","repeat":"R"},"y":{"desc":"Link text ","repeat":"R"},"z":{"desc":"Public note ","repeat":"R"}},"863":{"desc":"ENUMERATION AND CHRONOLOGY--BASIC BIBLIOGRAPHIC UNIT","repeat":"R"},"864":{"desc":"ENUMERATION AND CHRONOLOGY--SUPPLEMENTARY MATERIAL","repeat":"R"},"865":{"desc":"ENUMERATION AND CHRONOLOGY--INDEXES","repeat":"R"},"866":{"desc":"TEXTUAL HOLDINGS--BASIC BIBLIOGRAPHIC UNIT","repeat":"R"},"867":{"desc":"TEXTUAL HOLDINGS--SUPPLEMENTARY MATERIAL","repeat":"R"},"868":{"desc":"TEXTUAL HOLDINGS--INDEXES","repeat":"R"},"876":{"desc":"ITEM INFORMATION--BASIC BIBLIOGRAPHIC UNIT","repeat":"R"},"877":{"desc":"ITEM INFORMATION--SUPPLEMENTARY MATERIAL","repeat":"R"},"878":{"desc":"ITEM INFORMATION--INDEXES","repeat":"R"},"880":{"6":{"desc":"Linkage","repeat":"NR"},"desc":"ALTERNATE GRAPHIC REPRESENTATION","repeat":"R"},"886":{"0":{"desc":"Foreign MARC subfield","repeat":"NR"},"1":{"desc":"Foreign MARC subfield","repeat":"NR"},"2":{"desc":"Source of data","repeat":"NR"},"3":{"desc":"Source of data","repeat":"NR"},"4":{"desc":"Source of data","repeat":"NR"},"5":{"desc":"Source of data","repeat":"NR"},"6":{"desc":"Source of data","repeat":"NR"},"7":{"desc":"Source of data","repeat":"NR"},"8":{"desc":"Source of data","repeat":"NR"},"9":{"desc":"Source of data","repeat":"NR"},"a":{"desc":"Tag of the foreign MARC field","repeat":"NR"},"b":{"desc":"Content of the foreign MARC field","repeat":"NR"},"c":{"desc":"Foreign MARC subfield","repeat":"NR"},"d":{"desc":"Foreign MARC subfield","repeat":"NR"},"desc":"FOREIGN MARC INFORMATION FIELD","e":{"desc":"Foreign MARC subfield","repeat":"NR"},"f":{"desc":"Foreign MARC subfield","repeat":"NR"},"g":{"desc":"Foreign MARC subfield","repeat":"NR"},"h":{"desc":"Foreign MARC subfield","repeat":"NR"},"i":{"desc":"Foreign MARC subfield","repeat":"NR"},"ind1":{"allowed":"012","desc":"Type of field"},"ind2":{"allowed":" ","desc":"Undefined"},"j":{"desc":"Foreign MARC subfield","repeat":"NR"},"k":{"desc":"Foreign MARC subfield","repeat":"NR"},"l":{"desc":"Foreign MARC subfield","repeat":"NR"},"m":{"desc":"Foreign MARC subfield","repeat":"NR"},"n":{"desc":"Foreign MARC subfield","repeat":"NR"},"o":{"desc":"Foreign MARC subfield","repeat":"NR"},"p":{"desc":"Foreign MARC subfield","repeat":"NR"},"q":{"desc":"Foreign MARC subfield","repeat":"NR"},"r":{"desc":"Foreign MARC subfield","repeat":"NR"},"repeat":"R","s":{"desc":"Foreign MARC subfield","repeat":"NR"},"t":{"desc":"Foreign MARC subfield","repeat":"NR"},"u":{"desc":"Foreign MARC subfield","repeat":"NR"},"v":{"desc":"Foreign MARC subfield","repeat":"NR"},"w":{"desc":"Foreign MARC subfield","repeat":"NR"},"x":{"desc":"Foreign MARC subfield","repeat":"NR"},"y":{"desc":"Foreign MARC subfield","repeat":"NR"},"z":{"desc":"Foreign MARC subfield","repeat":"NR"}},"887":{"2":{"desc":"Source of data","repeat":"NR"},"a":{"desc":"Content of non-MARC field","repeat":"NR"},"desc":"NON-MARC INFORMATION FIELD","ind1":{"allowed":" ","desc":"Undefined"},"ind2":{"allowed":" ","desc":"Undefined"},"repeat":"R"}};
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/marc_validate.js b/Evergreen/staff_client/chrome/content/evergreen/cat/marc_validate.js
new file mode 100644 (file)
index 0000000..f854b31
--- /dev/null
@@ -0,0 +1,170 @@
+var rule_warnings = [];
+var tag_seen;
+
+function explain_marc() {
+       var s = '';
+       for (var w in rule_warnings) {
+               s = s + rule_warnings[w];
+       }
+       alert(s);
+}
+
+function legend_marc() {
+       var s = '';
+       var rows = document.getElementById('ctrl_rows').childNodes;
+       for (var r in rows) {
+               if (    (typeof(rows[r]) == 'object') &&
+                       (rows[r].tagName == 'row') &&
+                       (rows[r].getAttribute('hidden') != 'true')
+               ) {
+                       var tagnumber = rows[r].firstChild.firstChild.value;
+                       if ((marc_rules[tagnumber])&&(marc_rules[tagnumber].desc)) {
+                               s = s + tagnumber + '\t' + marc_rules[tagnumber].desc + '\n';
+                       } else {
+                               s = s + tagnumber + '\n';
+                       }
+               }
+       }
+       rows = document.getElementById('data_rows').childNodes;
+       for (var r in rows) {
+               if (    (typeof(rows[r]) == 'object') &&
+                       (rows[r].tagName == 'row') &&
+                       (rows[r].getAttribute('hidden') != 'true')
+               ) {
+                       var tagnumber = rows[r].firstChild.firstChild.value;
+                       if ((marc_rules[tagnumber])&&(marc_rules[tagnumber].desc)) {
+                               s = s + tagnumber + '\t' + marc_rules[tagnumber].desc + '\n';
+                       } else {
+                               s = s + tagnumber + '\n';
+                       }
+               }
+       }
+       alert(s);
+
+}
+
+function handle_tag_change(ev) {
+       dump('Entering handle_tag_change: ' + timer_elapsed('cat') + '\n');
+       rule_warnings = []; disable_widgets('explain_marc');
+       tag_seen = {};
+       var rows = document.getElementById('ctrl_rows').childNodes;
+       for (var r in rows) {
+               if ((typeof(rows[r]) == 'object')&&(rows[r].tagName == 'row')) {
+                       test_tagnumber_rule(rows[r]);
+               }
+       }
+       rows = document.getElementById('data_rows').childNodes;
+       for (var r in rows) {
+               if (    (typeof(rows[r]) == 'object') &&
+                       (rows[r].tagName == 'row') &&
+                       (rows[r].getAttribute('hidden') != 'true')
+               ) {
+                       test_tagnumber_rule(rows[r]);
+                       test_ind1_rule(rows[r]);
+                       test_ind2_rule(rows[r]);
+                       test_subfield_rule(rows[r]);
+               }
+       }
+       if (rule_warnings.length > 0) { enable_widgets('explain_marc'); }
+       dump('Exiting handle_tag_change: ' + timer_elapsed('cat') + '\n');
+}
+
+function test_tagnumber_rule(r) {
+       // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
+       var t = r.firstChild.firstChild;
+       if (t.value.length > 3) { 
+               t.value = t.value.substr(0,3); 
+       } else if (t.value.length < 3) {
+               switch(t.value.length) {
+                       case 2: t.value = '0' + t.value; break;
+                       case 1: t.value = '00' + t.value; break;
+                       case 0: t.value = '000'; break;
+               }
+       }
+       remove_css_class(t,'invalid');
+       if (marc_rules[t.value]) {
+               var rule = marc_rules[t.value];
+               if (tag_seen[t.value]) { tag_seen[t.value]++; } else { tag_seen[t.value] = 1; }
+               if ( (rule.repeat == 'NR') && (tag_seen[t.value] > 1) ) {
+                       add_css_class(t,'invalid');
+                       var s = 'Tag ' + t.value + ' should be Non-Repeating\n';
+                       rule_warnings.push(s); dump(s);
+               }
+       } else if (t.value != 'LDR') {
+               add_css_class(t,'invalid');
+               var s = 'Tag ' + t.value + ' is unknown.\n';
+               rule_warnings.push(s); dump(s);
+       }
+}
+
+function test_ind1_rule(r) {
+       // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
+       var tagnumber = r.childNodes[0].firstChild.value;
+       var ind1 = r.childNodes[1].firstChild;
+       remove_css_class(ind1,'invalid');
+       if ((marc_rules[tagnumber]) && (marc_rules[tagnumber].ind1)) {
+               var regex = '/^[' + marc_rules[tagnumber].ind1.allowed + ']$/';
+               if (! ind1.value.match(eval(regex)) ) {
+                       add_css_class(ind1,'invalid');
+                       var s = 'Tag ' + tagnumber + ' Indicator 1 should be one of these characters: "' + marc_rules[tagnumber].ind1.allowed + '"\n';
+                       rule_warnings.push(s); dump(s);
+               }
+       }
+}
+
+function test_ind2_rule(r) {
+       // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
+       var tagnumber = r.childNodes[0].firstChild.value;
+       var ind2 = r.childNodes[2].firstChild;
+       remove_css_class(ind2,'invalid');
+       if ((marc_rules[tagnumber]) && (marc_rules[tagnumber].ind2)) {
+               var regex = '/^[' + marc_rules[tagnumber].ind2.allowed + ']$/';
+               if (! ind2.value.match(eval(regex)) ) {
+                       add_css_class(ind2,'invalid');
+                       var s = 'Tag ' + tagnumber + ' Indicator 2 should be one of these characters: "' + marc_rules[tagnumber].ind2.allowed + '"\n';
+                       rule_warnings.push(s); dump(s);
+               }
+       }
+}
+
+function test_subfield_rule(r) {
+       // rows (rows) -> row (r) -> wrapper (w) -> textbox (t)
+       var tagnumber = r.childNodes[0].firstChild.value;
+       var data = r.childNodes[3].firstChild;
+       remove_css_class(data,'invalid');
+       if (marc_rules[tagnumber]) {
+               var datastring = data.value.replace(/^\s+/,'').replace(/\s+$/,'');
+               var subf_array = datastring.split(String.fromCharCode(8225));
+               if ( (subf_array[0] == '')||(subf_array[0] == null) ) {
+                       subf_array.shift();
+               } else {
+                       add_css_class(data,'invalid');
+                       var s = 'DEBUG: Need to add code to make an implicit subfield-a\n';
+                       rule_warnings.push(s); dump(s);
+                       subf_array.shift();
+               }
+               var subf_seen = {};
+               for (var i in subf_array) {
+                       if ((subf_array[i]=='')||(subf_array==null)) { 
+                               add_css_class(data,'invalid');
+                               var s = 'You have incomplete subfield delimiters.\n';
+                               rule_warnings.push(s); dump(s);
+                               continue;
+                       }
+                       var s_ind = subf_array[i].substr(0,1);
+                       if (subf_seen[s_ind]) { subf_seen[s_ind]++; } else { subf_seen[s_ind] = 1; }
+                       var rule = marc_rules[tagnumber][s_ind];
+                       if (rule) {
+                               if ( (rule.repeat == 'NR') && (subf_seen[s_ind]>1) ) {
+                                       add_css_class(data,'invalid');
+                                       var s = 'Tag ' + tagnumber + ' subfield-' + s_ind + ' should be Non-Repeating\n';
+                                       rule_warnings.push(s); dump(s);
+                               }
+                       } else {
+                               add_css_class(data,'invalid');
+                               var s = 'Tag ' + tagnumber + ' does not have a subfield-' + s_ind + '\n';
+                               rule_warnings.push(s); dump(s);
+                       }
+               }
+       }
+}
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/record_list.js b/Evergreen/staff_client/chrome/content/evergreen/cat/record_list.js
new file mode 100644 (file)
index 0000000..033ff58
--- /dev/null
@@ -0,0 +1,193 @@
+dump('Parsing record_list.js\n');
+
+var test_hash = { 'a' : '123' } ;
+
+function my_init() {
+       timer_init('cat');
+       dump('TESTING: record_list.js: ' + mw.G['main_test_variable'] + '\n');
+       dump('test_hash = ' + js2JSON(test_hash) + '\n');
+       dump('search_term = ' + search_term + '  search_type = ' + search_type + '  search_order = ' + search_order + '  search_location = ' + search_location + '\n');
+       var b = document.getElementById('count_copy_toggle');
+       b.setAttribute('label','Click to Show Records for All Libraries');
+       b.setAttribute('alt_label','Click to Show Only Records with Copies at ' + find_ou(mw.G['org_tree'],search_location).name());
+       b.setAttribute('value','-1');
+       b.setAttribute('oncommand','toggle_view(event);');
+
+       search();
+}
+
+function toggle_view(ev) {
+       var b = ev.target;
+       var value = b.getAttribute('value');
+       var label = b.getAttribute('label');
+       var alt_label = b.getAttribute('alt_label');
+       var temp = label; label = alt_label; alt_label = temp;
+       b.setAttribute('label',label); b.setAttribute('alt_label',alt_label);
+       b.setAttribute('value',-value);
+       var rows = document.getElementById('record_list_tree_children');
+       var nl = rows.getElementsByTagName('treeitem');
+       for (var i in nl) {
+               if (typeof(nl[i])=='object') {
+                       var treeitem = nl[i];
+                       var treerow = treeitem.firstChild;
+                       var copy_count_cell = treerow.lastChild;
+                       var copy_count = copy_count_cell.getAttribute('label');
+                       if (value == '-1') {
+                               treeitem.setAttribute('hidden','false');
+                       } else {
+                               if (copy_count == '0') {
+                                       treeitem.setAttribute('hidden','true');
+                               }
+                       }
+               }
+       }
+}
+
+function search() {
+       var result;
+       dump('search_type = ' + search_type + '  search_order = ' + search_order + '  search_term = ' + search_term + '\n');
+       switch(search_type) {
+               case 'tcn':
+                       result = user_request(
+                               'open-ils.search',
+                               'open-ils.search.cat.biblio.tcn',
+                               [ search_term ]
+                       );
+                       break;
+               default:
+                       result = user_request(
+                               'open-ils.search',
+                               'open-ils.search.cat.biblio.class',
+                               [ search_location, search_type, search_order, search_term ]
+                       );
+                       break;
+       }
+       // populate record_list with results
+       //dump( js2JSON( result ) + '\n');
+       var tc = document.getElementById('record_list_tree_children');
+       for (var i in result) {
+               if (typeof(result[i])=='object') {
+                       var data = result[i];
+                       var item = make_treeitem(data['doc_id']);
+                       var row = make_treerow(
+                               data['title'],
+                               data['author'],
+                               data['tcn'],
+                               data['publisher'],
+                               data['pubdate'],
+                               data['isbn'],
+                               data['isbn'],
+                               data['copy_count']
+                       );
+                       if (data['copy_count'] == 0) {
+                               item.setAttribute('hidden','true');
+                       }
+                       item.appendChild( row );
+                       tc.appendChild( item );
+               } else {
+                       //dump('unexpected typeof(result['+i+']) = ' + typeof(result[i]) + ' : ' + result[i] + '\n');
+               }
+       }
+}
+
+function make_treeitem(owner_doc) {
+       var treeitem = document.createElement('treeitem');
+       treeitem.setAttribute('id',owner_doc);
+       //dump('treeitem = ' + treeitem + '\n');
+       return treeitem;
+}
+
+function make_treerow() {
+       var treerow = document.createElement('treerow');
+       //dump('treerow = ' + treerow + '\n');
+       //dump('arguments.length = ' + arguments.length + ' arguments = ' + js2JSON(arguments) + '\n');
+       for (var i = 0; i < arguments.length; i++) {
+               //dump(i + ' : ' + arguments[i] + '\n');
+               var treecell = document.createElement('treecell');
+               //dump('treecell = ' + treecell + '\n');
+               var text = '';
+               if (typeof(arguments[i])=='object') {
+                       for (var j in arguments[i]) {
+                               text = text + arguments[i][j] + ' / ';
+                       }
+               } else {
+                       text = arguments[i];
+               }
+               treecell.setAttribute('label',text);
+               treerow.appendChild(treecell);
+       }
+       return treerow;
+}
+
+function spawn_editors(tab) {
+       var hitlist = document.getElementById('record_list_tree');
+       var start = new Object();
+       var end = new Object();
+       var numRanges = hitlist.view.selection.getRangeCount();
+       for (var t=0; t<numRanges; t++){
+               hitlist.view.selection.getRangeAt(t,start,end);
+               for (var v=start.value; v<=end.value; v++){
+                       var i = hitlist.contentView.getItemAtIndex(v);
+                       dump(i.tagName + '\n');
+                       var params = [
+                               i.getAttribute('id'),
+                               i.firstChild.childNodes[0].getAttribute('label'),
+                               i.firstChild.childNodes[1].getAttribute('label'),
+                               i.firstChild.childNodes[2].getAttribute('label'),
+                               i.firstChild.childNodes[3].getAttribute('label'),
+                               i.firstChild.childNodes[4].getAttribute('label'),
+                               i.firstChild.childNodes[5].getAttribute('label'),
+                               i.firstChild.childNodes[6].getAttribute('label')
+                       ];
+                       spawn_marc_editor(tab,params);
+               }
+       }
+}
+
+function spawn_browsers(tab) {
+       var hitlist = document.getElementById('record_list_tree');
+       var start = new Object();
+       var end = new Object();
+       var numRanges = hitlist.view.selection.getRangeCount();
+       for (var t=0; t<numRanges; t++){
+               hitlist.view.selection.getRangeAt(t,start,end);
+               for (var v=start.value; v<=end.value; v++){
+                       var i = hitlist.contentView.getItemAtIndex(v);
+                       dump(i.tagName + '\n');
+                       var params = [ i.getAttribute('id') ];
+                       spawn_copy_browser(tab,params);
+               }
+       }
+}
+
+/*
+function spawn_copy_browser(tab,params) {
+       dump('trying to spawn_marc_editor('+params[0]+')\n');
+       var w;
+       var chrome = 'chrome://evergreen/content/cat/browse_list.xul';
+       if (tab) {
+               tabWindow.new_tab('main_tabbox');
+               w = tabWindow.replace_tab('main_tabbox','COPIES',chrome);
+       } else {
+               w = mw.new_window( chrome );
+       }
+       w.find_this_id = params[0];
+       w.record_columns = params;
+}
+
+
+function spawn_marc_editor(tab,params) {
+       dump('trying to spawn_marc_editor('+params[0]+')\n');
+       var w;
+       var chrome = 'chrome://evergreen/content/cat/marc.xul';
+       if (tab) {
+               tabWindow.new_tab('main_tabbox');
+               w = tabWindow.replace_tab('main_tabbox','MARC',chrome);
+       } else {
+               w = mw.new_window( chrome );
+       }
+       w.find_this_id = params[0];
+       w.record_columns = params;
+}
+*/
+
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/record_list.xul b/Evergreen/staff_client/chrome/content/evergreen/cat/record_list.xul
new file mode 100644 (file)
index 0000000..5d420ac
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0"?>
+<!-- Application: Evergreen Staff Client -->
+<!-- Screen: Cataloger's Search Result Screen -->
+
+<!-- Stylesheets -->
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://evergreen/skin/evergreen.css" type="text/css"?>
+<?xml-stylesheet href="chrome://evergreen/skin/cat.css" type="text/css"?>
+
+<!-- Localization -->
+<!DOCTYPE page SYSTEM "chrome://evergreen/locale/cat.dtd">
+
+<page id="record_list_win" title="&record_list.win_title;" 
+       orient="vertical" style="overflow: scroll"
+       onload="my_init();"
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+       <!-- Overlays for this XUL file -->
+       <?xul-overlay href="chrome://evergreen/content/OpenSRF/OpenSRF.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/util/util.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/cat/record_list_overlay.xul"?>
+
+       <!-- OpenSRF -->
+       <script>var myPackageDir = "evergreen";</script>
+       <OpenSRF id="OpenSRF_js" />
+
+       <!-- The logic for this app -->
+       <Evergreen id="record_list_js" />
+
+       <!-- XUL'ified abstraction for logic to attach to widgets -->
+       <commandset id="record_list_cmds" />
+
+       <!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+       <keyset id="record_list_keys" />
+
+       <!-- Context menus -->
+       <popupset id="record_list_popupset" />
+
+       <!-- Layout to be filled in by overlays and javascript -->
+       <vbox id="record_list_vbox" class="test_class"/>
+
+</page>
+
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/record_list_overlay.xul b/Evergreen/staff_client/chrome/content/evergreen/cat/record_list_overlay.xul
new file mode 100644 (file)
index 0000000..85718ab
--- /dev/null
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<!DOCTYPE overlay SYSTEM "chrome://evergreen/locale/cat.dtd">
+<overlay id="record_list_overlay" 
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+<!-- The javascript logic for the staff client -->
+<Evergreen id="record_list_js">
+       <!--<script src="chrome://evergreen/content/evergreen/fieldmapper.js" />-->
+       <util id="util_js"/>
+       <script src="record_list.js" />
+</Evergreen>
+
+<!-- Some logic abstracted a bit.  Sort of like an API list -->
+<commandset id="record_list_cmds">
+       <command id="cmd_edit_record" oncommand="spawn_editors(false);"/>
+       <command id="cmd_edit_record_tab" oncommand="spawn_editors(true);"/>
+       <command id="cmd_browse_record" oncommand="spawn_browsers(false);"/>
+       <command id="cmd_browse_record_tab" oncommand="spawn_browsers(true);"/>
+       <command id="cmd_alert" oncommand="alert('Not Yet Implemented');"/>
+</commandset>
+
+<!-- Context menus -->
+<popupset id="record_list_popupset">
+       <popup id="record_menu">
+               <menuitem label="&cat.popup.edit_record.tab;" command="cmd_edit_record_tab"/>
+               <menuitem label="&cat.popup.edit_record.window;" command="cmd_edit_record"/>
+               <menuitem label="&cat.popup.browse_record.tab;" command="cmd_browse_record_tab"/>
+               <menuitem label="&cat.popup.browse_record.window;" command="cmd_browse_record"/>
+               <menuitem label="&cat.popup.add_to_bucket;" oncommand="
+                       alert('Not Yet Implemented');
+               "/>
+       </popup>
+</popupset>
+
+<!-- The top level widget for the cat client -->
+<vbox id="record_list_vbox" flex="1">
+       <button id="count_copy_toggle" label="Show Results For All Libraries"/>
+       <tree id="record_list_tree"/>
+</vbox>
+
+<tree id="record_list_tree" enableColumnDrag="true" flex="1">
+       <treecols>
+               <treecol id="record_list_title" label="&record_list.title;" flex="2"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="record_list_author" label="&record_list.author;" flex="1"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="record_list_tcn" label="&record_list.tcn;" flex="1"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="record_list_publisher" label="&record_list.publisher;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="record_list_pubyear" label="&record_list.pubyear;" flex="1"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="record_list_isbn" label="&record_list.isbn;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="record_list_issn" label="&record_list.issn;" flex="1" hidden="true"/>
+               <splitter class="tree-splitter"/>
+               <treecol id="record_list_copy_count" label="&record_list.copy_count;" flex="1" hidden="true"/>
+       </treecols>
+       <treechildren id="record_list_tree_children" context="record_menu"/>
+</tree>
+
+<!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+<keyset id="record_list_keys">
+       <key id="" modifiers="accel" key="A" command="cmd_"/>
+</keyset>
+
+</overlay>
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/volume.js b/Evergreen/staff_client/chrome/content/evergreen/cat/volume.js
new file mode 100644 (file)
index 0000000..618f496
--- /dev/null
@@ -0,0 +1,406 @@
+var data = {}; var data_backup; var cn_list = [];
+var new_id = -1;
+
+function my_init() {
+       dump('entering my_init for volume.js\n');
+       dump('TESTING: volume.js: ' + mw.G['main_test_variable'] + '\n');
+       dump('record_id = ' + record_id + '\n');
+       dump('tree_items: ' + tree_items + '\n');
+       if (params.shortcut == 'volume_add') {
+               build_page_one();
+       } else if (params.shortcut == 'copy_add') {
+               build_page_two();
+       } else {
+               dump('broken\n');
+       }
+       listen_for_enter('volume_add');
+       dump('exiting my_init for volume.js\n');
+}
+
+function listen_for_enter(w) {
+       if (typeof(w) != 'object') {
+               w = document.getElementById(w);
+       }
+       w.addEventListener('keypress',
+               function (ev) {
+                       dump('wizard: ev.target.tagName = ' + ev.target.tagName + '\n');
+                       dump('\tev.keyCode = ' + ev.keyCode + '\n');
+                       dump('\tev.charCode = ' + ev.charCode + '\n');
+                       if ((ev.target.tagName == 'textbox') && (ev.keyCode == 13)) {
+                               ev.preventDefault();
+                               ev.stopPropagation(); // XBL bindings? bleh
+                               fake_tab_for_textboxes(w,ev.target);
+                               return true;
+                       }
+               },
+               true
+       );
+}
+
+function page1_add_volume_row(ou) {
+       var row = document.createElement('row');
+               row.setAttribute('id','p1_' + ou.id());
+       document.getElementById('page1_rows').appendChild(row);
+       var label = document.createElement('label');
+               label.setAttribute('value',ou.name());
+       row.appendChild(label);
+       var textbox = document.createElement('textbox');
+               textbox.setAttribute('size','1');
+               textbox.setAttribute('value','0');
+       row.appendChild(textbox);
+}
+
+function page2_add_volume_row(ou,ti) {
+       dump('page2_add_volume_row...\n');
+       var desired_volumes = 
+               document.getElementById('p1_' + ou.id()).lastChild.value;
+       dump('ou = ' + ou.name() + '  desired = ' + desired_volumes + '\n');
+       if (desired_volumes > 0) { } else { return; }
+       var rows = document.getElementById('page2_rows');
+       var row = document.createElement('row');
+       rows.appendChild(row);
+       var label = document.createElement('label');
+               label.setAttribute('value',ou.name());
+       row.appendChild(label);
+       for (var i = 0; i < desired_volumes; i++) {
+               var cn_row = document.createElement('row');
+                       //cn_row.setAttribute('id','p2_'+ou.id());
+                       cn_row.setAttribute('ou_name',ou.name());
+                       cn_row.setAttribute('ou_id',ou.id());
+               rows.appendChild(cn_row);
+               cn_row.appendChild( document.createElement('label') );
+               var cn_text1 = document.createElement('textbox');
+                       cn_text1.setAttribute('size','20');
+                       cn_text1.setAttribute('value','A Call Number');
+               cn_row.appendChild( cn_text1 );
+               var cn_text2 = document.createElement('textbox');
+                       cn_text2.setAttribute('size','4');
+                       cn_text2.setAttribute('value','0');
+               cn_row.appendChild( cn_text2 );
+       }
+}
+
+function copy_add_page2_add_volume_row(ou,ti) {
+       dump('copy_add_page2_add_volume_row...\n');
+       var rows = document.getElementById('page2_rows');
+       var row = document.getElementById('page2_row_cn_' + ou.id() );
+       if (!row) {
+               row = document.createElement('row');
+               row.setAttribute('id','page2_row_cn' + ou.id() );
+               rows.appendChild(row);
+       }
+       var label = document.createElement('label');
+               label.setAttribute('value',ou.name());
+       row.appendChild(label);
+               var cn_row = document.createElement('row');
+                       //cn_row.setAttribute('id','p2_'+ou.id());
+                       cn_row.setAttribute('ou_name',ou.name());
+                       cn_row.setAttribute('ou_id',ou.id());
+                       cn_row.setAttribute('volume_id',ti.getAttribute('volume_id'));
+               rows.appendChild(cn_row);
+               cn_row.appendChild( document.createElement('label') );
+               var cn_text1 = document.createElement('textbox');
+                       cn_text1.setAttribute('size','20');
+                       cn_text1.setAttribute('volume_id',ti.getAttribute('volume_id'));
+                       cn_text1.setAttribute('value',ti.getAttribute('callnumber'));
+               cn_row.appendChild( cn_text1 );
+               cn_text1.disabled = true;
+               var cn_text2 = document.createElement('textbox');
+                       cn_text2.setAttribute('size','4');
+                       cn_text2.setAttribute('value','0');
+               cn_row.appendChild( cn_text2 );
+}
+
+function page3_add_volume_row(id,data) {
+       if (data.length>0) { } else { return; }
+       var rows = document.getElementById('page3_rows');
+       var org_row = document.createElement('row');
+       rows.appendChild(org_row);
+               var org_label = document.createElement('label');
+                       org_label.setAttribute('value',data[0].name);
+               org_row.appendChild(org_label);
+       for (var i in data) {
+               var callnumber = data[i].callnumber;
+               var desired_copies = data[i].copies;
+               var cn_row = document.createElement('row');
+               rows.appendChild(cn_row);
+               var cn_box = document.createElement('hbox');
+               cn_row.appendChild(cn_box);
+               cn_box.appendChild( document.createElement('spacer') );
+               var cn_label = document.createElement('label');
+                       cn_label.setAttribute('value',callnumber);
+               cn_box.appendChild(cn_label);
+               for (var c = 0; c < desired_copies; c++) {
+                       var bc_row = document.createElement('row');
+                       rows.appendChild(bc_row);
+                       bc_row.appendChild( document.createElement('label') );
+                       var bc_text = document.createElement('textbox');
+                               bc_text.setAttribute('size','15');
+                               bc_text.setAttribute('ou_name',data[i].name);
+                               bc_text.setAttribute('ou_id',id);
+                               bc_text.setAttribute('volume_id',data[i].volume_id);
+                               bc_text.setAttribute('callnumber',callnumber);
+                       bc_row.appendChild(bc_text);
+               }
+       }
+}
+
+function page_four_add_volume_row(name,callnumber,barcode) {
+       dump('xul: name = ' + name + ' cn = ' + callnumber + ' bc = ' + barcode + '\n');
+       var listbox = document.getElementById('ephemeral_listbox');
+       var listitem = document.createElement('listitem');
+       listbox.appendChild(listitem);
+       var listcell1 = document.createElement('listcell');
+               listcell1.setAttribute('label',name);
+       listitem.appendChild(listcell1);
+       var listcell2 = document.createElement('listcell');
+               listcell2.setAttribute('label',callnumber);
+       listitem.appendChild(listcell2);
+       var listcell3 = document.createElement('listcell');
+               listcell3.setAttribute('label',barcode);
+       listitem.appendChild(listcell3);
+
+}
+
+function build_page_one() {
+       dump('build_page_one\n');
+       for (var i in tree_items) {
+               var ti = tree_items[i];
+               switch( ti.getAttribute('object_type') ) {
+                       case 'org_unit' :
+                               if (params.shortcut == 'volume_add') {
+                                       var shortname = ti.getAttribute('id').split('_')[2];
+                                       var ou = find_ou_by_shortname(mw.G['org_tree'],shortname);
+                                       var check_ou = check_volume_ou_perm( shortname );
+                                       if ( check_ou ) {
+                                               page1_add_volume_row( check_ou );
+                                       }
+                               }
+                       break;
+               }
+       }
+}
+
+function build_page_two() {
+       dump('build_page_two\n');
+       for (var i in tree_items) {
+               var ti = tree_items[i];
+               dump('Considering item with object_type = ' + ti.getAttribute('object_type') + '\n');
+               switch( ti.getAttribute('object_type') ) {
+                       case 'org_unit' :
+                               var shortname = ti.getAttribute('id').split('_')[2];
+                               var ou = find_ou_by_shortname(mw.G['org_tree'],shortname);
+                               var check_ou = check_volume_ou_perm( shortname );
+                               if ( check_ou ) {
+                                       page2_add_volume_row( check_ou, ti );
+                               }
+                       break;
+                       case 'volume' :
+                               if (params.shortcut == 'copy_add') {
+                                       var check_ou = find_ou( mw.G.user_ou , ti.getAttribute('ou_id') );
+                                       if (check_ou) {
+                                               copy_add_page2_add_volume_row( check_ou, ti );  
+                                       }
+                               }
+                       break;
+               }
+       }
+}
+
+function build_page_three() {
+       dump('build_page_three\n');
+       var rows = document.getElementById('page2_rows');
+       for (var i = 0; i < rows.childNodes.length; i++) {
+               var row = rows.childNodes[i];
+               dump(row + '\n');
+               var ou_id = row.getAttribute('ou_id');
+               var ou_name = row.getAttribute('ou_name');
+               var volume_id = row.getAttribute('volume_id');
+               if (ou_id) {
+                       var call_number = row.childNodes[1].value;
+                       if (!call_number) { continue; }
+                       var desired_copies = row.childNodes[2].value;
+                       if (!data[ou_id]) { data[ou_id] = []; }
+                       data[ou_id].push( 
+                               { 
+                                       'callnumber' : call_number, 
+                                       'copies' : desired_copies,
+                                       'name' : ou_name,
+                                       'volume_id' : volume_id
+                               } 
+                       );
+               }
+       }
+       for (var i in data) {
+               dump('i: ' + i + ' data[i]: ' + js2JSON(data[i]) + '\n');
+               page3_add_volume_row( i, data[i]);
+       }
+}
+
+function build_page_four() {
+       dump('build page four\n');
+       document.getElementById('volume_add').canAdvance = false;
+       var new_data = [];
+       var rows = document.getElementById('page3_rows');
+       var nl = rows.getElementsByTagName('textbox');
+        for (var i in nl) {
+                if (typeof(nl[i])=='object') {
+                        var t = nl[i];
+                        var ou_id = t.getAttribute('ou_id');
+                        var ou_name = t.getAttribute('ou_name');
+                        var callnumber = t.getAttribute('callnumber');
+                       var volume_id = t.getAttribute('volume_id');
+                        var barcode = t.value;
+                       //page_four_add_volume_row(ou_name,callnumber,barcode);
+                       dump('t.tagName = ' + t.tagName + ' ou_id = ' + ou_id + ' cn = ' + callnumber + ' volume_id = ' + volume_id + ' bc = ' + barcode + '\n');
+                       if (! new_data[ou_id] ) { new_data[ou_id] = {}; }
+                       if (! new_data[ou_id][callnumber] ) {
+                               new_data[ou_id][callnumber] = [];
+                       }
+                       if (! new_data[ou_id][callnumber]['barcode'] ) {
+                               new_data[ou_id][callnumber]['barcode'] = [];
+                       }
+                       new_data[ou_id][callnumber].barcode.push(barcode);
+                       if (params.shortcut == 'copy_add') {
+                               new_data[ou_id][callnumber].volume_id = volume_id;
+                       }
+                }
+        }
+       cn_list = [];
+       for (var ou_id in new_data) {
+               for (var cnum in new_data[ou_id]) {
+                       //var ou_shortname = find_ou(mw.G['org_tree'],ou_id).shortname();
+                       var ou_shortname = mw.G.org_tree_hash[ou_id].shortname();
+                       var cn = new acn();
+                       cn.label(cnum);
+                       cn.owning_lib(ou_id);
+                       cn.record(record_id);
+                       if (params.shortcut == 'volume_add') {
+                               cn.isnew(1);
+                               cn.id(new_id--);
+                       } else if (params.shortcut == 'copy_add') {
+                               cn.id( new_data[ou_id][cnum].volume_id );
+                       }
+                       cn.copies([]);
+       
+                       for (var c in new_data[ou_id][cnum].barcode) {
+                               var cp = new acp();
+                               cp.id(new_id--);
+                               cp.isnew(1);
+                               cp.barcode(new_data[ou_id][cnum].barcode[c]);
+                               cp.circ_lib(    mw.G.org_tree_hash[ ou_id ]);
+                               cn.copies().push(cp);
+                               cp.stat_cat_entries( [] );
+                       }
+
+                       cn_list.push(cn);
+               }
+       }
+       dump('Final data object: ' + js2JSON(cn_list) + '\n');
+       dump('Final data object: ' + cn_list + '\n');
+       spawn_copy_editor();
+}
+
+function send_to_bill() {
+       var result = user_request(
+                       'open-ils.cat',
+                       'open-ils.cat.asset.volume_tree.fleshed.batch.update',
+                       [ mw.G['auth_ses'][0], cn_list]
+       );
+       dump('volume_tree.fleshed.batch.update result: ' + js2JSON(result) + '\n');
+       refresh_spawning_browse_list();
+}
+
+function refresh_spawning_browse_list() {
+       try {
+               params.refresh_func();
+       } catch(E) {
+               dump('refresh_spawning_browse_list error: ' + js2JSON(E) + '\n');
+       }
+}
+
+function spawn_copy_editor(tab) {
+       dump('trying to spawn_copy_editor()\n');
+       var params = { 'select_all' : true };
+       var chrome = 'chrome://evergreen/content/cat/copy.xul';
+       var frame = document.getElementById('page4_iframe');
+       frame.setAttribute('src',chrome);
+       frame.setAttribute('flex','1');
+       frame.contentWindow.cn_list = cn_list;
+       frame.contentWindow.mw = mw;
+       frame.contentWindow.real_parentWindow = this;
+       frame.contentWindow.parentWindow = parentWindow;
+       frame.contentWindow.params = params;
+}
+
+function backup_data() {
+       data_backup = data;
+}
+
+function restore_data() {
+       data = data_backup;
+}
+
+function check_volume_ou_perm(shortname) {
+       var top_ou = find_ou(mw.G['org_tree'],mw.G.user_ou.id());
+       var check_ou = find_ou_by_shortname(top_ou, shortname);
+       return check_ou;
+}
+
+// ***************************************************** Batch Volume Edit
+
+function volume_edit_init() {
+       dump('TESTING: volume.js: ' + mw.G['main_test_variable'] + '\n');
+       build_batch_edit_page1();
+       listen_for_enter('volume_edit');
+}
+
+function build_batch_edit_page1() {
+       var rows = document.getElementById('page1_rows');
+
+       var org = {};
+
+       for (var i = 0; i < tree_items.length; i++) {
+               var volume = tree_items[i];
+               if (!  org[ volume.getAttribute('ou_id') ] ) {
+                       org[ volume.getAttribute('ou_id') ] = new Array();
+               }
+               org[ volume.getAttribute('ou_id') ].push( volume );
+       }
+
+       for (var i in org) {
+               var row = document.createElement('row');
+               rows.appendChild(row);
+               var lib = document.createElement('label');
+               row.appendChild(lib);
+                       lib.setAttribute( 'value', mw.G.org_tree_hash[i].shortname() );
+
+               for (var j = 0; j < org[i].length; j++) {
+                       var volume = org[i][j];
+
+                       var vrow = document.createElement('row');
+                       rows.appendChild(vrow);
+                       vrow.appendChild( document.createElement('label') );
+
+                       var t = document.createElement('textbox');
+                       vrow.appendChild( t );
+                       t.value = volume.getAttribute('callnumber');
+                       t.setAttribute( 'original', volume.getAttribute('callnumber') );
+                       t.setAttribute( 'volume_id', volume.getAttribute('volume_id') );
+               }
+       }
+}
+
+function submit_edited_volumes() {
+       var nl = document.getElementsByTagName('textbox');
+       for (var i = 0; i < nl.length; i++) {
+               var t = nl[i];
+               if (t.getAttribute('original') == t.value) continue;
+               var cn = new acn();
+               cn.id( t.getAttribute('volume_id') );
+               cn.label( t.value );
+               cn.ischanged('1');
+               cn_list.push( cn );
+       }
+       send_to_bill();
+}
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/volume_copy_add_overlay.xul b/Evergreen/staff_client/chrome/content/evergreen/cat/volume_copy_add_overlay.xul
new file mode 100644 (file)
index 0000000..a64a6b0
--- /dev/null
@@ -0,0 +1,79 @@
+<?xml version="1.0"?>
+<!DOCTYPE overlay SYSTEM "chrome://evergreen/locale/cat.dtd">
+<overlay id="volume_overlay" 
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+<!-- The javascript logic for the staff client -->
+<Evergreen id="volume_js">
+       <!--<script src="chrome://evergreen/content/evergreen/fieldmapper.js" />-->
+       <util id="util_js"/>
+       <script src="volume.js" />
+</Evergreen>
+
+<!-- Some logic abstracted a bit.  Sort of like an API list -->
+<commandset id="volume_cmds">
+       <command id="cmd_alert" oncommand="
+               alert('Feature Not Yet Implemented');
+       "/>
+       <command id="cmd_batch_edit" oncommand="
+               spawn_copy_editor();    
+       "/>
+</commandset>
+
+<wizardpage id="page1" description="&volume.wizard.page1;" onpageadvanced="build_page_two();">
+       <groupbox>
+               <caption label="How many volumes?"/>
+               <grid>
+                       <columns> <column flex="0"/> <column flex="0"/> </columns>
+                       <rows id="page1_rows"/>
+               </grid>
+       </groupbox>
+</wizardpage>
+
+<wizardpage id="page2" description="&volume.wizard.page2;" onpageadvanced="build_page_three()" onpagerewound="var rows = document.getElementById('page2_rows'); while (rows.childNodes.length > 1) { rows.removeChild(rows.lastChild); }">
+       <groupbox>
+               <caption label="What call numbers and how many copies?"/>
+               <grid>
+                       <columns>
+                               <column flex="0"/>
+                               <column flex="0"/>
+                               <column flex="0"/>
+                       </columns>
+                       <rows id="page2_rows">
+                               <row>
+                                       <label />
+                                       <label value="Call Number" />
+                                       <label value="# of Copies" />
+                               </row>
+                       </rows>
+               </grid>
+       </groupbox>
+</wizardpage>
+
+<wizardpage id="page3" description="&volume.wizard.page3;" onpageadvanced="backup_data(); build_page_four()" onpagerewound="var rows = document.getElementById('page3_rows'); while (rows.childNodes.length > 1) { rows.removeChild(rows.lastChild); }">
+       <groupbox>
+               <caption label="What are the barcodes?"/>
+               <grid>
+                       <columns>
+                               <column flex="0"/> <column flex="0"/>
+                       </columns>
+                       <rows id="page3_rows">
+                               <row>
+                                       <label value="" />
+                                       <label value="Barcode" />
+                               </row>
+                       </rows>
+               </grid>
+       </groupbox>
+</wizardpage>
+
+<wizardpage id="page4" description="something" onpagerewound="restore_data();" flex="1">
+       <iframe id="page4_iframe" flex="1"/>
+</wizardpage>
+
+<!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+<keyset id="volume_keys">
+       <key id="" modifiers="accel" key="A" command="cmd_"/>
+</keyset>
+
+</overlay>
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/volume_copy_add_wizard.xul b/Evergreen/staff_client/chrome/content/evergreen/cat/volume_copy_add_wizard.xul
new file mode 100644 (file)
index 0000000..7fce3fe
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<!-- This DTD declaration needs to be fixed for Mozilla locales -->
+<!DOCTYPE wizard SYSTEM "chrome://evergreen/locale/cat.dtd">
+<wizard id="volume_add" title="&volume.wizard.title;" 
+       orient="vertical" style="overflow: auto"
+       onload="my_init();" width="800" height="600"
+       onwizardfinish="send_to_bill();"
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+       <!-- Overlays for this XUL file -->
+       <?xul-overlay href="chrome://evergreen/content/OpenSRF/OpenSRF.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/util/util.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/cat/volume_copy_add_overlay.xul"?>
+
+       <!-- OpenSRF -->
+       <script>var myPackageDir = "evergreen";</script>
+       <OpenSRF id="OpenSRF_js" />
+
+       <!-- The logic for this app -->
+       <Evergreen id="volume_js" />
+
+       <!-- XUL'ified abstraction for logic to attach to widgets -->
+       <commandset id="volume_cmds" />
+
+       <!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+       <keyset id="volume_keys" />
+
+       <!-- Layout to be filled in by overlays and javascript -->
+       <wizardpage id="page1"/>
+       <wizardpage id="page2"/>
+       <wizardpage id="page3"/>
+       <wizardpage id="page4"/>
+
+</wizard>
+
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/volume_edit_overlay.xul b/Evergreen/staff_client/chrome/content/evergreen/cat/volume_edit_overlay.xul
new file mode 100644 (file)
index 0000000..087b7b2
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<!DOCTYPE overlay SYSTEM "chrome://evergreen/locale/cat.dtd">
+<overlay id="volume_overlay" 
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+<!-- The javascript logic for the staff client -->
+<Evergreen id="volume_js">
+       <!--<script src="chrome://evergreen/content/evergreen/fieldmapper.js" />-->
+       <util id="util_js"/>
+       <script src="volume.js" />
+</Evergreen>
+
+<!-- Some logic abstracted a bit.  Sort of like an API list -->
+<commandset id="volume_cmds">
+       <command id="cmd_alert" oncommand="
+               alert('Feature Not Yet Implemented');
+       "/>
+</commandset>
+
+<wizardpage id="page1" description="Entering Call Numbers" onpageadvanced="">
+       <groupbox>
+               <caption label="Modify Call Numbers?"/>
+               <grid>
+                       <columns> <column flex="0"/> <column flex="0"/> </columns>
+                       <rows id="page1_rows"/>
+               </grid>
+       </groupbox>
+</wizardpage>
+
+<!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+<keyset id="volume_keys">
+       <key id="" modifiers="accel" key="A" command="cmd_"/>
+</keyset>
+
+</overlay>
diff --git a/Evergreen/staff_client/chrome/content/evergreen/cat/volume_edit_wizard.xul b/Evergreen/staff_client/chrome/content/evergreen/cat/volume_edit_wizard.xul
new file mode 100644 (file)
index 0000000..148ef12
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<!-- This DTD declaration needs to be fixed for Mozilla locales -->
+<!DOCTYPE wizard SYSTEM "chrome://evergreen/locale/cat.dtd">
+<wizard id="volume_edit" title="Batch Volume Editor"
+       orient="vertical" style="overflow: auto"
+       onload="volume_edit_init();" width="800" height="600"
+       onwizardfinish="submit_edited_volumes();"
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+       <!-- Overlays for this XUL file -->
+       <?xul-overlay href="chrome://evergreen/content/OpenSRF/OpenSRF.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/util/util.xul"?>
+       <?xul-overlay href="chrome://evergreen/content/cat/volume_edit_overlay.xul"?>
+
+       <!-- OpenSRF -->
+       <script>var myPackageDir = "evergreen";</script>
+       <OpenSRF id="OpenSRF_js" />
+
+       <!-- The logic for this app -->
+       <Evergreen id="volume_js" />
+
+       <!-- XUL'ified abstraction for logic to attach to widgets -->
+       <commandset id="volume_cmds" />
+
+       <!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+       <keyset id="volume_keys" />
+
+       <!-- Layout to be filled in by overlays and javascript -->
+       <wizardpage id="page1"/>
+
+</wizard>
+