1 const g_max_copies_that_can_be_added_at_a_time_per_volume = 999;
7 /***********************************************************************************************************/
10 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
11 if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
12 JSAN.errorLevel = "die"; // none, warn, or die
13 JSAN.addRepository('/xul/server/');
14 JSAN.use('util.error'); g.error = new util.error();
15 g.error.sdump('D_TRACE','my_init() for cat/volume_copy_creator.xul');
17 JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
18 JSAN.use('util.widgets'); JSAN.use('util.functional');
20 JSAN.use('util.network'); g.network = new util.network();
22 g.refresh = xul_param('onrefresh');
24 /***********************************************************************************************************/
25 /* Am I adding just copies or copies and volumes? Or am I rebarcoding existing copies? */
27 // g.copy_shortcut = { ou_id : { callnumber_label : callnumber_id }, ... }
28 g.copy_shortcut = xul_param('copy_shortcut');
29 // g.existing_copies = [ copy1, copy2, ... ]
30 g.existing_copies = xul_param('existing_copies') || [];
32 if (g.existing_copies.length > 0) {
33 document.getElementById('EditThenCreate').setAttribute('label',$('catStrings').getString('staff.cat.volume_copy_creator.edit_then_rebarcode.btn.label'));
34 document.getElementById('EditThenCreate').setAttribute('accesskey',$('catStrings').getString('staff.cat.volume_copy_creator.edit_then_rebarcode.btn.accesskey'));
35 document.getElementById('CreateWithDefaults').setAttribute('label',$('catStrings').getString('staff.cat.volume_copy_creator.rebarcode.btn.label'));
36 document.getElementById('CreateWithDefaults').setAttribute('accesskey',$('catStrings').getString('staff.cat.volume_copy_creator.rebarcode.btn.accesskey'));
38 document.getElementById('EditThenCreate').setAttribute('label',$('catStrings').getString('staff.cat.volume_copy_creator.edit_then_create.btn.label'));
39 document.getElementById('EditThenCreate').setAttribute('accesskey',$('catStrings').getString('staff.cat.volume_copy_creator.edit_then_create.btn.accesskey'));
40 document.getElementById('CreateWithDefaults').setAttribute('label',$('catStrings').getString('staff.cat.volume_copy_creator.create_with_defaults.btn.label'));
41 document.getElementById('CreateWithDefaults').setAttribute('accesskey',$('catStrings').getString('staff.cat.volume_copy_creator.create_with_defaults.btn.accesskey'));
44 //g.error.sdump('D_ERROR','location.href = ' + location.href + '\n\ncopy_short cut = ' + g.copy_shortcut + '\n\nou_ids = ' + xul_param('ou_ids'));
46 var ou_ids = xul_param('ou_ids',{'concat' : true}) || [];
48 // Get the default callnumber classification scheme from OU settings
49 dojo.require('fieldmapper.OrgUtils');
50 var label_class = fieldmapper.aou.fetchOrgSettingDefault(ses('ws_ou'), 'cat.default_classification_scheme');
52 // Assign a default value if none was returned
54 label_class = { "value": 1 };
57 /***********************************************************************************************************/
58 /* If we're passed existing_copies, rig up a copy_shortcut object to leverage existing code for rendering the volume labels, etc.
59 * Also make a lookup object for existing copies keyed on org id and callnumber label, and another keyed on copy id. */
61 // g.org_label_existing_copy_map = { ou_id : { callnumber_label : [ copy1, copy2, ... ] }, ... }
62 g.org_label_existing_copy_map = {};
63 // g.id_copy_map = { acp_id : acp, ... }
65 for (var i = 0; i < g.existing_copies.length; i++) {
66 if (! g.copy_shortcut) { g.copy_shortcut = {}; }
67 var copy = g.existing_copies[i];
68 g.id_copy_map[ copy.id() ] = copy;
69 var call_number = copy.call_number();
70 g.doc_id = call_number.record();
71 if (!g.copy_shortcut[ call_number.owning_lib() ]) {
72 ou_ids.push( call_number.owning_lib() );
73 g.copy_shortcut[ call_number.owning_lib() ] = {};
74 g.org_label_existing_copy_map[ call_number.owning_lib() ] = {};
76 g.copy_shortcut[ call_number.owning_lib() ][ call_number.label() ] = call_number.id();
77 if (! g.org_label_existing_copy_map[ call_number.owning_lib() ][ call_number.label() ]) {
78 g.org_label_existing_copy_map[ call_number.owning_lib() ][ call_number.label() ] = [];
80 g.org_label_existing_copy_map[ call_number.owning_lib() ][ call_number.label() ].push( copy );
83 /***********************************************************************************************************/
84 /* What record am I dealing with? */
86 g.doc_id = g.doc_id || xul_param('doc_id');
88 alert('Error in volume_copy_creator.js, g.doc_id not valid');
89 window.close(); return;
91 var sb = document.getElementById('summary_box'); while(sb.firstChild) sb.removeChild(sb.lastChild);
92 var summary = document.createElement('iframe'); sb.appendChild(summary);
93 summary.setAttribute('src',urls.XUL_BIB_BRIEF);
94 summary.setAttribute('flex','1');
95 get_contentWindow(summary).xulG = { 'docid' : g.doc_id };
97 /***********************************************************************************************************/
98 /* For the call number drop down */
100 if (!g.copy_shortcut) {
101 g.list_callnumbers(g.doc_id, label_class.value);
104 /***********************************************************************************************************/
105 /* render the orgs and volumes/input */
107 var rows = document.getElementById('rows');
110 for (var i = 0; i < ou_ids.length; i++) {
112 var org = g.data.hash.aou[ ou_ids[i] ];
113 if ( get_bool( g.data.hash.aout[ org.ou_type() ].can_have_vols() ) ) {
114 var row = document.createElement('row'); rows.appendChild(row); row.setAttribute('ou_id',ou_ids[i]);
115 g.render_library_label(row,ou_ids[i]);
116 g.render_volume_count_entry( row, ou_ids[i] );
119 g.error.sdump('D_ERROR',E);
126 var err_msg = $("commonStrings").getFormattedString('common.exception', ['cat/volume_copy_creator.js', E]);
127 try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); dump(js2JSON(E)); }
132 g.render_library_label = function(row,ou_id) {
133 var label = document.createElement('label'); row.appendChild(label);
134 label.setAttribute('ou_id',ou_id);
135 label.setAttribute('value',g.data.hash.aou[ ou_id ].shortname());
138 g.render_volume_count_entry = function(row,ou_id) {
139 var hb = document.createElement('vbox'); row.appendChild(hb);
140 var tb = document.createElement('textbox'); hb.appendChild(tb);
141 tb.setAttribute('ou_id',ou_id); tb.setAttribute('size','3'); tb.setAttribute('cols','3');
142 tb.setAttribute('rel_vert_pos','1');
143 if ( (!g.copy_shortcut) && (!g.last_focus) ) { tb.focus(); g.last_focus = tb; }
145 function render_copy_count_entry(ev) {
146 if (ev.target.disabled) return;
147 if (! isNaN( Number( ev.target.value) ) ) {
148 if ( Number( ev.target.value ) > g_max_copies_that_can_be_added_at_a_time_per_volume ) {
149 g.error.yns_alert($("catStrings").getFormattedString('staff.cat.volume_copy_creator.render_volume_count_entry.message', [g_max_copies_that_can_be_added_at_a_time_per_volume]),
150 $("catStrings").getString('staff.cat.volume_copy_creator.render_volume_count_entry.title'),
151 $("catStrings").getString('staff.cat.volume_copy_creator.render_volume_count_entry.ok_label'),null,null,'');
154 if (node) { row.removeChild(node); node = null; }
155 //ev.target.disabled = true;
156 node = g.render_callnumber_copy_count_entry(row,ou_id,ev.target.value);
159 util.widgets.apply_vertical_tab_on_enter_handler(
161 function() { render_copy_count_entry({'target':tb}); setTimeout(function(){util.widgets.vertical_tab(tb);},0); }
163 tb.addEventListener( 'change', render_copy_count_entry, false);
164 tb.addEventListener( 'focus', function(ev) { g.last_focus = ev.target; }, false );
168 if (g.copy_shortcut) {
169 JSAN.use('util.functional');
170 tb.value = util.functional.map_object_to_list(
171 g.copy_shortcut[ou_id],
173 return g.copy_shortcut[ou_id][i];
176 render_copy_count_entry({'target':tb});
186 g.render_callnumber_copy_count_entry = function(row,ou_id,count) {
187 var grid = util.widgets.make_grid( [ {}, {} ] ); row.appendChild(grid);
188 grid.setAttribute('flex','1');
189 grid.setAttribute('ou_id',ou_id);
190 var rows = grid.lastChild;
191 var r = document.createElement('row'); rows.appendChild( r );
192 var x = document.createElement('label'); r.appendChild(x);
193 x.setAttribute('value', $("catStrings").getString('staff.cat.volume_copy_creator.render_callnumber_copy_count_entry.call_nums')); x.setAttribute('style','font-weight: bold');
194 x = document.createElement('label'); r.appendChild(x);
195 x.setAttribute('value',$("catStrings").getString('staff.cat.volume_copy_creator.render_callnumber_copy_count_entry.num_of_copies')); x.setAttribute('style','font-weight: bold');
196 x.setAttribute('size','3'); x.setAttribute('cols','3');
198 function handle_change(call_number_column_textbox,number_of_copies_column_textbox,barcode_column_box) {
199 if (call_number_column_textbox.value == '') return;
200 if (isNaN( Number( number_of_copies_column_textbox.value ) )) return;
201 if ( Number( number_of_copies_column_textbox.value ) > g_max_copies_that_can_be_added_at_a_time_per_volume ) {
202 g.error.yns_alert($("catStrings").getFormattedString('staff.cat.volume_copy_creator.render_volume_count_entry.message', [g_max_copies_that_can_be_added_at_a_time_per_volume]),
203 $("catStrings").getString('staff.cat.volume_copy_creator.render_volume_count_entry.title'),
204 $("catStrings").getString('staff.cat.volume_copy_creator.render_volume_count_entry.ok_label'),null,null,'');
208 //if (call_number_column_textbox.disabled || number_of_copies_column_textbox.disabled) return;
210 //call_number_column_textbox.disabled = true;
211 //number_of_copies_column_textbox.disabled = true;
213 util.widgets.remove_children(barcode_column_box);
215 g.render_barcode_entry(barcode_column_box,call_number_column_textbox.value,Number(number_of_copies_column_textbox.value),ou_id);
216 document.getElementById("EditThenCreate").disabled = false;
217 document.getElementById("CreateWithDefaults").disabled = false;
220 function handle_change_call_number_column_textbox(ev) {
221 var _call_number_column_textbox = ev.target;
222 var _call_number_column_box = _call_number_column_textbox.parentNode;
223 var _number_of_copies_column_box = _call_number_column_box.nextSibling;
224 var _number_of_copies_column_textbox = _number_of_copies_column_box.firstChild;
225 var _barcode_column_box = _number_of_copies_column_box.nextSibling;
226 handle_change(_call_number_column_textbox,_number_of_copies_column_textbox,_barcode_column_box);
229 function handle_change_number_of_copies_column_textbox(ev) {
230 var _number_of_copies_column_textbox = ev.target;
231 var _number_of_copies_column_box = _number_of_copies_column_textbox.parentNode;
232 var _call_number_column_box = _number_of_copies_column_box.previousSibling;
233 var _call_number_column_textbox = _call_number_column_box.firstChild;
234 var _barcode_column_box = _number_of_copies_column_box.nextSibling;
235 handle_change(_call_number_column_textbox,_number_of_copies_column_textbox,_barcode_column_box);
238 for (var i = 0; i < count; i++) {
239 var r = document.createElement('row'); rows.appendChild(r);
240 var call_number_column_box = document.createElement('vbox'); r.appendChild(call_number_column_box);
241 var number_of_copies_column_box = document.createElement('vbox'); r.appendChild(number_of_copies_column_box);
242 var barcode_column_box = document.createElement('vbox'); r.appendChild(barcode_column_box);
243 var call_number_column_textbox = document.createElement('textbox'); call_number_column_box.appendChild(call_number_column_textbox);
244 call_number_column_textbox.setAttribute('rel_vert_pos','2');
245 call_number_column_textbox.setAttribute('ou_id',ou_id);
246 util.widgets.apply_vertical_tab_on_enter_handler(
247 call_number_column_textbox,
248 function() { handle_change_call_number_column_textbox({'target':call_number_column_textbox}); setTimeout(function(){util.widgets.vertical_tab(call_number_column_textbox);},0); }
250 var number_of_copies_column_textbox = document.createElement('textbox'); number_of_copies_column_box.appendChild(number_of_copies_column_textbox);
251 number_of_copies_column_textbox.setAttribute('size','3'); number_of_copies_column_textbox.setAttribute('cols','3');
252 number_of_copies_column_textbox.setAttribute('rel_vert_pos','3');
253 number_of_copies_column_textbox.setAttribute('ou_id',ou_id);
254 util.widgets.apply_vertical_tab_on_enter_handler(
255 number_of_copies_column_textbox,
256 function() { handle_change_number_of_copies_column_textbox({'target':number_of_copies_column_textbox}); setTimeout(function(){util.widgets.vertical_tab(number_of_copies_column_textbox);},0); }
259 call_number_column_textbox.addEventListener( 'change', handle_change_call_number_column_textbox, false);
260 call_number_column_textbox.addEventListener( 'focus', function(ev) { g.last_focus = ev.target; }, false );
261 number_of_copies_column_textbox.addEventListener( 'change', handle_change_number_of_copies_column_textbox, false);
262 number_of_copies_column_textbox.addEventListener( 'focus', function(ev) { g.last_focus = ev.target; }, false );
263 if ( !g.last_focus ) { number_of_copies_column_textbox.focus(); g.last_focus = number_of_copies_column_textbox; }
266 function(idx,call_number_column_textbox,number_of_copies_column_textbox){
269 JSAN.use('util.functional');
270 if (g.copy_shortcut) {
271 var label = util.functional.map_object_to_list(
272 g.copy_shortcut[ou_id],
277 if (g.org_label_existing_copy_map[ou_id]) {
278 var num_of_copies = g.org_label_existing_copy_map[ou_id][label].length;
279 if (num_of_copies>0) {
280 number_of_copies_column_textbox.value = num_of_copies;
281 number_of_copies_column_textbox.disabled = true;
284 call_number_column_textbox.value = label;
285 handle_change_call_number_column_textbox({'target':call_number_column_textbox});
286 call_number_column_textbox.disabled = true;
292 }(i,call_number_column_textbox,number_of_copies_column_textbox),0
299 g.render_barcode_entry = function(node,callnumber,count,ou_id) {
301 function ready_to_create(ev) {
302 document.getElementById("EditThenCreate").disabled = false;
303 document.getElementById("CreateWithDefaults").disabled = false;
306 JSAN.use('util.barcode');
308 for (var i = 0; i < count; i++) {
309 var tb = document.createElement('textbox'); node.appendChild(tb);
310 tb.setAttribute('ou_id',ou_id);
311 tb.setAttribute('callnumber',callnumber);
312 tb.setAttribute('rel_vert_pos','4');
313 if (g.org_label_existing_copy_map[ ou_id ]) {
314 tb.value = g.org_label_existing_copy_map[ ou_id ][ callnumber ][i].barcode();
315 tb.setAttribute('acp_id', g.org_label_existing_copy_map[ ou_id ][ callnumber ][i].id());
317 if (! g.first_focus) { g.first_focus = tb; }
319 util.widgets.apply_vertical_tab_on_enter_handler(
321 function() { ready_to_create({'target':tb}); setTimeout(function(){util.widgets.vertical_tab(tb);},0); }
323 tb.addEventListener('change', function(ev) {
324 var barcode = String( ev.target.value ).replace(/\s/g,'');
325 if (barcode != ev.target.value) ev.target.value = barcode;
326 if ($('check_barcodes').checked && ! util.barcode.check(barcode) ) {
327 g.error.yns_alert($("catStrings").getFormattedString('staff.cat.volume_copy_creator.render_barcode_entry.alert_message', [barcode]),
328 $("catStrings").getString('staff.cat.volume_copy_creator.render_barcode_entry.alert_title'),
329 $("catStrings").getString('staff.cat.volume_copy_creator.render_barcode_entry.alert_ok_button'),null,null,
330 $("catStrings").getString('staff.cat.volume_copy_creator.render_barcode_entry.alert_confirm'));
331 setTimeout( function() { ev.target.select(); ev.target.focus(); }, 0);
334 tb.addEventListener( 'focus', function(ev) { g.last_focus = ev.target; }, false );
337 setTimeout( function() { if (g.first_focus) { g.first_focus.focus(); } }, 0 );
340 g.error.sdump('D_ERROR','g.render_barcode_entry: ' + E);
344 g.generate_barcodes = function() {
346 var nodes = document.getElementsByAttribute('rel_vert_pos','4');
347 if (nodes.length < 1) { return; }
348 var first_barcode = nodes[0].value;
350 if (! first_barcode) { return; }
352 var barcodes = g.network.simple_request(
353 'AUTOGENERATE_BARCODES',
354 [ ses(), first_barcode, nodes.length - 1 ]
357 if (typeof barcodes.ilsevent != 'undefined') {
361 for (var i = 0; i < barcodes.length; i++) {
362 nodes[i+1].value = barcodes[i];
367 g.error.sdump('D_ERROR','g.generate_barcodes: ' + E);
373 g.stash_and_close = function(param) {
377 var nl = document.getElementsByTagName('textbox');
379 var volumes_hash = {};
383 for (var i = 0; i < nl.length; i++) {
384 if ( nl[i].getAttribute('rel_vert_pos') == 4 ) barcodes.push( nl[i] );
385 if ( nl[i].getAttribute('rel_vert_pos') == 2 ) {
386 var ou_id = nl[i].getAttribute('ou_id');
387 var callnumber = nl[i].value;
388 if (typeof volumes_hash[ou_id] == 'undefined') { volumes_hash[ou_id] = {} }
389 if (typeof volumes_hash[ou_id][callnumber] == 'undefined') { volumes_hash[ou_id][callnumber] = [] }
393 for (var i = 0; i < barcodes.length; i++) {
394 var acp_id = barcodes[i].getAttribute('acp_id') || g.new_node_id--;
395 var ou_id = barcodes[i].getAttribute('ou_id');
396 var callnumber = barcodes[i].getAttribute('callnumber');
397 var barcode = barcodes[i].value;
399 if (typeof volumes_hash[ou_id] == 'undefined') { volumes_hash[ou_id] = {} }
400 if (typeof volumes_hash[ou_id][callnumber] == 'undefined') { volumes_hash[ou_id][callnumber] = [] }
402 if (barcode != '') volumes_hash[ou_id][callnumber].push( { 'barcode' : barcode, 'acp_id' : acp_id } );
407 var volume_labels = {};
409 function new_copy(acp_id,ou_id,acn_id,barcode) {
410 var copy = new acp();
413 copy.barcode( barcode );
414 copy.call_number( acn_id );
415 copy.circ_lib(ou_id);
416 /* FIXME -- use constants */
419 copy.deposit_amount(0);
421 copy.loan_duration(2);
424 copy.circulate(get_db_true());
425 copy.holdable(get_db_true());
426 copy.opac_visible(get_db_true());
427 copy.ref(get_db_false());
431 for (var ou_id in volumes_hash) {
432 for (var cn_label in volumes_hash[ou_id]) {
434 var acn_id = g.network.simple_request(
435 'FM_ACN_FIND_OR_CREATE',
436 [ ses(), cn_label, g.doc_id, ou_id ]
439 if (typeof acn_id.ilsevent != 'undefined') {
440 g.error.standard_unexpected_error_alert($("catStrings").getFormattedString('staff.cat.volume_copy_creator.stash_and_close.problem_with_volume', [cn]), acn_id);
444 volume_labels[ acn_id ] = { 'label' : cn_label, 'owning_lib' : ou_id };
446 for (var i = 0; i < volumes_hash[ou_id][cn_label].length; i++) {
447 var barcode = volumes_hash[ou_id][cn_label][i].barcode;
448 var acp_id = volumes_hash[ou_id][cn_label][i].acp_id;
451 copy = new_copy(acp_id,ou_id,acn_id,barcode);
453 copy = g.id_copy_map[ acp_id ];
454 copy.barcode( barcode );
455 copy.call_number( copy.call_number().id() );
463 JSAN.use('util.window'); var win = new util.window();
464 if (copies.length > 0) {
465 JSAN.use('cat.util');
466 if (param == 'edit') {
467 copies = cat.util.spawn_copy_editor( { 'edit' : true, 'docid' : g.doc_id, 'copies' : copies, 'caller_handles_update' : true });
469 if (typeof xul_param('update_copy') == 'function') {
470 xul_param('update_copy')(copies);
472 var r = g.network.simple_request(
473 'FM_ACP_FLESHED_BATCH_UPDATE',
474 [ ses(),copies, true ]
476 if (typeof r.ilsevent != 'undefined') {
477 g.error.standard_unexpected_error_alert('copy update',r);
481 //case 1706 /* ITEM_BARCODE_EXISTS */ :
482 if (copies && copies.length > 0 && $('print_labels').checked) {
483 JSAN.use('util.functional');
484 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.stash_retrieve();
485 data.temp_barcodes_for_labels = util.functional.map_list( copies, function(o){return o.barcode();}) ;
486 data.stash('temp_barcodes_for_labels');
488 urls.XUL_SPINE_LABEL,
490 'chrome,resizable,width=750,height=550'
494 g.error.standard_unexpected_error_alert($(catStrings).getString('staff.cat.volume_copy_creator.stash_and_close.tree_err2'),E);
498 if (typeof window.refresh == 'function') { window.refresh(); }
499 if (typeof g.refresh == 'function') { g.refresh(); }
504 g.error.standard_unexpected_error_alert($(catStrings).getString('staff.cat.volume_copy_creator.stash_and_close.tree_err3'),E);
508 g.load_prefs = function() {
510 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
511 JSAN.use('util.file'); var file = new util.file('volume_copy_creator.prefs');
512 if (file._file.exists()) {
513 var prefs = file.get_object(); file.close();
514 if (prefs.check_barcodes) {
515 if ( prefs.check_barcodes == 'false' ) {
516 $('check_barcodes').checked = false;
518 $('check_barcodes').checked = prefs.check_barcodes;
521 $('check_barcodes').checked = false;
523 if (prefs.print_labels) {
524 if ( prefs.print_labels == 'false' ) {
525 $('print_labels').checked = false;
527 $('print_labels').checked = prefs.print_labels;
530 $('print_labels').checked = false;
535 g.error.standard_unexpected_error_alert($(catStrings).getString('staff.cat.volume_copy_creator.load_prefs.err_retrieving_prefs'),E);
540 g.save_prefs = function () {
542 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
543 JSAN.use('util.file'); var file = new util.file('volume_copy_creator.prefs');
546 'check_barcodes' : $('check_barcodes').checked,
547 'print_labels' : $('print_labels').checked,
552 g.error.standard_unexpected_error_alert($(catStrings).getString('staff.cat.volume_copy_creator.save_prefs.err_storing_prefs'),E);
556 g.list_callnumbers = function(doc_id, label_class) {
559 cn_blob = g.network.simple_request('BLOB_MARC_CALLNUMBERS_RETRIEVE',[g.doc_id, label_class]);
563 var hbox = document.getElementById('marc_cn');
564 var ml = util.widgets.make_menulist(
565 util.functional.map_list(
575 if (a == '082') return -1;
576 if (b == '082') return 1;
577 if (a == '092') return -1;
578 if (b == '092') return 1;
579 if (a < b) return -1;
584 ); hbox.appendChild(ml);
585 ml.setAttribute('editable','true');
586 ml.setAttribute('width', '200');
587 var btn = document.createElement('button');
588 btn.setAttribute('label',$('catStrings').getString('staff.cat.volume_copy_creator.my_init.btn.label'));
589 btn.setAttribute('accesskey',$('catStrings').getString('staff.cat.volume_copy_creator.my_init.btn.accesskey'));
590 btn.setAttribute('image','/xul/server/skin/media/images/down_arrow.gif');
591 hbox.appendChild(btn);
592 btn.addEventListener(
595 var nl = document.getElementsByTagName('textbox');
596 for (var i = 0; i < nl.length; i++) {
597 if (nl[i].getAttribute('rel_vert_pos')==2
598 && !nl[i].disabled) nl[i].value = ml.value;
600 if (g.last_focus) setTimeout( function() { g.last_focus.focus(); }, 0 );