]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/cat/z3950.js
07763b2f79588eaf4d999f4f9349e10737204ad8
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / cat / z3950.js
1 dump('entering cat.z3950.js\n');
2
3 function $(id) { return document.getElementById(id); }
4
5 if (typeof cat == 'undefined') cat = {};
6 cat.z3950 = function (params) {
7     try {
8         JSAN.use('util.error'); this.error = new util.error();
9         JSAN.use('util.network'); this.network = new util.network();
10     } catch(E) {
11         dump('cat.z3950: ' + E + '\n');
12     }
13 }
14
15 cat.z3950.prototype = {
16
17     'creds_version' : 2,
18
19     'number_of_result_sets' : 0,
20
21     'result_set' : [],
22
23     'limit' : 10,
24
25     'init' : function( params ) {
26
27         try {
28             JSAN.use('util.widgets');
29
30             var obj = this;
31
32             JSAN.use('OpenILS.data'); obj.data = new OpenILS.data(); obj.data.init({'via':'stash'});
33
34             obj.load_creds();
35
36             buildStripTags();
37
38             JSAN.use('circ.util');
39             var columns = circ.util.columns(
40                 {
41                     'tcn' : { 'hidden' : false },
42                     'isbn' : { 'hidden' : false },
43                     'title' : { 'hidden' : false, 'flex' : '1' },
44                     'author' : { 'hidden' : false },
45                     'edition' : { 'hidden' : false },
46                     'pubdate' : { 'hidden' : false },
47                     'publisher' : { 'hidden' : false },
48                     'service' : { 'hidden' : false }
49                 }
50             );
51
52             JSAN.use('util.list'); obj.list = new util.list('results');
53             obj.list.init(
54                 {
55                     'columns' : columns,
56                     'on_select' : function(ev) {
57                         try {
58                             JSAN.use('util.functional');
59                             var sel = obj.list.retrieve_selection();
60                             document.getElementById('sel_clip').setAttribute('disabled', sel.length < 1);
61                             var list = util.functional.map_list(
62                                 sel,
63                                 function(o) {
64                                     if ( $('jacket_image') ) {
65                                         // A side-effect in this map function, mu hahaha
66                                         if (o.getAttribute('isbn')) {
67                                             $('jacket_image').setAttribute('src',urls.ac_jacket_large+o.getAttribute('isbn'));
68                                             $('jacket_image').setAttribute('tooltiptext',urls.ac_jacket_large+o.getAttribute('isbn'));
69                                         } else {
70                                             $('jacket_image').setAttribute('src','');
71                                             $('jacket_image').setAttribute('tooltiptext','');
72                                         }
73                                     }
74                                     if (o.getAttribute('service') == 'native-evergreen-catalog') {
75                                         $('mark_overlay_btn').disabled = false;
76                                         $('show_in_catalog_btn').disabled = false;
77                                         obj.controller.view.mark_overlay.setAttribute('doc_id',o.getAttribute('doc_id'));
78                                     } else {
79                                         $('mark_overlay_btn').disabled = true;
80                                         $('show_in_catalog_btn').disabled = true;
81                                     }
82                                     return o.getAttribute('retrieve_id');
83                                 }
84                             );
85                             obj.error.sdump('D_TRACE','cat/z3950: selection list = ' + js2JSON(list) );
86                             obj.controller.view.marc_import.disabled = false;
87                             obj.controller.view.marc_import.setAttribute('retrieve_id',list[0]);
88                             obj.data.init({'via':'stash'});
89                             if (obj.data.marked_record) {
90                                 obj.controller.view.marc_import_overlay.disabled = false;
91                             } else {
92                                 obj.controller.view.marc_import_overlay.disabled = true;
93                             }
94                             obj.controller.view.marc_import_overlay.setAttribute('retrieve_id',list[0]);
95                             obj.controller.view.marc_view_btn.disabled = false;
96                             obj.controller.view.marc_view_btn.setAttribute('retrieve_id',list[0]);
97                         } catch(E) {
98                             obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.obj_list_init.list_construction_error'),E);
99                         }
100                     },
101                 }
102             );
103
104             JSAN.use('util.controller'); obj.controller = new util.controller();
105             obj.controller.init(
106                 {
107                     control_map : {
108                         'save_columns' : [ [ 'command' ], function() { obj.list.save_columns(); } ],
109                         'sel_clip' : [ ['command'], function() { obj.list.clipboard(); } ],
110                         'cmd_z3950_csv_to_clipboard' : [ ['command'], function() { obj.list.dump_csv_to_clipboard(); } ],
111                         'cmd_z3950_csv_to_printer' : [ ['command'], function() { obj.list.dump_csv_to_printer(); } ], 
112                         'cmd_z3950_csv_to_file' : [ ['command'], function() { obj.list.dump_csv_to_file( { 'defaultFileName' : 'z3950_results.txt' } ); } ],
113                         'cmd_broken' : [
114                             ['command'],
115                             function() { alert('Not Yet Implemented'); }
116                         ],
117                         'result_message' : [['render'],function(e){return function(){};}],
118                         'clear' : [
119                             ['command'],
120                             function() {
121                                 obj.clear();
122                             }
123                         ],
124                         'save_creds' : [
125                             ['command'],
126                             function() {
127                                 obj.save_creds();
128                                 setTimeout( function() { obj.focus(); }, 0 );
129                             }
130                         ],
131                         'marc_view_btn' : [
132                             ['render'],
133                             function(e) {
134                                 e.setAttribute('label', $("catStrings").getString('staff.cat.z3950.marc_view.label'));
135                                 e.setAttribute('accesskey', $("catStrings").getString('staff.cat.z3950.marc_view.accesskey'));
136                             }
137                         ],
138                         'marc_view' : [
139                             ['command'],
140                             function(ev) {
141                                 try {
142                                     var n = obj.controller.view.marc_view_btn;
143                                     if (n.getAttribute('toggle') == '1') {
144                                         document.getElementById('deck').selectedIndex = 0;
145                                         n.setAttribute('toggle','0');
146                                         n.setAttribute('label', $("catStrings").getString('staff.cat.z3950.marc_view.label'));
147                                         n.setAttribute('accesskey', $("catStrings").getString('staff.cat.z3950.marc_view.accesskey'));
148                                         document.getElementById('results').focus();
149                                     } else {
150                                         document.getElementById('deck').selectedIndex = 1;
151                                         n.setAttribute('toggle','1');
152                                         n.setAttribute('label', $("catStrings").getString('staff.cat.z3950.results_view.label'));
153                                         n.setAttribute('accesskey', $("catStrings").getString('staff.cat.z3950.results_view.accesskey'));
154                                         var f = get_contentWindow(document.getElementById('marc_frame'));
155                                         var retrieve_id = n.getAttribute('retrieve_id');
156                                         var result_idx = retrieve_id.split('-')[0];
157                                         var record_idx = retrieve_id.split('-')[1];
158                                         f.xulG = { 'marcxml' : obj.result_set[result_idx].records[ record_idx ].marcxml };
159                                         f.my_init();
160                                         f.document.body.firstChild.focus();
161                                     }
162                                 } catch(E) {
163                                     obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.obj_controller_init.marc_view_error'),E);
164                                 }
165                             },
166                         ],
167                         'mark_overlay' : [
168                             ['command'],
169                             function() {
170                                 try {
171                                     var doc_id = obj.controller.view.mark_overlay.getAttribute('doc_id');
172                                     if (doc_id) {
173                                         cat.util.mark_for_overlay(doc_id);
174                                     }
175                                 } catch(E) {
176                                     alert('Error in z3950.js, mark_overlay: ' + E);
177                                 }
178                             }
179                         ],
180                         'show_in_catalog' : [
181                             ['command'],
182                             function() {
183                                 try {
184                                     var doc_id = obj.controller.view.mark_overlay.getAttribute('doc_id');
185                                     if (doc_id) {
186                                         var opac_url = xulG.url_prefix('opac_rdetail') + doc_id;
187                                         var content_params = { 
188                                             'session' : ses(),
189                                             'authtime' : ses('authtime'),
190                                             'opac_url' : opac_url,
191                                         };
192                                         xulG.new_tab(
193                                                      xulG.url_prefix('XUL_OPAC_WRAPPER'), 
194                                                      {'tab_name': $("catStrings").getString('staff.cat.z3950.replace_tab_with_opac.tab_name')}, 
195                                                      content_params
196                                                      );
197                                     }
198                                 } catch(E) {
199                                     alert('Error in z3950.js, show_in_catalog: ' + E);
200                                 }
201                             }
202                         ],
203                         'marc_import' : [
204                             ['command'],
205                             function() {
206                                 try {
207                                     var retrieve_id = obj.controller.view.marc_import.getAttribute('retrieve_id');
208                                     var result_idx = retrieve_id.split('-')[0];
209                                     var record_idx = retrieve_id.split('-')[1];
210                                     obj.spawn_marc_editor( 
211                                         obj.result_set[ result_idx ].records[ record_idx ].marcxml,
212                                         obj.result_set[ result_idx ].records[ record_idx ].service /* FIXME: we want biblio_source here */
213                                     );
214                                 } catch(E) {
215                                     obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.obj_controller_init.marc_import_error'),E);
216                                 }
217                             },
218                         ],
219                         'marc_import_overlay' : [ 
220                             ['command'],
221                             function() {
222                                 try {
223                                     var retrieve_id = obj.controller.view.marc_import_overlay.getAttribute('retrieve_id');
224                                     var result_idx = retrieve_id.split('-')[0];
225                                     var record_idx = retrieve_id.split('-')[1];
226                                     obj.spawn_marc_editor_for_overlay( 
227                                         obj.result_set[ result_idx ].records[ record_idx ].marcxml,
228                                         obj.result_set[ result_idx ].records[ record_idx ].service /* FIXME: we want biblio_source here */
229                                     );
230                                 } catch(E) {
231                                     obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.obj_controller_init.marc_import_overlay_error'),E);
232                                 }
233                             },
234                         ],
235                         'search' : [
236                             ['command'],
237                             function() {
238                                 obj.initial_search();
239                             },
240                         ],
241                         'raw_search' : [ 
242                             ['command'], 
243                             function() { 
244                                 var raw = window.prompt(
245                                     $("catStrings").getString('staff.cat.z3950.initial_search.raw_prompt.msg'),
246                                     $("catStrings").getString('staff.cat.z3950.initial_search.raw_prompt.default_value'),
247                                     $("catStrings").getString('staff.cat.z3950.initial_search.raw_prompt.title')
248                                 ); 
249                                 if (raw) obj.initial_raw_search(raw); 
250                             } 
251                         ], 
252                         'page_next' : [
253                             ['command'],
254                             function() {
255                                 obj.page_next();
256                             },
257                         ],
258                         'toggle_form_btn' : [
259                             ['render'],
260                             function(e) {
261                                 e.setAttribute('image',"/xul/server/skin/media/images/up_arrow.gif");
262                                 e.setAttribute('label',$("catStrings").getString('staff.cat.z3950.hide_top_pane.label'));
263                                 e.setAttribute('accesskey',$("catStrings").getString('staff.cat.z3950.hide_top_pane.accesskey'));
264                             }
265                         ],
266                         'toggle_form' : [
267                             ['command'],
268                             function() {
269                                 var x = document.getElementById('top_pane');
270                                 document.getElementById('splitter_grippy2').doCommand();
271                                 var n = obj.controller.view.toggle_form_btn;
272                                 if (x.collapsed) {
273                                     n.setAttribute('image',"/xul/server/skin/media/images/down_arrow.gif");
274                                     n.setAttribute('label',$("catStrings").getString('staff.cat.z3950.unhide_top_pane.label'));
275                                     n.setAttribute('accesskey',$("catStrings").getString('staff.cat.z3950.unhide_top_pane.accesskey'));
276                                 } else {
277                                     n.setAttribute('image',"/xul/server/skin/media/images/up_arrow.gif");
278                                     n.setAttribute('label',$("catStrings").getString('staff.cat.z3950.hide_top_pane.label'));
279                                     n.setAttribute('accesskey',$("catStrings").getString('staff.cat.z3950.hide_top_pane.accesskey'));
280                                 }
281                             },
282                         ],
283                         'splitter_grippy2' : [
284                             ['click'],
285                             function() {
286                                 var x = document.getElementById('top_pane');
287                                 var n = obj.controller.view.toggle_form_btn;
288                                 if (x.collapsed) {
289                                     n.setAttribute('image',"/xul/server/skin/media/images/down_arrow.gif");
290                                     n.setAttribute('label',$("catStrings").getString('staff.cat.z3950.unhide_top_pane.label'));
291                                     n.setAttribute('accesskey',$("catStrings").getString('staff.cat.z3950.unhide_top_pane.accesskey'));
292                                 } else {
293                                     n.setAttribute('image',"/xul/server/skin/media/images/up_arrow.gif");
294                                     n.setAttribute('label',$("catStrings").getString('staff.cat.z3950.hide_top_pane.label'));
295                                     n.setAttribute('accesskey',$("catStrings").getString('staff.cat.z3950.hide_top_pane.accesskey'));
296                                 }
297                             }
298                         ],
299                         'service_rows' : [
300                             ['render'],
301                             function(e) {
302                                 return function() {
303                                     try {
304
305                                         function handle_switch(node) {
306                                             try {
307                                                 $('search').setAttribute('disabled','true'); $('raw_search').setAttribute('disabled','true');
308                                                 obj.active_services = [];
309                                                 var snl = document.getElementsByAttribute('mytype','service_class');
310                                                 for (var i = 0; i < snl.length; i++) {
311                                                     var n = snl[i];
312                                                     if (n.nodeName == 'checkbox') {
313                                                         if (n.checked) obj.active_services.push( n.getAttribute('service') );
314                                                     }
315                                                 }
316                                                 if (obj.active_services.length > 0) {
317                                                     $('search').setAttribute('disabled','false'); 
318                                                 }
319                                                 if (obj.active_services.length == 1) {
320                                                     if (obj.active_services[0] != 'native-evergreen-catalog') { 
321                                                         $('raw_search').setAttribute('disabled','false');
322                                                     }
323                                                 }
324                                                 var nl = document.getElementsByAttribute('mytype','search_class');
325                                                 for (var i = 0; i < nl.length; i++) { nl[i].disabled = true; }
326                                                 var attrs = {};
327                                                 for (var j = 0; j < obj.active_services.length; j++) {
328                                                     if (obj.services[obj.active_services[j]]) for (var i in obj.services[obj.active_services[j]].attrs) {
329                                                         var attr = obj.services[obj.active_services[j]].attrs[i];
330                                                         if (! attrs[i]) {
331                                                             attrs[i] = { 'labels' : {} };
332                                                         }
333                                                         if (attr.label) {
334                                                             attrs[i].labels[ attr.label ] = true;
335                                                         } else if (document.getElementById('commonStrings').testString('staff.z39_50.search_class.' + i)) {
336                                                             attrs[i].labels[ document.getElementById('commonStrings').getString('staff.z39_50.search_class.' + i) ] = true;
337                                                         } else if (attr.name) {
338                                                             attrs[i].labels[ attr.name ] = true;
339                                                         } else {
340                                                             attrs[i].labels[ i ] = true;
341                                                         }
342
343                                                     }
344                                                     
345                                                 }
346
347                                                 function set_label(x,attr) {
348                                                     var labels = [];
349                                                     for (var j in attrs[attr].labels) {
350                                                         labels.push(j);
351                                                     }
352                                                     if (labels.length > 0) {
353                                                         x.setAttribute('value',labels[0]);
354                                                         x.setAttribute('tooltiptext',labels.join(','));
355                                                         if (labels.length > 1) x.setAttribute('class','multiple_labels');
356                                                     }
357                                                 }
358
359                                                 for (var i in attrs) {
360                                                     var x = document.getElementById(i + '_input');
361                                                     if (x) {
362                                                         x.disabled = false;
363                                                         var y = document.getElementById(i + '_label',i);
364                                                         if (y) set_label(y,i);
365                                                     } else {
366                                                         var rows = document.getElementById('query_inputs');
367                                                         var row = document.createElement('row'); rows.appendChild(row);
368                                                         var label = document.createElement('label');
369                                                         label.setAttribute('id',i+'_label');
370                                                         label.setAttribute('control',i+'_input');
371                                                         label.setAttribute('search_class',i);
372                                                         label.setAttribute('style','-moz-user-focus: ignore');
373                                                         row.appendChild(label);
374                                                         set_label(label,i);
375                                                         label.addEventListener('click',function(ev){
376                                                                 var a = ev.target.getAttribute('search_class');
377                                                                 if (a) obj.default_attr = a;
378                                                             },false
379                                                         );
380                                                         var tb = document.createElement('textbox');
381                                                         tb.setAttribute('id',i+'_input');
382                                                         tb.setAttribute('mytype','search_class');
383                                                         tb.setAttribute('search_class',i);
384                                                         row.appendChild(tb);
385                                                         tb.addEventListener('keypress',function(ev) { return obj.handle_enter(ev); },false);
386                                                     }
387                                                 }
388                                             } catch(E) {
389                                                 obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.obj_controller_init.search_fields_error'),E);
390                                             }
391                                         }
392
393                                         document.getElementById('native-evergreen-catalog_service').addEventListener('command',handle_switch,false);
394
395                                         var robj = obj.network.simple_request(
396                                             'RETRIEVE_Z3950_SERVICES',
397                                             [ ses() ]
398                                         );
399                                         if (typeof robj.ilsevent != 'undefined') throw(robj);
400                                         obj.services = robj;
401                                         var x = document.getElementById('service_rows');
402                                         var services = new Array();
403                                         for (var i in obj.services) {
404                                             var label;
405                                             if (obj.services[i].label) {
406                                                 label = obj.services[i].label;
407                                             } else if (obj.services[i].name) {
408                                                 label = obj.services[i].name;
409                                             } else {
410                                                 label = i;
411                                             }
412                                             var j = [label, i];
413                                             services.push(j);
414                                         }
415                                         services.sort();
416                                         for (var j=0; j < services.length; j++) {
417                                             var i = services[j][1];
418                                             try {
419                                                 if (i == 'native-evergreen-catalog') continue;
420                                                 var r = document.createElement('row'); x.appendChild(r);
421                                                 var cb = document.createElement('checkbox'); 
422                                                     cb.setAttribute('label',services[j][0]);
423                                                     cb.setAttribute('tooltiptext',i + ' : ' + obj.services[i].db + '@' + obj.services[i].host + ':' + obj.services[i].port); 
424                                                     cb.setAttribute('mytype','service_class'); cb.setAttribute('service',i);
425                                                     cb.setAttribute('id',i+'_service'); r.appendChild(cb);
426                                                     cb.addEventListener('command',handle_switch,false);
427                                                 var username = document.createElement('textbox'); username.setAttribute('id',i+'_username'); 
428                                                 if (obj.creds.hosts[ obj.data.server_unadorned ] && obj.creds.hosts[ obj.data.server_unadorned ].services[i]) username.setAttribute('value',obj.creds.hosts[ obj.data.server_unadorned ].services[i].username);
429                                                 r.appendChild(username);
430                                                 if (typeof obj.services[i].auth != 'undefined') username.hidden = ! get_bool( obj.services[i].auth );
431                                                 var password = document.createElement('textbox'); password.setAttribute('id',i+'_password'); 
432                                                 if (obj.creds.hosts[ obj.data.server_unadorned ] && obj.creds.hosts[ obj.data.server_unadorned ].services[i]) password.setAttribute('value',obj.creds.hosts[ obj.data.server_unadorned ].services[i].password);
433                                                 password.setAttribute('type','password'); r.appendChild(password);
434                                                 if (typeof obj.services[i].auth != 'undefined') password.hidden = ! get_bool( obj.services[i].auth );
435                                             } catch(E) {
436                                                 alert(E);
437                                             }
438                                         }
439                                         //obj.services[ 'native-evergreen-catalog' ] = { 'attrs' : { 'author' : {}, 'title' : {} } };
440                                         setTimeout(
441                                             function() { 
442                                                 if (obj.creds.hosts[ obj.data.server_unadorned ]) {
443                                                     for (var i = 0; i < obj.creds.hosts[ obj.data.server_unadorned ].default_services.length; i++) {
444                                                         var x = document.getElementById(obj.creds.hosts[ obj.data.server_unadorned ].default_services[i]+'_service');
445                                                         if (x) x.checked = true;
446                                                     }
447                                                 } else if (obj.creds.default_service) {
448                                                     var x = document.getElementById(obj.creds.default_service+'_service');
449                                                     if (x) x.checked = true;
450                                                 }
451                                                 handle_switch();
452                                             },0
453                                         );
454                                     } catch(E) {
455                                         obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.obj_controller_init.z39_service_error'),E);
456                                     }
457                                 }
458                             }
459                         ],
460                     }
461                 }
462             );
463
464             obj.controller.render();
465
466             setTimeout( function() { obj.focus(); }, 0 );
467
468             setInterval( 
469                 function() {
470                     obj.data.init({'via':'stash'});
471                     if (obj.data.marked_record) {
472                         var sel = obj.list.retrieve_selection();
473                         if (sel.length > 0) { obj.controller.view.marc_import_overlay.disabled = false; }
474                         if ($("overlay_tcn_indicator")) {
475                             if (obj.data.marked_record_mvr) {
476                                 $("overlay_tcn_indicator").setAttribute('value',$("catStrings").getFormattedString('staff.cat.z3950.marked_record_for_overlay_indicator.tcn.label',[obj.data.marked_record_mvr.tcn()]));
477                             } else {
478                                 $("overlay_tcn_indicator").setAttribute('value',$("catStrings").getFormattedString('staff.cat.z3950.marked_record_for_overlay_indicator.record_id.label',[obj.data.marked_record]));
479                             }
480                         }
481                     } else {
482                         obj.controller.view.marc_import_overlay.disabled = true;
483                         if ($("overlay_tcn_indicator")) {
484                             $("overlay_tcn_indicator").setAttribute('value',$("catStrings").getString('staff.cat.z3950.marked_record_for_overlay_indicator.no_record.label'));
485                         }
486                     }
487                 }, 2000
488             );
489
490         } catch(E) {
491             this.error.sdump('D_ERROR','cat.z3950.init: ' + E + '\n');
492         }
493     },
494
495     'focus' : function() {
496         var obj = this;
497         var focus_me; var or_focus_me;
498         for (var i = 0; i < obj.active_services.length; i++) {
499             if (obj.creds.hosts[ obj.data.server_unadorned ] && obj.creds.hosts[ obj.data.server_unadorned ].services[ obj.active_services[i] ]) {
500                 var x = obj.creds.hosts[ obj.data.server_unadorned ].services[ obj.active_services[i] ].default_attr;
501                 if (x) { focus_me = x; break; }
502             }
503             if (obj.services[ obj.active_services[i] ]) for (var i in obj.services[ obj.active_services[i] ].attr) { or_focus_me = i; }
504         }
505         if (! focus_me) focus_me = or_focus_me;
506         var xx = document.getElementById(focus_me+'_input'); if (xx) xx.focus();
507     },
508
509     'clear' : function() {
510         var obj = this;
511         var nl = document.getElementsByAttribute('mytype','search_class');
512         for (var i = 0; i < nl.length; i++) { nl[i].value = ''; nl[i].setAttribute('value',''); }
513         obj.focus();
514     },
515
516     'search_params' : {},
517
518     'initial_search' : function() {
519         try {
520             var obj = this;
521             obj.result_set = []; obj.number_of_result_sets = 0;
522             JSAN.use('util.widgets');
523             util.widgets.remove_children( obj.controller.view.result_message );
524             var x = document.createElement('description'); obj.controller.view.result_message.appendChild(x);
525             if (obj.active_services.length < 1) {
526                 x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.initial_search.no_search_selection')));
527                 return;
528             }
529             x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.initial_search.searching')));
530             obj.search_params = {}; obj.list.clear();
531             obj.controller.view.page_next.disabled = true;
532             obj.controller.view.cmd_z3950_csv_to_file.setAttribute('disabled','true');
533             obj.controller.view.cmd_z3950_csv_to_clipboard.setAttribute('disabled','true');
534             obj.controller.view.cmd_z3950_csv_to_printer.setAttribute('disabled','true');
535
536             obj.search_params.service_array = []; 
537             obj.search_params.username_array = [];
538             obj.search_params.password_array = [];
539             for (var i = 0; i < obj.active_services.length; i++) {
540                 obj.search_params.service_array.push( obj.active_services[i] );
541                 obj.search_params.username_array.push( document.getElementById( obj.active_services[i]+'_username' ).value );
542                 obj.search_params.password_array.push( document.getElementById( obj.active_services[i]+'_password' ).value );
543             }
544             obj.search_params.limit = Math.ceil( obj.limit / obj.active_services.length );
545             obj.search_params.offset = 0;
546
547             obj.search_params.search = {};
548             var nl = document.getElementsByAttribute('mytype','search_class');
549             var count = 0;
550             for (var i = 0; i < nl.length; i++) {
551                 if (nl[i].disabled) continue;
552                 if (nl[i].value == '') continue;
553                 count++;
554                 obj.search_params.search[ nl[i].getAttribute('search_class') ] = nl[i].value;
555             }
556             if (count>0) {
557                 obj.search();
558             } else {
559                 util.widgets.remove_children( obj.controller.view.result_message );
560             }
561         } catch(E) {
562             this.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.initial_search.failed_search'),E);
563         }
564     },
565
566     'initial_raw_search' : function(raw) {
567         try {
568             var obj = this;
569             obj.result_set = []; obj.number_of_result_sets = 0;
570             JSAN.use('util.widgets');
571             util.widgets.remove_children( obj.controller.view.result_message );
572             var x = document.createElement('description'); obj.controller.view.result_message.appendChild(x);
573             if (obj.active_services.length < 1) {
574                 x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.initial_search.no_search_selection')));
575                 return;
576             }
577             if (obj.active_services.length > 1) {
578                 x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.initial_search.too_many_selections')));
579                 return;
580             }
581             if (obj.active_services[0] == 'native-evergreen-catalog') {
582                 x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.initial_search.raw_search_unsupported_for_native_catalog')));
583                 return;
584             }
585             x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.initial_search.searching')));
586             obj.search_params = {}; obj.list.clear();
587             obj.controller.view.page_next.disabled = true;
588             obj.controller.view.cmd_z3950_csv_to_file.setAttribute('disabled','true');
589             obj.controller.view.cmd_z3950_csv_to_clipboard.setAttribute('disabled','true');
590             obj.controller.view.cmd_z3950_csv_to_printer.setAttribute('disabled','true');
591
592             obj.search_params.service_array = []; 
593             obj.search_params.username_array = [];
594             obj.search_params.password_array = [];
595             for (var i = 0; i < obj.active_services.length; i++) {
596                 obj.search_params.service_array.push( obj.active_services[i] );
597                 obj.search_params.username_array.push( document.getElementById( obj.active_services[i]+'_username' ).value );
598                 obj.search_params.password_array.push( document.getElementById( obj.active_services[i]+'_password' ).value );
599             }
600             obj.search_params.limit = Math.ceil( obj.limit / obj.active_services.length );
601             obj.search_params.offset = 0;
602
603             obj.search_params.query = raw;
604
605             obj.search();
606         } catch(E) {
607             this.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.initial_search.failed_search'),E);
608         }
609     },
610
611     'page_next' : function() {
612         try {
613             var obj = this;
614             JSAN.use('util.widgets');
615             util.widgets.remove_children( obj.controller.view.result_message );
616             var x = document.createElement('description'); obj.controller.view.result_message.appendChild(x);
617             x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.page_next.more_results')));
618             obj.search_params.offset += obj.search_params.limit;
619             obj.search();
620         } catch(E) {
621             this.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.page_next.subsequent_search_error'),E);
622         }
623     },
624
625     'search' : function() {
626         try {
627             var obj = this;
628             var method;
629             if (typeof obj.search_params.query == 'undefined') {
630                 method = 'FM_BLOB_RETRIEVE_VIA_Z3950_SEARCH';
631                 obj.search_params.service = obj.search_params.service_array;
632                 obj.search_params.username = obj.search_params.username_array;
633                 obj.search_params.password = obj.search_params.password_array;
634             } else {
635                 method = 'FM_BLOB_RETRIEVE_VIA_Z3950_RAW_SEARCH';
636                 obj.search_params.service = obj.search_params.service_array[0];
637                 obj.search_params.username = obj.search_params.username_array[0];
638                 obj.search_params.password = obj.search_params.password_array[0];
639             }
640             obj.network.simple_request(
641                 method,
642                 [ ses(), obj.search_params ],
643                 function(req) {
644                     obj.handle_results(req.getResultObject())
645                 }
646             );
647             document.getElementById('deck').selectedIndex = 0;
648         } catch(E) {
649             this.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.search.search_error'),E);
650         }
651     },
652
653     'handle_results' : function(results) {
654         var obj = this;
655         try {
656             JSAN.use('util.widgets');
657             util.widgets.remove_children( obj.controller.view.result_message ); var x;
658             if (results == null) {
659                 x = document.createElement('description'); obj.controller.view.result_message.appendChild(x);
660                 x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.handle_results.null_server_error')));
661                 return;
662             }
663             if (typeof results.ilsevent != 'undefined') {
664                 x = document.createElement('description'); obj.controller.view.result_message.appendChild(x);
665                 x.appendChild( document.createTextNode($("catStrings").getFormattedString('staff.cat.z3950.handle_results.server_error', [results.textcode, results.desc])));
666                 return;
667             }
668             obj.controller.view.cmd_z3950_csv_to_file.setAttribute('disabled','false');
669             obj.controller.view.cmd_z3950_csv_to_clipboard.setAttribute('disabled','false');
670             obj.controller.view.cmd_z3950_csv_to_printer.setAttribute('disabled','false');
671             if (typeof results.length == 'undefined') results = [ results ];
672
673             var total_showing = 0;
674             var total_count = 0;
675             var tooltip_msg = '';
676
677             for (var i = 0; i < results.length; i++) {
678                 if (results[i].query) {
679                     tooltip_msg += $("catStrings").getFormattedString('staff.cat.z3950.handle_results.raw_query', [results[i].query]) + '\n';
680                 }
681                 if (results[i].count) {
682                     if (results[i].records) {
683                         var showing = obj.search_params.offset + results[i].records.length; 
684                         total_showing += obj.search_params.offset + results[i].records.length; 
685                         total_count += results[i].count;
686                         tooltip_msg += $("catStrings").getFormattedString('staff.cat.z3950.handle_results.showing_results', [(showing > results[i].count ? results[i].count : showing), results[i].count, results[i].service]) + '\n';
687                     }
688                     if (obj.search_params.offset + obj.search_params.limit <= results[i].count) {
689                         obj.controller.view.page_next.disabled = false;
690                     }
691                 } else {
692                     tooltip_msg += $("catStrings").getFormattedString('staff.cat.z3950.handle_results.num_of_results', [(results[i].count ? results[i].count : 0)]) + '\n';
693                 }
694                 if (results[i].records) {
695                     obj.result_set[ ++obj.number_of_result_sets ] = results[i];
696                     obj.controller.view.marc_import.disabled = true;
697                     obj.controller.view.marc_import_overlay.disabled = true;
698                     var x = obj.controller.view.marc_view_btn;
699                     if (x.getAttribute('toggle') == '0') x.disabled = true;
700                     for (var j = 0; j < obj.result_set[ obj.number_of_result_sets ].records.length; j++) {
701                         var f;
702                         var n = obj.list.append(
703                             {
704                                 'retrieve_id' : String( obj.number_of_result_sets ) + '-' + String( j ),
705                                 'row' : {
706                                     'my' : {
707                                         'mvr' : function(a){
708                                             if (a.bibid) {
709                                                 // We have col definitions, etc.
710                                                 // expecting doc_id
711                                                 a.mvr.doc_id( a.bibid );
712                                             }
713                                             return a.mvr;
714                                         }(obj.result_set[ obj.number_of_result_sets ].records[j]),
715                                         'service' : results[i].service
716                                     }
717                                 }
718                             }
719                         );
720                         n.treeitem_node.setAttribute('isbn', function(a){return a;}(obj.result_set[ obj.number_of_result_sets ].records[j].mvr).isbn());
721                         n.treeitem_node.setAttribute(
722                             'service',
723                             function(a){return a;}(
724                                 results[i].service
725                             )
726                         );
727                         n.treeitem_node.setAttribute(
728                             'doc_id',
729                             function(a){return a;}(
730                                 (obj.result_set[ obj.number_of_result_sets ].records[j].mvr)
731                             ).doc_id()
732                         );
733
734                         if (!f) { n.treeitem_node.parentNode.focus(); f = n; } 
735                     }
736                 } else {
737                     x = document.createElement('description'); obj.controller.view.result_message.appendChild(x);
738                     x.appendChild(
739                         document.createTextNode($("catStrings").getString('staff.cat.z3950.handle_results.result_error'))
740                     );
741                 }
742             }
743             if (total_showing) {
744                 x = document.createElement('description'); 
745                 x.setAttribute('crop','end');
746                 x.setAttribute('tooltiptext',tooltip_msg);
747                 obj.controller.view.result_message.appendChild(x);
748                 x.appendChild(
749                     document.createTextNode($("catStrings").getFormattedString('staff.cat.z3950.handle_results.showing_total_results',
750                         [(total_showing > total_count ? total_count : total_showing), total_count]))
751                 );
752             } else {
753                 x = document.createElement('description'); 
754                 x.setAttribute('crop','end');
755                 x.setAttribute('tooltiptext',tooltip_msg);
756                 obj.controller.view.result_message.appendChild(x);
757                 x.appendChild(
758                     document.createTextNode($("catStrings").getFormattedString('staff.cat.z3950.handle_results.num_of_results', [(total_count ? total_count : 0)]))
759                 );
760             }            
761
762         } catch(E) {
763             this.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.handle_results.search_result_error'),E);
764         }
765     },
766
767     'replace_tab_with_opac' : function(doc_id) {
768         var opac_url = xulG.url_prefix('opac_rdetail') + doc_id;
769         var content_params = { 
770             'session' : ses(),
771             'authtime' : ses('authtime'),
772             'opac_url' : opac_url,
773         };
774         xulG.set_tab(
775             xulG.url_prefix('XUL_OPAC_WRAPPER'), 
776             {'tab_name': $("catStrings").getString('staff.cat.z3950.replace_tab_with_opac.tab_name')}, 
777             content_params
778         );
779     },
780
781     'spawn_marc_editor' : function(my_marcxml,biblio_source) {
782         var obj = this;
783
784         function save_marc (new_marcxml) {
785             try {
786
787                 // extract the import strip groups
788                 var strip_grps = dojo.query('[strip-fields-cbox]').filter(
789                     function(grp) { return grp.checked }).map(
790                     function(grp) { return grp.getAttribute('value') });
791
792                 var r = obj.network.simple_request(
793                     'MARC_XML_RECORD_IMPORT', [ 
794                         ses(), new_marcxml, biblio_source, 
795                         null, null, strip_grps 
796                     ]
797                 );
798
799                 if (typeof r.ilsevent != 'undefined') {
800                     switch(Number(r.ilsevent)) {
801                         case 1704 /* TCN_EXISTS */ :
802                             var msg = $("catStrings").getFormattedString('staff.cat.z3950.spawn_marc_editor.same_tcn', [r.payload.tcn]);
803                             var title = $("catStrings").getString('staff.cat.z3950.spawn_marc_editor.title');
804                             var btn1 = $("catStrings").getString('staff.cat.z3950.spawn_marc_editor.btn1_overlay');
805                             var btn2 = typeof r.payload.new_tcn == 'undefined' ? null : $("catStrings").getFormattedString('staff.cat.z3950.spawn_marc_editor.btn2_import', [r.payload.new_tcn]);
806                             if (btn2) {
807                                 obj.data.init({'via':'stash'});
808                                 var robj = obj.network.simple_request(
809                                     'PERM_CHECK',[
810                                         ses(),
811                                         obj.data.list.au[0].id(),
812                                         obj.data.list.au[0].ws_ou(),
813                                         [ 'ALLOW_ALT_TCN' ]
814                                     ]
815                                 );
816                                 if (typeof robj.ilsevent != 'undefined') {
817                                     obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.permission_error'),E);
818                                 }
819                                 if (robj.length != 0) btn2 = null;
820                             }
821                             var btn3 = $("catStrings").getString('staff.cat.z3950.spawn_marc_editor.btn3_cancel_import');
822                             var p = obj.error.yns_alert(msg,title,btn1,btn2,btn3,$("catStrings").getString('staff.cat.z3950.spawn_marc_editor.confirm_action'));
823                             obj.error.sdump('D_ERROR','option ' + p + 'chosen');
824                             switch(p) {
825                                 case 0:
826                                     var r3 = obj.network.simple_request('MARC_XML_RECORD_UPDATE', [ 
827                                         ses(), r.payload.dup_record, 
828                                         new_marcxml, biblio_source, null, strip_grps 
829                                     ]);
830                                     if (typeof r3.ilsevent != 'undefined') {
831                                         throw(r3);
832                                     } else {
833                                         alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.successful_overlay'));
834                                         return {
835                                             'id' : r3.id(),
836                                             'on_complete' : function() {
837                                                 try {
838                                                     obj.replace_tab_with_opac(r3.id());
839                                                 } catch(E) {
840                                                     alert(E);
841                                                 }
842                                             }
843                                         };
844                                     }
845                                 break;
846                                 case 1:
847                                     var r2 = obj.network.request(
848                                         api.MARC_XML_RECORD_IMPORT.app,
849                                         api.MARC_XML_RECORD_IMPORT.method + '.override',
850                                         [ ses(), new_marcxml, biblio_source, null, null, strip_grps ]
851                                     );
852                                     if (typeof r2.ilsevent != 'undefined') {
853                                         throw(r2);
854                                     } else {
855                                         alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.successful_import_with_new_tcn'));
856                                         return {
857                                             'id' : r2.id(),
858                                             'on_complete' : function() {
859                                                 try {
860                                                     obj.replace_tab_with_opac(r2.id());
861                                                 } catch(E) {
862                                                     alert(E);
863                                                 }
864                                             }
865                                         };
866                                     }
867                                 break;
868                                 case 2:
869                                 default:
870                                     alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.import_cancelled'));
871                                 break;
872                             }
873                         break;
874                         default:
875                             throw(r);
876                         break;
877                     }
878                 } else {
879                     alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.successful_import'));
880                     return {
881                         'id' : r.id(),
882                         'on_complete' : function() {
883                             try {
884                                 obj.replace_tab_with_opac(r.id());
885                             } catch(E) {
886                                 alert(E);
887                             }
888                         }
889                     };
890                 }
891             } catch(E) {
892                 obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.import_error'),E);
893             }
894         };
895
896         if ( $('marc_editor').checked ) {
897             xulG.new_tab(
898                 xulG.url_prefix('XUL_MARC_EDIT'), 
899                 { 'tab_name' : 'MARC Editor' }, 
900                 { 
901                     'marc_control_number_identifier': obj.data.hash.aous['cat.marc_control_number_identifier'] || 'Set cat.marc_control_number_identifier in Library Settings',
902                     'record' : { 'marc' : my_marcxml, "rtype": "bre" },
903                     'fast_add_item' : function(doc_id,cn_label,cp_barcode) {
904                         try {
905                             JSAN.use('cat.util'); return cat.util.fast_item_add(doc_id,cn_label,cp_barcode);
906                         } catch(E) {
907                             alert(E);
908                         }
909                     },
910                     'save' : {
911                         'label' : $("catStrings").getString('staff.cat.z3950.spawn_marc_editor.save_button_label'),
912                         'func' : save_marc
913                     },
914                     'lock_tab' : xulG.lock_tab,
915                     'unlock_tab' : xulG.unlock_tab
916                 } 
917             );
918         } else {
919             save_marc(my_marcxml);
920         }
921     },
922
923     'confirm_overlay' : function(record_ids) {
924         var obj = this; // JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
925         var top_xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" >';
926         top_xml += '<description>'+$("catStrings").getString('staff.cat.z3950.confirm_overlay.description')+'</description>';
927         top_xml += '<hbox><button id="lead" disabled="false" label="'+$("catStrings").getString('staff.cat.z3950.confirm_overlay.lead.label')+'" name="fancy_submit"';
928         top_xml += ' accesskey="'+$("catStrings").getString('staff.cat.z3950.confirm_overlay.lead.accesskey')+'"/>';
929         top_xml += ' <button label="'+$("catStrings").getString('staff.cat.z3950.confirm_overlay.cancel.label')+'" accesskey="'+
930                         $("catStrings").getString('staff.cat.z3950.confirm_overlay.cancel.accesskey')+'" name="fancy_cancel"/></hbox></vbox>';
931
932         var xml = '<form xmlns="http://www.w3.org/1999/xhtml">';
933         xml += '<table width="100%"><tr valign="top">';
934         for (var i = 0; i < record_ids.length; i++) {
935             xml += '<td nowrap="nowrap"><iframe src="' + urls.XUL_BIB_BRIEF; 
936             xml += '?docid=' + record_ids[i] + '" oils_force_external="true"/></td>';
937         }
938         xml += '</tr><tr valign="top">';
939         for (var i = 0; i < record_ids.length; i++) {
940             xml += '<td nowrap="nowrap"><iframe style="min-height: 1000px; min-width: 300px;" flex="1" src="' + urls.XUL_MARC_VIEW + '?docid=' + record_ids[i] + ' " oils_force_external="true"/></td>';
941         }
942         xml += '</tr></table></form>';
943         // data.temp_merge_top = top_xml; data.stash('temp_merge_top');
944         // data.temp_merge_mid = xml; data.stash('temp_merge_mid');
945         JSAN.use('util.window'); var win = new util.window();
946         var fancy_prompt_data = win.open(
947             urls.XUL_FANCY_PROMPT,
948             // + '?xml_in_stash=temp_merge_mid'
949             // + '&top_xml_in_stash=temp_merge_top'
950             // + '&title=' + window.escape('Record Overlay'),
951             'fancy_prompt', 'chrome,resizable,modal,width=700,height=500',
952             { 'top_xml' : top_xml, 'xml' : xml, 'title' : $("catStrings").getString('staff.cat.z3950.confirm_overlay.title') }
953         );
954         //data.stash_retrieve();
955         if (fancy_prompt_data.fancy_status == 'incomplete') { alert($("catStrings").getString('staff.cat.z3950.confirm_overlay.aborted')); return false; }
956         return true;
957     },
958
959     'spawn_marc_editor_for_overlay' : function(my_marcxml,biblio_source) {
960         var obj = this;
961         obj.data.init({'via':'stash'});
962         if (!obj.data.marked_record) {
963             alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.try_again'));
964             return;
965         }
966
967         function overlay_marc (new_marcxml) {
968             try {
969                 if (! obj.confirm_overlay( [ obj.data.marked_record ] ) ) { return; }
970
971                 var strip_grps = dojo.query('[strip-fields-cbox]').filter(
972                     function(grp) { return grp.checked }).map(
973                     function(grp) { return grp.getAttribute('value') });
974
975                 var r = obj.network.simple_request('MARC_XML_RECORD_REPLACE', 
976                     [ ses(), obj.data.marked_record, new_marcxml, biblio_source, null, strip_grps ]);
977
978                 if (typeof r.ilsevent != 'undefined') {
979                     switch(Number(r.ilsevent)) {
980                         case 1704 /* TCN_EXISTS */ :
981                             var msg = $("catStrings").getFormattedString('staff.cat.z3950.spawn_marc_editor_for_overlay.same_tcn', [r.payload.tcn]);
982                             var title = $("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.import_collision');
983                             var btn1 = typeof r.payload.new_tcn == 'undefined' ? null : $("catStrings").getFormattedString('staff.cat.z3950.spawn_marc_editor_for_overlay.btn1_overlay', [r.payload.new_tcn]);
984                             if (btn1) {
985                                 var robj = obj.network.simple_request(
986                                     'PERM_CHECK',[
987                                         ses(),
988                                         obj.data.list.au[0].id(),
989                                         obj.data.list.au[0].ws_ou(),
990                                         [ 'ALLOW_ALT_TCN' ]
991                                     ]
992                                 );
993                                 if (typeof robj.ilsevent != 'undefined') {
994                                     obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.permission_error'),E);
995                                 }
996                                 if (robj.length != 0) btn1 = null;
997                             }
998                             var btn2 = $("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.btn2_cancel');
999                             var p = obj.error.yns_alert(msg,title,btn1,btn2,null, $("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.confirm_action'));
1000                             obj.error.sdump('D_ERROR','option ' + p + 'chosen');
1001                             switch(p) {
1002                                 case 0:
1003                                     var r2 = obj.network.request(
1004                                         api.MARC_XML_RECORD_REPLACE.app,
1005                                         api.MARC_XML_RECORD_REPLACE.method + '.override',
1006                                         [ ses(), obj.data.marked_record, new_marcxml, 
1007                                             biblio_source, null, strip_grps ]
1008                                     );
1009                                     if (typeof r2.ilsevent != 'undefined') {
1010                                         throw(r2);
1011                                     } else {
1012                                         alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.successful_overlay_with_new_TCN'));
1013                                         return {
1014                                             'id' : r2.id(),
1015                                             'on_complete' : function() {
1016                                                 try {
1017                                                     obj.replace_tab_with_opac(r2.id());
1018                                                 } catch(E) {
1019                                                     alert(E);
1020                                                 }
1021                                             }
1022                                         };
1023                                     }
1024                                 break;
1025                                 case 1:
1026                                 default:
1027                                     alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.cancelled_overlay'));
1028                                 break;
1029                             }
1030                         break;
1031                         default:
1032                             throw(r);
1033                         break;
1034                     }
1035                 } else {
1036                     alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.success_overlay'));
1037                     try {
1038                         obj.data.marked_record_mvr = null;
1039                         obj.data.marked_record = null;
1040                         obj.data.stash('marked_record');
1041                         obj.data.stash('marked_record_mvr');
1042                         obj.controller.view.marc_import_overlay.disabled = true;
1043                         if ($("overlay_tcn_indicator")) {
1044                             $("overlay_tcn_indicator").setAttribute('value',$("catStrings").getString('staff.cat.z3950.marked_record_for_overlay_indicator.no_record.label'));
1045                         }
1046                         xulG.set_statusbar(1, $("catStrings").getString('staff.cat.z3950.marked_record_for_overlay_indicator.no_record.label') );
1047                     } catch(E) {
1048                         dump('Error in z3950.js, post-overlay: ' + E + '\n');
1049                     }
1050                     return {
1051                         'id' : r.id(),
1052                         'on_complete' : function() {
1053                             try {
1054                                 obj.replace_tab_with_opac(r.id());
1055                             } catch(E) {
1056                                 alert(E);
1057                             }
1058                         }
1059                     };
1060                 }
1061             } catch(E) {
1062                 obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.overlay_error'),E);
1063             }
1064         }
1065
1066         if ( $('marc_editor').checked ) {
1067             xulG.new_tab(
1068                 xulG.url_prefix('XUL_MARC_EDIT'), 
1069                 { 'tab_name' : $("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.tab_name') },
1070                 { 
1071                     'record' : { 'marc' : my_marcxml },
1072                     'fast_add_item' : function(doc_id,cn_label,cp_barcode) {
1073                         try {
1074                             JSAN.use('cat.util'); cat.util.fast_item_add(doc_id,cn_label,cp_barcode);
1075                         } catch(E) {
1076                             alert(E);
1077                         }
1078                     },
1079                     'save' : {
1080                         'label' : $("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.overlay_record_label'),
1081                         'func' : overlay_marc
1082                     }
1083                 } 
1084             );
1085         } else {
1086             overlay_marc(my_marcxml);
1087         }
1088     },
1089
1090
1091     'load_creds' : function() {
1092         var obj = this;
1093         try {
1094             obj.creds = { 'version' : g.save_version, 'services' : {}, 'hosts' : {} };
1095             /*
1096                 {
1097                     'version' : xx,
1098                     'default_service' : xx,
1099                     'services' : {
1100
1101                         'xx' : {
1102                             'username' : xx,
1103                             'password' : xx,
1104                             'default_attr' : xx,
1105                         },
1106
1107                         'xx' : {
1108                             'username' : xx,
1109                             'password' : xx,
1110                             'default_attr' : xx,
1111                         },
1112                     },
1113                     // new in version 2
1114                     'hosts' : {
1115                         'xxxx' : {
1116                             'default_services' : [ xx, ... ],
1117                             'services' : {
1118
1119                                 'xx' : {
1120                                     'username' : xx,
1121                                     'password' : xx,
1122                                     'default_attr' : xx,
1123                                 },
1124
1125                                 'xx' : {
1126                                     'username' : xx,
1127                                     'password' : xx,
1128                                     'default_attr' : xx,
1129                                 },
1130                             },
1131                         }
1132                     }
1133                 }
1134             */
1135             JSAN.use('util.file'); var file = new util.file('z3950_store');
1136             if (file._file.exists()) {
1137                 var creds = file.get_object(); file.close();
1138                 if (typeof creds.version != 'undefined') {
1139                     if (creds.version >= obj.creds_version) {  /* so apparently, this guy is assuming that future versions will be backwards compatible */
1140                         if (typeof creds.hosts == 'undefined') creds.hosts = {};
1141                         obj.creds = creds;
1142                     }
1143                 }
1144             }
1145         } catch(E) {
1146             obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.load_creds.z3950_cred_error'),E);
1147         }
1148     },
1149
1150     'save_creds' : function () {
1151         try {
1152             var obj = this;
1153             if (typeof obj.creds.hosts == 'undefined') obj.creds.hosts = {};
1154             if (typeof obj.creds.hosts[ obj.data.server_unadorned ] == 'undefined') obj.creds.hosts[ obj.data.server_unadorned ] = { 'services' : {} };
1155             obj.creds.hosts[ obj.data.server_unadorned ].default_services = obj.active_services;
1156             for (var i = 0; i < obj.creds.hosts[ obj.data.server_unadorned ].default_services.length; i++) {
1157                 var service = obj.creds.hosts[ obj.data.server_unadorned ].default_services[i];
1158                 if (typeof obj.creds.hosts[ obj.data.server_unadorned ].services[ service ] == 'undefined') {
1159                     obj.creds.hosts[ obj.data.server_unadorned ].services[ service ] = {}
1160                 }
1161                 obj.creds.hosts[ obj.data.server_unadorned ].services[service].username = document.getElementById(service + '_username').value;
1162                 obj.creds.hosts[ obj.data.server_unadorned ].services[service].password = document.getElementById(service + '_password').value;
1163                 if (obj.default_attr) {
1164                     obj.creds.hosts[ obj.data.server_unadorned ].services[service].default_attr = obj.default_attr;
1165                 }
1166             }
1167             obj.creds.version = obj.creds_version;
1168             JSAN.use('util.file'); var file = new util.file('z3950_store');
1169             file.set_object(obj.creds);
1170             file.close();
1171         } catch(E) {
1172             obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.save_creds.z3950_cred_error'),E);
1173         }
1174     },
1175
1176     'handle_enter' : function(ev) {
1177         var obj = this;
1178         if (ev.target.tagName != 'textbox') return;
1179         if (ev.keyCode == 13 /* enter */ || ev.keyCode == 77 /* enter on a mac */) setTimeout( function() { obj.initial_search(); }, 0);
1180     },
1181 }
1182
1183 function buildStripTags() {
1184
1185     // give me every non-always-apply trash field 
1186     // group owned at my workstation or ancestor,
1187     var query = {   
1188         always_apply : 'f',                                                
1189         owner : {'in' : {
1190             select : {aou : [{
1191                 column : 'id',
1192                 transform : 'actor.org_unit_ancestors', 
1193                 result_field : 'id'
1194             }]},
1195             from : 'aou',
1196             where : {id : ses('ws_ou')}}
1197         }
1198     };
1199
1200     fieldmapper.standardRequest(
1201         ['open-ils.pcrud', 'open-ils.pcrud.search.vibtg.atomic'],
1202         {   async : true,
1203             params : [ses(), query, {order_by : {vibtg : ['label']}}],
1204             oncomplete : function(r) {
1205                 var resp = r.recv();
1206                 if (resp) buildStripTags2(resp.content());
1207             }
1208         }
1209     );
1210 }
1211
1212 function buildStripTags2(grps) {
1213     if (!grps || grps.length == 0) return;
1214
1215     $('strip-fields-hbox').className = '';
1216
1217     dojo.forEach(grps, function(grp) {
1218         var cbox = dojo.create('checkbox', {
1219             label : grp.label(), 
1220             value : grp.id(),
1221             'strip-fields-cbox' : 1
1222         });
1223         dojo.place(cbox, $('strip-fields-hbox'));
1224     });
1225 }
1226
1227
1228 dump('exiting cat.z3950.js\n');