]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/patron/patron_display.js
limited hint handling for other ways to check-in
[working/Evergreen.git] / Evergreen / staff_client / chrome / content / evergreen / patron / patron_display.js
1 sdump('D_TRACE','Loading patron_display.js\n');
2
3 function patron_display_init(p) {
4         sdump('D_PATRON_DISPLAY',"TESTING: patron_display.js: " + mw.G['main_test_variable'] + '\n');
5         sdump('D_CONSTRUCTOR',arg_dump(arguments));
6
7         // gives: p.clamshell, p.right_panel, p.left_panel
8         patron_display_clamshell_init(p);
9
10         // gives: p.patron_items, p.redraw_patron_items
11         patron_display_patron_items_init(p);
12
13         // gives: p.patron_checkout_items, p.redraw_patron_checkout_items
14         patron_display_patron_checkout_items_init(p);
15
16         // gives: p.patron_holds, p.redraw_patron_holds
17         patron_display_patron_holds_init(p);
18
19         // gives: p.patron_bills, p.redraw_patron_bills
20         patron_display_patron_bills_init(p);
21
22         // gives: p.patron_edit, p.redraw_patron_edit
23         patron_display_patron_edit_init(p);
24
25         p.set_patron = function (au) {
26                 p.patron_edit._patron = au;
27                 return p._patron = au;
28         }
29
30         p.display_patron = function (exceptions) {
31                 if (!exceptions) exceptions = {};
32                 if (!exceptions.all) {
33                         if (!exceptions.patron_checkout_items) p.redraw_patron_checkout_items();
34                         if (!exceptions.patron_items) p.redraw_patron_items();
35                         if (!exceptions.patron_holds) p.redraw_patron_holds();
36                         if (!exceptions.patron_bills) p.redraw_patron_bills();
37                         //if (!exceptions.patron_edit) p.redraw_patron_edit();
38                 }
39                 return render_fm(p.w.document, { 'au' : p._patron });
40         }
41         p.redraw = p.display_patron;
42
43         p.retrieve_patron_via_barcode = function (barcode) {
44                 if (!barcode) barcode = patron_get_barcode( p._patron );
45                 p.set_patron( retrieve_patron_by_barcode( barcode ) );
46                 return p.display_patron( {} );
47         }
48
49         p.retrieve_patron_via_id = function (id, exceptions) {
50                 p.set_patron( retrieve_patron_by_id( id ) );
51                 return p.display_patron(exceptions);
52         }
53
54         p.refresh = function(exceptions) {
55                 if (p._patron) p.retrieve_patron_via_id( p._patron.id(), exceptions );
56         }
57
58         set_patron_display_widgets(p);
59
60         if (p.patron) {
61                 if (typeof(p.patron) == 'object') {
62                         //p._patron = p.patron;
63                         p.set_patron( p.patron );
64                         p.display_patron();
65                 } else
66                         p.retrieve_patron_via_barcode( p.patron );
67         }
68
69         sdump('D_TRACE_EXIT',arg_dump(arguments));
70         return p;
71 }
72
73 function set_patron_display_widgets(p) {
74         p.commandset_node.getElementsByAttribute('id','cmd_patron_refresh')[0].addEventListener(
75                 'command',
76                 function (ev) {
77                         p.refresh();
78                 },
79                 false
80         );
81
82         function gen_func(i) {
83                 // because otherwise i would be 5 for each closure
84                 return function(ev) {
85                         p.clamshell.set_second_deck(i);
86                 };
87         }
88         var cmds = [ 'cmd_patron_checkout', 'cmd_patron_items', 'cmd_patron_holds', 
89                 'cmd_patron_bills', 'cmd_patron_edit', 'cmd_patron_info' ]
90         for (var i in cmds) {
91                 p.commandset_node.getElementsByAttribute('id',cmds[i])[0].addEventListener(
92                         'command',
93                         gen_func(i),
94                         false
95                 );
96         }
97         p.commandset_node.getElementsByAttribute('id','cmd_patron_checkout')[0].addEventListener(
98                 'command',
99                 function () {
100                         focus_widget( p.w.document, 'patron_checkout_barcode_entry_textbox' );
101                 },
102                 false
103         );
104         p.commandset_node.getElementsByAttribute('id','cmd_patron_bills')[0].addEventListener(
105                 'command',
106                 function () {
107                         focus_widget( p.w.document, 'bill_payment_amount_textbox' );
108                 },
109                 false
110         );
111         p.commandset_node.getElementsByAttribute('id','cmd_patron_edit')[0].addEventListener(
112                 'command',
113                 function () {
114                         p.redraw_patron_edit();
115                 },
116                 false
117         );
118
119
120
121
122 }
123
124
125 function patron_display_clamshell_init(p) {
126         p.clamshell = clam_shell_init( { 'w' : p.w, 'node' : p.clamshell_node, 'debug' : p.app } );
127         p.left_panel = p.clamshell.first_deck;
128         p.right_panel = p.clamshell.second_deck;
129 }
130
131 function patron_display_patron_items_init(p) {
132         p.patron_items = patron_items_init( { 'w' : p.w, 'node' : p.patron_items_node, 'debug' : p.app } );
133
134         p.w.document.getElementById('item_print').addEventListener(
135                 'command',
136                 function(ev) {
137                         var params = { 
138                                 'au' : p._patron, 
139                                 'lib' : mw.G.user_ou,
140                                 'staff' : mw.G.user,
141                                 'header' : mw.G.itemsout_header,
142                                 'line_item' : mw.G.itemsout_line_item,
143                                 'footer' : mw.G.itemsout_footer
144                         };
145                         mw.print_itemsout_receipt( params );
146                 }, false
147         );
148
149         p.redraw_patron_items = function() {
150                 p.patron_items.clear_patron_items();
151                 if (!p._patron.checkouts()) patron_get_checkouts( p._patron );
152                 for (var i = 0; i < p._patron.checkouts().length; i++) {
153                         p.patron_items.add_patron_items( [ i ] );
154                 }
155         }
156
157         p.patron_items.register_patron_items_select_callback(
158                 function (ev) {
159                         sdump('D_PATRON_DISPLAY','Firing patron_items_select_callback\n');
160                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
161                         var patron_items = get_list_from_tree_selection( p.patron_items.paged_tree.tree );
162                         /* grab cover art for selected item? */
163                 }
164         );
165         p.patron_items.register_flesh_patron_items_function(
166                 function (treeitem) {
167                         sdump('D_PATRON_DISPLAY','Firing flesh_patron_items_function\n');
168                         var record_id = treeitem.getAttribute('record_id'); 
169                         p.patron_items.map_patron_items_to_cols( p._patron.checkouts()[ record_id ], treeitem );
170                 }
171         );
172         p.patron_items.register_item_context_builder(
173                 function (ev) {
174                         sdump('D_PATRON_DISPLAY','Firing context_builder for patron_items\n');
175                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_items.paged_tree.popup = ' + p.patron_items.paged_tree.popup + '\n');
176                         empty_widget(p.patron_items.paged_tree.popup);
177                         var patron_items = get_list_from_tree_selection( p.patron_items.paged_tree.tree );
178                         sdump('D_PATRON_DISPLAY','patron_items.length = ' + patron_items.length + '\n');
179
180                         /*** RENEW ***/
181                         var menuitem_pi_r = p.patron_items.paged_tree.w.document.createElement('menuitem');
182                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_r );
183                         menuitem_pi_r.setAttribute('label',getString('circ.context_renew'));
184                         menuitem_pi_r.addEventListener(
185                                 'command',
186                                 function (ev) {
187                                         sdump('D_PATRON_DISPLAY','Firing renew context for patron_items\n');
188                                         for (var i = 0; i < patron_items.length; i++) {
189                                                 try {
190                                                         var idx = patron_items[i].getAttribute('record_id'); 
191                                                         var circ = p._patron.checkouts()[ idx ].circ;
192                                                         alert( js2JSON(renew_by_circ_id( circ.id() )) );
193                                                         p.refresh();
194                                                 } catch(E) {
195                                                         alert(E);
196                                                 }
197                                         }
198                                 },
199                                 false
200                         );
201
202                         /*** CHECKIN ***/
203                         var menuitem_pi_c = p.patron_items.paged_tree.w.document.createElement('menuitem');
204                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_c );
205                         menuitem_pi_c.setAttribute('label',getString('circ.context_checkin'));
206                         menuitem_pi_c.addEventListener(
207                                 'command',
208                                 function (ev) {
209                                         sdump('D_PATRON_DISPLAY','Firing checkin context for patron_items\n');
210                                         for (var i = 0; i < patron_items.length; i++) {
211                                                 try {
212                                                         var idx = patron_items[i].getAttribute('record_id'); 
213                                                         var copy = p._patron.checkouts()[ idx ].copy;
214                                                         var check = checkin_by_copy_barcode( copy.barcode(), null );
215                                                         if (check.status == 0) {
216                                                                 alert('Check In: ' + check.text + '  Route To: ' + check.route_to);
217                                                         } else {
218                                                                 alert('Check In: ' + check.text + '  Route To: ' + mw.G.org_tree_hash[check.route_to].shortname());
219                                                         }
220                                                         p.refresh();
221                                                 } catch(E) {
222                                                         alert(E);
223                                                 }
224                                         }
225                                 },
226                                 false
227                         );
228
229                         /* separator */
230                         var menuitem_pi_s = p.patron_items.paged_tree.w.document.createElement('menuseparator');
231                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_s );
232                         
233
234                         /*** COPY EDITOR ***/
235                         var menuitem_pi_ce = p.patron_items.paged_tree.w.document.createElement('menuitem');
236                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_ce );
237                         menuitem_pi_ce.setAttribute('label',getString('circ.context_edit'));
238                         menuitem_pi_ce.addEventListener(
239                                 'command',
240                                 function (ev) {
241                                         sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_items\n');
242                                         for (var i = 0; i < patron_items.length; i++) {
243                                                 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
244                                         }
245                                 },
246                                 false
247                         );
248
249                         /*** OPAC ***/
250                         var menuitem_pi_o = p.patron_items.paged_tree.w.document.createElement('menuitem');
251                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_o );
252                         menuitem_pi_o.setAttribute('label',getString('circ.context_opac'));
253                         menuitem_pi_o.addEventListener(
254                                 'command',
255                                 function (ev) {
256                                         sdump('D_PATRON_DISPLAY','Firing opac context for patron_items\n');
257                                         for (var i = 0; i < patron_items.length; i++) {
258                                                 sdump('D_PATRON_DISPLAY','Firing opac context\n');
259                                         }
260                                 },
261                                 false
262                         );
263                         
264                 }
265         );
266 }
267
268 function patron_display_patron_checkout_items_init(p) {
269         p.patron_checkout_items = patron_checkout_items_init( { 'w' : p.w, 'node' : p.patron_checkout_items_node, 'debug' : p.app } );
270         var tb = p.patron_checkout_items_node.getElementsByAttribute('id','patron_checkout_barcode_entry_textbox')[0];
271         var submit_button = p.patron_checkout_items_node.getElementsByAttribute('id','patron_checkout_submit_barcode_button')[0];
272
273         var checkouts = [];
274
275         function print_receipt() {
276                 p._patron._current_checkouts = checkouts;
277                 var params = { 
278                         'au' : p._patron, 
279                         'lib' : mw.G.user_ou,
280                         'staff' : mw.G.user,
281                         'header' : mw.G.checkout_header,
282                         'line_item' : mw.G.checkout_line_item,
283                         'footer' : mw.G.checkout_footer
284                 };
285                 mw.print_checkout_receipt( params );
286         }
287
288         p.w.document.getElementById('checkout_print').addEventListener( 'command',print_receipt, false);
289
290         p.w.document.getElementById('checkout_done').addEventListener(
291                 'command',
292                 function () {
293                         if (p.w.document.getElementById('checkout_auto').checked) print_receipt(); 
294                         checkouts = []; p.display_patron(); tb.focus();
295                 },
296                 false
297         );
298         p.attempt_checkout = function(barcode) {
299                 try {
300                         //if (! is_barcode_valid(barcode) ) throw('Invalid Barcode');
301                         var permit_check = checkout_permit( barcode, p._patron.id(), 0 );
302                         if (permit_check.status == 0) {
303                                 var check = checkout_by_copy_barcode( barcode, p._patron.id() );
304                                 if (check) {
305                                         checkouts.push( check );
306                                         p.patron_checkout_items.add_checkout_items( [ checkouts.length - 1 ] );
307                                         var temp = p._patron.checkouts();
308                                         temp.push( check );
309                                         p._patron.checkouts( temp );
310                                         render_fm(p.w.document, { 'au' : p._patron }); // p.display_patron();
311                                         p.redraw_patron_items();
312                                         tb.value = '';
313                                 }
314                         } else {
315                                 throw(permit_check.text);
316                         }
317                 } catch(E) {
318                         tb.select();
319                         if (typeof(E) == 'object') {
320                                 handle_error(E,true);
321                         } else {
322                                 s_alert(E);
323                         }
324                 }
325                 tb.focus();
326         }
327
328         tb.addEventListener(
329                 'keypress',
330                 function(ev) {
331                         if (ev.keyCode == 13 || ev.keyCode == 77 ) { p.attempt_checkout( tb.value ); }
332                 },
333                 false
334         );
335         submit_button.addEventListener(
336                 'command',
337                 function(ev) {
338                         p.attempt_checkout( tb.value );
339                 },
340                 false
341         );
342
343         p.redraw_patron_checkout_items = function() {
344                 p.patron_checkout_items.clear_checkout_items();
345                 for (var i = 0; i < checkouts.length; i++) {
346                         p.patron_checkout_items.add_checkout_items( [ i ] );
347                 }
348         }
349
350         p.patron_checkout_items.register_patron_checkout_items_select_callback(
351                 function (ev) {
352                         sdump('D_PATRON_DISPLAY','Firing patron_checkout_items_select_callback\n');
353                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
354                         var patron_checkout_items = get_list_from_tree_selection( p.patron_checkout_items.paged_tree.tree );
355                         /* grab cover art for selected item? */
356                 }
357         );
358         p.patron_checkout_items.register_flesh_patron_checkout_items_function(
359                 function (treeitem) {
360                         sdump('D_PATRON_DISPLAY','Firing flesh_patron_checkout_items_function\n');
361                         var record_id = treeitem.getAttribute('record_id'); 
362                         p.patron_checkout_items.map_patron_checkout_items_to_cols( checkouts[ record_id ], treeitem );
363                 }
364         );
365         p.patron_checkout_items.register_checkout_context_builder(
366                 function (ev) {
367                         sdump('D_PATRON_DISPLAY','Firing context_builder for patron_checkout_items\n');
368                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_checkout_items.paged_tree.popup = ' + p.patron_checkout_items.paged_tree.popup + '\n');
369                         empty_widget(p.patron_checkout_items.paged_tree.popup);
370                         var patron_checkout_items = get_list_from_tree_selection( p.patron_checkout_items.paged_tree.tree );
371
372                         /*** CHECKIN ***/
373                         var menuitem_pci_c = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
374                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_c );
375                         menuitem_pci_c.setAttribute('label',getString('circ.context_checkin'));
376                         menuitem_pci_c.addEventListener(
377                                 'command',
378                                 function (ev) {
379                                         sdump('D_PATRON_DISPLAY','Firing checkin context for patron_checkout_items\n');
380                                         var keep_these = [];
381                                         for (var i = 0; i < patron_checkout_items.length; i++) {
382                                                 try {
383                                                         var idx = patron_checkout_items[i].getAttribute('record_id'); 
384                                                         var copy = checkouts[ idx ].copy;
385                                                         var check = checkin_by_copy_barcode( copy.barcode(), null );
386                                                         if (check == null) { // change this to whatever it takes
387                                                                 keep_these.push( checkouts[ idx ] );    
388                                                         }
389                                                         checkouts = keep_these;
390                                                         if (check.status == 0) {
391                                                                 alert('Check In: ' + check.text + '  Route To: ' + check.route_to);
392                                                         } else {
393                                                                 alert('Check In: ' + check.text + '  Route To: ' + mw.G.org_tree_hash[check.route_to].shortname());
394                                                         }
395                                                         p.refresh();
396                                                 } catch(E) {
397                                                         alert(E);
398                                                 }
399                                         }
400                                 },
401                                 false
402                         );
403
404                         /* separator */
405                         var menuitem_pci_s = p.patron_checkout_items.paged_tree.w.document.createElement('menuseparator');
406                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_s );
407                         
408
409                         /*** COPY EDITOR ***/
410                         var menuitem_pci_ce = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
411                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_ce );
412                         menuitem_pci_ce.setAttribute('label',getString('circ.context_edit'));
413                         menuitem_pci_ce.addEventListener(
414                                 'command',
415                                 function (ev) {
416                                         sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_checkout_items\n');
417                                         for (var i = 0; i < patron_checkout_items.length; i++) {
418                                                 var idx = patron_checkout_items[i].getAttribute('record_id');
419                                                 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
420                                         }
421                                 },
422                                 false
423                         );
424
425                         /*** OPAC ***/
426                         var menuitem_pci_o = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
427                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_o );
428                         menuitem_pci_o.setAttribute('label',getString('circ.context_opac'));
429                         menuitem_pci_o.addEventListener(
430                                 'command',
431                                 function (ev) {
432                                         sdump('D_PATRON_DISPLAY','Firing opac context for patron_checkout_items\n');
433                                         for (var i = 0; i < patron_checkout_items.length; i++) {
434                                                 var idx = patron_checkout_items[i].getAttribute('record_id');
435                                                 sdump('D_PATRON_DISPLAY','Firing opac context\n');
436                                         }
437                                 },
438                                 false
439                         );
440                         
441                 }
442         );
443 }
444
445 function patron_display_patron_holds_init(p) {
446         p.patron_holds = patron_holds_init( { 'w' : p.w, 'node' : p.patron_holds_node, 'debug' : p.app } );
447
448         p.redraw_patron_holds = function() {
449                 p.patron_holds.clear_patron_holds();
450                 if (!p._patron.hold_requests()) patron_get_holds( p._patron );
451                 for (var i = 0; i < p._patron.hold_requests().length; i++) {
452                         p.patron_holds.add_patron_holds( [ i ] );
453                 }
454         }
455
456         p.patron_holds.register_patron_holds_select_callback(
457                 function (ev) {
458                         sdump('D_PATRON_DISPLAY','Firing patron_holds_select_callback\n');
459                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
460                         var patron_holds = get_list_from_tree_selection( p.patron_holds.paged_tree.tree );
461                         /* grab cover art for selected item? */
462                 }
463         );
464         p.patron_holds.register_flesh_patron_holds_function(
465                 function (treeitem) {
466                         sdump('D_PATRON_DISPLAY','Firing flesh_patron_holds_function\n');
467                         var record_id = treeitem.getAttribute('record_id'); 
468                         var hold = p._patron.hold_requests()[ record_id ];
469                         patron_get_hold_status(
470                                 hold,
471                                 function (request) {
472                                         var result = request.getResultObject();
473                                         hold.status( hold_status_as_text( result ) );
474                                         p.patron_holds.map_patron_holds_to_cols( hold, treeitem );
475                                 }
476                         );
477                 }
478         );
479         p.patron_holds.register_item_context_builder(
480                 function (ev) {
481                         sdump('D_PATRON_DISPLAY','Firing context_builder for patron_holds\n');
482                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_holds.paged_tree.popup = ' + p.patron_holds.paged_tree.popup + '\n');
483                         empty_widget(p.patron_holds.paged_tree.popup);
484                         var patron_holds = get_list_from_tree_selection( p.patron_holds.paged_tree.tree );
485                         sdump('D_PATRON_DISPLAY','patron_holds.length = ' + patron_holds.length + '\n');
486
487                         /*** CANCEL HOLD ***/
488                         var menuitem_ph_ce = p.patron_holds.paged_tree.w.document.createElement('menuitem');
489                         p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_ce );
490                         menuitem_ph_ce.setAttribute('label',getString('circ.context_cancel_hold'));
491                         menuitem_ph_ce.addEventListener(
492                                 'command',
493                                 function (ev) {
494                                         sdump('D_PATRON_DISPLAY','Firing cancel hold context for patron_holds\n');
495                                         for (var i = 0; i < patron_holds.length; i++) {
496                                                 sdump('D_PATRON_DISPLAY','Firing cancel edit context\n');
497                                                 var record_id = patron_holds[i].getAttribute('record_id');
498                                                 var hold = p._patron.hold_requests()[ record_id ];
499                                                 cancel_hold( hold );
500                                         }
501                                         p.refresh();
502                                 },
503                                 false
504                         );
505
506                         /* separator */
507                         var menuitem_ph_s = p.patron_holds.paged_tree.w.document.createElement('menuseparator');
508                         p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_s );
509                         
510                         /*** COPY EDITOR ***/
511                         var menuitem_ph_ce = p.patron_holds.paged_tree.w.document.createElement('menuitem');
512                         p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_ce );
513                         menuitem_ph_ce.setAttribute('label',getString('circ.context_edit'));
514                         menuitem_ph_ce.addEventListener(
515                                 'command',
516                                 function (ev) {
517                                         sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_holds\n');
518                                         for (var i = 0; i < patron_holds.length; i++) {
519                                                 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
520                                         }
521                                 },
522                                 false
523                         );
524
525                         /*** OPAC ***/
526                         var menuitem_ph_o = p.patron_holds.paged_tree.w.document.createElement('menuitem');
527                         p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_o );
528                         menuitem_ph_o.setAttribute('label',getString('circ.context_opac'));
529                         menuitem_ph_o.addEventListener(
530                                 'command',
531                                 function (ev) {
532                                         sdump('D_PATRON_DISPLAY','Firing opac context for patron_holds\n');
533                                         for (var i = 0; i < patron_holds.length; i++) {
534                                                 sdump('D_PATRON_DISPLAY','Firing opac context\n');
535                                         }
536                                 },
537                                 false
538                         );
539                         
540                 }
541         );
542 }
543
544 function patron_display_patron_bills_init(p) {
545         p.patron_bills = patron_bills_init( { 
546                 'w' : p.w, 
547                 'node' : p.patron_bills_node, 
548                 'debug' : p.app 
549         } );
550
551         p.patron_bills.refresh = function() { p.refresh(); }
552
553         p.redraw_patron_bills = function() {
554                 try {
555                         p.patron_bills.clear_patron_bills();
556                         if (!p._patron.bills) patron_get_bills( p._patron );
557                         p.patron_bills.add_patron_bills( p._patron.bills );
558                 } catch(E) {
559                         sdump('D_ERROR',js2JSON(E) + '\n');
560                 }
561         }
562 }
563
564 function patron_display_patron_edit_init(p) {
565         /*
566         p.patron_edit = patron_edit_init( { 
567                 'w' : p.w, 
568                 'node' : p.patron_edit_node, 
569                 'debug' : p.app
570         } );
571
572         p.patron_edit.redisplay = function() { p.display_patron( {'patron_edit':true} ); }
573         p.patron_edit.refresh = function() { p.refresh( {'patron_edit':true} ); }
574
575         p.redraw_patron_edit = function() {
576                 try {
577                         p.patron_edit.clear_patron_edit();
578                         p.patron_edit.add_rows( p._patron );
579                 } catch(E) {
580                         sdump('D_ERROR',js2JSON(E) + '\n');
581                 }
582         }
583         */
584         /* shoehorn in the old legacy stuff */
585         p.patron_edit = {};
586         p.redraw_patron_edit = function() { 
587                 empty_widget( p.patron_edit_node );
588                 setTimeout(
589                         function() {
590                                 var frame = p.w.document.createElement('iframe');
591                                 p.patron_edit_node.appendChild( frame );
592                                 frame.setAttribute('flex','1');
593                                 frame.setAttribute('src','chrome://evergreen/content/patron/patron_edit_legacy.xul');
594                                 frame.contentWindow.mw = mw;
595                                 frame.contentWindow.params = {};
596                                 var barcode = patron_get_barcode( p._patron );
597                                 frame.contentWindow.params.barcode = barcode;
598                                 frame.contentWindow.params._patron = p._patron;
599                                 frame.contentWindow.patron_save_callback = function ( params ) {
600                                         p._patron = params.au;
601                                         p.display_patron();
602                                 }
603                                 p.patron_edit.frame = frame;
604                         }, 0
605                 );
606         }
607 }
608