]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/main/menu.js
created an Acqusitions menu with a couple of menu entries. experimental, probably...
[Evergreen.git] / Open-ILS / xul / staff_client / chrome / content / main / menu.js
1 dump('entering main/menu.js\n');
2 // vim:noet:sw=4:ts=4:
3
4 var offlineStrings;
5
6 if (typeof main == 'undefined') main = {};
7 main.menu = function () {
8
9     netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
10     offlineStrings = document.getElementById('offlineStrings');
11         JSAN.use('util.error'); this.error = new util.error();
12         JSAN.use('util.window'); this.window = new util.window();
13
14         this.w = window;
15     var x = document.getElementById('network_progress');
16     x.setAttribute('count','0');
17     x.addEventListener(
18         'click',
19         function() {
20             if ( window.confirm(offlineStrings.getString('menu.reset_network_stats')) ) {
21                 var y = document.getElementById('network_progress_rows');
22                 while(y.firstChild) { y.removeChild( y.lastChild ); }
23                 x.setAttribute('mode','determined');
24                 x.setAttribute('count','0');
25             }
26         },
27         false
28     );
29
30         if (xulG.pref.getBoolPref('open-ils.disable_accesskeys_on_tabs')) {
31                 var tabs = document.getElementById('main_tabs');
32                 for (var i = 0; i < tabs.childNodes.length; i++) {
33                         tabs.childNodes[i].setAttribute('accesskey','');
34                 }
35         }
36 }
37
38 main.menu.prototype = {
39
40         'id_incr' : 0,
41
42         'url_prefix' : function(url) {
43                 if (url.match(/^\//)) url = urls.remote + url;
44                 if (! url.match(/^(http|chrome):\/\//) && ! url.match(/^data:/) ) url = 'http://' + url;
45                 dump('url_prefix = ' + url + '\n');
46                 return url;
47         },
48
49         'init' : function( params ) {
50
51                 urls.remote = params['server'];
52
53                 var obj = this;
54
55                 JSAN.use('OpenILS.data'); obj.data = new OpenILS.data(); obj.data.init({'via':'stash'});
56
57         var button_bar = String( obj.data.hash.aous['ui.general.button_bar'] ) == 'true';
58         if (button_bar) {
59             var x = document.getElementById('main_toolbar');
60             if (x) x.setAttribute('hidden','false');
61         }
62
63                 var cmd_map = {
64                         'cmd_broken' : [
65                                 ['oncommand'],
66                                 function() { alert(offlineStrings.getString('common.unimplemented')); }
67                         ],
68
69                         /* File Menu */
70                         'cmd_close_window' : [ 
71                                 ['oncommand'], 
72                                 function() { window.close(); } 
73                         ],
74                         'cmd_new_window' : [
75                                 ['oncommand'],
76                                 function() {
77                                         obj.data.stash_retrieve();
78                                         var mframe = obj.window.open(
79                                                 obj.url_prefix(urls.XUL_MENU_FRAME)
80                                                 + '?server='+window.escape(urls.remote),
81                                                 'main' + obj.window.window_name_increment(),
82                                                 'chrome,resizable'); 
83                     netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
84                     mframe.xulG = xulG;
85                                 }
86                         ],
87                         'cmd_new_tab' : [
88                                 ['oncommand'],
89                                 function() { obj.new_tab(null,{'focus':true},null); }
90                         ],
91                         'cmd_close_tab' : [
92                                 ['oncommand'],
93                                 function() { obj.close_tab(); }
94                         ],
95                         'cmd_close_all_tabs' : [
96                                 ['oncommand'],
97                                 function() { obj.close_all_tabs(); }
98                         ],
99
100                         /* Edit Menu */
101                         'cmd_edit_copy_buckets' : [
102                                 ['oncommand'],
103                                 function() {
104                                         obj.data.stash_retrieve();
105                                         obj.set_tab(obj.url_prefix(urls.XUL_COPY_BUCKETS),{'tab_name':offlineStrings.getString('menu.cmd_edit_copy_buckets.tab')},{});
106                                 }
107                         ],
108                         'cmd_edit_volume_buckets' : [
109                                 ['oncommand'],
110                                 function() {
111                                         obj.data.stash_retrieve();
112                                         obj.set_tab(obj.url_prefix(urls.XUL_VOLUME_BUCKETS),{'tab_name':offlineStrings.getString('menu.cmd_edit_volume_buckets.tab')},{});
113                                 }
114                         ],
115                         'cmd_edit_record_buckets' : [
116                                 ['oncommand'],
117                                 function() {
118                                         obj.data.stash_retrieve();
119                                         obj.set_tab(obj.url_prefix(urls.XUL_RECORD_BUCKETS),{'tab_name':offlineStrings.getString('menu.cmd_edit_record_buckets.tab')},{});
120                                 }
121                         ],
122                         'cmd_edit_user_buckets' : [
123                                 ['oncommand'],
124                                 function() {
125                                         obj.data.stash_retrieve();
126                                         obj.set_tab(obj.url_prefix(urls.XUL_USER_BUCKETS),{'tab_name':offlineStrings.getString('menu.cmd_edit_user_buckets.tab')},{});
127                                 }
128                         ],
129
130
131                         'cmd_replace_barcode' : [
132                                 ['oncommand'],
133                                 function() {
134                                         try {
135                                                 JSAN.use('util.network');
136                                                 var network = new util.network();
137
138                                                 var old_bc = window.prompt(offlineStrings.getString('menu.cmd_replace_barcode.prompt'),'',offlineStrings.getString('menu.cmd_replace_barcode.label'));
139                                                 if (!old_bc) return;
140         
141                                                 var copy;
142                         try {
143                             copy = network.simple_request('FM_ACP_RETRIEVE_VIA_BARCODE',[ old_bc ]);
144                                                 if (typeof copy.ilsevent != 'undefined') throw(copy); 
145                                                 if (!copy) throw(copy);
146                         } catch(E) {
147                             alert(offlineStrings.getFormattedString('menu.cmd_replace_barcode.retrieval.error', [old_bc]) + '\n');
148                             return;
149                         }
150         
151                                                 // Why did I want to do this twice?  Because this copy is more fleshed?
152                         try {
153                                                 copy = network.simple_request('FM_ACP_RETRIEVE',[ copy.id() ]);
154                                                 if (typeof copy.ilsevent != 'undefined') throw(copy);
155                                                 if (!copy) throw(copy);
156                         } catch(E) {
157                             try { alert(offlineStrings.getFormattedString('menu.cmd_replace_barcode.retrieval.error', [old_bc]) + '\n' + (typeof E.ilsevent == 'undefined' ? '' : E.textcode + ' : ' + E.desc)); } catch(F) { alert(E + '\n' + F); }
158                             return;
159                         }
160         
161                                                 var new_bc = window.prompt(offlineStrings.getString('menu.cmd_replace_barcode.replacement.prompt'),'',offlineStrings.getString('menu.cmd_replace_barcode.replacement.label'));
162                                                 new_bc = String( new_bc ).replace(/\s/g,'');
163                                                 /* Casting a possibly null input value to a String turns it into "null" */
164                                                 if (!new_bc || new_bc == 'null') {
165                                                         alert(offlineStrings.getString('menu.cmd_replace_barcode.blank.error'));
166                                                         return;
167                                                 }
168         
169                                                 var test = network.simple_request('FM_ACP_RETRIEVE_VIA_BARCODE',[ new_bc ]);
170                                                 if (typeof test.ilsevent == 'undefined') {
171                                                 alert(offlineStrings.getFormattedString('menu.cmd_replace_barcode.duplicate.error', [new_bc]));
172                                                         return;
173                                                 } else {
174                                                         if (test.ilsevent != 1502 /* ASSET_COPY_NOT_FOUND */) {
175                                                         obj.error.standard_unexpected_error_alert(offlineStrings.getFormattedString('menu.cmd_replace_barcode.testing.error', [new_bc]),test);
176                                                                 return;
177                                                         }       
178                                                 }
179
180                                                 copy.barcode(new_bc); copy.ischanged('1');
181                                                 var r = network.simple_request('FM_ACP_FLESHED_BATCH_UPDATE', [ ses(), [ copy ] ]);
182                                                 if (typeof r.ilsevent != 'undefined') { 
183                             if (r.ilsevent != 0) {
184                                 if (r.ilsevent == 5000 /* PERM_FAILURE */) {
185                                     alert(offlineStrings.getString('menu.cmd_replace_barcode.permission.error'));
186                                 } else {
187                                     obj.error.standard_unexpected_error_alert(offlineStrings.getString('menu.cmd_replace_barcode.renaming.error'),r);
188                                 }
189                             }
190                         }
191                                         } catch(E) {
192                                                 obj.error.standard_unexpected_error_alert(offlineStrings.getString('menu.cmd_replace_barcode.renaming.failure'),copy);
193                                         }
194                                 }
195                         ],
196
197                         /* Search Menu */
198                         'cmd_patron_search' : [
199                                 ['oncommand'],
200                                 function() {
201                     obj.set_patron_tab();
202                                 }
203                         ],
204                         'cmd_search_opac' : [
205                                 ['oncommand'],
206                                 function() {
207                                         obj.data.stash_retrieve();
208                                         var content_params = { 'session' : ses(), 'authtime' : ses('authtime') };
209                                         obj.set_tab(obj.url_prefix(urls.XUL_OPAC_WRAPPER), {'tab_name':offlineStrings.getString('menu.cmd_search_opac.tab')}, content_params);
210                                 }
211                         ],
212                         'cmd_search_tcn' : [
213                                 ['oncommand'],
214                                 function() {
215                                         var tcn = prompt(offlineStrings.getString('menu.cmd_search_tcn.tab'),'',offlineStrings.getString('menu.cmd_search_tcn.prompt'));
216
217                                         function spawn_tcn(r) {
218                                                 for (var i = 0; i < r.count; i++) {
219                                                         var id = r.ids[i];
220                                                         var opac_url = obj.url_prefix( urls.opac_rdetail ) + '?r=' + id;
221                                                         obj.data.stash_retrieve();
222                                                         var content_params = { 
223                                                                 'session' : ses(), 
224                                                                 'authtime' : ses('authtime'),
225                                                                 'opac_url' : opac_url,
226                                                         };
227                                                         if (i == 0) {
228                                                                 obj.set_tab(
229                                                                         obj.url_prefix(urls.XUL_OPAC_WRAPPER), 
230                                                                         {'tab_name':tcn}, 
231                                                                         content_params
232                                                                 );
233                                                         } else {
234                                                                 obj.new_tab(
235                                                                         obj.url_prefix(urls.XUL_OPAC_WRAPPER), 
236                                                                         {'tab_name':tcn}, 
237                                                                         content_params
238                                                                 );
239                                                         }
240                                                 }
241                                         }
242
243                                         if (tcn) {
244                                                 JSAN.use('util.network');
245                                                 var network = new util.network();
246                                                 var robj = network.simple_request('FM_BRE_ID_SEARCH_VIA_TCN',[tcn]);
247                                                 if (robj.count != robj.ids.length) throw('FIXME -- FM_BRE_ID_SEARCH_VIA_TCN = ' + js2JSON(robj));
248                                                 if (robj.count == 0) {
249                                                         var robj2 = network.simple_request('FM_BRE_ID_SEARCH_VIA_TCN',[tcn,1]);
250                                                         if (robj2.count == 0) {
251                                                                 alert(offlineStrings.getFormattedString('menu.cmd_search_tcn.not_found.error', [tcn]));
252                                                         } else {
253                                                                 if ( window.confirm(offlineStrings.getFormattedString('menu.cmd_search_tcn.deleted.error', [tcn])) ) {
254                                                                         spawn_tcn(robj2);
255                                                                 }
256                                                         }
257                                                 } else {
258                                                         spawn_tcn(robj);
259                                                 }
260                                         }
261                                 }
262                         ],
263                         'cmd_search_bib_id' : [
264                                 ['oncommand'],
265                                 function() {
266                                         var bib_id = prompt(offlineStrings.getString('menu.cmd_search_bib_id.tab'),'',offlineStrings.getString('menu.cmd_search_bib_id.prompt'));
267                     if (!bib_id) return;
268
269                                         var opac_url = obj.url_prefix( urls.opac_rdetail ) + '?r=' + bib_id;
270                                         var content_params = { 
271                                                 'session' : ses(), 
272                                                 'authtime' : ses('authtime'),
273                                                 'opac_url' : opac_url,
274                                         };
275                                         obj.set_tab(
276                                                 obj.url_prefix(urls.XUL_OPAC_WRAPPER), 
277                                                 {'tab_name':'#' + bib_id}, 
278                                                 content_params
279                                         );
280                                 }
281                         ],
282                         'cmd_copy_status' : [
283                                 ['oncommand'],
284                                 function() {
285                                         obj.data.stash_retrieve();
286                                         obj.set_tab(obj.url_prefix(urls.XUL_COPY_STATUS),{},{});
287                                 }
288                         ],
289
290                         /* Circulation Menu */
291                         'cmd_patron_register' : [
292                                 ['oncommand'],
293                                 function() {
294                                                                 function spawn_editor(p) {
295                                                                         var url = urls.XUL_PATRON_EDIT;
296                                                                         var param_count = 0;
297                                                                         for (var i in p) {
298                                                                                 if (param_count++ == 0) url += '?'; else url += '&';
299                                                                                 url += i + '=' + window.escape(p[i]);
300                                                                         }
301                                                                         var loc = obj.url_prefix( urls.XUL_REMOTE_BROWSER ) + '?url=' + window.escape( url );
302                                                                         obj.new_tab(
303                                                                                 loc, 
304                                                                                 {}, 
305                                                                                 { 
306                                                                                         'show_print_button' : true , 
307                                                                                         'tab_name' : offline.getString('menu.cmd_patron_register.related.tab'),
308                                                                                         'passthru_content_params' : {
309                                                                                                 'spawn_search' : function(s) { obj.spawn_search(s); },
310                                                                                                 'spawn_editor' : spawn_editor,
311                                                                                         }
312                                                                                 }
313                                                                         );
314                                                                 }
315
316                                         obj.data.stash_retrieve();
317                                         var loc = obj.url_prefix( urls.XUL_REMOTE_BROWSER ) 
318                                                 + '?url=' + window.escape( urls.XUL_PATRON_EDIT + '?ses=' + window.escape( ses() ) );
319                                         obj.set_tab(
320                                                 loc, 
321                                                 {}, 
322                                                 { 
323                                                         'show_print_button' : true , 
324                                                         'tab_name' : offlineStrings.getString('menu.cmd_patron_register.tab'),
325                                                         'passthru_content_params' : {
326                                                                 'spawn_search' : function(s) { obj.spawn_search(s); },
327                                                                 'spawn_editor' : spawn_editor,
328                                                         }
329                                                 }
330                                         );
331                                 }
332                         ],
333                         'cmd_circ_checkin' : [
334                                 ['oncommand'],
335                                 function() { 
336                                         obj.data.stash_retrieve();
337                                         obj.set_tab(obj.url_prefix(urls.XUL_CHECKIN),{},{});
338                                 }
339                         ],
340                         'cmd_circ_checkout' : [
341                                 ['oncommand'],
342                                 function() { 
343                                         obj.data.stash_retrieve();
344                                         obj.set_tab(obj.url_prefix(urls.XUL_PATRON_BARCODE_ENTRY),{},{});
345                                 }
346                         ],
347                         'cmd_circ_hold_capture' : [
348                                 ['oncommand'],
349                                 function() { 
350                                         obj.data.stash_retrieve();
351                                         obj.set_tab(obj.url_prefix(urls.XUL_CHECKIN)+'?hold_capture=1',{},{});
352                                 }
353                         ],
354                         'cmd_browse_holds' : [
355                                 ['oncommand'],
356                                 function() { 
357                                         obj.data.stash_retrieve();
358                                         obj.set_tab(obj.url_prefix(urls.XUL_HOLDS_BROWSER),{ 'tab_name' : offlineStrings.getString('menu.cmd_browse_holds.tab') },{});
359                                 }
360                         ],
361                         'cmd_browse_holds_shelf' : [
362                                 ['oncommand'],
363                                 function() { 
364                                         obj.data.stash_retrieve();
365                                         obj.set_tab(obj.url_prefix(urls.XUL_HOLDS_BROWSER)+'?shelf=1',{ 'tab_name' : offlineStrings.getString('menu.cmd_browse_holds_shelf.tab') },{});
366                                 }
367                         ],
368                         'cmd_circ_hold_pull_list' : [
369                                 ['oncommand'],
370                                 function() { 
371                                         obj.data.stash_retrieve();
372                                         var loc = urls.XUL_REMOTE_BROWSER + '?url=' + window.escape(
373                                                 obj.url_prefix(urls.XUL_HOLD_PULL_LIST) + '?ses='+window.escape(ses())
374                                         );
375                                         obj.set_tab( loc, {'tab_name' : offlineStrings.getString('menu.cmd_browse_hold_pull_list.tab')}, { 'show_print_button' : true } );
376                                 }
377                         ],
378
379                         'cmd_in_house_use' : [
380                                 ['oncommand'],
381                                 function() { 
382                                         obj.data.stash_retrieve();
383                                         obj.set_tab(obj.url_prefix(urls.XUL_IN_HOUSE_USE),{},{});
384                                 }
385                         ],
386
387                         'cmd_standalone' : [
388                                 ['oncommand'],
389                                 function() { 
390                                         obj.set_tab(obj.url_prefix(urls.XUL_STANDALONE),{},{});
391                                 }
392                         ],
393
394                         'cmd_local_admin' : [
395                                 ['oncommand'],
396                                 function() { 
397                                         //obj.set_tab(obj.url_prefix(urls.XUL_LOCAL_ADMIN)+'?ses='+window.escape(ses())+'&session='+window.escape(ses()),{},{});
398                                         var loc = urls.XUL_REMOTE_BROWSER + '?url=' + window.escape(
399                                                 urls.XUL_LOCAL_ADMIN+'?ses='+window.escape(ses())+'&session='+window.escape(ses())
400                                         );
401                                         obj.set_tab( 
402                                                 loc, 
403                                                 {'tab_name' : offlineStrings.getString('menu.cmd_local_admin.tab'), 'browser' : false }, 
404                                                 { 'no_xulG' : false, 'show_nav_buttons' : true, 'show_print_button' : true } 
405                                         );
406
407                                 }
408                         ],
409
410             'cmd_toggle_buttonbar' : [
411                 ['oncommand'],
412                 function() {
413                     var x = document.getElementById('main_toolbar');
414                     if (x) x.hidden = ! x.hidden;
415                 }
416             ],
417
418                         'cmd_open_vandelay' : [
419                                 ['oncommand'],
420                                 function() { 
421                                         var loc = urls.XUL_REMOTE_BROWSER + '?url=' + 
422                         window.escape(urls.VANDELAY+'?ses='+window.escape(ses()));
423                                         obj.set_tab( 
424                                                 loc, 
425                                                 {'tab_name' : offlineStrings.getString('menu.cmd_open_vandelay.tab'), 'browser' : false }, 
426                                                 {'no_xulG' : false, 'show_print_button' : false } 
427                                         );
428
429                                 }
430                         ],
431
432                         'cmd_open_conify' : [
433                                 ['oncommand'],
434                                 function() { 
435                                         var loc = urls.XUL_REMOTE_BROWSER + '?url=' + 
436                         window.escape(urls.CONIFY+'?ses='+window.escape(ses()));
437                                         obj.set_tab( 
438                                                 loc, 
439                                                 {'tab_name' : offlineStrings.getString('menu.cmd_open_conify.tab'), 'browser' : false }, 
440                                                 {'no_xulG' : false, 'show_print_button' : false } 
441                                         );
442
443                                 }
444                         ],
445
446                         'cmd_reprint' : [
447                                 ['oncommand'],
448                                 function() {
449                                         try {
450                                                 JSAN.use('util.print'); var print = new util.print();
451                                                 print.reprint_last();
452                                         } catch(E) {
453                                                 alert(E);
454                                         }
455                                 }
456                         ],
457
458                         'cmd_retrieve_last_patron' : [
459                                 ['oncommand'],
460                                 function() {
461                                         obj.data.stash_retrieve();
462                                         if (!obj.data.last_patron) {
463                                                 alert(offlineStrings.getString('menu.cmd_retrieve_last_patron.session.error'));
464                                                 return;
465                                         }
466                                         var url = obj.url_prefix( urls.XUL_PATRON_DISPLAY ); // + '?id=' + window.escape( obj.data.last_patron ) );
467                                         obj.set_tab( url, {}, { 'id' : obj.data.last_patron } );
468                                 }
469                         ],
470                         
471                         'cmd_retrieve_last_record' : [
472                                 ['oncommand'],
473                                 function() {
474                                         obj.data.stash_retrieve();
475                                         if (!obj.data.last_record) {
476                                                 alert(offlineStrings.getString('menu.cmd_retrieve_last_record.session.error'));
477                                                 return;
478                                         }
479                                         var opac_url = obj.url_prefix( urls.opac_rdetail ) + '?r=' + obj.data.last_record;
480                                         var content_params = {
481                                                 'session' : ses(),
482                                                 'authtime' : ses('authtime'),
483                                                 'opac_url' : opac_url,
484                                         };
485                                         obj.set_tab(
486                                                 obj.url_prefix(urls.XUL_OPAC_WRAPPER),
487                                                 {'tab_name' : offlineStrings.getString('menu.cmd_retrieve_last_record.status')},
488                                                 content_params
489                                         );
490                                 }
491                         ],
492
493             'cmd_verify_credentials' : [
494                 ['oncommand'],
495                 function() {
496                                         obj.set_tab(
497                                                 obj.url_prefix(urls.XUL_VERIFY_CREDENTIALS),
498                                                 { 'tab_name' : offlineStrings.getString('menu.cmd_verify_credentials.tabname') },
499                                                 {}
500                                         );
501                 }
502             ],
503
504                         /* Cataloging Menu */
505                         'cmd_z39_50_import' : [
506                                 ['oncommand'],
507                                 function() {
508                                         obj.data.stash_retrieve();
509                                         obj.set_tab(obj.url_prefix(urls.XUL_Z3950_IMPORT),{},{});
510                                 }
511                         ],
512                         'cmd_create_marc' : [
513                                 ['oncommand'],
514                                 function() {
515                                         obj.data.stash_retrieve();
516                                         obj.set_tab(obj.url_prefix(urls.XUL_MARC_NEW),{},{});
517                                 }
518                         ],
519
520                         /* Admin menu */
521                         'cmd_change_session' : [
522                                 ['oncommand'],
523                                 function() {
524                                         try {
525                                                 obj.data.stash_retrieve();
526                                                 JSAN.use('util.network'); var network = new util.network();
527                                                 var x = document.getElementById('oc_menuitem');
528                                                 var x_label = x.getAttribute('label_orig');
529                                                 var temp_au = js2JSON( obj.data.list.au[0] );
530                                                 var temp_ses = js2JSON( obj.data.session );
531                                                 if (obj.data.list.au.length > 1) {
532                                                         obj.data.list.au = [ obj.data.list.au[1] ];
533                                                         obj.data.stash('list');
534                                                         network.reset_titlebars( obj.data );
535                                                         x.setAttribute('label', x_label );
536                                                         network.simple_request('AUTH_DELETE', [ obj.data.session.key ] );
537                                                         obj.data.session = obj.data.previous_session;
538                                                         obj.data.stash('session');
539                                             try {
540                                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
541                                                                 var ios = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
542                                                                 var cookieUri = ios.newURI("http://" + obj.data.server_unadorned, null, null);
543                                                                 var cookieUriSSL = ios.newURI("https://" + obj.data.server_unadorned, null, null);
544                                                                 var cookieSvc = Components.classes["@mozilla.org/cookieService;1"].getService(Components.interfaces.nsICookieService);
545
546                                                                 cookieSvc.setCookieString(cookieUri, null, "ses="+obj.data.session.key, null);
547                                                                 cookieSvc.setCookieString(cookieUriSSL, null, "ses="+obj.data.session.key, null);
548
549                                             } catch(E) {
550                                                     alert(offlineStrings.getFormattedString(main.session_cookie.error, [E]));
551                                             }
552
553                                                         removeCSSClass(document.getElementById('main_tabbox'),'operator_change');
554                                                 } else {
555                                                         if (network.get_new_session(offlineStrings.getString('menu.cmd_chg_session.label'),{'url_prefix':obj.url_prefix})) {
556                                                                 obj.data.stash_retrieve();
557                                                                 obj.data.list.au[1] = JSON2js( temp_au );
558                                                                 obj.data.stash('list');
559                                                                 obj.data.previous_session = JSON2js( temp_ses );
560                                                                 obj.data.stash('previous_session');
561                                                                 x.setAttribute('label', offlineStrings.getFormattedString('menu.cmd_chg_session.operator.label', [obj.data.list.au[1].usrname()]) );
562                                                                 addCSSClass(document.getElementById('main_tabbox'),'operator_change');
563                                                         }
564                                                 }
565                                         } catch(E) {
566                                                 obj.error.standard_unexpected_error_alert('cmd_change_session',E);
567                                         }
568                                 }
569                         ],
570                         'cmd_manage_offline_xacts' : [
571                                 ['oncommand'],
572                                 function() {
573                                         obj.set_tab(obj.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS), {'tab_name' : offlineStrings.getString('menu.cmd_manage_offline_xacts.tab')}, {});
574                                 }
575                         ],
576                         'cmd_download_patrons' : [
577                                 ['oncommand'],
578                                 function() {
579                                         try {
580                                                 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
581                                                 var x = new XMLHttpRequest();
582                                                 var url = 'http://' + XML_HTTP_SERVER + '/standalone/list.txt';
583                                                 x.open("GET",url,false);
584                                                 x.send(null);
585                                                 if (x.status == 200) {
586                                                         JSAN.use('util.file'); var file = new util.file('offline_patron_list');
587                                                         file.write_content('truncate',x.responseText);
588                                                         file.close();
589                                                         file = new util.file('offline_patron_list.date');
590                                                         file.write_content('truncate',new Date());
591                                                         file.close();
592                                                         alert(offlineStrings.getString('menu.cmd_download_patrons.complete.status'));
593                                                 } else {
594                                                         alert(offlineStrings.getFormattedString('menu.cmd_download_patrons.error', [x.status, x.statusText]));
595                                                 }
596                                         } catch(E) {
597                                                 obj.error.standard_unexpected_error_alert('cmd_download_patrons',E);
598                                         }
599                                 }
600                         ],
601                         'cmd_adv_user_edit' : [
602                                 ['oncommand'],
603                                 function() {
604                                         obj.data.stash_retrieve();
605                                         obj.set_tab(obj.url_prefix(urls.XUL_PATRON_BARCODE_ENTRY), {}, { 'perm_editor' : true });
606                                 }
607                         ],
608                         'cmd_print_list_template_edit' : [
609                                 ['oncommand'],
610                                 function() {
611                                         obj.data.stash_retrieve();
612                                         obj.set_tab(obj.url_prefix(urls.XUL_PRINT_LIST_TEMPLATE_EDITOR), {}, {});
613                                 }
614                         ],
615                         'cmd_stat_cat_edit' : [
616                                 ['oncommand'],
617                                 function() {
618                                         obj.data.stash_retrieve();
619                                         obj.set_tab(obj.url_prefix(urls.XUL_STAT_CAT_EDIT) + '?ses='+window.escape(ses()), {'tab_name' : offlineStrings.getString('menu.cmd_stat_cat_edit.tab')},{});
620                                 }
621                         ],
622                         'cmd_non_cat_type_edit' : [
623                                 ['oncommand'],
624                                 function() {
625                                         obj.data.stash_retrieve();
626                                         obj.set_tab(obj.url_prefix(urls.XUL_NON_CAT_LABEL_EDIT) + '?ses='+window.escape(ses()), {'tab_name' : offlineStrings.getString('menu.cmd_non_cat_type_edit.tab')},{});
627                                 }
628                         ],
629                         'cmd_copy_location_edit' : [
630                                 ['oncommand'],
631                                 function() {
632                                         obj.data.stash_retrieve();
633                                         obj.set_tab(obj.url_prefix(urls.XUL_COPY_LOCATION_EDIT) + '?ses='+window.escape(ses()),{'tab_name' : offlineStrings.getString('menu.cmd_copy_location_edit.tab')},{});
634                                 }
635                         ],
636                         'cmd_test' : [
637                                 ['oncommand'],
638                                 function() {
639                                         obj.data.stash_retrieve();
640                                         var content_params = { 'session' : ses(), 'authtime' : ses('authtime') };
641                                         obj.set_tab(obj.url_prefix(urls.XUL_OPAC_WRAPPER), {}, content_params);
642                                 }
643                         ],
644                         'cmd_test_html' : [
645                                 ['oncommand'],
646                                 function() {
647                                         obj.data.stash_retrieve();
648                                         obj.set_tab(obj.url_prefix(urls.TEST_HTML) + '?ses='+window.escape(ses()),{ 'browser' : true },{});
649                                 }
650                         ],
651                         'cmd_test_xul' : [
652                                 ['oncommand'],
653                                 function() {
654                                         obj.data.stash_retrieve();
655                                         obj.set_tab(obj.url_prefix(urls.TEST_XUL) + '?ses='+window.escape(ses()),{ 'browser' : false },{});
656                                 }
657                         ],
658                         'cmd_console' : [
659                                 ['oncommand'],
660                                 function() {
661                                         obj.set_tab(obj.url_prefix(urls.XUL_DEBUG_CONSOLE),{'tab_name' : offlineStrings.getString('menu.cmd_console.tab')},{});
662                                 }
663                         ],
664                         'cmd_shell' : [
665                                 ['oncommand'],
666                                 function() {
667                                         obj.set_tab(obj.url_prefix(urls.XUL_DEBUG_SHELL),{'tab_name' : offlineStrings.getString('menu.cmd_shell.tab')},{});
668                                 }
669                         ],
670                         'cmd_xuleditor' : [
671                                 ['oncommand'],
672                                 function() {
673                                         obj.set_tab(obj.url_prefix(urls.XUL_DEBUG_XULEDITOR),{'tab_name' : offlineStrings.getString('menu.cmd_xuleditor.tab')},{});
674                                 }
675                         ],
676                         'cmd_fieldmapper' : [
677                                 ['oncommand'],
678                                 function() {
679                                         obj.set_tab(obj.url_prefix(urls.XUL_DEBUG_FIELDMAPPER),{'tab_name' : offlineStrings.getString('menu.cmd_fieldmapper.tab')},{});
680                                 }
681                         ],
682                         'cmd_survey_wizard' : [
683                                 ['oncommand'],
684                                 function() {
685                                         obj.data.stash_retrieve();
686                                         xulG.window.open(obj.url_prefix(urls.XUL_SURVEY_WIZARD),'survey_wizard','chrome'); 
687                                 }
688                         ],
689                         'cmd_public_opac' : [
690                                 ['oncommand'],
691                                 function() {
692                                         var loc = urls.XUL_REMOTE_BROWSER + '?url=' + window.escape(
693                                                 urls.remote
694                                         );
695                                         obj.set_tab( 
696                                                 loc, 
697                                                 {'tab_name' : offlineStrings.getString('menu.cmd_public_opac.tab'), 'browser' : false}, 
698                                                 { 'no_xulG' : true, 'show_nav_buttons' : true, 'show_print_button' : true } 
699                                         );
700                                 }
701                         ],
702                         'cmd_clear_cache' : [
703                                 ['oncommand'],
704                                 function clear_the_cache() {
705                                         try {
706                         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
707                                                 var cacheClass          = Components.classes["@mozilla.org/network/cache-service;1"];
708                                                 var cacheService        = cacheClass.getService(Components.interfaces.nsICacheService);
709                                                 cacheService.evictEntries(Components.interfaces.nsICache.STORE_ON_DISK);
710                                                 cacheService.evictEntries(Components.interfaces.nsICache.STORE_IN_MEMORY);
711                                         } catch(E) {
712                                                 dump(E+'\n');alert(E);
713                                         }
714                                 }
715                         ],
716                         'cmd_restore_all_tabs' : [
717                                 ['oncommand'],
718                                 function() {
719                                         var tabs = obj.controller.view.tabs;
720                                         for (var i = 0; i < tabs.childNodes.length; i++) {
721                                                 tabs.childNodes[i].hidden = false;
722                                         }
723                                 }
724                         ],
725                         'cmd_extension_manager' : [
726                                 ['oncommand'],
727                                 function() {
728                                         obj.set_tab('chrome://mozapps/content/extensions/extensions.xul?type=extensions',{'tab_name' : offlineStrings.getString('menu.cmd_extension_manager.tab')},{});
729                                 }
730                         ],
731                         'cmd_theme_manager' : [
732                                 ['oncommand'],
733                                 function() {
734                                         obj.set_tab('chrome://mozapps/content/extensions/extensions.xul?type=themes',{'tab_name' : offlineStrings.getString('menu.cmd_theme_manager.tab')},{});
735                                 }
736                         ],
737                         'cmd_about_config' : [
738                                 ['oncommand'],
739                                 function() {
740                                         obj.set_tab('chrome://global/content/config.xul',{'tab_name' : 'about:config'},{});
741                                 }
742                         ],
743                         'cmd_shutdown' : [
744                                 ['oncommand'],
745                                 function() {
746                                         if (window.confirm(offlineStrings.getString('menu.cmd_shutdown.prompt'))) {
747                         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
748                                                 var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService();
749                                                 var windowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator);
750                                                 var enumerator = windowManagerInterface.getEnumerator(null);
751                                                 var w; // close all other windows
752                                                 while ( w = enumerator.getNext() ) {
753                                                         if (w != window) w.close();
754                                                 }
755                                                 window.close();
756                                         }
757                                 }
758                         ],
759
760                         'cmd_acq_view_picklist' : [
761                                 ['oncommand'],
762                                 function() {
763                                         obj.set_tab( 
764                                                 obj.url_prefix(urls.XUL_ACQ_PICKLIST),
765                                                 //{'tab_name' : offlineStrings.getString('menu.cmd_public_opac.tab'), 'browser' : false}, 
766                                                 {'tab_name' : 'Selection Lists', 'browser' : false}, 
767                                                 {'show_nav_buttons' : true, 'show_print_button' : true} 
768                                         );
769                                 }
770                         ],
771                         'cmd_acq_view_po' : [
772                                 ['oncommand'],
773                                 function() {
774                                         obj.set_tab( 
775                                                 obj.url_prefix(urls.XUL_ACQ_PO),
776                                                 //{'tab_name' : offlineStrings.getString('menu.cmd_public_opac.tab'), 'browser' : false}, 
777                                                 {'tab_name' : 'Purchase Orders', 'browser' : false}, 
778                                                 {'show_nav_buttons' : true, 'show_print_button' : true} 
779                                         );
780                                 }
781                         ],
782                         'cmd_acq_upload' : [
783                                 ['oncommand'],
784                                 function() {
785                                         obj.set_tab( 
786                                                 obj.url_prefix(urls.XUL_ACQ_UPLOAD),
787                                                 //{'tab_name' : offlineStrings.getString('menu.cmd_public_opac.tab'), 'browser' : false}, 
788                                                 {'tab_name' : 'Load Order Record', 'browser' : false}, 
789                                                 {'show_nav_buttons' : true, 'show_print_button' : true} 
790                                         );
791                                 }
792                         ],
793
794                 };
795
796                 JSAN.use('util.controller');
797                 var cmd;
798                 obj.controller = new util.controller();
799                 obj.controller.init( { 'window_knows_me_by' : 'g.menu.controller', 'control_map' : cmd_map } );
800
801                 obj.controller.view.tabbox = window.document.getElementById('main_tabbox');
802                 obj.controller.view.tabs = obj.controller.view.tabbox.firstChild;
803                 obj.controller.view.panels = obj.controller.view.tabbox.lastChild;
804
805                 obj.new_tab(null,{'focus':true},null);
806
807                 obj.init_tab_focus_handlers();
808         },
809
810         'spawn_search' : function(s) {
811                 var obj = this;
812                 obj.error.sdump('D_TRACE', offlineStrings.getFormattedString('menu.spawn_search.msg', [js2JSON(s)]) ); 
813                 obj.data.stash_retrieve();
814                 var loc = obj.url_prefix(urls.XUL_PATRON_DISPLAY);
815                 loc += '?doit=1&query=' + window.escape(js2JSON(s));
816                 obj.new_tab( loc, {}, {} );
817         },
818
819         'init_tab_focus_handlers' : function() {
820                 var obj = this;
821                 for (var i = 0; i < obj.controller.view.tabs.childNodes.length; i++) {
822                         var tab = obj.controller.view.tabs.childNodes[i];
823                         var panel = obj.controller.view.panels.childNodes[i];
824                         tab.addEventListener(
825                                 'command',
826                                 function(p) {
827                                         return function() {
828                                                 try {
829                                                                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
830                                                                 if (p
831                                                                         && p.firstChild 
832                                                                         && ( p.firstChild.nodeName == 'iframe' || p.firstChild.nodeName == 'browser' )
833                                                                         && p.firstChild.contentWindow 
834                                                                 ) {
835                                                                         if (typeof p.firstChild.contentWindow.default_focus == 'function') {
836                                                                                 p.firstChild.contentWindow.default_focus();
837                                                                         } else {
838                                                                                 //p.firstChild.contentWindow.firstChild.focus();
839                                                                         }
840                                                                 }
841                                                 } catch(E) {
842                                                         obj.error.sdump('D_ERROR','init_tab_focus_handler: ' + js2JSON(E));
843                                                 }
844                                         }
845                                 }(panel),
846                                 false
847                         );
848                 }
849         },
850
851         'close_all_tabs' : function() {
852                 var obj = this;
853                 try {
854                         var count = obj.controller.view.tabs.childNodes.length;
855                         for (var i = 0; i < count; i++) obj.close_tab();
856                         setTimeout( function(){ obj.controller.view.tabs.firstChild.focus(); }, 0);
857                 } catch(E) {
858                         obj.error.standard_unexpected_error_alert(offlineStrings.getString('menu.close_all_tabs.error'),E);
859                 }
860         },
861
862         'close_tab' : function () {
863                 var idx = this.controller.view.tabs.selectedIndex;
864                 var tab = this.controller.view.tabs.childNodes[idx];
865                 var panel = this.controller.view.panels.childNodes[ idx ];
866                 while ( panel.lastChild ) panel.removeChild( panel.lastChild );
867                 if (idx == 0) {
868                         try {
869                                 this.controller.view.tabs.advanceSelectedTab(+1);
870                         } catch(E) {
871                                 this.error.sdump('D_TAB','failed tabs.advanceSelectedTab(+1):'+js2JSON(E) + '\n');
872                                 try {
873                                         this.controller.view.tabs.advanceSelectedTab(-1);
874                                 } catch(E) {
875                                         this.error.sdump('D_TAB','failed again tabs.advanceSelectedTab(-1):'+
876                                                 js2JSON(E) + '\n');
877                                 }
878                         }
879                 } else {
880                         try {
881                                 this.controller.view.tabs.advanceSelectedTab(-1);
882                         } catch(E) {
883                                 this.error.sdump('D_TAB','failed tabs.advanceSelectedTab(-1):'+js2JSON(E) + '\n');
884                                 try {
885                                         this.controller.view.tabs.advanceSelectedTab(+1);
886                                 } catch(E) {
887                                         this.error.sdump('D_TAB','failed again tabs.advanceSelectedTab(+1):'+
888                                                 js2JSON(E) + '\n');
889                                 }
890                         }
891
892                 }
893                 
894                 this.error.sdump('D_TAB','\tnew tabbox.selectedIndex = ' + this.controller.view.tabbox.selectedIndex + '\n');
895
896                 this.controller.view.tabs.childNodes[ idx ].hidden = true;
897                 this.error.sdump('D_TAB','tabs.childNodes[ ' + idx + ' ].hidden = true;\n');
898
899                 // Make sure we keep at least one tab open.
900                 var tab_flag = true;
901                 for (var i = 0; i < this.controller.view.tabs.childNodes.length; i++) {
902                         var tab = this.controller.view.tabs.childNodes[i];
903                         if (!tab.hidden)
904                                 tab_flag = false;
905                 }
906                 if (tab_flag) {
907                         this.controller.view.tabs.selectedIndex = 0;
908                         this.new_tab(); 
909                 }
910         },
911
912         'find_free_tab' : function() {
913                 var last_not_hidden = -1;
914                 for (var i = 0; i<this.controller.view.tabs.childNodes.length; i++) {
915                         var tab = this.controller.view.tabs.childNodes[i];
916                         if (!tab.hidden)
917                                 last_not_hidden = i;
918                 }
919                 if (last_not_hidden == this.controller.view.tabs.childNodes.length - 1)
920                         last_not_hidden = -1;
921                 // If the one next to last_not_hidden is hidden, we want it.
922                 // Basically, we fill in tabs after existing tabs for as 
923                 // long as possible.
924                 var idx = last_not_hidden + 1;
925                 var candidate = this.controller.view.tabs.childNodes[ idx ];
926                 if (candidate.hidden)
927                         return idx;
928                 // Alright, find the first hidden then
929                 for (var i = 0; i<this.controller.view.tabs.childNodes.length; i++) {
930                         var tab = this.controller.view.tabs.childNodes[i];
931                         if (tab.hidden)
932                                 return i;
933                 }
934                 return -1;
935         },
936
937         'new_tab' : function(url,params,content_params) {
938                 var tc = this.find_free_tab();
939                 if (tc == -1) { return null; } // 9 tabs max
940                 var tab = this.controller.view.tabs.childNodes[ tc ];
941                 tab.hidden = false;
942                 if (!content_params) content_params = {};
943                 if (!params) params = {};
944                 if (!params.tab_name) params.tab_name = offlineStrings.getString('menu.new_tab.tab');
945                 if (!params.nofocus) params.focus = true; /* make focus the default */
946                 try {
947                         if (params.focus) this.controller.view.tabs.selectedIndex = tc;
948                         params.index = tc;
949                         this.set_tab(url,params,content_params);
950                 } catch(E) {
951                         this.error.sdump('D_ERROR',E);
952                 }
953         },
954
955     'network_meter' : {
956         'inc' : function(app,method) {
957             try {
958                 var m = document.getElementById('network_progress');
959                 var count = 1 + Number( m.getAttribute('count') );
960                 m.setAttribute('mode','undetermined');
961                 m.setAttribute('count', count);
962                 var rows = document.getElementById('network_progress_rows');
963                 var row = document.getElementById('network_progress_tip_'+app+'_'+method);
964                 if (!row) {
965                     row = document.createElement('row'); row.setAttribute('id','network_progress_tip_'+app+'_'+method);
966                     var a = document.createElement('label'); a.setAttribute('value','App:');
967                     var b = document.createElement('label'); b.setAttribute('value',app);
968                     var c = document.createElement('label'); c.setAttribute('value','Method:');
969                     var d = document.createElement('label'); d.setAttribute('value',method);
970                     var e = document.createElement('label'); e.setAttribute('value','Total:');
971                     var f = document.createElement('label'); f.setAttribute('value','0'); 
972                     f.setAttribute('id','network_progress_tip_total_'+app+'_'+method);
973                     var g = document.createElement('label'); g.setAttribute('value','Outstanding:');
974                     var h = document.createElement('label'); h.setAttribute('value','0');
975                     h.setAttribute('id','network_progress_tip_out_'+app+'_'+method);
976                     row.appendChild(a); row.appendChild(b); row.appendChild(c);
977                     row.appendChild(d); row.appendChild(e); row.appendChild(f);
978                     row.appendChild(g); row.appendChild(h); rows.appendChild(row);
979                 }
980                 var total = document.getElementById('network_progress_tip_total_'+app+'_'+method);
981                 if (total) {
982                     total.setAttribute('value', 1 + Number( total.getAttribute('value') ));
983                 }
984                 var out = document.getElementById('network_progress_tip_out_'+app+'_'+method);
985                 if (out) {
986                     out.setAttribute('value', 1 + Number( out.getAttribute('value') ));
987                 }
988             } catch(E) {
989                 dump('network_meter.inc(): ' + E + '\n');
990             }
991         },
992         'dec' : function(app,method) {
993             try {
994                 var m = document.getElementById('network_progress');
995                 var count = -1 + Number( m.getAttribute('count') );
996                 if (count < 0) count = 0;
997                 if (count == 0) m.setAttribute('mode','determined');
998                 m.setAttribute('count', count);
999                 var out = document.getElementById('network_progress_tip_out_'+app+'_'+method);
1000                 if (out) {
1001                     out.setAttribute('value', -1 + Number( out.getAttribute('value') ));
1002                 }
1003             } catch(E) {
1004                 dump('network_meter.dec(): ' + E + '\n');
1005             }
1006         }
1007     },
1008     'set_patron_tab' : function(params,content_params) {
1009         var obj = this;
1010         var horizontal_interface = String( obj.data.hash.aous['ui.circ.patron_summary.horizontal'] ) == 'true';
1011         var url = obj.url_prefix( horizontal_interface ? urls.XUL_PATRON_HORIZ_DISPLAY : urls.XUL_PATRON_DISPLAY );
1012         obj.set_tab(url,params ? params : {},content_params ? content_params : {});
1013     },
1014     'new_patron_tab' : function(params,content_params) {
1015         var obj = this;
1016         var horizontal_interface = String( obj.data.hash.aous['ui.circ.patron_summary.horizontal'] ) == 'true';
1017         var url = obj.url_prefix( horizontal_interface ? urls.XUL_PATRON_HORIZ_DISPLAY : urls.XUL_PATRON_DISPLAY );
1018         obj.new_tab(url,params ? params : {},content_params ? content_params : {});
1019     },
1020         'set_tab' : function(url,params,content_params) {
1021                 var obj = this;
1022                 if (!url) url = '/xul/server/';
1023                 if (!url.match(/:\/\//) && !url.match(/^data:/)) url = urls.remote + url;
1024                 if (!params) params = {};
1025                 if (!content_params) content_params = {};
1026                 var idx = this.controller.view.tabs.selectedIndex;
1027                 if (params && typeof params.index != 'undefined') idx = params.index;
1028                 var tab = this.controller.view.tabs.childNodes[ idx ];
1029                 if (params.focus) tab.focus();
1030                 var panel = this.controller.view.panels.childNodes[ idx ];
1031                 while ( panel.lastChild ) panel.removeChild( panel.lastChild );
1032
1033                 content_params.new_tab = function(a,b,c) { return obj.new_tab(a,b,c); };
1034                 content_params.set_tab = function(a,b,c) { return obj.set_tab(a,b,c); };
1035                 content_params.new_patron_tab = function(a,b) { return obj.new_patron_tab(a,b); };
1036                 content_params.set_patron_tab = function(a,b) { return obj.set_patron_tab(a,b); };
1037                 content_params.set_tab_name = function(name) { tab.setAttribute('label',(idx + 1) + ' ' + name); };
1038                 content_params.open_chrome_window = function(a,b,c) { return xulG.window.open(a,b,c); };
1039                 content_params.url_prefix = function(url) { return obj.url_prefix(url); };
1040         content_params.network_meter = obj.network_meter;
1041         content_params.chrome_xulG = xulG;
1042                 if (params && params.tab_name) content_params.set_tab_name( params.tab_name );
1043                 
1044                 var frame;
1045                 try {
1046             if (typeof params.browser == 'undefined') params.browser = false;
1047                         if (params.browser) {
1048                                 obj.id_incr++;
1049                                 frame = this.w.document.createElement('browser');
1050                                 frame.setAttribute('flex','1');
1051                                 frame.setAttribute('type','content');
1052                                 frame.setAttribute('id','frame_'+obj.id_incr);
1053                                 panel.appendChild(frame);
1054                                 try {
1055                                         dump('creating browser with src = ' + url + '\n');
1056                                         JSAN.use('util.browser');
1057                                         var b = new util.browser();
1058                                         b.init(
1059                                                 {
1060                                                         'url' : url,
1061                                                         'push_xulG' : true,
1062                                                         'alt_print' : false,
1063                                                         'browser_id' : 'frame_'+obj.id_incr,
1064                                                         'passthru_content_params' : content_params,
1065                                                 }
1066                                         );
1067                                 } catch(E) {
1068                                         alert(E);
1069                                 }
1070                         } else {
1071                                 frame = this.w.document.createElement('iframe');
1072                                 frame.setAttribute('flex','1');
1073                                 panel.appendChild(frame);
1074                                 dump('creating iframe with src = ' + url + '\n');
1075                                 frame.setAttribute('src',url);
1076                                 try {
1077                                         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
1078                                         var cw = frame.contentWindow;
1079                                         if (typeof cw.wrappedJSObject != 'undefined') cw = cw.wrappedJSObject;
1080                                         cw.IAMXUL = true;
1081                                         cw.xulG = content_params;
1082                                 } catch(E) {
1083                                         this.error.sdump('D_ERROR', 'main.menu: ' + E);
1084                                 }
1085                         }
1086                 } catch(E) {
1087                         this.error.sdump('D_ERROR', 'main.menu:2: ' + E);
1088                         alert(offlineStrings.getString('menu.set_tab.error'));
1089                 }
1090
1091                 return frame;
1092         }
1093
1094 }
1095
1096 dump('exiting main/menu.js\n');