1 var holdsOrgSelectorBuilt = false;
5 note: metarecord holds have a holdable_formats field that contains
6 item_type(s)-item_forms(s)-language
7 item_form and language are optional - if language exist and no
8 item_form is specified, use item_type(s)--language
12 var noEmailMessageXUL;
14 function hideResultsPage(bool) {
16 unHideMe($('result_header'));
17 unHideMe($('tehSideBar'));
18 unHideMe($('facetSidebarContainer'));
19 unHideMe($('sidebar_div'));
20 unHideMe($('statusbar'));
22 unHideMe($('result_table_div'));
23 unHideMe($('results_header_nav1'));
24 unHideMe($('result_info_2'));
25 unHideMe($('results_header_bar'));
27 hideMe($('result_header'));
28 hideMe($('tehSideBar'));
29 hideMe($('facetSidebarContainer'));
30 hideMe($('sidebar_div'));
31 hideMe($('statusbar'));
33 hideMe($('result_table_div'));
34 hideMe($('anonListTable'));
35 hideMe($('results_header_nav1'));
36 hideMe($('result_info_2'));
37 hideMe($('results_header_bar'));
41 function holdsHandleStaff() {
43 // if we know the recipient's barcode, use it
44 if(xulG.patron_barcode) return _holdsHandleStaff();
46 swapCanvas($('xulholds_box'));
47 $('xul_recipient_barcode').focus();
48 $('xul_recipient_barcode').onkeypress = function(evt)
49 {if(userPressedEnter(evt)) { _holdsHandleStaff(); } };
50 $('xul_recipient_barcode_submit').onclick = _holdsHandleStaff;
51 $('xul_recipient_me').onclick = _holdsHandleStaffMe;
53 $('xul_recipient_barcode').onkeyup = function(evt) {
54 if($('xul_recipient_barcode').value == '')
55 $('xul_recipient_me').disabled = false;
57 $('xul_recipient_me').disabled = true;
62 "common", "init", function() {
63 $('holds_frozen_thaw_input').onchange =
64 function(){holdsVerifyThawDateUI('holds_frozen_thaw_input');}
65 $('holds_frozen_thaw_input').onkeyup =
66 function(){holdsVerifyThawDateUI('holds_frozen_thaw_input');}
70 function _holdsHandleStaffMe() {
71 holdArgs.recipient = G.user;
75 function _holdsHandleStaff() {
76 var barcode = xulG.patron_barcode || $('xul_recipient_barcode').value;
77 var user = grabUserByBarcode( G.user.session, barcode );
80 if(evt = checkILSEvent(user)) {
85 if(!barcode || !user) {
86 alertId('holds_invalid_recipient', barcode);
92 holdArgs.recipient = user;
99 * record, volume, copy (ids)
100 * request, recipient, editHold (objects)
103 function holdsDrawEditor(args) {
104 holdArgs = (args) ? args : holdArgs;
106 if(!noEmailMessage) noEmailMessage = $('holds_email').removeChild($('holds.no_email'));
107 if(!noEmailMessageXUL) noEmailMessageXUL = $('holds_email').removeChild($('holds.no_email.xul'));
109 if(isXUL() && holdArgs.recipient == null && holdArgs.editHold == null) {
114 if(!holdArgs.recipient) holdArgs.recipient = G.user;
115 if(!holdArgs.requestor) holdArgs.requestor = G.user;
117 if(!(holdArgs.requestor && holdArgs.requestor.session)) {
119 alert("Please login first before placing a hold");
120 setCacheValue('returnURL',{href:window.location.href, record:holdArgs.record, type:holdArgs.type});
121 goTo(buildOPACLink({page:MYOPAC}, false, true));
124 detachAllEvt('common','locationChanged');
125 attachEvt('common','loggedIn', holdsDrawEditor);
129 // flesh the args with the existing hold
130 if(holdArgs.editHold) holdArgsFromHold(holdArgs.editHold, holdArgs);
132 hideResultsPage(true);
137 // updates the edit window with the existing hold's data
138 function _holdsUpdateEditHold() {
140 var hold = holdArgs.editHold;
141 var qstats = holdArgs.status;
143 var orgsel = $('holds_org_selector');
144 var frozenbox = $('holds_frozen_chkbox');
146 setSelector(orgsel, hold.pickup_lib());
148 if( hold.capture_time() || qstats.status > 2 ) {
149 frozenbox.disabled = true;
150 $('holds_frozen_thaw_input').disabled = true;
151 if(qstats.status == 3) {
152 // no pickup lib changes while in-transit
153 orgsel.disabled = true;
155 var orgs = fetchPermOrgs('UPDATE_PICKUP_LIB_FROM_HOLDS_SHELF');
157 orgsel.disabled = true;
160 orgsel.disabled = false;
161 frozenbox.disabled = false;
165 $('holds_submit').onclick = holdsEditHold;
166 $('holds_update').onclick = holdsEditHold;
168 if(hold.phone_notify()) {
169 $('holds_enable_phone').checked = true;
170 $('holds_phone').value = hold.phone_notify();
173 $('holds_phone').disabled = true;
174 $('holds_enable_phone').checked = false;
177 if(isTrue(hold.email_notify())) {
178 $('holds_enable_email').checked = true;
181 $('holds_enable_email').checked = false;
184 //$('holds_expire_time').setValue(dojo.date.stamp.fromISOString(hold.expire_time()));
186 /* populate the hold freezing info */
187 if(!frozenbox.disabled && isTrue(hold.frozen())) {
188 frozenbox.checked = true;
189 unHideMe($('hold_frozen_thaw_row'));
190 if(hold.thaw_date()) {
191 $('holds_frozen_thaw_input').value=dojo.date.stamp.fromISOString(hold.thaw_date());
193 $('holds_frozen_thaw_input').value='';
196 frozenbox.checked = false;
197 $('holds_frozen_thaw_input').value='';
198 hideMe($('hold_frozen_thaw_row'));
202 function holdsEditHold() {
203 var hold = holdsBuildHoldFromWindow();
207 if(holdArgs.onComplete)
208 holdArgs.onComplete(hold);
211 function holdArgsFromHold(hold, oargs) {
212 var args = (oargs) ? oargs : {};
213 args.type = hold.hold_type();
214 var target = hold.target();
218 args.metarecord = target;
221 args.record = target;
224 args.volume = target;
233 function holdFetchObjects(hold, doneCallback) {
234 var args = (hold) ? holdArgsFromHold(hold) : holdArgs;
235 var type = args.type;
238 if( args.copyObject ) {
240 args.copy = args.copyObject.id();
241 args.volume = args.copyObject.call_number();
242 _h_set_vol(args, doneCallback);
245 var creq = new Request(FETCH_COPY, args.copy);
249 var cp = r.getResultObject();
250 args.copyObject = cp;
251 args.volume = args.copyObject.call_number();
252 _h_set_vol(args, doneCallback);
259 _h_set_vol(args, doneCallback);
263 _h_set_rec(args, doneCallback);
265 _h_set_rec_descriptors(args, doneCallback);
273 function _h_set_vol(args, doneCallback) {
275 if( args.volumeObject ) {
276 args.volume = args.volumeObject.id();
277 args.record = args.volumeObject.record();
278 _h_set_rec(args, doneCallback);
282 var vreq = new Request(FETCH_VOLUME, args.volume);
285 var vol = r.getResultObject();
286 args.volumeObject = vol;
287 args.record = vol.record();
288 _h_set_rec(args, doneCallback);
295 function _h_set_rec(args, doneCallback) {
297 if(args.recordObject)
298 args.record = args.recordObject.doc_id();
300 args.recordObject = findRecord( args.record, 'T' );
302 if( args.type == 'T' || args.type == 'M' )
303 _h_set_rec_descriptors(args, doneCallback);
305 if(doneCallback) doneCallback(args);
309 function _h_set_rec_descriptors(args, doneCallback) {
311 // grab the list of record desciptors attached to this records metarecord
312 if( ! args.recordDescriptors ) {
313 var params = { record: args.record };
315 if( ! args.record ) {
316 if( args.metarecord )
317 params = { metarecord : args.metarecord };
319 params = { metarecord : args.metarecordObject.doc_id() };
322 var req = new Request(FETCH_MR_DESCRIPTORS, params );
325 var data = r.getResultObject();
326 args.recordDescriptors = data.descriptors;
327 args.metarecord = data.metarecord;
328 if( args.type == 'M' && ! args.metarecordObject)
329 args.metarecordObject = findRecord(args.metarecord, 'M');
331 if(doneCallback) doneCallback(args);
337 if(doneCallback) doneCallback(args);
345 function holdsDrawWindow(bool) {
346 swapCanvas($('holds_box'));
347 $('holds_cancel').onclick = function(){
348 hideResultsPage(false);
349 hideMe($('holds_box'));
350 unHideMe($('canvas_main'));
351 //runEvt('common', 'holdUpdateCanceled'), showCanvas()
352 runEvt('common', 'holdUpdateCanceled');
354 $('holds_submit').onclick = function(){holdsPlaceHold(holdsBuildHoldFromWindow())};
355 $('holds_update').onclick = function(){holdsPlaceHold(holdsBuildHoldFromWindow())};
356 holdFetchObjects(null,
360 if(holdArgs.editHold) {
361 //hideMe($('holds_submit'));
362 unHideMe($('holds_update'));
363 var req = new Request(FETCH_HOLD_STATUS,
364 G.user.session, holdArgs.editHold.id());
366 holdArgs.status = req.result();
367 _holdsUpdateEditHold();
373 function selOrgChange(e) {
375 $('holds_pickup_lib').innerHTML = this.options[this.selectedIndex].text;
378 function __holdsDrawWindow() {
380 var rec = holdArgs.recordObject;
381 var vol = holdArgs.volumeObject;
382 var copy = holdArgs.copyObject;
383 var mr = holdArgs.metarecordObject;
385 rec = (rec) ? rec : mr;
387 if(!holdsOrgSelectorBuilt) {
388 holdsBuildOrgSelector(null,0);
389 holdsOrgSelectorBuilt = true;
390 var selector = $('holds_org_selector');
393 var o_loc = findOrgUnit(getOrigLocation());
394 var t = findOrgType(o_loc.ou_type());
395 if( t.can_have_users() )
396 setSelector(selector, o_loc.id());
399 selector.onchange = selOrgChange;
400 setSelector(selector, holdArgs.recipient.home_ou());
403 var obj = findOrgUnit(holdArgs.recipient.home_ou());
404 $('holds_pickup_lib').innerHTML = obj.name();
408 var dsel = $('holds_depth_selector');
409 unHideMe($('holds_depth_selector_row'));
410 if(dsel.getElementsByTagName('option').length == 0) {
411 var types = globalOrgTypes;
412 var depth = findOrgDepth(G.user.ws_ou());
415 if(t.depth() > depth) return;
416 insertSelectorVal(dsel, -1, t.opac_label(), t.depth());
423 appendClear($('holds_recipient'), text(
424 holdArgs.recipient.family_name() + ', ' +
425 holdArgs.recipient.first_given_name()));
426 appendClear($('holds_title'), text(rec.title()));
427 appendClear($('holds_author'), text(rec.author()));
429 if( holdArgs.type == 'V' || holdArgs.type == 'C' ) {
431 unHideMe($('holds_type_row'));
432 unHideMe($('holds_cn_row'));
433 appendClear($('holds_cn'), text(holdArgs.volumeObject.label()));
435 if( holdArgs.type == 'V' ) {
436 unHideMe($('holds_is_cn'));
437 hideMe($('holds_is_copy'));
440 hideMe($('holds_is_cn'));
441 unHideMe($('holds_is_copy'));
442 unHideMe($('holds_copy_row'));
443 appendClear($('holds_copy'), text(holdArgs.copyObject.barcode()));
447 hideMe($('holds_type_row'));
448 hideMe($('holds_copy_row'));
449 hideMe($('holds_cn_row'));
452 removeChildren($('holds_format'));
454 var mods_formats = rec.types_of_resource();
457 if(holdArgs.recordDescriptors)
458 formats = holdArgs.recordDescriptors[0].item_type();
460 if( holdArgs.type == 'T' ) {
461 var desc = grep( holdArgs.recordDescriptors,
463 return (i.record() == holdArgs.record);
466 formats = desc[0].item_type();
469 if( holdArgs.type == 'M' ) {
470 var data = holdsParseMRFormats(holdArgs.editHold.holdable_formats());
471 mods_formats = data.mods_formats;
472 formats = data.formats;
476 for( var i in mods_formats ) {
477 var res = mods_formats[i];
478 var img = elem("img");
479 setResourcePic(img, res);
480 $('holds_format').appendChild(img);
482 $('holds_format').appendChild(text(' '+ MARCTypeToFriendly(formats[i]) +' '));
484 $('holds_format').appendChild(text(' '+ mods_formats[i] +' '));
485 $('holds_format').appendChild(elem('br'));
489 $('holds_phone').value = (holdArgs.recipient.day_phone())?holdArgs.recipient.day_phone():"";
490 appendClear( $('holds_email'), text(holdArgs.recipient.email()));
492 var pref = holdArgs.recipient.prefs[PREF_HOLD_NOTIFY];
495 if( ! pref.match(/email/i) ) {
496 $('holds_enable_email').checked = false;
498 $('holds_enable_email').checked = true;
501 if( ! pref.match(/phone/i) ) {
502 $('holds_phone').disabled = true;
503 $('holds_enable_phone').checked = false;
505 $('holds_phone').disabled = false;
506 $('holds_enable_phone').checked = true;
510 if(!holdArgs.recipient.email()) {
511 $('holds_enable_email').checked = false;
512 $('holds_enable_email').disabled = true;
515 message = noEmailMessageXUL.cloneNode(true);
516 appendClear($('holds_email'), message);
518 message = noEmailMessage.cloneNode(true);
519 appendClear($('holds_email'), message);
520 $('holds.no_email.my_account').setAttribute('href', buildOPACLink({page:MYOPAC},null,true));
525 if(!$('holds_phone').value)
526 $('holds_enable_phone').checked = false;
528 appendClear($('holds_physical_desc'), text(rec.physical_description()));
530 if(holdArgs.type == 'M') hideMe($('hold_physical_desc_row'));
532 holdsSetFormatSelector();
534 $('holds_frozen_chkbox').checked = false;
535 hideMe($('hold_frozen_thaw_row'));
537 var interval = fetchOrgSettingDefault(holdArgs.recipient.home_ou(), 'circ.hold_expire_interval');
540 secs = interval_to_seconds(interval);
541 var expire = new Date();
542 expire.setTime(expire.getTime() + Number(secs + '000'));
543 if(dijit.byId('holds_expire_time')) dijit.byId('holds_expire_time').setValue(expire);
547 function holdsParseMRFormats(str) {
548 var data = str.split(/-/);
551 var mods_formats = [];
553 for( var i = 0; i < data[0].length; i++ ) {
554 formats.push( data[0].charAt(i) );
555 mods_formats.push( MARCFormatToMods( formats[i] ) );
558 formats = uniquify(formats);
559 mods_formats = uniquify(mods_formats);
563 mods_formats : mods_formats,
570 function holdsSetFormatSelector() {
571 var type = holdArgs.type;
572 if( type == 'C' || type == 'V' || holdArgs.editHold ) return;
574 var data = holdsGetFormats();
575 var avail_formats = data.avail_formats;
576 var sel_formats = data.sel_formats;
577 holdArgs.language = data.lang;
579 unHideMe($('holds_alt_formats_row_extras'));
580 var selector = $('hold_alt_form_selector');
582 for( var i = 0; i < avail_formats.length; i++ ) {
583 var form = avail_formats[i];
584 unHideMe(findSelectorOptByValue(selector, form));
589 function holdsGetFormats() {
593 var sformats = []; // selected formats
595 var type = holdArgs.type;
596 var desc = holdArgs.recordDescriptors;
597 var rec = holdArgs.record;
598 var mrec = holdArgs.metarecord;
602 for( var i = 0; i < desc.length; i++ ) {
604 if( d.record() == holdArgs.record ) {
605 lang = d.item_lang();
606 holdArgs.myFormat = _t_f_2_format(d.item_type(), d.item_form());
607 sformats.push(holdArgs.myFormat);
613 for( var i = 0; i < desc.length; i++ ) {
615 if( d.item_lang() != lang ) continue;
616 formats.push( _t_f_2_format(d.item_type(), d.item_form()));
619 formats = uniquify(formats);
623 avail_formats : formats,
624 sel_formats : sformats
630 function _t_f_2_format(type, form) {
631 if( form == 'd' ) return 'at-d';
632 return (type == 'a' || type == 't') ? 'at' :
633 ( type == 'i' || type == 'g' || type == 'j' ) ? type : null;
636 function holdsSetSelectedFormats() {
638 var cn = $('holds_alt_formats_row').className;
639 if( cn && cn.match(/hide_me/) ) return;
641 var selector = $('hold_alt_form_selector');
642 var vals = getSelectedList(selector);
644 if(vals.length == 0) return;
648 if( contains(vals, 'at-d') ) {
649 if( contains(vals, 'at') )
654 if( contains(vals, 'at') )
658 for( var i = 0; i < vals.length; i++ ) {
660 if( !val.match(/at/) ) fstring = val + fstring;
663 if( holdArgs.language ) {
664 if( fstring.match(/-/) )
665 fstring = fstring + '-' + holdArgs.language;
667 fstring = fstring + '--' + holdArgs.language;
673 function holdsCheckPossibility(pickuplib, hold, recurse) {
676 titleid : holdArgs.record,
677 volume_id : holdArgs.volume,
678 copy_id : holdArgs.copy,
679 hold_type : holdArgs.type,
680 patronid : holdArgs.recipient.id(),
682 pickup_lib : pickuplib
686 /* if we're calling create again (recursing),
687 we know that the hold possibility check already succeeded */
688 holdHandleCreateResponse({_recurse:true, _hold:hold}, true );
691 _debug("hold possible args = "+js2JSON(args));
693 var req = new Request(CHECK_HOLD_POSSIBLE, G.user.session, args );
695 req.request.alertEvent = false;
696 req.request._hold = hold;
697 req.request._recurse = recurse;
698 req.callback(holdHandleCreateResponse);
704 function holdsBuildOrgSelector(node, sel) {
706 if(!node) node = globalOrgTree;
707 if(!isTrue(node.opac_visible())) return;
709 var selector = sel?sel:$('holds_org_selector');
710 var index = selector.options.length;
712 var type = findOrgType(node.ou_type());
713 var indent = type.depth() - 1;
714 var opt = setSelectorVal( selector, index, node.name(), node.id(), null, indent );
715 if(!type.can_have_users()) {
717 addCSSClass(opt, 'disabled_option');
720 for( var i in node.children() ) {
721 var child = node.children()[i];
722 if(child) holdsBuildOrgSelector(child);
726 function holdsBuildHoldFromWindow() {
728 var org = getSelectorVal($('holds_org_selector'));
729 var node = findOrgUnit(org);
730 var ntype = findOrgType(node.ou_type());
731 if(!ntype.can_have_users()) {
732 alertId('holds_pick_good_org');
736 var hold = new ahr();
737 if(holdArgs.editHold) {
738 hold = holdArgs.editHold;
739 holdArgs.editHold = null;
742 if( $('holds_enable_phone').checked ) {
743 var phone = $('holds_phone').value;
744 if( !phone || !phone.match(REGEX_PHONE) ) {
745 alert($('holds_bad_phone').innerHTML);
748 hold.phone_notify(phone);
751 hold.phone_notify("");
754 if( $('holds_enable_email').checked )
755 hold.email_notify(1);
757 hold.email_notify(0);
761 switch(holdArgs.type) {
763 target = holdArgs.metarecord; break;
765 target = holdArgs.record; break;
767 target = holdArgs.volume; break;
769 target = holdArgs.copy; break;
774 hold.pickup_lib(org);
775 //hold.request_lib(org);
776 hold.requestor(holdArgs.requestor.id());
777 hold.usr(holdArgs.recipient.id());
779 hold.hold_type(holdArgs.type);
781 try{var expDate = dijit.byId('holds_expire_time').getValue();} catch(e){}
783 var expireDate = dojo.date.stamp.toISOString(expDate);
784 expireDate = holdsVerifyThawDate(expireDate);
786 hold.expire_time(expireDate);
791 // see if this hold should be frozen and for how long
792 if($('holds_frozen_chkbox').checked) {
794 unHideMe($('hold_frozen_thaw_row'));
795 thawDate = dojo.date.stamp.toISOString(dijit.byId('holds_frozen_thaw_input').getValue());
797 thawDate = holdsVerifyThawDate(thawDate);
799 hold.thaw_date(thawDate);
803 hold.thaw_date(null);
807 hold.thaw_date(null);
810 //check for alternate hold formats
811 var fstring = holdsSetSelectedFormats();
814 hold.holdable_formats(fstring);
815 hold.target(holdArgs.metarecord);
820 function holdsPlaceHold(hold, recurse) {
822 swapCanvas($('check_holds_box'));
823 holdsCheckPossibility(hold.pickup_lib(), hold, recurse);
827 function holdHandleCreateResponse(r, recurse) {
830 var res = r.getResultObject();
831 if(checkILSEvent(res) || res.success != 1) {
832 if(res.success != 1) {
833 alert($('hold_not_allowed').innerHTML+(!res.last_event.desc?"":"\n\nHold failure description:\n"+res.last_event.desc));
835 if( res.textcode == 'PATRON_BARRED' ) {
836 alertId('hold_failed_patron_barred');
838 alert($('hold_not_allowed').innerHTML+(!res.last_event.desc?"":"\n\nHold failure description:\n"+res.last_event.desc));
841 swapCanvas($('holds_box'));
844 r._hold.selection_depth(res.depth);
847 holdCreateHold(r._recurse, r._hold);
848 hideResultsPage(false);
852 function holdCreateHold( recurse, hold ) {
853 var method = CREATE_HOLD;
854 if(recurse) method = CREATE_HOLD_OVERRIDE;
855 var req = new Request( method, holdArgs.requestor.session, hold );
856 req.request.alertEvent = false;
858 var res = req.result();
859 holdProcessResult(hold, res, recurse);
863 runEvt('common', 'holdUpdated');
867 function holdProcessResult( hold, res, recurse ) {
869 if( res && res > -1 ) {
870 alert($('holds_success').innerHTML);
872 if(isXUL() && typeof xulG.opac_hold_placed == 'function')
873 xulG.opac_hold_placed(res);
878 alert($('holds_failure').innerHTML);
882 if( grep(res, function(e) { return (e.textcode == 'HOLD_EXISTS'); }) ) {
883 if( fetchPermOrgs('HOLD_EXISTS.override')[0] != -1 ) {
884 if( confirm($('hold_dup_exists_override').innerHTML) ) {
885 return holdsPlaceHold(hold, true);
890 return alert($('hold_dup_exists').innerHTML);
894 if( grep(res, function(e) { return (e.textcode == 'HOLD_ITEM_CHECKED_OUT'); }) ) {
895 if( fetchPermOrgs('HOLD_ITEM_CHECKED_OUT.override')[0] != -1 ) {
896 if( confirm($('hold_checked_out_override').innerHTML) ) {
897 return holdsPlaceHold(hold, true);
902 return alert($('hold_checked_out').innerHTML);
907 alert($('holds_failure').innerHTML);
912 function holdsCancel(holdid, user) {
913 if(!user) user = G.user;
914 var req = new Request(CANCEL_HOLD, user.session, holdid, /* Patron via OPAC */ 6);
917 runEvt('common', 'holdUpdated');
920 function holdsUpdate(hold, user) {
921 if(!user) user = G.user;
922 var req = new Request(UPDATE_HOLD, user.session, hold);
924 var x = req.result(); // cause an exception if there is one
925 runEvt('common', 'holdUpdated');
928 /* verify that the thaw date is valid and after today */
929 function holdsVerifyThawDate(dateString, isGreater) {
930 thawDate = dojo.date.stamp.fromISOString(dateString);
933 if(dojo.date.compare(thawDate) > 0) {
934 return dojo.date.stamp.toISOString(thawDate);
937 return dojo.date.stamp.toISOString(thawDate);
943 function holdsVerifyThawDateUI(element) {
944 value = dojo.date.stamp.toISOString(dijit.byId(element).getValue());
947 removeCSSClass($(element), 'invalid_field');
951 if(!holdsVerifyThawDate(value, true)) {
952 addCSSClass($(element), 'invalid_field');
954 removeCSSClass($(element), 'invalid_field');
959 function editHold(h) {
960 var row = $('myopac_holds_row_'+h);
963 objs['hold_pickup_lib'] = $n(row,'hold_pickup_lib');
964 objs['hold_pickup_lib_sel'] = $n(row,'hold_pickup_lib_sel');
965 objs['hold_active'] = $n(row,'hold_active');
966 objs['activate_label'] = $n(row,'activate_label');
967 objs['activate_date'] = $n(row,'activate_date');
968 objs['activate_box'] = $n(row,'activate_box');
969 objs['hold_expires_label'] = $n(row,'hold_expires_label');
970 objs['hold_expires'] = $n(row,'hold_expires');
971 objs['hold_expires_box'] = $n(row,'hold_expires_box');
972 objs['hold_active_sel'] = $n(row,'hold_active_sel');
973 objs['hold_edit_link'] = $n(row,'hold_edit_link');
974 objs['hold_save_link'] = $n(row,'hold_save_link');
975 objs['hold_cancel_link'] = $n(row,'hold_cancel_link');
977 for(var i in objs) unHideMe(objs[i]);
979 hideMe(objs['activate_date']);
980 hideMe(objs['hold_active']);
981 hideMe(objs['hold_expires']);
982 hideMe(objs['hold_pickup_lib']);
983 hideMe(objs['hold_edit_link']);
984 row.orig_bgcolor = row.style.background;
985 row.style.background= "#fcdf89";
988 function cancelHold(h) {
989 var row = $('myopac_holds_row_'+h);
992 objs['hold_pickup_lib'] = $n(row,'hold_pickup_lib');
993 objs['hold_pickup_lib_sel'] = $n(row,'hold_pickup_lib_sel');
994 objs['hold_active'] = $n(row,'hold_active');
995 objs['activate_label'] = $n(row,'activate_label');
996 objs['activate_date'] = $n(row,'activate_date');
997 objs['activate_box'] = $n(row,'activate_box');
998 objs['hold_expires_label'] = $n(row,'hold_expires_label');
999 objs['hold_expires'] = $n(row,'hold_expires');
1000 objs['hold_expires_box'] = $n(row,'hold_expires_box');
1001 objs['hold_active_sel'] = $n(row,'hold_active_sel');
1002 objs['hold_edit_link'] = $n(row,'hold_edit_link');
1003 objs['hold_save_link'] = $n(row,'hold_save_link');
1004 objs['hold_cancel_link'] = $n(row,'hold_cancel_link');
1006 for(var i in objs) hideMe(objs[i]);
1008 unHideMe(objs['hold_edit_link']);
1009 unHideMe(objs['hold_pickup_lib']);
1010 unHideMe(objs['holds_active']);
1011 unHideMe(objs['hold_active']);
1012 unHideMe(objs['activate_date']);
1013 unHideMe(objs['hold_expires']);
1014 if(objs['hold_expires'].innerHTML) unHideMe(objs['hold_expires_label']);
1015 if(objs['activate_date'].innerHTML) unHideMe(objs['activate_label']);
1016 row.style.background=row.orig_bgcolor;
1019 function saveHold(h) {
1020 var row = $('myopac_holds_row_'+h);
1021 var hold = holdsCache[holdsCacheMap[h]].hold;
1023 var activateDataBox = $n(row,'activate_box');
1024 var expireDateBox = $n(row,'hold_expires_box');
1025 var pickupLibSel = $n(row,'hold_pickup_lib_sel');
1026 var activateSel = $n(row,'hold_active_sel');
1027 var expireTime = dojo.date.stamp.toISOString(new Date(Date.parse(expireDateBox.value)),null);
1028 var activateTime = dojo.date.stamp.toISOString(new Date(Date.parse(activateDataBox.value)),null);
1029 if(parseInt(expireTime)) hold.expire_time(expireTime);
1030 if(parseInt(activateTime)) hold.thaw_date(activateTime);
1031 hold.frozen(activateSel.options[activateSel.selectedIndex].value);
1032 hold.pickup_lib(pickupLibSel.options[pickupLibSel.selectedIndex].value)
1034 fieldmapper.standardRequest(['open-ils.circ','open-ils.circ.hold.update'],{params:[G.user.session,hold],oncomplete:refreshHold});
1035 row.style.background= isTrue(hold.frozen())?"#e5e5e5":"";
1036 row.orig_bgcolor=row.style.background;
1039 function updateHoldInfo(holdid,holdrow) {
1040 var h = holdsCache[holdsCacheMap[holdid]].hold;
1042 var row = holdrow?holdrow:$('myopac_holds_row_'+holdid);
1045 $n(row,'hold_pickup_lib').innerHTML = findOrgUnit(h.pickup_lib()).name();
1046 $n(row,'hold_active').innerHTML = isTrue(h.frozen())?"Suspended":"Active";
1049 var d = dojo.date.stamp.fromISOString(h.thaw_date());
1050 $n(row, 'activate_date').innerHTML = dojo.date.locale.format(d, {selector: 'date', fullYear: true});
1051 unHideMe($n(row,'activate_label'));
1052 $n(row,'activate_box').value = dojo.date.locale.format(d, {selector:'date', fullYear: true});
1055 if(h.expire_time()) {
1056 var exp_date = dojo.date.stamp.fromISOString(h.expire_time());
1057 $n(row, 'hold_expires').innerHTML = dojo.date.locale.format(exp_date, {selector:'date', fullYear: true});
1058 unHideMe($n(row,'hold_expires_label'));
1059 $n(row,'hold_expires_box').value = dojo.date.locale.format(exp_date, {selector:'date', fullYear: true});
1063 function refreshHold(r) {
1064 var hold = r.recv().content();
1065 if(!parseInt(hold)) return;
1066 updateHoldInfo(hold);