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
574 //dojo.require('openils.BibTemplate'); // -- this causes redundant requests per record - put in js_common.xml instead
\r
577 //new openils.BibTemplate({root : $n(r, 'bib_cn_list'), record : rec.doc_id()}).render();
\r
578 new openils.BibTemplate({root : r, record : rec.doc_id()}).render();
\r
585 if(row_count) row_count.innerHTML = (pos+1)+getOffset();
\r
586 if(myListLink) myListLink.setAttribute("href","javascript:addMyList("+rec.doc_id()+");")
\r
587 title_link.setAttribute("title",rec.title());
\r
588 buildSearchLink(STYPE_AUTHOR, rec.author(), author_link);
\r
591 $n(r, "results_pub_date").innerHTML = (!rec.pubdate())?"":rec.pubdate();
\r
592 $n(r, "results_pub").innerHTML = (!rec.publisher())?"":rec.publisher();
\r
593 $n(r, "results_isbn").innerHTML = (!currentISBN)?"":currentISBN;
\r
594 $n(r, "results_edition").innerHTML = (!rec.edition())?"":rec.edition();
\r
595 $n(r, "results_phys_desc").innerHTML = (!rec.physical_description())?"":rec.physical_description();
\r
596 if(isInAnonList(parseInt(rec.doc_id()))) {
\r
597 $n(r, 'result_my_list_link').innerHTML = '';
\r
598 $n(r, 'result_my_list_link').appendChild(elem('img', {src:'/opac/skin/kcls/graphics/add_mylist_sel.gif'}, null));
\r
601 if(!isNull(rec.edition())) {
\r
602 unHideMe( $n(r, "result_table_extra_span"));
\r
603 $n(r, "result_table_edition_span").appendChild( text( rec.edition()) );
\r
605 if(!isNull(rec.pubdate())) {
\r
606 unHideMe( $n(r, "result_table_extra_span"));
\r
607 unHideMe($n(r, "result_table_pub_span"));
\r
608 $n(r, "result_table_pub_span").appendChild( text( rec.pubdate() ));
\r
610 if(!isNull(rec.publisher()) ) {
\r
611 unHideMe( $n(r, "result_table_extra_span"));
\r
612 unHideMe($n(r, "result_table_pub_span"));
\r
613 $n(r, "result_table_pub_span").appendChild( text( " " + rec.publisher() ));
\r
616 if(!isNull(rec.physical_description()) ) {
\r
617 unHideMe( $n(r, "result_table_extra_span"));
\r
618 var t = " " + rec.physical_description();
\r
619 //$n(r, "result_table_phys_span").appendChild( text(t.replace(/:.*/g,'')));
\r
620 $n(r, "result_table_phys_span").appendChild( text(t));
\r
624 resultBuildFormatIcons( r, rec, is_mr );
\r
626 runEvt("result", "recordDrawn", rec.doc_id(), title_link);
\r
629 if(resultPageIsDone()) {
\r
630 runEvt('result', 'allRecordsReceived', recordsCache);
\r
634 function _resultFindRec(id) {
\r
635 for( var i = 0; i != recordsCache.length; i++ ) {
\r
636 var rec = recordsCache[i];
\r
637 if( rec && rec.doc_id() == id )
\r
644 function resultBuildFormatIcons( row, rec, is_mr ) {
\r
646 var imgEl = $n(row, "result_mat_type");
\r
649 ress = getMarcData(rec.doc_id(),"998","d");
\r
650 if(setFormatIcon(imgEl, ress)) unHideMe(imgEl);
\r
654 function fetchGoogleBooksLink () {
\r
656 if (isbnList && googleBooksLink) {
\r
657 var scriptElement = document.createElement("script");
\r
658 scriptElement.setAttribute("id", "jsonScript");
\r
659 scriptElement.setAttribute("src",
\r
660 "https://books.google.com/books?bibkeys=" +
\r
661 escape(isbnList) + "&jscmd=viewapi&callback=unhideGoogleBooksLink");
\r
662 scriptElement.setAttribute("type", "text/javascript");
\r
663 // make the request to Google Book Search
\r
664 document.documentElement.firstChild.appendChild(scriptElement);
\r
668 function resultPageIsDone(pos) {
\r
670 return (recordsHandled == getDisplayCount()
\r
671 || recordsHandled + getOffset() == getHitCount());
\r
674 var resultCCHeaderApplied = false;
\r
676 /* -------------------------------------------------------------------- */
\r
677 /* dynamically add the copy count rows based on the org type 'countsrow'
\r
678 is the row into which we will add TD's to hold the copy counts
\r
679 This code generates copy count cells with an id of
\r
680 'copy_count_cell_<depth>_<pagePosition>' */
\r
681 function resultAddCopyCounts(rec, pagePosition) {
\r
683 var r = table.rows[pagePosition + 1];
\r
684 var countsrow = $n(r, config.names.result.counts_row );
\r
685 var ccell = $n(countsrow, config.names.result.count_cell);
\r
687 var nodes = orgNodeTrail(findOrgUnit(getLocation()));
\r
688 var node = nodes[0];
\r
689 var type = findOrgType(node.ou_type());
\r
690 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
\r
691 ccell.title = type.opac_label();
\r
692 //addCSSClass(ccell, config.css.result.cc_cell_even);
\r
694 var lastcell = ccell;
\r
695 var lastheadcell = null;
\r
698 var ccheadcell = null;
\r
699 if(!resultCCHeaderApplied && !getLasso()) {
\r
700 ccrow = $('result_thead_row');
\r
701 ccheadcell = ccrow.removeChild($n(ccrow, "result_thead_ccell"));
\r
702 var t = ccheadcell.cloneNode(true);
\r
704 t.appendChild(text(type.opac_label()));
\r
705 ccrow.appendChild(t);
\r
706 resultCCHeaderApplied = true;
\r
710 /* collect copy counts for a record using method 'methodName' */
\r
711 function resultCollectCopyCounts(rec, pagePosition, methodName) {
\r
712 if(rec == null || rec.doc_id() == null) return;
\r
714 var loc = getLasso();
\r
715 if (loc) loc = -loc;
\r
716 else loc= getLocation();
\r
718 var req = new Request(methodName, loc, rec.doc_id(), getForm() );
\r
719 req.request.userdata = [ rec, pagePosition ];
\r
720 req.callback(resultHandleCopyCounts);
\r
724 function resultHandleCopyCounts(r) {
\r
725 runEvt('result', 'copyCountsReceived', r.userdata[0], r.userdata[1], r.getResultObject());
\r
729 /* XXX Needs to understand Lasso copy counts... */
\r
730 /* display the collected copy counts */
\r
731 function resultDisplayCopyCounts(rec, pagePosition, copy_counts) {
\r
732 if(copy_counts == null || rec == null) return;
\r
733 var r = table.rows[pagePosition + 1];
\r
734 var cnt_avail = $n(r, "copy_count_avail");
\r
735 if(cnt_avail && copy_counts[0]) {
\r
736 /*if(copy_counts[0].available)*/ cnt_avail.innerHTML = copy_counts[0].available+' cop'+(copy_counts[0].available==1?'y':'ies')+' available';
\r
738 fieldmapper.standardRequest(['open-ils.circ','open-ils.circ.bre.holds.count'], {async:true, params:[rec.doc_id(), r.id], oncomplete: drawHoldsCount});
\r
739 $n(r, 'copy_holds2').innerHTML = ' on first copy returned of '+copy_counts[0].count+' cop'+(copy_counts[0].count==1?'y':'ies');
\r
744 function drawHoldsCount(r) {
\r
745 if(!r.params[1]) return;
\r
746 var row = $(r.params[1]);
\r
748 var span = $n(row, 'copy_holds');
\r
749 var resp = r.recv().content();
\r
750 span.innerHTML = resp+' hold'+(resp==1?'':'s')+' ';
\r
753 function showDetailedInfo(bool) {
\r
754 var simple_lbl = $('results_simple_lbl');
\r
755 var simple_link = $('results_simple_link');
\r
756 var detail_lbl = $('results_detail_lbl');
\r
757 var detail_link = $('results_detail_link');
\r
758 if(!simple_lbl || !simple_link || !detail_lbl || !detail_link) return;
\r
760 var tbls = dojo.query('.results_info_table',$('result_table'));
\r
762 tbls.forEach(function(node, index, arr){
\r
763 unHideMe($n(node,'results_pub_tr'));
\r
764 unHideMe($n(node,'results_isbn_tr'));
\r
765 unHideMe($n(node,'results_edition_tr'));
\r
766 unHideMe($n(node,'results_phys_desc_tr'));
\r
768 hideMe(simple_lbl);
\r
769 hideMe(detail_link);
\r
770 unHideMe(simple_link);
\r
771 unHideMe(detail_lbl);
\r
773 tbls.forEach(function(node, index, arr){
\r
774 hideMe($n(node,'results_pub_tr'));
\r
775 hideMe($n(node,'results_isbn_tr'));
\r
776 hideMe($n(node,'results_edition_tr'));
\r
777 hideMe($n(node,'results_phys_desc_tr'));
\r
779 unHideMe(simple_lbl);
\r
780 unHideMe(detail_link);
\r
781 hideMe(simple_link);
\r
782 hideMe(detail_lbl);
\r
786 function fetchChiliFreshReviews() {
\r
787 if (chilifresh && chilifresh != '(none)') {
\r
788 try { chili_init(); } catch(E) { dump(E + '\n'); }
\r
792 function postResultsCollect() {
\r
793 var it = getCacheValue('showHoldEditor');
\r
795 setCacheValue('showHoldEditor', null);
\r
796 holdsDrawEditor({record:it.record, type:it.type});
\r