2 var recordsHandled = 0;
\r
3 var recordsCache = [];
\r
6 var googleBooksLink = true;
\r
7 buildOrgSel($('holdsCacheSel'), globalOrgTree, 0);
\r
9 var resultFetchAllRecords = false;
\r
10 var resultCompiledSearch = null;
\r
12 /* set up the event handlers */
\r
13 if( findCurrentPage() == MRESULT || findCurrentPage() == RRESULT ) {
\r
14 G.evt.result.hitCountReceived.push(resultSetHitInfo);
\r
15 G.evt.result.recordReceived.push(resultDisplayRecord, resultAddCopyCounts);
\r
16 G.evt.result.copyCountsReceived.push(resultDisplayCopyCounts);
\r
17 G.evt.result.allRecordsReceived.push(function(){unHideMe($('tehSideBar'));},function(){unHideMe($('results_view_span'));},resultBuildCaches,
\r
18 function(){unHideMe($('result_info_2'))}, fetchGoogleBooksLink, fetchChiliFreshReviews, postResultsCollect);
\r
20 attachEvt('result','lowHits',resultLowHits);
\r
21 attachEvt('result','zeroHits',resultZeroHits);
\r
22 attachEvt( "common", "locationUpdated", resultSBSubmit );
\r
23 /* do this after we have ID's so the rank for mr pages will be correct */
\r
24 attachEvt("result", "preCollectRecords", resultPaginate);
\r
27 function resultSBSubmit(){searchBarSubmit();}
\r
29 /* returns the last 'index' postion ocurring in this page */
\r
30 function resultFinalPageIndex() {
\r
31 if(getHitCount() < (getOffset() + getDisplayCount()))
\r
32 return getHitCount() - 1;
\r
33 return getOffset() + getDisplayCount() - 1;
\r
36 function plausible_ident(s) {
\r
37 s = s.replace(/^\s*(.+)\s*$/, '$1');
\r
38 s = s.replace(/^(\S+)\s.*$/, '$1');
\r
43 /* generic search method */
\r
44 function resultCollectSearchIds( type, method, handler ) {
\r
46 var sort = (getSort() == SORT_TYPE_REL) ? null : getSort();
\r
47 var sortdir = (sort) ? ((getSortDir()) ? getSortDir() : SORT_DIR_ASC) : null;
\r
54 var form = parseForm(getForm());
\r
55 item_type = form.item_type;
\r
56 item_form = form.item_form;
\r
59 item_type = (getItemType()) ? getItemType().split(/,/) : null;
\r
60 item_form = (getItemForm()) ? getItemForm().split(/,/) : null;
\r
65 var limit = (resultFetchAllRecords) ? 1000 : getDisplayCount();
\r
67 if( getOffset() > 0 ) {
\r
68 if( getHitCount() > 0 && (getOffset() + getDisplayCount()) > getHitCount() )
\r
69 limit = getHitCount() - getOffset();
\r
72 var lasso = getLasso();
\r
74 if (lasso) args.org_unit = -lasso;
\r
75 else args.org_unit = getLocation();
\r
77 args.depth = getDepth();
\r
79 args.offset = getOffset();
\r
80 args.visibility_limit = 3000;
\r
81 args.default_class = getStype();
\r
83 if(sort) args.sort = sort;
\r
84 if(sortdir) args.sort_dir = sortdir;
\r
85 if(item_type) args.item_type = item_type;
\r
86 if(item_form) args.item_form = item_form;
\r
87 if(getAvail()) args.available = 1;
\r
88 //args.format="marcxml";
\r
90 if(getFacet()) args.facets = getFacet();
\r
92 if(getAudience()) args.audience = getAudience().split(/,/);
\r
93 if(getLitForm()) args.lit_form = getLitForm().split(/,/);
\r
94 if(getLanguage()) args.language = getLanguage().split(/,/);
\r
95 if(getBibLevel()) args.bib_level = getBibLevel().split(/,/);
\r
96 if(getCopyLocs()) args.locations = getCopyLocs().split(/,/);
\r
97 if(getPubdBefore()) args.before = getPubdBefore();
\r
98 else if(getPubdAfter()) args.after = getPubdAfter();
\r
99 else if(getPubdBetween()) args.between = getPubdBetween().split(/,/);
\r
101 _debug('Search args: ' + js2JSON(args));
\r
102 _debug('Raw query: ' + getTerm());
\r
104 var req = new Request(method, args, getTerm(), 1);
\r
105 req.callback(handler);
\r
113 /* set the search result info, number of hits, which results we're
\r
114 displaying, links to the next/prev pages, etc. */
\r
115 function resultSetHitInfo() {
\r
117 var lasso = getLasso();
\r
119 /* tell the user where the results are coming from */
\r
120 var baseorg = findOrgUnit(getLocation());
\r
121 var depth = getDepth();
\r
122 var mydepth = findOrgDepth(baseorg);
\r
123 if( findOrgDepth(baseorg) != depth ) {
\r
124 var tmporg = baseorg;
\r
125 while( mydepth > depth ) {
\r
127 tmporg = findOrgUnit(tmporg.parent_ou());
\r
129 unHideMe($('including_results_for'));
\r
130 try{$('including_results_location').appendChild(text(tmporg.name()));} catch(e){}
\r
135 try{searchTimer.stop()}catch(e){}
\r
137 //if( findCurrentPage() == MRESULT ) {
\r
138 if( findCurrentPage() == MRESULT ||
\r
140 (findCurrentPage() == RRESULT &&
\r
142 getRtype() == RTYPE_TITLE ||
\r
143 getRtype() == RTYPE_AUTHOR ||
\r
144 getRtype() == RTYPE_SUBJECT ||
\r
145 getRtype() == RTYPE_SERIES ||
\r
146 getRtype() == RTYPE_KEYWORD
\r
151 if(getHitCount() <= lowHitCount && getTerm())
\r
152 runEvt('result', 'lowHits');
\r
155 if(getHitCount() == 0) {
\r
156 runEvt('result', 'zeroHits');
\r
161 var pages = getHitCount() / getDisplayCount();
\r
162 if(pages % 1) pages = parseInt(pages) + 1;
\r
166 var cpage = (getOffset()/getDisplayCount()) + 1;
\r
168 G.ui.result.current_page.appendChild(text(cpage));
\r
169 G.ui.result.num_pages.appendChild(text(pages)); /* the ) is dumb */
\r
171 $('current_page2').appendChild(text(cpage));
\r
172 $('num_pages2').appendChild(text(pages + ")")); /* the ) is dumb */
\r
174 /* set the offsets */
\r
175 var offsetEnd = getDisplayCount() + getOffset();
\r
176 if( getDisplayCount() > (getHitCount() - getOffset()))
\r
177 offsetEnd = getHitCount();
\r
179 G.ui.result.offset_end.appendChild(text(offsetEnd));
\r
180 G.ui.result.offset_start.appendChild(text(getOffset() + 1));
\r
182 $('offset_end2').appendChild(text(offsetEnd));
\r
183 $('offset_start2').appendChild(text(getOffset() + 1));
\r
185 G.ui.result.result_count.appendChild(text(getHitCount()));
\r
186 unHideMe(G.ui.result.info);
\r
187 unHideMe($('result_numbers1'));
\r
189 $('result_count2').appendChild(text(getHitCount()));
\r
190 unHideMe($('result_info_div2'));
\r
193 function resultLowHits() {
\r
195 unHideMe($('result_low_hits'));
\r
196 if(getHitCount() > 0)
\r
197 unHideMe($('result_low_hits_msg'));
\r
200 for(var key in resultCompiledSearch.searches)
\r
201 words.push(resultCompiledSearch.searches[key].term);
\r
203 var sreq = new Request(CHECK_SPELL, words.join(' '));
\r
204 sreq.callback(resultSuggestSpelling);
\r
207 for(var key in resultCompiledSearch.searches) {
\r
208 var areq = new Request(FETCH_CROSSREF, key, resultCompiledSearch.searches[key].term);
\r
209 areq.callback(resultLowHitXRef);
\r
213 if( !(getForm() == null || getForm() == 'all' || getForm() == "") ) {
\r
215 a[PARAM_FORM] = "all";
\r
216 $('low_hits_remove_format_link').setAttribute('href',buildOPACLink(a));
\r
217 unHideMe($('low_hits_remove_format'));
\r
220 resultSuggestSearchClass();
\r
222 if(getTerm()) resultExpandSearch(); /* advanced search */
\r
225 var lowHitsXRefSet = {};
\r
226 var lowHitsXRefLink;
\r
227 var lowHitsXRefLinkParent;
\r
228 function resultLowHitXRef(r) {
\r
229 if(!lowHitsXRefLink){
\r
230 lowHitsXRefLinkParent = $('low_hits_xref_link').parentNode;
\r
231 lowHitsXRefLink = lowHitsXRefLinkParent.removeChild($('low_hits_xref_link'));
\r
233 var res = r.getResultObject();
\r
234 var arr = res.from;
\r
235 arr.concat(res.also);
\r
236 if(arr && arr.length > 0) {
\r
237 unHideMe($('low_hits_cross_ref'));
\r
240 while( word = arr.shift() ) {
\r
242 if (lowHitsXRefSet[word] == 1) continue;
\r
243 lowHitsXRefSet[word] = 1;
\r
245 if(c++ > 20) break;
\r
247 a[PARAM_TERM] = word;
\r
248 var template = lowHitsXRefLink.cloneNode(true);
\r
249 template.setAttribute('href',buildOPACLink(a));
\r
250 template.appendChild(text(word));
\r
251 lowHitsXRefLinkParent.appendChild(template);
\r
252 lowHitsXRefLinkParent.appendChild(text(' '));
\r
257 function resultZeroHits() {
\r
258 hideMe($('result_header'));
\r
259 hideMe($('result_table_div'));
\r
260 hideMe($('statusbar'));
\r
261 $('rresults_page').style.width="690px";
\r
262 unHideMe($('zero_search_hits'));
\r
263 $('zero_hits_term').innerHTML = getTerm();
\r
265 unHideMe($('result_low_hits'));
\r
266 unHideMe($('result_zero_hits_msg'));
\r
267 if(getTerm()) resultExpandSearch(); /* advanced search */
\r
270 function resultExpandSearch() {
\r
271 var top = findOrgDepth(globalOrgTree);
\r
272 if(getDepth() == top) return;
\r
273 unHideMe($('low_hits_expand_range'));
\r
274 var par = $('low_hits_expand_link').parentNode;
\r
275 var template = par.removeChild($('low_hits_expand_link'));
\r
277 var bottom = getDepth();
\r
278 while( top < bottom ) {
\r
280 a[PARAM_DEPTH] = top;
\r
281 var temp = template.cloneNode(true);
\r
282 temp.appendChild(text(findOrgTypeFromDepth(top).opac_label()))
\r
283 temp.setAttribute('href',buildOPACLink(a));
\r
284 par.appendChild(temp);
\r
289 function resultSuggestSearchClass() {
\r
290 var stype = getStype();
\r
291 if(stype == STYPE_KEYWORD) return;
\r
292 var a = {}; var ref;
\r
293 unHideMe($('low_hits_search_type'));
\r
294 if(stype != STYPE_TITLE) {
\r
295 ref = $('low_hits_title_search');
\r
297 a[PARAM_STYPE] = STYPE_TITLE;
\r
298 ref.setAttribute('href',buildOPACLink(a));
\r
300 if(stype != STYPE_AUTHOR) {
\r
301 ref = $('low_hits_author_search');
\r
303 a[PARAM_STYPE] = STYPE_AUTHOR;
\r
304 ref.setAttribute('href',buildOPACLink(a));
\r
306 if(stype != STYPE_SUBJECT) {
\r
307 ref = $('low_hits_subject_search');
\r
309 a[PARAM_STYPE] = STYPE_SUBJECT;
\r
310 ref.setAttribute('href',buildOPACLink(a));
\r
312 if(stype != STYPE_KEYWORD) {
\r
313 ref = $('low_hits_keyword_search');
\r
315 a[PARAM_STYPE] = STYPE_KEYWORD;
\r
316 ref.setAttribute('href',buildOPACLink(a));
\r
318 if(stype != STYPE_SERIES) {
\r
319 ref = $('low_hits_series_search');
\r
321 a[PARAM_STYPE] = STYPE_SERIES;
\r
322 ref.setAttribute('href',buildOPACLink(a));
\r
326 function resultSuggestSpelling(r) {
\r
327 var res = r.getResultObject();
\r
328 var phrase = getTerm();
\r
329 var words = phrase.split(/ /);
\r
333 for( var w = 0; w < words.length; w++ ) {
\r
334 var word = words[w];
\r
335 var blob = grep(res, function(i){return (i.word == word);});
\r
336 if( blob ) blob = blob[0];
\r
338 if( blob.word == word ) {
\r
339 if( blob.suggestions && blob.suggestions[0] ) {
\r
340 newterm += " " + blob.suggestions[0];
\r
341 unHideMe($('did_you_mean'));
\r
343 newterm += " " + word;
\r
347 var cell = $('zero_hits_suggestions');
\r
348 var s = res[0].suggestions;
\r
351 if(i==10) break; //limit suggestions
\r
352 cell.appendChild(elem('a',{href:buildOPACLink({t:s[i]})},s[i]));
\r
353 cell.appendChild(elem('br'));
\r
355 if(newterm.toLowerCase().trim()!=getTerm().toLowerCase().trim()) unHideMe($('zero_hits_label1'));
\r
356 if(res[0].suggestions && res[0].suggestions.length>0) unHideMe($('zero_hits_label2'));
\r
359 arg[PARAM_TERM] = newterm;
\r
360 $('spell_check_link').setAttribute('href', buildOPACLink(arg));
\r
361 $('spell_check_link').appendChild(text(newterm));
\r
365 function resultPaginate() {
\r
366 var o = getOffset();
\r
369 if( !( ((o) + getDisplayCount()) >= getHitCount()) ) {
\r
371 args[PARAM_OFFSET] = o + getDisplayCount();
\r
372 args[PARAM_SORT] = SORT;
\r
373 args[PARAM_SORT_DIR] = SORT_DIR;
\r
374 args[PARAM_RLIST] = new CGI().param(PARAM_RLIST);
\r
376 G.ui.result.next_link.setAttribute("href", buildOPACLink(args));
\r
377 addCSSClass(G.ui.result.next_link, config.css.result.nav_active);
\r
379 $('next_link2').setAttribute("href", buildOPACLink(args));
\r
380 addCSSClass($('next_link2'), config.css.result.nav_active);
\r
382 args[PARAM_OFFSET] = getHitCount() - (getHitCount() % getDisplayCount());
\r
384 /* when hit count is divisible by display count, we have to adjust */
\r
385 if( getHitCount() % getDisplayCount() == 0 )
\r
386 args[PARAM_OFFSET] -= getDisplayCount();
\r
392 args[PARAM_SORT] = SORT;
\r
393 args[PARAM_SORT_DIR] = SORT_DIR;
\r
394 args[PARAM_RLIST] = new CGI().param(PARAM_RLIST);
\r
396 args[PARAM_OFFSET] = o - getDisplayCount();
\r
397 G.ui.result.prev_link.setAttribute( "href", buildOPACLink(args));
\r
398 addCSSClass(G.ui.result.prev_link, config.css.result.nav_active);
\r
400 $('prev_link2').setAttribute( "href", buildOPACLink(args));
\r
401 addCSSClass($('prev_link2'), config.css.result.nav_active);
\r
403 args[PARAM_OFFSET] = 0;
\r
404 G.ui.result.home_link.setAttribute( "href", buildOPACLink(args));
\r
405 addCSSClass(G.ui.result.home_link, config.css.result.nav_active);
\r
408 // pagination - google style
\r
409 var pages = getHitCount() / getDisplayCount();
\r
410 var cpage = (getOffset()/getDisplayCount()) + 1;
\r
412 pages = Math.floor(pages);
\r
413 cpage = Math.floor(cpage);
\r
414 var end = pages>9?8:pages;
\r
416 // narrow our window of visible page numbers to 9 - sets start and end pages for the loop
\r
419 end = cpage+3>pages?pages:cpage+3;
\r
420 if(cpage+3>pages) { start = (cpage-5)-(cpage-pages+3); }
\r
421 if(start<0) start=0;
\r
425 var span = $('nav_pages');
\r
426 var span2 = $('nav_pages2');
\r
427 for(var i=start; i<=end; i++) {
\r
428 var temp = elem('span',{style:'padding:0px 3px;'});
\r
429 temp.style.padding='0px 3px';
\r
430 args[PARAM_OFFSET] = getDisplayCount()*i;
\r
431 if(i==cpage-1) { var link = text(i+1); temp.style.color="red" }
\r
432 else var link = elem('a',{href:buildOPACLink(args)},i+1);
\r
433 temp.appendChild(link);
\r
434 span.appendChild(temp);
\r
435 span2.appendChild(temp.cloneNode(true));
\r
440 if(getDisplayCount() < getHitCount()) {
\r
441 unHideMe($('start_end_links_span'));
\r
442 unHideMe($('start_end_links_span2'));
\r
446 try{searchTimer.stop()}catch(e){}
\r
449 function buildunAPISpan (span, type, id) {
\r
450 if(!span || !type || !id) return;
\r
451 var cgi = new CGI();
\r
452 var d = new Date();
\r
454 addCSSClass(span,'unapi-id');
\r
458 'tag:' + cgi.server_name + ',' +
\r
460 ':' + type + '/' + id
\r
464 function unhideGoogleBooksLink (data) {
\r
465 for ( var i in data ) {
\r
466 //if (data[i].preview == 'noview') continue;
\r
468 var gbspan = $n(document.documentElement, 'googleBooksLink-' + i);
\r
469 var gba = $n(gbspan, "googleBooks-link");
\r
475 removeCSSClass( gbspan, 'hide_me' );
\r
479 /* display the record info in the record display table 'pos' is the
\r
480 zero based position the record should have in the display table */
\r
481 function resultDisplayRecord(rec, pos, is_mr) {
\r
482 //fieldmapper.IDL.load(['mvr']);
\r
483 if(rec == null || rec.__c) rec = new mvr(); /* so the page won't die if there was an error */
\r
485 recordsCache.push(rec);
\r
487 var r = table.rows[pos + 1];
\r
488 r.id += "_" + rec.doc_id();
\r
489 var currentISBN = cleanISBN(rec.isbn());
\r
491 if (googleBooksLink) {
\r
492 var gbspan = $n(r, "googleBooksLink");
\r
493 if (currentISBN && gbspan) {
\r
494 gbspan.setAttribute('name', gbspan.getAttribute('name') + '-' + currentISBN );
\r
495 if (isbnList) isbnList += ', ';
\r
496 isbnList += currentISBN;
\r
500 if (currentISBN && chilifresh && chilifresh != '(none)') {
\r
501 var cfrow = $n(r, "chilifreshReview");
\r
503 removeCSSClass( cfrow, 'hide_me' );
\r
505 var cflink = $n(r, "chilifreshReviewLink");
\r
507 cflink.setAttribute(
\r
509 'isbn_' + currentISBN
\r
512 var cfdiv = $n(r, "chilifreshReviewResult");
\r
514 cfdiv.setAttribute(
\r
516 'chili_review_' + currentISBN
\r
521 var pic = $n(r, config.names.result.item_jacket);
\r
522 if (!pic) pic = elem("img");
\r
523 //pic.setAttribute("src", buildISBNSrc(currentISBN));
\r
524 pic.setAttribute("width",55);
\r
526 var title_link = $n(r, config.names.result.item_title);
\r
527 var author_link = $n(r, config.names.result.item_author);
\r
528 var row_count = $n(r,"results_row_count");
\r
529 var myListLink = $n(r,"result_my_list_link");
\r
530 var reviewsLink = $n(r, 'reviews_and_more');
\r
532 reviewsLink.href="http://contentcafe2.btol.com/ContentCafeClient/ContentCafe.aspx?UserID=KC72927&Password=CC14647&ItemKey="+currentISBN+"&Options=Y";
\r
536 var onlyrec = onlyrecord[ getOffset() + pos ];
\r
538 buildunAPISpan($n(r,'unapi'), 'biblio-record_entry', onlyrec);
\r
541 args.page = RDETAIL;
\r
542 args[PARAM_OFFSET] = 0;
\r
543 args[PARAM_RID] = onlyrec;
\r
544 args[PARAM_MRID] = rec.doc_id();
\r
545 pic.parentNode.setAttribute("href", buildOPACLink(args));
\r
546 title_link.setAttribute("href", buildOPACLink(args));
\r
547 title_link.appendChild(text(normalize(truncate(rec.title(), 65))));
\r
550 buildunAPISpan($n(r,'unapi'), 'metabib-metarecord', rec.doc_id());
\r
552 buildTitleLink(rec, title_link);
\r
554 args.page = RRESULT;
\r
555 args[PARAM_OFFSET] = 0;
\r
556 args[PARAM_MRID] = rec.doc_id();
\r
557 pic.parentNode.setAttribute("href", buildOPACLink(args));
\r
561 buildunAPISpan($n(r,'unapi'), 'biblio-record_entry', rec.doc_id());
\r
563 if(title_link) buildTitleDetailLink(rec, title_link);
\r
565 args.page = RDETAIL;
\r
566 args[PARAM_OFFSET] = 0;
\r
567 args[PARAM_RID] = rec.doc_id();
\r
568 pic.parentNode.setAttribute("href", buildOPACLink(args));
\r
570 unHideMe($n(r,'place_hold_span'));
\r
571 //$n(r,'place_hold_link').setAttribute('href','javascript:holdsDrawEditor({record:"'+rec.doc_id()+'",type:"T"});');
\r
572 $n(r,'place_hold_link').onclick = function() { resultDrawHoldsWindow(rec.doc_id(), 'T'); }
\r
575 //dojo.require('openils.BibTemplate'); // -- this causes redundant requests per record - put in js_common.xml instead
\r
578 //new openils.BibTemplate({root : $n(r, 'bib_cn_list'), record : rec.doc_id()}).render();
\r
579 new openils.BibTemplate({root : r, record : rec.doc_id()}).render();
\r
586 if(row_count) row_count.innerHTML = (pos+1)+getOffset();
\r
587 if(myListLink) myListLink.setAttribute("href","javascript:addMyList("+rec.doc_id()+");")
\r
588 title_link.setAttribute("title",rec.title());
\r
589 buildSearchLink(STYPE_AUTHOR, rec.author(), author_link);
\r
592 $n(r, "results_pub_date").innerHTML = (!rec.pubdate())?"":rec.pubdate();
\r
593 $n(r, "results_pub").innerHTML = (!rec.publisher())?"":rec.publisher();
\r
594 $n(r, "results_isbn").innerHTML = (!currentISBN)?"":currentISBN;
\r
595 $n(r, "results_edition").innerHTML = (!rec.edition())?"":rec.edition();
\r
596 $n(r, "results_phys_desc").innerHTML = (!rec.physical_description())?"":rec.physical_description();
\r
597 if(isInAnonList(parseInt(rec.doc_id()))) {
\r
598 $n(r, 'result_my_list_link').innerHTML = '';
\r
599 $n(r, 'result_my_list_link').appendChild(elem('img', {src:'/opac/skin/kcls/graphics/add_mylist_sel.gif'}, null));
\r
602 if(!isNull(rec.edition())) {
\r
603 unHideMe( $n(r, "result_table_extra_span"));
\r
604 $n(r, "result_table_edition_span").appendChild( text( rec.edition()) );
\r
606 if(!isNull(rec.pubdate())) {
\r
607 unHideMe( $n(r, "result_table_extra_span"));
\r
608 unHideMe($n(r, "result_table_pub_span"));
\r
609 $n(r, "result_table_pub_span").appendChild( text( rec.pubdate() ));
\r
611 if(!isNull(rec.publisher()) ) {
\r
612 unHideMe( $n(r, "result_table_extra_span"));
\r
613 unHideMe($n(r, "result_table_pub_span"));
\r
614 $n(r, "result_table_pub_span").appendChild( text( " " + rec.publisher() ));
\r
617 if(!isNull(rec.physical_description()) ) {
\r
618 unHideMe( $n(r, "result_table_extra_span"));
\r
619 var t = " " + rec.physical_description();
\r
620 //$n(r, "result_table_phys_span").appendChild( text(t.replace(/:.*/g,'')));
\r
621 $n(r, "result_table_phys_span").appendChild( text(t));
\r
625 resultBuildFormatIcons( r, rec, is_mr );
\r
627 runEvt("result", "recordDrawn", rec.doc_id(), title_link);
\r
630 if(resultPageIsDone()) {
\r
631 runEvt('result', 'allRecordsReceived', recordsCache);
\r
635 function resultDrawHoldsWindow(hold_target, hold_type) {
\r
636 var src = location.href;
\r
638 if(forceLoginSSL && src.match(/^http:/)) {
\r
640 src = src.replace(/^http:/, 'https:');
\r
642 if(src.match(/&hold_target=/)) {
\r
643 src.replace(/&hold_target=(\d+)/, hold_target);
\r
646 src += '&hold_target=' + hold_target;
\r
649 location.href = src;
\r
652 holdsDrawEditor({record:hold_target, type:hold_type});
\r
657 function _resultFindRec(id) {
\r
658 for( var i = 0; i != recordsCache.length; i++ ) {
\r
659 var rec = recordsCache[i];
\r
660 if( rec && rec.doc_id() == id )
\r
667 function resultBuildFormatIcons( row, rec, is_mr ) {
\r
669 var imgEl = $n(row, "result_mat_type");
\r
672 ress = getMarcData(rec.doc_id(),"998","d");
\r
673 if(setFormatIcon(imgEl, ress)) unHideMe(imgEl);
\r
677 function fetchGoogleBooksLink () {
\r
679 if (isbnList && googleBooksLink) {
\r
680 var scriptElement = document.createElement("script");
\r
681 scriptElement.setAttribute("id", "jsonScript");
\r
682 scriptElement.setAttribute("src",
\r
683 "https://books.google.com/books?bibkeys=" +
\r
684 escape(isbnList) + "&jscmd=viewapi&callback=unhideGoogleBooksLink");
\r
685 scriptElement.setAttribute("type", "text/javascript");
\r
686 // make the request to Google Book Search
\r
687 document.documentElement.firstChild.appendChild(scriptElement);
\r
691 function resultPageIsDone(pos) {
\r
693 return (recordsHandled == getDisplayCount()
\r
694 || recordsHandled + getOffset() == getHitCount());
\r
697 var resultCCHeaderApplied = false;
\r
699 /* -------------------------------------------------------------------- */
\r
700 /* dynamically add the copy count rows based on the org type 'countsrow'
\r
701 is the row into which we will add TD's to hold the copy counts
\r
702 This code generates copy count cells with an id of
\r
703 'copy_count_cell_<depth>_<pagePosition>' */
\r
704 function resultAddCopyCounts(rec, pagePosition) {
\r
706 var r = table.rows[pagePosition + 1];
\r
707 var countsrow = $n(r, config.names.result.counts_row );
\r
708 var ccell = $n(countsrow, config.names.result.count_cell);
\r
710 var nodes = orgNodeTrail(findOrgUnit(getLocation()));
\r
711 var node = nodes[0];
\r
712 var type = findOrgType(node.ou_type());
\r
713 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
\r
714 ccell.title = type.opac_label();
\r
715 //addCSSClass(ccell, config.css.result.cc_cell_even);
\r
717 var lastcell = ccell;
\r
718 var lastheadcell = null;
\r
721 var ccheadcell = null;
\r
722 if(!resultCCHeaderApplied && !getLasso()) {
\r
723 ccrow = $('result_thead_row');
\r
724 ccheadcell = ccrow.removeChild($n(ccrow, "result_thead_ccell"));
\r
725 var t = ccheadcell.cloneNode(true);
\r
727 t.appendChild(text(type.opac_label()));
\r
728 ccrow.appendChild(t);
\r
729 resultCCHeaderApplied = true;
\r
733 /* collect copy counts for a record using method 'methodName' */
\r
734 function resultCollectCopyCounts(rec, pagePosition, methodName) {
\r
735 if(rec == null || rec.doc_id() == null) return;
\r
737 var loc = getLasso();
\r
738 if (loc) loc = -loc;
\r
739 else loc= getLocation();
\r
741 var req = new Request(methodName, loc, rec.doc_id(), getForm() );
\r
742 req.request.userdata = [ rec, pagePosition ];
\r
743 req.callback(resultHandleCopyCounts);
\r
747 function resultHandleCopyCounts(r) {
\r
748 runEvt('result', 'copyCountsReceived', r.userdata[0], r.userdata[1], r.getResultObject());
\r
752 /* XXX Needs to understand Lasso copy counts... */
\r
753 /* display the collected copy counts */
\r
754 function resultDisplayCopyCounts(rec, pagePosition, copy_counts) {
\r
755 if(copy_counts == null || rec == null) return;
\r
756 var r = table.rows[pagePosition + 1];
\r
757 var cnt_avail = $n(r, "copy_count_avail");
\r
758 if(cnt_avail && copy_counts[0]) {
\r
759 /*if(copy_counts[0].available)*/ cnt_avail.innerHTML = copy_counts[0].available+' cop'+(copy_counts[0].available==1?'y':'ies')+' available';
\r
761 fieldmapper.standardRequest(['open-ils.circ','open-ils.circ.bre.holds.count'], {async:true, params:[rec.doc_id(), r.id], oncomplete: drawHoldsCount});
\r
762 $n(r, 'copy_holds2').innerHTML = ' on first copy returned of '+copy_counts[0].count+' cop'+(copy_counts[0].count==1?'y':'ies');
\r
767 function drawHoldsCount(r) {
\r
768 if(!r.params[1]) return;
\r
769 var row = $(r.params[1]);
\r
771 var span = $n(row, 'copy_holds');
\r
772 var resp = r.recv().content();
\r
773 span.innerHTML = resp+' hold'+(resp==1?'':'s')+' ';
\r
776 function showDetailedInfo(bool) {
\r
777 var simple_lbl = $('results_simple_lbl');
\r
778 var simple_link = $('results_simple_link');
\r
779 var detail_lbl = $('results_detail_lbl');
\r
780 var detail_link = $('results_detail_link');
\r
781 if(!simple_lbl || !simple_link || !detail_lbl || !detail_link) return;
\r
783 var tbls = dojo.query('.results_info_table',$('result_table'));
\r
785 tbls.forEach(function(node, index, arr){
\r
786 unHideMe($n(node,'results_pub_tr'));
\r
787 unHideMe($n(node,'results_isbn_tr'));
\r
788 unHideMe($n(node,'results_edition_tr'));
\r
789 unHideMe($n(node,'results_phys_desc_tr'));
\r
791 hideMe(simple_lbl);
\r
792 hideMe(detail_link);
\r
793 unHideMe(simple_link);
\r
794 unHideMe(detail_lbl);
\r
796 tbls.forEach(function(node, index, arr){
\r
797 hideMe($n(node,'results_pub_tr'));
\r
798 hideMe($n(node,'results_isbn_tr'));
\r
799 hideMe($n(node,'results_edition_tr'));
\r
800 hideMe($n(node,'results_phys_desc_tr'));
\r
802 unHideMe(simple_lbl);
\r
803 unHideMe(detail_link);
\r
804 hideMe(simple_link);
\r
805 hideMe(detail_lbl);
\r
809 function fetchChiliFreshReviews() {
\r
810 if (chilifresh && chilifresh != '(none)') {
\r
811 try { chili_init(); } catch(E) { dump(E + '\n'); }
\r
815 function postResultsCollect() {
\r
816 var it = getCacheValue('showHoldEditor');
\r
818 setCacheValue('showHoldEditor', null);
\r
819 holdsDrawEditor({record:it.record, type:it.type});
\r