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
37 function plausible_ident(s) {
\r
38 s = s.replace(/^\s*(.+)\s*$/, '$1');
\r
39 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 : r, record : rec.doc_id()}).render();
\r
584 if(row_count) row_count.innerHTML = (pos+1)+getOffset();
\r
585 if(myListLink) myListLink.setAttribute("href","javascript:addMyList("+rec.doc_id()+");")
\r
586 title_link.setAttribute("title",rec.title());
\r
587 buildSearchLink(STYPE_AUTHOR, rec.author(), author_link);
\r
590 $n(r, "results_pub_date").innerHTML = (!rec.pubdate())?"":rec.pubdate();
\r
591 $n(r, "results_pub").innerHTML = (!rec.publisher())?"":rec.publisher();
\r
592 $n(r, "results_isbn").innerHTML = (!currentISBN)?"":currentISBN;
\r
593 $n(r, "results_edition").innerHTML = (!rec.edition())?"":rec.edition();
\r
594 $n(r, "results_phys_desc").innerHTML = (!rec.physical_description())?"":rec.physical_description();
\r
595 if(isInAnonList(parseInt(rec.doc_id()))) {
\r
596 $n(r, 'result_my_list_link').innerHTML = '';
\r
597 $n(r, 'result_my_list_link').appendChild(elem('img', {src:'/opac/skin/kcls/graphics/add_mylist_sel.gif'}, null));
\r
600 if(!isNull(rec.edition())) {
\r
601 unHideMe( $n(r, "result_table_extra_span"));
\r
602 $n(r, "result_table_edition_span").appendChild( text( rec.edition()) );
\r
604 if(!isNull(rec.pubdate())) {
\r
605 unHideMe( $n(r, "result_table_extra_span"));
\r
606 unHideMe($n(r, "result_table_pub_span"));
\r
607 $n(r, "result_table_pub_span").appendChild( text( rec.pubdate() ));
\r
609 if(!isNull(rec.publisher()) ) {
\r
610 unHideMe( $n(r, "result_table_extra_span"));
\r
611 unHideMe($n(r, "result_table_pub_span"));
\r
612 $n(r, "result_table_pub_span").appendChild( text( " " + rec.publisher() ));
\r
615 if(!isNull(rec.physical_description()) ) {
\r
616 unHideMe( $n(r, "result_table_extra_span"));
\r
617 var t = " " + rec.physical_description();
\r
618 //$n(r, "result_table_phys_span").appendChild( text(t.replace(/:.*/g,'')));
\r
619 $n(r, "result_table_phys_span").appendChild( text(t));
\r
623 resultBuildFormatIcons( r, rec, is_mr );
\r
625 runEvt("result", "recordDrawn", rec.doc_id(), title_link);
\r
628 if(resultPageIsDone()) {
\r
629 runEvt('result', 'allRecordsReceived', recordsCache);
\r
633 function _resultFindRec(id) {
\r
634 for( var i = 0; i != recordsCache.length; i++ ) {
\r
635 var rec = recordsCache[i];
\r
636 if( rec && rec.doc_id() == id )
\r
643 function resultBuildFormatIcons( row, rec, is_mr ) {
\r
645 var imgEl = $n(row, "result_mat_type");
\r
648 ress = getMarcData(rec.doc_id(),"998","d");
\r
649 if(setFormatIcon(imgEl, ress)) unHideMe(imgEl);
\r
653 function fetchGoogleBooksLink () {
\r
655 if (isbnList && googleBooksLink) {
\r
656 var scriptElement = document.createElement("script");
\r
657 scriptElement.setAttribute("id", "jsonScript");
\r
658 scriptElement.setAttribute("src",
\r
659 "https://books.google.com/books?bibkeys=" +
\r
660 escape(isbnList) + "&jscmd=viewapi&callback=unhideGoogleBooksLink");
\r
661 scriptElement.setAttribute("type", "text/javascript");
\r
662 // make the request to Google Book Search
\r
663 document.documentElement.firstChild.appendChild(scriptElement);
\r
667 function resultPageIsDone(pos) {
\r
669 return (recordsHandled == getDisplayCount()
\r
670 || recordsHandled + getOffset() == getHitCount());
\r
673 var resultCCHeaderApplied = false;
\r
675 /* -------------------------------------------------------------------- */
\r
676 /* dynamically add the copy count rows based on the org type 'countsrow'
\r
677 is the row into which we will add TD's to hold the copy counts
\r
678 This code generates copy count cells with an id of
\r
679 'copy_count_cell_<depth>_<pagePosition>' */
\r
680 function resultAddCopyCounts(rec, pagePosition) {
\r
682 var r = table.rows[pagePosition + 1];
\r
683 var countsrow = $n(r, config.names.result.counts_row );
\r
684 var ccell = $n(countsrow, config.names.result.count_cell);
\r
686 var nodes = orgNodeTrail(findOrgUnit(getLocation()));
\r
687 var node = nodes[0];
\r
688 var type = findOrgType(node.ou_type());
\r
689 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
\r
690 ccell.title = type.opac_label();
\r
691 //addCSSClass(ccell, config.css.result.cc_cell_even);
\r
693 var lastcell = ccell;
\r
694 var lastheadcell = null;
\r
697 var ccheadcell = null;
\r
698 if(!resultCCHeaderApplied && !getLasso()) {
\r
699 ccrow = $('result_thead_row');
\r
700 ccheadcell = ccrow.removeChild($n(ccrow, "result_thead_ccell"));
\r
701 var t = ccheadcell.cloneNode(true);
\r
703 t.appendChild(text(type.opac_label()));
\r
704 ccrow.appendChild(t);
\r
705 resultCCHeaderApplied = true;
\r
709 /* collect copy counts for a record using method 'methodName' */
\r
710 function resultCollectCopyCounts(rec, pagePosition, methodName) {
\r
711 if(rec == null || rec.doc_id() == null) return;
\r
713 var loc = getLasso();
\r
714 if (loc) loc = -loc;
\r
715 else loc= getLocation();
\r
717 var req = new Request(methodName, loc, rec.doc_id(), getForm() );
\r
718 req.request.userdata = [ rec, pagePosition ];
\r
719 req.callback(resultHandleCopyCounts);
\r
723 function resultHandleCopyCounts(r) {
\r
724 runEvt('result', 'copyCountsReceived', r.userdata[0], r.userdata[1], r.getResultObject());
\r
728 /* XXX Needs to understand Lasso copy counts... */
\r
729 /* display the collected copy counts */
\r
730 function resultDisplayCopyCounts(rec, pagePosition, copy_counts) {
\r
731 if(copy_counts == null || rec == null) return;
\r
732 var r = table.rows[pagePosition + 1];
\r
733 var cnt_avail = $n(r, "copy_count_avail");
\r
734 if(cnt_avail && copy_counts[0]) {
\r
735 /*if(copy_counts[0].available)*/ cnt_avail.innerHTML = copy_counts[0].available+' cop'+(copy_counts[0].available==1?'y':'ies')+' available';
\r
737 fieldmapper.standardRequest(['open-ils.circ','open-ils.circ.bre.holds.count'], {async:true, params:[rec.doc_id(), r.id], oncomplete: drawHoldsCount});
\r
738 $n(r, 'copy_holds2').innerHTML = ' on first copy returned of '+copy_counts[0].count+' cop'+(copy_counts[0].count==1?'y':'ies');
\r
743 function drawHoldsCount(r) {
\r
744 if(!r.params[1]) return;
\r
745 var row = $(r.params[1]);
\r
747 var span = $n(row, 'copy_holds');
\r
748 var resp = r.recv().content();
\r
749 span.innerHTML = resp+' hold'+(resp==1?'':'s')+' ';
\r
752 function showDetailedInfo(bool) {
\r
753 var simple_lbl = $('results_simple_lbl');
\r
754 var simple_link = $('results_simple_link');
\r
755 var detail_lbl = $('results_detail_lbl');
\r
756 var detail_link = $('results_detail_link');
\r
757 if(!simple_lbl || !simple_link || !detail_lbl || !detail_link) return;
\r
759 var tbls = dojo.query('.results_info_table',$('result_table'));
\r
761 tbls.forEach(function(node, index, arr){
\r
762 unHideMe($n(node,'results_pub_tr'));
\r
763 unHideMe($n(node,'results_isbn_tr'));
\r
764 unHideMe($n(node,'results_edition_tr'));
\r
765 unHideMe($n(node,'results_phys_desc_tr'));
\r
767 hideMe(simple_lbl);
\r
768 hideMe(detail_link);
\r
769 unHideMe(simple_link);
\r
770 unHideMe(detail_lbl);
\r
772 tbls.forEach(function(node, index, arr){
\r
773 hideMe($n(node,'results_pub_tr'));
\r
774 hideMe($n(node,'results_isbn_tr'));
\r
775 hideMe($n(node,'results_edition_tr'));
\r
776 hideMe($n(node,'results_phys_desc_tr'));
\r
778 unHideMe(simple_lbl);
\r
779 unHideMe(detail_link);
\r
780 hideMe(simple_link);
\r
781 hideMe(detail_lbl);
\r
785 function fetchChiliFreshReviews() {
\r
786 if (chilifresh && chilifresh != '(none)') {
\r
787 try { chili_init(); } catch(E) { dump(E + '\n'); }
\r
791 function postResultsCollect() {
\r
792 var it = getCacheValue('showHoldEditor');
\r
794 setCacheValue('showHoldEditor', null);
\r
795 holdsDrawEditor({record:it.record, type:it.type});
\r