1 dump('entering main/menu.js\n');
3 if (typeof main == 'undefined') main = {};
4 main.menu = function () {
6 JSAN.use('util.error'); this.error = new util.error();
7 JSAN.use('util.window'); this.window = new util.window();
12 main.menu.prototype = {
16 'url_prefix' : function(url) {
17 if (url.match(/^\//)) url = urls.remote + url;
18 if (! url.match(/^(http|chrome):\/\//) && ! url.match(/^data:/) ) url = 'http://' + url;
19 dump('url_prefix = ' + url + '\n');
23 'init' : function( params ) {
25 urls.remote = params['server'];
29 JSAN.use('OpenILS.data'); obj.data = new OpenILS.data(); obj.data.init({'via':'stash'});
34 function() { alert('Not Yet Implemented'); }
38 'cmd_close_window' : [
40 function() { window.close(); }
45 obj.data.stash_retrieve();
47 obj.url_prefix(urls.XUL_MENU_FRAME)
48 + '?server='+window.escape(urls.remote),
49 'main' + obj.window.window_name_increment(),
55 function() { obj.new_tab(null,{'focus':true},null); }
59 function() { obj.close_tab(); }
61 'cmd_close_all_tabs' : [
63 function() { obj.close_all_tabs(); }
67 'cmd_edit_copy_buckets' : [
70 obj.data.stash_retrieve();
71 obj.set_tab(obj.url_prefix(urls.XUL_COPY_BUCKETS),{'tab_name':'Copy Buckets'},{});
74 'cmd_edit_volume_buckets' : [
77 obj.data.stash_retrieve();
78 obj.set_tab(obj.url_prefix(urls.XUL_VOLUME_BUCKETS),{'tab_name':'Volume Buckets'},{});
81 'cmd_edit_record_buckets' : [
84 obj.data.stash_retrieve();
85 obj.set_tab(obj.url_prefix(urls.XUL_RECORD_BUCKETS),{'tab_name':'Record Buckets'},{});
88 'cmd_edit_user_buckets' : [
91 obj.data.stash_retrieve();
92 obj.set_tab(obj.url_prefix(urls.XUL_USER_BUCKETS),{'tab_name':'User Buckets'},{});
97 'cmd_replace_barcode' : [
101 JSAN.use('util.network');
102 var network = new util.network();
104 var old_bc = window.prompt('Enter original barcode for the item:','','Replace Barcode');
109 copy = network.simple_request('FM_ACP_RETRIEVE_VIA_BARCODE',[ old_bc ]);
110 if (typeof copy.ilsevent != 'undefined') throw(copy);
111 if (!copy) throw(copy);
113 alert('We were unable to retrieve an item with barcode "' + old_bc + '".\n');
117 // Why did I want to do this twice? Because this copy is more fleshed?
119 copy = network.simple_request('FM_ACP_RETRIEVE',[ copy.id() ]);
120 if (typeof copy.ilsevent != 'undefined') throw(copy);
121 if (!copy) throw(copy);
123 try { alert('We were unable to retrieve an item with barcode "' + old_bc + '".\n' + (typeof E.ilsevent == 'undefined' ? '' : E.textcode + ' : ' + E.desc)); } catch(F) { alert(E + '\n' + F); }
127 var new_bc = window.prompt('Enter the replacement barcode for the copy:','','Replace Barcode');
128 new_bc = String( new_bc ).replace(/\s/g,'');
130 alert('Rename aborted. Blank for barcode not allowed.');
134 var test = network.simple_request('FM_ACP_RETRIEVE_VIA_BARCODE',[ new_bc ]);
135 if (typeof test.ilsevent == 'undefined') {
136 alert('Rename aborted. Another copy has barcode "' + new_bc + '".');
139 if (test.ilsevent != 1502 /* ASSET_COPY_NOT_FOUND */) {
140 obj.error.standard_unexpected_error_alert('Error testing replacement barcode "' + new_bc + '".',test);
145 copy.barcode(new_bc); copy.ischanged('1');
146 var r = network.simple_request('FM_ACP_FLESHED_BATCH_UPDATE', [ ses(), [ copy ] ]);
147 if (typeof r.ilsevent != 'undefined') {
148 if (r.ilsevent != 0) {
149 if (r.ilsevent == 5000 /* PERM_FAILURE */) {
150 alert('Renamed aborted. Insufficient permission.');
152 obj.error.standard_unexpected_error_alert('Error renaming item.',r);
157 obj.error.standard_unexpected_error_alert('Rename did not likely occur.',copy);
163 'cmd_patron_search' : [
166 obj.data.stash_retrieve();
167 obj.set_tab(obj.url_prefix(urls.XUL_PATRON_DISPLAY),{},{});
170 'cmd_search_opac' : [
173 obj.data.stash_retrieve();
174 var content_params = { 'session' : ses(), 'authtime' : ses('authtime') };
175 obj.set_tab(obj.url_prefix(urls.XUL_OPAC_WRAPPER), {'tab_name':'Catalog'}, content_params);
181 var tcn = prompt('What is the TCN or accession ID for the record?','','TCN Lookup');
183 function spawn_tcn(r) {
184 for (var i = 0; i < r.count; i++) {
186 var opac_url = obj.url_prefix( urls.opac_rdetail ) + '?r=' + id;
187 obj.data.stash_retrieve();
188 var content_params = {
190 'authtime' : ses('authtime'),
191 'opac_url' : opac_url,
195 obj.url_prefix(urls.XUL_OPAC_WRAPPER),
201 obj.url_prefix(urls.XUL_OPAC_WRAPPER),
210 JSAN.use('util.network');
211 var network = new util.network();
212 var robj = network.simple_request('FM_BRE_ID_SEARCH_VIA_TCN',[tcn]);
213 if (robj.count != robj.ids.length) throw('FIXME -- FM_BRE_ID_SEARCH_VIA_TCN = ' + js2JSON(robj));
214 if (robj.count == 0) {
215 var robj2 = network.simple_request('FM_BRE_ID_SEARCH_VIA_TCN',[tcn,1]);
216 if (robj2.count == 0) {
217 alert('"' + tcn + '" not found');
219 if ( window.confirm('"' + tcn + '" is deleted. Show deleted record anyway?') ) {
229 'cmd_copy_status' : [
232 obj.data.stash_retrieve();
233 obj.set_tab(obj.url_prefix(urls.XUL_COPY_STATUS),{},{});
237 /* Circulation Menu */
238 'cmd_patron_register' : [
241 function spawn_editor(p) {
242 var url = urls.XUL_PATRON_EDIT;
245 if (param_count++ == 0) url += '?'; else url += '&';
246 url += i + '=' + window.escape(p[i]);
248 var loc = obj.url_prefix( urls.XUL_REMOTE_BROWSER ) + '?url=' + window.escape( url );
253 'show_print_button' : true ,
254 'tab_name' : 'Editing Related Patron' ,
255 'passthru_content_params' : {
256 'spawn_search' : function(s) { obj.spawn_search(s); },
257 'spawn_editor' : spawn_editor,
263 obj.data.stash_retrieve();
264 var loc = obj.url_prefix( urls.XUL_REMOTE_BROWSER )
265 + '?url=' + window.escape( urls.XUL_PATRON_EDIT + '?ses=' + window.escape( ses() ) );
270 'show_print_button' : true ,
271 'tab_name' : 'Register Patron' ,
272 'passthru_content_params' : {
273 'spawn_search' : function(s) { obj.spawn_search(s); },
274 'spawn_editor' : spawn_editor,
280 'cmd_circ_checkin' : [
283 obj.data.stash_retrieve();
284 obj.set_tab(obj.url_prefix(urls.XUL_CHECKIN),{},{});
287 'cmd_circ_checkout' : [
290 obj.data.stash_retrieve();
291 obj.set_tab(obj.url_prefix(urls.XUL_PATRON_BARCODE_ENTRY),{},{});
294 'cmd_circ_hold_capture' : [
297 obj.data.stash_retrieve();
298 obj.set_tab(obj.url_prefix(urls.XUL_CHECKIN)+'?hold_capture=1',{},{});
301 'cmd_browse_holds' : [
304 obj.data.stash_retrieve();
305 obj.set_tab(obj.url_prefix(urls.XUL_HOLDS_BROWSER),{ 'tab_name' : 'Hold Browser' },{});
308 'cmd_browse_holds_shelf' : [
311 obj.data.stash_retrieve();
312 obj.set_tab(obj.url_prefix(urls.XUL_HOLDS_BROWSER)+'?shelf=1',{ 'tab_name' : 'Holds Shelf' },{});
315 'cmd_circ_hold_pull_list' : [
318 obj.data.stash_retrieve();
319 var loc = urls.XUL_REMOTE_BROWSER + '?url=' + window.escape(
320 obj.url_prefix(urls.XUL_HOLD_PULL_LIST) + '?ses='+window.escape(ses())
322 obj.set_tab( loc, {'tab_name':'On Shelf Pull List'}, { 'show_print_button' : true, } );
326 'cmd_in_house_use' : [
329 obj.data.stash_retrieve();
330 obj.set_tab(obj.url_prefix(urls.XUL_IN_HOUSE_USE),{},{});
337 obj.set_tab(obj.url_prefix(urls.XUL_STANDALONE),{},{});
341 'cmd_local_admin' : [
344 //obj.set_tab(obj.url_prefix(urls.XUL_LOCAL_ADMIN)+'?ses='+window.escape(ses())+'&session='+window.escape(ses()),{},{});
345 var loc = urls.XUL_REMOTE_BROWSER + '?url=' + window.escape(
346 urls.XUL_LOCAL_ADMIN+'?ses='+window.escape(ses())+'&session='+window.escape(ses())
350 {'tab_name':'Local Administration', 'browser' : true },
351 { 'no_xulG' : false, 'show_nav_buttons' : true, 'show_print_button' : true }
361 JSAN.use('util.print'); var print = new util.print();
362 print.reprint_last();
369 'cmd_retrieve_last_patron' : [
372 obj.data.stash_retrieve();
373 if (!obj.data.last_patron) {
374 alert('No patron visited yet this session.');
377 var url = obj.url_prefix( urls.XUL_PATRON_DISPLAY ); // + '?id=' + window.escape( obj.data.last_patron ) );
378 obj.set_tab( url, {}, { 'id' : obj.data.last_patron } );
382 'cmd_retrieve_last_record' : [
385 obj.data.stash_retrieve();
386 if (!obj.data.last_record) {
387 alert('No record visited yet this session.');
390 var opac_url = obj.url_prefix( urls.opac_rdetail ) + '?r=' + obj.data.last_record;
391 var content_params = {
393 'authtime' : ses('authtime'),
394 'opac_url' : opac_url,
397 obj.url_prefix(urls.XUL_OPAC_WRAPPER),
398 {'tab_name':'Retrieving title...'},
405 /* Cataloging Menu */
406 'cmd_z39_50_import' : [
409 obj.data.stash_retrieve();
410 obj.set_tab(obj.url_prefix(urls.XUL_Z3950_IMPORT),{},{});
413 'cmd_create_marc' : [
416 obj.data.stash_retrieve();
417 obj.set_tab(obj.url_prefix(urls.XUL_MARC_NEW),{},{});
422 'cmd_change_session' : [
426 obj.data.stash_retrieve();
427 JSAN.use('util.network'); var network = new util.network();
428 var x = document.getElementById('oc_menuitem');
429 var x_label = x.getAttribute('label_orig');
430 var temp_au = js2JSON( obj.data.list.au[0] );
431 var temp_ses = js2JSON( obj.data.session );
432 if (obj.data.list.au.length > 1) {
433 obj.data.list.au = [ obj.data.list.au[1] ];
434 obj.data.stash('list');
435 network.reset_titlebars( obj.data );
436 x.setAttribute('label', x_label );
437 network.simple_request('AUTH_DELETE', [ obj.data.session.key ] );
438 obj.data.session = obj.data.previous_session;
439 obj.data.stash('session');
440 removeCSSClass(document.getElementById('main_tabbox'),'operator_change');
442 if (network.get_new_session('Change Login',{'url_prefix':obj.url_prefix})) {
443 obj.data.stash_retrieve();
444 obj.data.list.au[1] = JSON2js( temp_au );
445 obj.data.stash('list');
446 obj.data.previous_session = JSON2js( temp_ses );
447 obj.data.stash('previous_session');
448 x.setAttribute('label', 'Change Operator: ' + obj.data.list.au[1].usrname() );
449 addCSSClass(document.getElementById('main_tabbox'),'operator_change');
453 obj.error.standard_unexpected_error_alert('cmd_change_session',E);
457 'cmd_manage_offline_xacts' : [
460 obj.set_tab(obj.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS), {'tab_name':'Offline Transactions'}, {});
463 'cmd_download_patrons' : [
467 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
468 var x = new XMLHttpRequest();
469 var url = 'http://' + XML_HTTP_SERVER + '/standalone/list.txt';
470 x.open("GET",url,false);
472 if (x.status == 200) {
473 JSAN.use('util.file'); var file = new util.file('offline_patron_list');
474 file.write_content('truncate',x.responseText);
476 file = new util.file('offline_patron_list.date');
477 file.write_content('truncate',new Date());
479 alert('Download completed');
481 alert('There was a problem with the download. The server returned a status ' + x.status + ' : ' + x.statusText);
484 obj.error.standard_unexpected_error_alert('cmd_download_patrons',E);
488 'cmd_adv_user_edit' : [
491 obj.data.stash_retrieve();
492 obj.set_tab(obj.url_prefix(urls.XUL_ADV_USER_BARCODE_ENTRY), {}, {});
495 'cmd_print_list_template_edit' : [
498 obj.data.stash_retrieve();
499 obj.set_tab(obj.url_prefix(urls.XUL_PRINT_LIST_TEMPLATE_EDITOR), {}, {});
502 'cmd_stat_cat_edit' : [
505 obj.data.stash_retrieve();
506 obj.set_tab(obj.url_prefix(urls.XUL_STAT_CAT_EDIT) + '?ses='+window.escape(ses()),{'tab_name':'Stat Cat Editor'},{});
509 'cmd_non_cat_type_edit' : [
512 obj.data.stash_retrieve();
513 obj.set_tab(obj.url_prefix(urls.XUL_NON_CAT_LABEL_EDIT) + '?ses='+window.escape(ses()),{'tab_name':'Non-Cataloged Type Editor'},{});
516 'cmd_copy_location_edit' : [
519 obj.data.stash_retrieve();
520 obj.set_tab(obj.url_prefix(urls.XUL_COPY_LOCATION_EDIT) + '?ses='+window.escape(ses()),{'tab_name':'Copy Location Editor'},{});
526 obj.data.stash_retrieve();
527 var content_params = { 'session' : ses(), 'authtime' : ses('authtime') };
528 obj.set_tab(obj.url_prefix(urls.XUL_OPAC_WRAPPER), {}, content_params);
534 obj.data.stash_retrieve();
535 obj.set_tab(obj.url_prefix(urls.TEST_HTML) + '?ses='+window.escape(ses()),{ 'browser' : true },{});
541 obj.data.stash_retrieve();
542 obj.set_tab(obj.url_prefix(urls.TEST_XUL) + '?ses='+window.escape(ses()),{ 'browser' : true },{});
548 obj.set_tab(obj.url_prefix(urls.XUL_DEBUG_CONSOLE),{'tab_name':'Console'},{});
554 obj.set_tab(obj.url_prefix(urls.XUL_DEBUG_SHELL),{'tab_name':'JS Shell'},{});
560 obj.set_tab(obj.url_prefix(urls.XUL_DEBUG_XULEDITOR),{'tab_name':'XUL Editor'},{});
563 'cmd_fieldmapper' : [
566 obj.set_tab(obj.url_prefix(urls.XUL_DEBUG_FIELDMAPPER),{'tab_name':'Fieldmapper'},{});
569 'cmd_survey_wizard' : [
572 obj.data.stash_retrieve();
573 obj.window.open(obj.url_prefix(urls.XUL_SURVEY_WIZARD),'survey_wizard','chrome');
576 'cmd_public_opac' : [
579 var loc = urls.XUL_REMOTE_BROWSER + '?url=' + window.escape(
584 {'tab_name':'OPAC', 'browser' : true},
585 { 'no_xulG' : true, 'show_nav_buttons' : true, 'show_print_button' : true }
589 'cmd_clear_cache' : [
591 function clear_the_cache() {
593 var cacheClass = Components.classes["@mozilla.org/network/cache-service;1"];
594 var cacheService = cacheClass.getService(Components.interfaces.nsICacheService);
595 cacheService.evictEntries(Components.interfaces.nsICache.STORE_ON_DISK);
596 cacheService.evictEntries(Components.interfaces.nsICache.STORE_IN_MEMORY);
598 dump(E+'\n');alert(E);
602 'cmd_restore_all_tabs' : [
605 var tabs = obj.controller.view.tabs;
606 for (var i = 0; i < tabs.childNodes.length; i++) {
607 tabs.childNodes[i].hidden = false;
611 'cmd_extension_manager' : [
614 obj.set_tab('chrome://mozapps/content/extensions/extensions.xul?type=extensions',{'tab_name':'Extension Manager'},{});
617 'cmd_theme_manager' : [
620 obj.set_tab('chrome://mozapps/content/extensions/extensions.xul?type=themes',{'tab_name':'Theme Manager'},{});
623 'cmd_about_config' : [
626 obj.set_tab('chrome://global/content/config.xul',{'tab_name':'about:config'},{});
632 if (window.confirm('Exit Evergreen completely?')) {
633 var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService();
634 var windowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator);
635 var enumerator = windowManagerInterface.getEnumerator(null);
636 var w; // close all other windows
637 while ( w = enumerator.getNext() ) {
638 if (w != window) w.close();
646 JSAN.use('util.controller');
648 obj.controller = new util.controller();
649 obj.controller.init( { 'window_knows_me_by' : 'g.menu.controller', 'control_map' : cmd_map } );
651 obj.controller.view.tabbox = window.document.getElementById('main_tabbox');
652 obj.controller.view.tabs = obj.controller.view.tabbox.firstChild;
653 obj.controller.view.panels = obj.controller.view.tabbox.lastChild;
655 obj.new_tab(null,{'focus':true},null);
657 obj.init_tab_focus_handlers();
660 'spawn_search' : function(s) {
662 obj.error.sdump('D_TRACE', 'Editor would like to search for: ' + js2JSON(s) );
663 obj.data.stash_retrieve();
664 var loc = obj.url_prefix(urls.XUL_PATRON_DISPLAY);
665 loc += '?doit=1&query=' + window.escape(js2JSON(s));
666 obj.new_tab( loc, {}, {} );
669 'init_tab_focus_handlers' : function() {
671 for (var i = 0; i < obj.controller.view.tabs.childNodes.length; i++) {
672 var tab = obj.controller.view.tabs.childNodes[i];
673 var panel = obj.controller.view.panels.childNodes[i];
674 tab.addEventListener(
681 && ( p.firstChild.nodeName == 'iframe' || p.firstChild.nodeName == 'browser' )
682 && p.firstChild.contentWindow
684 if (typeof p.firstChild.contentWindow.default_focus == 'function') {
685 p.firstChild.contentWindow.default_focus();
687 //p.firstChild.contentWindow.firstChild.focus();
691 obj.error.sdump('D_ERROR','init_tab_focus_handler: ' + js2JSON(E));
700 'close_all_tabs' : function() {
703 var count = obj.controller.view.tabs.childNodes.length;
704 for (var i = 0; i < count; i++) obj.close_tab();
705 setTimeout( function(){ obj.controller.view.tabs.firstChild.focus(); }, 0);
707 obj.error.standard_unexpected_error_alert('Error closing all tabs',E);
711 'close_tab' : function () {
712 var idx = this.controller.view.tabs.selectedIndex;
713 var tab = this.controller.view.tabs.childNodes[idx];
714 var panel = this.controller.view.panels.childNodes[ idx ];
715 while ( panel.lastChild ) panel.removeChild( panel.lastChild );
716 tab.setAttribute('label','Tab ' + (idx+1));
719 this.controller.view.tabs.advanceSelectedTab(+1);
721 this.error.sdump('D_TAB','failed tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n');
723 this.controller.view.tabs.advanceSelectedTab(-1);
725 this.error.sdump('D_TAB','failed again tabs.advanceSelectedTab(-1):'+
731 this.controller.view.tabs.advanceSelectedTab(-1);
733 this.error.sdump('D_TAB','failed tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n');
735 this.controller.view.tabs.advanceSelectedTab(+1);
737 this.error.sdump('D_TAB','failed again tabs.advanceSelectedTab(+1):'+
744 this.error.sdump('D_TAB','\tnew tabbox.selectedIndex = ' + this.controller.view.tabbox.selectedIndex + '\n');
746 this.controller.view.tabs.childNodes[ idx ].hidden = true;
747 this.error.sdump('D_TAB','tabs.childNodes[ ' + idx + ' ].hidden = true;\n');
749 // Make sure we keep at least one tab open.
751 for (var i = 0; i < this.controller.view.tabs.childNodes.length; i++) {
752 var tab = this.controller.view.tabs.childNodes[i];
757 this.controller.view.tabs.selectedIndex = 0;
762 'find_free_tab' : function() {
763 var last_not_hidden = -1;
764 for (var i = 0; i<this.controller.view.tabs.childNodes.length; i++) {
765 var tab = this.controller.view.tabs.childNodes[i];
769 if (last_not_hidden == this.controller.view.tabs.childNodes.length - 1)
770 last_not_hidden = -1;
771 // If the one next to last_not_hidden is hidden, we want it.
772 // Basically, we fill in tabs after existing tabs for as
774 var idx = last_not_hidden + 1;
775 var candidate = this.controller.view.tabs.childNodes[ idx ];
776 if (candidate.hidden)
778 // Alright, find the first hidden then
779 for (var i = 0; i<this.controller.view.tabs.childNodes.length; i++) {
780 var tab = this.controller.view.tabs.childNodes[i];
787 'new_tab' : function(url,params,content_params) {
788 var tc = this.find_free_tab();
789 if (tc == -1) { return null; } // 9 tabs max
790 var tab = this.controller.view.tabs.childNodes[ tc ];
792 if (!content_params) content_params = {};
793 if (!params) params = { 'tab_name' : 'Tab ' + (tc+1) };
794 if (!params.nofocus) params.focus = true; /* make focus the default */
796 if (params.focus) this.controller.view.tabs.selectedIndex = tc;
798 this.set_tab(url,params,content_params);
800 this.error.sdump('D_ERROR',E);
804 'set_tab' : function(url,params,content_params) {
806 if (!url) url = '/xul/server/';
807 if (!url.match(/:\/\//) && !url.match(/^data:/)) url = urls.remote + url;
808 if (!params) params = {};
809 if (!content_params) content_params = {};
810 var idx = this.controller.view.tabs.selectedIndex;
811 if (params && typeof params.index != 'undefined') idx = params.index;
812 var tab = this.controller.view.tabs.childNodes[ idx ];
813 var panel = this.controller.view.panels.childNodes[ idx ];
814 while ( panel.lastChild ) panel.removeChild( panel.lastChild );
816 content_params.new_tab = function(a,b,c) { return obj.new_tab(a,b,c); };
817 content_params.set_tab = function(a,b,c) { return obj.set_tab(a,b,c); };
818 content_params.set_tab_name = function(name) { tab.setAttribute('label',(idx + 1) + ' ' + name); };
819 content_params.open_chrome_window = function(a,b,c) { return obj.window.open(a,b,c); };
820 content_params.url_prefix = function(url) { return obj.url_prefix(url); };
821 if (params && params.tab_name) content_params.set_tab_name( params.tab_name );
825 if (params && typeof params.browser != 'undefined') {
827 frame = this.w.document.createElement('browser');
828 frame.setAttribute('flex','1');
829 frame.setAttribute('type','content');
830 frame.setAttribute('id','frame_'+obj.id_incr);
831 panel.appendChild(frame);
833 dump('creating browser with src = ' + url + '\n');
834 JSAN.use('util.browser');
835 var b = new util.browser();
841 'browser_id' : 'frame_'+obj.id_incr,
842 'passthru_content_params' : content_params,
849 frame = this.w.document.createElement('iframe');
850 frame.setAttribute('flex','1');
851 panel.appendChild(frame);
852 dump('creating iframe with src = ' + url + '\n');
853 frame.setAttribute('src',url);
855 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
856 var cw = frame.contentWindow;
857 if (typeof cw.wrappedJSObject != 'undefined') cw = cw.wrappedJSObject;
859 cw.xulG = content_params;
861 this.error.sdump('D_ERROR', 'main.menu: ' + E);
865 this.error.sdump('D_ERROR', 'main.menu:2: ' + E);
866 alert('pause for error');
874 dump('exiting main/menu.js\n');