2 dojo.require('openils.BibTemplate');
\r
4 var recordsHandled = 0;
\r
5 var recordsCache = [];
\r
8 var googleBooksLink = true;
\r
11 dojo.addOnLoad(function(){ buildOrgSel($('holdsCacheSel'), globalOrgTree, 0);});
\r
13 var resultFetchAllRecords = false;
\r
14 var resultCompiledSearch = null;
\r
16 config.ids.result = {};
\r
17 config.css.result = {};
\r
18 config.names.result = {};
\r
19 config.ids.result.offset_start = "offset_start";
\r
20 config.ids.result.offset_end = "offset_end";
\r
21 config.ids.result.result_count = "result_count";
\r
22 config.ids.result.next_link = 'next_link';
\r
23 config.ids.result.prev_link = 'prev_link';
\r
24 config.ids.result.home_link = 'search_home_link';
\r
25 config.ids.result.end_link = 'end_link';
\r
26 config.ids.result.main_table = 'result_table';
\r
27 config.ids.result.row_template = 'result_table_template';
\r
28 config.ids.result.num_pages = 'num_pages';
\r
29 config.ids.result.current_page = 'current_page';
\r
30 config.css.result.nav_active = "nav_link_active";
\r
31 config.ids.result.top_div = "result_table_div";
\r
32 config.ids.result.nav_links = "search_nav_links";
\r
33 config.ids.result.info = "result_info_div";
\r
34 config.css.result.cc_cell_even = "copy_count_cell_even";
\r
35 config.names.result.item_jacket = "item_jacket";
\r
36 config.names.result.item_title = "item_title";
\r
37 config.names.result.item_author = "item_author";
\r
38 config.names.result.counts_row = "counts_row";
\r
39 config.names.result.count_cell = "copy_count_cell";
\r
40 config.names.result.format_cell = 'result_table_format_cell';
\r
41 config.names.result.format_link = 'resource_link';
\r
42 config.names.result.format_pic = 'format_pic';
\r
44 /* set up the event handlers */
\r
45 if( findCurrentPage() == MRESULT || findCurrentPage() == RRESULT ) {
\r
46 G.evt.result.hitCountReceived.push(resultSetHitInfo);
\r
47 G.evt.result.recordReceived.push(resultDisplayRecord, resultAddCopyCounts);
\r
48 G.evt.result.copyCountsReceived.push(resultDisplayCopyCounts);
\r
49 G.evt.result.allRecordsReceived.push(function(){unHideMe($('tehSideBar'));},function(){unHideMe($('results_view_span'));},resultBuildCaches,
\r
50 function(){unHideMe($('result_info_2'))}, fetchGoogleBooksLink, fetchChiliFreshReviews, postResultsCollect);
\r
52 attachEvt('result','lowHits',resultLowHits);
\r
53 attachEvt('result','zeroHits',resultZeroHits);
\r
54 attachEvt( "common", "locationUpdated", resultSBSubmit );
\r
55 /* do this after we have ID's so the rank for mr pages will be correct */
\r
56 attachEvt("result", "preCollectRecords", resultPaginate);
\r
59 function resultSBSubmit(){searchBarSubmit();}
\r
61 /* returns the last 'index' postion ocurring in this page */
\r
62 function resultFinalPageIndex() {
\r
63 if(getHitCount() < (getOffset() + getDisplayCount()))
\r
64 return getHitCount() - 1;
\r
65 return getOffset() + getDisplayCount() - 1;
\r
68 function plausible_ident(s) {
\r
69 s = s.replace(/^\s*(.+)\s*$/, '$1');
\r
70 s = s.replace(/^(\S+)\s.*$/, '$1');
\r
75 /* generic search method */
\r
76 function resultCollectSearchIds( type, method, handler ) {
\r
78 var sort = (getSort() == SORT_TYPE_REL) ? null : getSort();
\r
79 var sortdir = (sort) ? ((getSortDir()) ? getSortDir() : SORT_DIR_ASC) : null;
\r
86 var form = parseForm(getForm());
\r
87 item_type = form.item_type;
\r
88 item_form = form.item_form;
\r
91 item_type = (getItemType()) ? getItemType().split(/,/) : null;
\r
92 item_form = (getItemForm()) ? getItemForm().split(/,/) : null;
\r
97 var limit = (resultFetchAllRecords) ? 1000 : getDisplayCount();
\r
99 if( getOffset() > 0 ) {
\r
100 if( getHitCount() > 0 && (getOffset() + getDisplayCount()) > getHitCount() )
\r
101 limit = getHitCount() - getOffset();
\r
104 var lasso = getLasso();
\r
106 if (lasso) args.org_unit = -lasso;
\r
107 else args.org_unit = getLocation();
\r
109 args.depth = getDepth();
\r
110 args.limit = limit;
\r
111 args.offset = getOffset();
\r
112 args.visibility_limit = 3000;
\r
113 args.default_class = getStype();
\r
115 if(sort) args.sort = sort;
\r
116 if(sortdir) args.sort_dir = sortdir;
\r
117 if(item_type) args.item_type = item_type;
\r
118 if(item_form) args.item_form = item_form;
\r
119 if(getAvail()) args.available = 1;
\r
120 //args.format="marcxml";
\r
122 if(getFacet()) args.facets = getFacet();
\r
124 if(getAudience()) args.audience = getAudience().split(/,/);
\r
125 if(getLitForm()) args.lit_form = getLitForm().split(/,/);
\r
126 if(getLanguage()) args.language = getLanguage().split(/,/);
\r
127 if(getBibLevel()) args.bib_level = getBibLevel().split(/,/);
\r
128 if(getCopyLocs()) args.locations = getCopyLocs().split(/,/);
\r
129 if(getPubdBefore()) args.before = getPubdBefore();
\r
130 else if(getPubdAfter()) args.after = getPubdAfter();
\r
131 else if(getPubdBetween()) args.between = getPubdBetween().split(/,/);
\r
133 _debug('Search args: ' + js2JSON(args));
\r
134 _debug('Raw query: ' + getTerm());
\r
136 var req = new Request(method, args, getTerm(), 1);
\r
137 req.callback(handler);
\r
145 /* set the search result info, number of hits, which results we're
\r
146 displaying, links to the next/prev pages, etc. */
\r
147 function resultSetHitInfo() {
\r
149 var lasso = getLasso();
\r
151 /* tell the user where the results are coming from */
\r
152 var baseorg = findOrgUnit(getLocation());
\r
153 var depth = getDepth();
\r
154 var mydepth = findOrgDepth(baseorg);
\r
155 if( findOrgDepth(baseorg) != depth ) {
\r
156 var tmporg = baseorg;
\r
157 while( mydepth > depth ) {
\r
159 tmporg = findOrgUnit(tmporg.parent_ou());
\r
161 unHideMe($('including_results_for'));
\r
162 try{$('including_results_location').appendChild(text(tmporg.name()));} catch(e){}
\r
167 try{searchTimer.stop()}catch(e){}
\r
169 //if( findCurrentPage() == MRESULT ) {
\r
170 if( findCurrentPage() == MRESULT ||
\r
172 (findCurrentPage() == RRESULT &&
\r
174 getRtype() == RTYPE_TITLE ||
\r
175 getRtype() == RTYPE_AUTHOR ||
\r
176 getRtype() == RTYPE_SUBJECT ||
\r
177 getRtype() == RTYPE_SERIES ||
\r
178 getRtype() == RTYPE_KEYWORD
\r
183 if(getHitCount() <= lowHitCount && getTerm())
\r
184 runEvt('result', 'lowHits');
\r
187 if(getHitCount() == 0) {
\r
188 runEvt('result', 'zeroHits');
\r
193 var pages = getHitCount() / getDisplayCount();
\r
194 if(pages % 1) pages = parseInt(pages) + 1;
\r
198 var cpage = (getOffset()/getDisplayCount()) + 1;
\r
200 G.ui.result.current_page.appendChild(text(cpage));
\r
201 G.ui.result.num_pages.appendChild(text(pages)); /* the ) is dumb */
\r
203 $('current_page2').appendChild(text(cpage));
\r
204 $('num_pages2').appendChild(text(pages + ")")); /* the ) is dumb */
\r
206 /* set the offsets */
\r
207 var offsetEnd = getDisplayCount() + getOffset();
\r
208 if( getDisplayCount() > (getHitCount() - getOffset()))
\r
209 offsetEnd = getHitCount();
\r
211 G.ui.result.offset_end.appendChild(text(offsetEnd));
\r
212 G.ui.result.offset_start.appendChild(text(getOffset() + 1));
\r
214 $('offset_end2').appendChild(text(offsetEnd));
\r
215 $('offset_start2').appendChild(text(getOffset() + 1));
\r
217 G.ui.result.result_count.appendChild(text(getHitCount()));
\r
218 unHideMe(G.ui.result.info);
\r
219 unHideMe($('result_numbers1'));
\r
221 $('result_count2').appendChild(text(getHitCount()));
\r
222 unHideMe($('result_info_div2'));
\r
225 function resultLowHits() {
\r
227 unHideMe($('result_low_hits'));
\r
228 if(getHitCount() > 0)
\r
229 unHideMe($('result_low_hits_msg'));
\r
232 for(var key in resultCompiledSearch.searches)
\r
233 words.push(resultCompiledSearch.searches[key].term);
\r
235 var sreq = new Request(CHECK_SPELL, words.join(' '));
\r
236 sreq.callback(resultSuggestSpelling);
\r
239 for(var key in resultCompiledSearch.searches) {
\r
240 var areq = new Request(FETCH_CROSSREF, key, resultCompiledSearch.searches[key].term);
\r
241 areq.callback(resultLowHitXRef);
\r
245 if( !(getForm() == null || getForm() == 'all' || getForm() == "") ) {
\r
247 a[PARAM_FORM] = "all";
\r
248 $('low_hits_remove_format_link').setAttribute('href',buildOPACLink(a));
\r
249 unHideMe($('low_hits_remove_format'));
\r
252 resultSuggestSearchClass();
\r
254 if(getTerm()) resultExpandSearch(); /* advanced search */
\r
257 var lowHitsXRefSet = {};
\r
258 var lowHitsXRefLink;
\r
259 var lowHitsXRefLinkParent;
\r
260 function resultLowHitXRef(r) {
\r
261 if(!lowHitsXRefLink){
\r
262 lowHitsXRefLinkParent = $('low_hits_xref_link').parentNode;
\r
263 lowHitsXRefLink = lowHitsXRefLinkParent.removeChild($('low_hits_xref_link'));
\r
265 var res = r.getResultObject();
\r
266 var arr = res.from;
\r
267 arr.concat(res.also);
\r
268 if(arr && arr.length > 0) {
\r
269 unHideMe($('low_hits_cross_ref'));
\r
272 while( word = arr.shift() ) {
\r
274 if (lowHitsXRefSet[word] == 1) continue;
\r
275 lowHitsXRefSet[word] = 1;
\r
277 if(c++ > 20) break;
\r
279 a[PARAM_TERM] = word;
\r
280 var template = lowHitsXRefLink.cloneNode(true);
\r
281 template.setAttribute('href',buildOPACLink(a));
\r
282 template.appendChild(text(word));
\r
283 lowHitsXRefLinkParent.appendChild(template);
\r
284 lowHitsXRefLinkParent.appendChild(text(' '));
\r
289 function resultZeroHits() {
\r
290 hideMe($('result_header'));
\r
291 hideMe($('result_table_div'));
\r
292 hideMe($('statusbar'));
\r
293 $('rresults_page').style.width="690px";
\r
294 unHideMe($('zero_search_hits'));
\r
295 $('zero_hits_term').innerHTML = getTerm();
\r
297 unHideMe($('result_low_hits'));
\r
298 unHideMe($('result_zero_hits_msg'));
\r
299 if(getTerm()) resultExpandSearch(); /* advanced search */
\r
302 function resultExpandSearch() {
\r
303 var top = findOrgDepth(globalOrgTree);
\r
304 if(getDepth() == top) return;
\r
305 unHideMe($('low_hits_expand_range'));
\r
306 var par = $('low_hits_expand_link').parentNode;
\r
307 var template = par.removeChild($('low_hits_expand_link'));
\r
309 var bottom = getDepth();
\r
310 while( top < bottom ) {
\r
312 a[PARAM_DEPTH] = top;
\r
313 var temp = template.cloneNode(true);
\r
314 temp.appendChild(text(findOrgTypeFromDepth(top).opac_label()))
\r
315 temp.setAttribute('href',buildOPACLink(a));
\r
316 par.appendChild(temp);
\r
321 function resultSuggestSearchClass() {
\r
322 var stype = getStype();
\r
323 if(stype == STYPE_KEYWORD) return;
\r
324 var a = {}; var ref;
\r
325 unHideMe($('low_hits_search_type'));
\r
326 if(stype != STYPE_TITLE) {
\r
327 ref = $('low_hits_title_search');
\r
329 a[PARAM_STYPE] = STYPE_TITLE;
\r
330 ref.setAttribute('href',buildOPACLink(a));
\r
332 if(stype != STYPE_AUTHOR) {
\r
333 ref = $('low_hits_author_search');
\r
335 a[PARAM_STYPE] = STYPE_AUTHOR;
\r
336 ref.setAttribute('href',buildOPACLink(a));
\r
338 if(stype != STYPE_SUBJECT) {
\r
339 ref = $('low_hits_subject_search');
\r
341 a[PARAM_STYPE] = STYPE_SUBJECT;
\r
342 ref.setAttribute('href',buildOPACLink(a));
\r
344 if(stype != STYPE_KEYWORD) {
\r
345 ref = $('low_hits_keyword_search');
\r
347 a[PARAM_STYPE] = STYPE_KEYWORD;
\r
348 ref.setAttribute('href',buildOPACLink(a));
\r
350 if(stype != STYPE_SERIES) {
\r
351 ref = $('low_hits_series_search');
\r
353 a[PARAM_STYPE] = STYPE_SERIES;
\r
354 ref.setAttribute('href',buildOPACLink(a));
\r
358 function resultSuggestSpelling(r) {
\r
359 var res = r.getResultObject();
\r
360 var phrase = getTerm();
\r
361 var words = phrase.split(/ /);
\r
365 for( var w = 0; w < words.length; w++ ) {
\r
366 var word = words[w];
\r
367 var blob = grep(res, function(i){return (i.word == word);});
\r
368 if( blob ) blob = blob[0];
\r
370 if( blob.word == word ) {
\r
371 if( blob.suggestions && blob.suggestions[0] ) {
\r
372 newterm += " " + blob.suggestions[0];
\r
373 unHideMe($('did_you_mean'));
\r
375 newterm += " " + word;
\r
379 var cell = $('zero_hits_suggestions');
\r
380 var s = res[0].suggestions;
\r
383 if(i==10) break; //limit suggestions
\r
384 cell.appendChild(elem('a',{href:buildOPACLink({t:s[i]})},s[i]));
\r
385 cell.appendChild(elem('br'));
\r
387 if(newterm.toLowerCase().trim()!=getTerm().toLowerCase().trim()) unHideMe($('zero_hits_label1'));
\r
388 if(res[0].suggestions && res[0].suggestions.length>0) unHideMe($('zero_hits_label2'));
\r
391 arg[PARAM_TERM] = newterm;
\r
392 $('spell_check_link').setAttribute('href', buildOPACLink(arg));
\r
393 $('spell_check_link').appendChild(text(newterm));
\r
397 function resultPaginate() {
\r
398 var o = getOffset();
\r
401 if( !( ((o) + getDisplayCount()) >= getHitCount()) ) {
\r
403 args[PARAM_OFFSET] = o + getDisplayCount();
\r
404 args[PARAM_SORT] = SORT;
\r
405 args[PARAM_SORT_DIR] = SORT_DIR;
\r
406 args[PARAM_RLIST] = new CGI().param(PARAM_RLIST);
\r
408 G.ui.result.next_link.setAttribute("href", buildOPACLink(args));
\r
409 addCSSClass(G.ui.result.next_link, config.css.result.nav_active);
\r
411 $('next_link2').setAttribute("href", buildOPACLink(args));
\r
412 addCSSClass($('next_link2'), config.css.result.nav_active);
\r
414 args[PARAM_OFFSET] = getHitCount() - (getHitCount() % getDisplayCount());
\r
416 /* when hit count is divisible by display count, we have to adjust */
\r
417 if( getHitCount() % getDisplayCount() == 0 )
\r
418 args[PARAM_OFFSET] -= getDisplayCount();
\r
424 args[PARAM_SORT] = SORT;
\r
425 args[PARAM_SORT_DIR] = SORT_DIR;
\r
426 args[PARAM_RLIST] = new CGI().param(PARAM_RLIST);
\r
428 args[PARAM_OFFSET] = o - getDisplayCount();
\r
429 G.ui.result.prev_link.setAttribute( "href", buildOPACLink(args));
\r
430 addCSSClass(G.ui.result.prev_link, config.css.result.nav_active);
\r
432 $('prev_link2').setAttribute( "href", buildOPACLink(args));
\r
433 addCSSClass($('prev_link2'), config.css.result.nav_active);
\r
435 args[PARAM_OFFSET] = 0;
\r
436 G.ui.result.home_link.setAttribute( "href", buildOPACLink(args));
\r
437 addCSSClass(G.ui.result.home_link, config.css.result.nav_active);
\r
440 // pagination - google style
\r
441 var pages = getHitCount() / getDisplayCount();
\r
442 var cpage = (getOffset()/getDisplayCount()) + 1;
\r
444 pages = Math.floor(pages);
\r
445 cpage = Math.floor(cpage);
\r
446 var end = pages>9?8:pages;
\r
448 // narrow our window of visible page numbers to 9 - sets start and end pages for the loop
\r
451 end = cpage+3>pages?pages:cpage+3;
\r
452 if(cpage+3>pages) { start = (cpage-5)-(cpage-pages+3); }
\r
453 if(start<0) start=0;
\r
457 var span = $('nav_pages');
\r
458 var span2 = $('nav_pages2');
\r
459 for(var i=start; i<=end; i++) {
\r
460 var temp = elem('span',{style:'padding:0px 3px;'});
\r
461 temp.style.padding='0px 3px';
\r
462 args[PARAM_OFFSET] = getDisplayCount()*i;
\r
463 if(i==cpage-1) { var link = text(i+1); temp.style.color="red" }
\r
464 else var link = elem('a',{href:buildOPACLink(args)},i+1);
\r
465 temp.appendChild(link);
\r
466 span.appendChild(temp);
\r
467 span2.appendChild(temp.cloneNode(true));
\r
472 if(getDisplayCount() < getHitCount()) {
\r
473 unHideMe($('start_end_links_span'));
\r
474 unHideMe($('start_end_links_span2'));
\r
478 try{searchTimer.stop()}catch(e){}
\r
481 function buildunAPISpan (span, type, id) {
\r
482 if(!span || !type || !id) return;
\r
483 var cgi = new CGI();
\r
484 var d = new Date();
\r
486 addCSSClass(span,'unapi-id');
\r
490 'tag:' + cgi.server_name + ',' +
\r
492 ':' + type + '/' + id
\r
496 function unhideGoogleBooksLink (data) {
\r
497 for ( var i in data ) {
\r
498 //if (data[i].preview == 'noview') continue;
\r
500 var gbspan = $n(document.documentElement, 'googleBooksLink-' + i);
\r
501 var gba = $n(gbspan, "googleBooks-link");
\r
507 removeCSSClass( gbspan, 'hide_me' );
\r
511 /* display the record info in the record display table 'pos' is the
\r
512 zero based position the record should have in the display table */
\r
513 function resultDisplayRecord(rec, pos, is_mr) {
\r
514 //fieldmapper.IDL.load(['mvr']);
\r
515 if(rec == null || rec.__c) rec = new mvr(); /* so the page won't die if there was an error */
\r
517 recordsCache.push(rec);
\r
519 var r = table.rows[pos + 1];
\r
520 r.id += "_" + rec.doc_id();
\r
521 var currentISBN = cleanISBN(rec.isbn());
\r
523 if (googleBooksLink) {
\r
524 var gbspan = $n(r, "googleBooksLink");
\r
525 if (currentISBN && gbspan) {
\r
526 gbspan.setAttribute('name', gbspan.getAttribute('name') + '-' + currentISBN );
\r
527 if (isbnList) isbnList += ', ';
\r
528 isbnList += currentISBN;
\r
532 if (currentISBN && chilifresh && chilifresh != '(none)') {
\r
533 var cfrow = $n(r, "chilifreshReview");
\r
535 removeCSSClass( cfrow, 'hide_me' );
\r
537 var cflink = $n(r, "chilifreshReviewLink");
\r
539 cflink.setAttribute(
\r
541 'isbn_' + currentISBN
\r
544 var cfdiv = $n(r, "chilifreshReviewResult");
\r
546 cfdiv.setAttribute(
\r
548 'chili_review_' + currentISBN
\r
553 var pic = $n(r, config.names.result.item_jacket);
\r
554 if (!pic) pic = elem("img");
\r
555 //pic.setAttribute("src", buildISBNSrc(currentISBN));
\r
556 pic.setAttribute("width",55);
\r
558 var title_link = $n(r, config.names.result.item_title);
\r
559 var author_link = $n(r, config.names.result.item_author);
\r
560 var row_count = $n(r,"results_row_count");
\r
561 var myListLink = $n(r,"result_my_list_link");
\r
562 var reviewsLink = $n(r, 'reviews_and_more');
\r
564 reviewsLink.href="http://contentcafe2.btol.com/ContentCafeClient/ContentCafe.aspx?UserID=KC72927&Password=CC14647&ItemKey="+currentISBN+"&Options=Y";
\r
568 var onlyrec = onlyrecord[ getOffset() + pos ];
\r
570 buildunAPISpan($n(r,'unapi'), 'biblio-record_entry', onlyrec);
\r
573 args.page = RDETAIL;
\r
574 args[PARAM_OFFSET] = 0;
\r
575 args[PARAM_RID] = onlyrec;
\r
576 args[PARAM_MRID] = rec.doc_id();
\r
577 pic.parentNode.setAttribute("href", buildOPACLink(args));
\r
578 title_link.setAttribute("href", buildOPACLink(args));
\r
579 title_link.appendChild(text(normalize(truncate(rec.title(), 65))));
\r
582 buildunAPISpan($n(r,'unapi'), 'metabib-metarecord', rec.doc_id());
\r
584 buildTitleLink(rec, title_link);
\r
586 args.page = RRESULT;
\r
587 args[PARAM_OFFSET] = 0;
\r
588 args[PARAM_MRID] = rec.doc_id();
\r
589 pic.parentNode.setAttribute("href", buildOPACLink(args));
\r
593 buildunAPISpan($n(r,'unapi'), 'biblio-record_entry', rec.doc_id());
\r
595 if(title_link) buildTitleDetailLink(rec, title_link);
\r
597 args.page = RDETAIL;
\r
598 args[PARAM_OFFSET] = 0;
\r
599 args[PARAM_RID] = rec.doc_id();
\r
600 pic.parentNode.setAttribute("href", buildOPACLink(args));
\r
602 unHideMe($n(r,'place_hold_span'));
\r
603 //$n(r,'place_hold_link').setAttribute('href','javascript:holdsDrawEditor({record:"'+rec.doc_id()+'",type:"T"});');
\r
604 $n(r,'place_hold_link').onclick = function() { resultDrawHoldsWindow(rec.doc_id(), 'T'); }
\r
609 new openils.BibTemplate(
\r
610 {root : r, record : rec.doc_id()}).render();
\r
616 if(row_count) row_count.innerHTML = (pos+1)+getOffset();
\r
617 if(myListLink) myListLink.setAttribute("href","javascript:addMyList("+rec.doc_id()+");")
\r
618 title_link.setAttribute("title",rec.title());
\r
619 buildSearchLink(STYPE_AUTHOR, rec.author(), author_link);
\r
622 $n(r, "results_pub_date").innerHTML = (!rec.pubdate())?"":rec.pubdate();
\r
623 $n(r, "results_pub").innerHTML = (!rec.publisher())?"":rec.publisher();
\r
624 $n(r, "results_isbn").innerHTML = (!currentISBN)?"":currentISBN;
\r
625 $n(r, "results_edition").innerHTML = (!rec.edition())?"":rec.edition();
\r
626 $n(r, "results_phys_desc").innerHTML = (!rec.physical_description())?"":rec.physical_description();
\r
627 if(isInAnonList(parseInt(rec.doc_id()))) {
\r
628 $n(r, 'result_my_list_link').innerHTML = '';
\r
629 $n(r, 'result_my_list_link').appendChild(elem('img', {src:'/opac/skin/kcls/graphics/add_mylist_sel.gif'}, null));
\r
632 if(!isNull(rec.edition())) {
\r
633 unHideMe( $n(r, "result_table_extra_span"));
\r
634 $n(r, "result_table_edition_span").appendChild( text( rec.edition()) );
\r
636 if(!isNull(rec.pubdate())) {
\r
637 unHideMe( $n(r, "result_table_extra_span"));
\r
638 unHideMe($n(r, "result_table_pub_span"));
\r
639 $n(r, "result_table_pub_span").appendChild( text( rec.pubdate() ));
\r
641 if(!isNull(rec.publisher()) ) {
\r
642 unHideMe( $n(r, "result_table_extra_span"));
\r
643 unHideMe($n(r, "result_table_pub_span"));
\r
644 $n(r, "result_table_pub_span").appendChild( text( " " + rec.publisher() ));
\r
647 if(!isNull(rec.physical_description()) ) {
\r
648 unHideMe( $n(r, "result_table_extra_span"));
\r
649 var t = " " + rec.physical_description();
\r
650 //$n(r, "result_table_phys_span").appendChild( text(t.replace(/:.*/g,'')));
\r
651 $n(r, "result_table_phys_span").appendChild( text(t));
\r
655 resultBuildFormatIcons( r, rec, is_mr );
\r
657 runEvt("result", "recordDrawn", rec.doc_id(), title_link);
\r
660 if(resultPageIsDone()) {
\r
661 runEvt('result', 'allRecordsReceived', recordsCache);
\r
665 function resultDrawHoldsWindow(hold_target, hold_type) {
\r
666 var src = location.href;
\r
667 if(forceLoginSSL && src.match(/^http:/)) {
\r
668 src = src.replace(/^http:/, 'https:');
\r
669 if(src.match(/&hold_target=/)) {
\r
670 src.replace(/&hold_target=(\d+)/, hold_target);
\r
672 src += '&hold_target=' + hold_target;
\r
674 location.href = src;
\r
676 holdsDrawEditor({record:hold_target, type:hold_type});
\r
681 function _resultFindRec(id) {
\r
682 for( var i = 0; i != recordsCache.length; i++ ) {
\r
683 var rec = recordsCache[i];
\r
684 if( rec && rec.doc_id() == id )
\r
691 function resultBuildFormatIcons( row, rec, is_mr ) {
\r
693 var imgEl = $n(row, "result_mat_type");
\r
696 ress = getMarcData(rec.doc_id(),"998","d");
\r
697 if(setFormatIcon(imgEl, ress)) unHideMe(imgEl);
\r
701 function fetchGoogleBooksLink () {
\r
703 if (isbnList && googleBooksLink) {
\r
704 var scriptElement = document.createElement("script");
\r
705 scriptElement.setAttribute("id", "jsonScript");
\r
706 scriptElement.setAttribute("src",
\r
707 "https://books.google.com/books?bibkeys=" +
\r
708 escape(isbnList) + "&jscmd=viewapi&callback=unhideGoogleBooksLink");
\r
709 scriptElement.setAttribute("type", "text/javascript");
\r
710 // make the request to Google Book Search
\r
711 document.documentElement.firstChild.appendChild(scriptElement);
\r
715 function resultPageIsDone(pos) {
\r
717 return (recordsHandled == getDisplayCount()
\r
718 || recordsHandled + getOffset() == getHitCount());
\r
721 var resultCCHeaderApplied = false;
\r
723 /* -------------------------------------------------------------------- */
\r
724 /* dynamically add the copy count rows based on the org type 'countsrow'
\r
725 is the row into which we will add TD's to hold the copy counts
\r
726 This code generates copy count cells with an id of
\r
727 'copy_count_cell_<depth>_<pagePosition>' */
\r
728 function resultAddCopyCounts(rec, pagePosition) {
\r
730 var r = table.rows[pagePosition + 1];
\r
731 var countsrow = $n(r, config.names.result.counts_row );
\r
732 var ccell = $n(countsrow, config.names.result.count_cell);
\r
734 var nodes = orgNodeTrail(findOrgUnit(getLocation()));
\r
735 var node = nodes[0];
\r
736 var type = findOrgType(node.ou_type());
\r
737 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
\r
738 ccell.title = type.opac_label();
\r
739 //addCSSClass(ccell, config.css.result.cc_cell_even);
\r
741 var lastcell = ccell;
\r
742 var lastheadcell = null;
\r
745 var ccheadcell = null;
\r
746 if(!resultCCHeaderApplied && !getLasso()) {
\r
747 ccrow = $('result_thead_row');
\r
748 ccheadcell = ccrow.removeChild($n(ccrow, "result_thead_ccell"));
\r
749 var t = ccheadcell.cloneNode(true);
\r
751 t.appendChild(text(type.opac_label()));
\r
752 ccrow.appendChild(t);
\r
753 resultCCHeaderApplied = true;
\r
757 /* collect copy counts for a record using method 'methodName' */
\r
758 function resultCollectCopyCounts(rec, pagePosition, methodName) {
\r
759 if(rec == null || rec.doc_id() == null) return;
\r
761 var loc = getLasso();
\r
762 if (loc) loc = -loc;
\r
763 else loc= getLocation();
\r
765 var req = new Request(methodName, loc, rec.doc_id(), getForm() );
\r
766 req.request.userdata = [ rec, pagePosition ];
\r
767 req.callback(resultHandleCopyCounts);
\r
771 function resultHandleCopyCounts(r) {
\r
772 runEvt('result', 'copyCountsReceived', r.userdata[0], r.userdata[1], r.getResultObject());
\r
776 /* XXX Needs to understand Lasso copy counts... */
\r
777 /* display the collected copy counts */
\r
778 function resultDisplayCopyCounts(rec, pagePosition, copy_counts) {
\r
779 if(copy_counts == null || rec == null) return;
\r
780 var r = table.rows[pagePosition + 1];
\r
781 var cnt_avail = $n(r, "copy_count_avail");
\r
782 if(cnt_avail && copy_counts[0]) {
\r
783 /*if(copy_counts[0].available)*/ cnt_avail.innerHTML = copy_counts[0].available+' cop'+(copy_counts[0].available==1?'y':'ies')+' available';
\r
785 fieldmapper.standardRequest(['open-ils.circ','open-ils.circ.bre.holds.count'], {async:true, params:[rec.doc_id(), r.id], oncomplete: drawHoldsCount});
\r
786 $n(r, 'copy_holds2').innerHTML = ' on first copy returned of '+copy_counts[0].count+' cop'+(copy_counts[0].count==1?'y':'ies');
\r
791 function drawHoldsCount(r) {
\r
792 if(!r.params[1]) return;
\r
793 var row = $(r.params[1]);
\r
795 var span = $n(row, 'copy_holds');
\r
796 var resp = r.recv().content();
\r
797 span.innerHTML = resp+' hold'+(resp==1?'':'s')+' ';
\r
800 function showDetailedInfo(bool) {
\r
801 var simple_lbl = $('results_simple_lbl');
\r
802 var simple_link = $('results_simple_link');
\r
803 var detail_lbl = $('results_detail_lbl');
\r
804 var detail_link = $('results_detail_link');
\r
805 if(!simple_lbl || !simple_link || !detail_lbl || !detail_link) return;
\r
807 var tbls = dojo.query('.results_info_table',$('result_table'));
\r
809 tbls.forEach(function(node, index, arr){
\r
810 unHideMe($n(node,'results_pub_tr'));
\r
811 unHideMe($n(node,'results_isbn_tr'));
\r
812 unHideMe($n(node,'results_edition_tr'));
\r
813 unHideMe($n(node,'results_phys_desc_tr'));
\r
815 hideMe(simple_lbl);
\r
816 hideMe(detail_link);
\r
817 unHideMe(simple_link);
\r
818 unHideMe(detail_lbl);
\r
820 tbls.forEach(function(node, index, arr){
\r
821 hideMe($n(node,'results_pub_tr'));
\r
822 hideMe($n(node,'results_isbn_tr'));
\r
823 hideMe($n(node,'results_edition_tr'));
\r
824 hideMe($n(node,'results_phys_desc_tr'));
\r
826 unHideMe(simple_lbl);
\r
827 unHideMe(detail_link);
\r
828 hideMe(simple_link);
\r
829 hideMe(detail_lbl);
\r
833 function fetchChiliFreshReviews() {
\r
834 if (chilifresh && chilifresh != '(none)') {
\r
835 try { chili_init(); } catch(E) { console.log(E + '\n'); }
\r
839 function postResultsCollect() {
\r
840 var it = getCacheValue('showHoldEditor');
\r
842 setCacheValue('showHoldEditor', null);
\r
843 holdsDrawEditor({record:it.record, type:it.type});
\r