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
422 } // ugh... I hate math.
\r
425 var span = $('nav_pages');
\r
426 var span2 = $('nav_pages2');
\r
427 for(var i=start; i<=end; i++) {
\r
428 if(i==end && (getHitCount()%getDisplayCount())==0) break;
\r
429 var temp = elem('span',{style:'padding:0px 3px;'});
\r
430 temp.style.padding='0px 3px';
\r
431 args[PARAM_OFFSET] = getDisplayCount()*i;
\r
432 if(i==cpage-1) { var link = text(i+1); temp.style.color="red" }
\r
433 else var link = elem('a',{href:buildOPACLink(args)},i+1);
\r
434 temp.appendChild(link);
\r
435 span.appendChild(temp);
\r
436 span2.appendChild(temp.cloneNode(true));
\r
441 if(getDisplayCount() < getHitCount()) {
\r
442 unHideMe($('start_end_links_span'));
\r
443 unHideMe($('start_end_links_span2'));
\r
447 try{searchTimer.stop()}catch(e){}
\r
450 function buildunAPISpan (span, type, id) {
\r
451 if(!span || !type || !id) return;
\r
452 var cgi = new CGI();
\r
453 var d = new Date();
\r
455 addCSSClass(span,'unapi-id');
\r
459 'tag:' + cgi.server_name + ',' +
\r
461 ':' + type + '/' + id
\r
465 function unhideGoogleBooksLink (data) {
\r
466 for ( var i in data ) {
\r
467 //if (data[i].preview == 'noview') continue;
\r
469 var gbspan = $n(document.documentElement, 'googleBooksLink-' + i);
\r
470 var gba = $n(gbspan, "googleBooks-link");
\r
476 removeCSSClass( gbspan, 'hide_me' );
\r
480 /* display the record info in the record display table 'pos' is the
\r
481 zero based position the record should have in the display table */
\r
482 function resultDisplayRecord(rec, pos, is_mr) {
\r
483 //fieldmapper.IDL.load(['mvr']);
\r
484 if(rec == null || rec.__c) rec = new mvr(); /* so the page won't die if there was an error */
\r
486 recordsCache.push(rec);
\r
488 var r = table.rows[pos + 1];
\r
489 r.id += "_" + rec.doc_id();
\r
490 var currentISBN = cleanISBN(rec.isbn());
\r
492 if (googleBooksLink) {
\r
493 var gbspan = $n(r, "googleBooksLink");
\r
494 if (currentISBN && gbspan) {
\r
495 gbspan.setAttribute('name', gbspan.getAttribute('name') + '-' + currentISBN );
\r
496 if (isbnList) isbnList += ', ';
\r
497 isbnList += currentISBN;
\r
501 if (currentISBN && chilifresh && chilifresh != '(none)') {
\r
502 var cfrow = $n(r, "chilifreshReview");
\r
504 removeCSSClass( cfrow, 'hide_me' );
\r
506 var cflink = $n(r, "chilifreshReviewLink");
\r
508 cflink.setAttribute(
\r
510 'isbn_' + currentISBN
\r
513 var cfdiv = $n(r, "chilifreshReviewResult");
\r
515 cfdiv.setAttribute(
\r
517 'chili_review_' + currentISBN
\r
522 var pic = $n(r, config.names.result.item_jacket);
\r
523 if (!pic) pic = elem("img");
\r
524 //pic.setAttribute("src", buildISBNSrc(currentISBN));
\r
525 pic.setAttribute("width",55);
\r
527 var title_link = $n(r, config.names.result.item_title);
\r
528 var author_link = $n(r, config.names.result.item_author);
\r
529 var row_count = $n(r,"results_row_count");
\r
530 var myListLink = $n(r,"result_my_list_link");
\r
531 var reviewsLink = $n(r, 'reviews_and_more');
\r
533 reviewsLink.href="http://contentcafe2.btol.com/ContentCafeClient/ContentCafe.aspx?UserID=KC72927&Password=CC14647&ItemKey="+currentISBN+"&Options=Y";
\r
537 var onlyrec = onlyrecord[ getOffset() + pos ];
\r
539 buildunAPISpan($n(r,'unapi'), 'biblio-record_entry', onlyrec);
\r
542 args.page = RDETAIL;
\r
543 args[PARAM_OFFSET] = 0;
\r
544 args[PARAM_RID] = onlyrec;
\r
545 args[PARAM_MRID] = rec.doc_id();
\r
546 pic.parentNode.setAttribute("href", buildOPACLink(args));
\r
547 title_link.setAttribute("href", buildOPACLink(args));
\r
548 title_link.appendChild(text(normalize(truncate(rec.title(), 65))));
\r
551 buildunAPISpan($n(r,'unapi'), 'metabib-metarecord', rec.doc_id());
\r
553 buildTitleLink(rec, title_link);
\r
555 args.page = RRESULT;
\r
556 args[PARAM_OFFSET] = 0;
\r
557 args[PARAM_MRID] = rec.doc_id();
\r
558 pic.parentNode.setAttribute("href", buildOPACLink(args));
\r
562 buildunAPISpan($n(r,'unapi'), 'biblio-record_entry', rec.doc_id());
\r
564 if(title_link) buildTitleDetailLink(rec, title_link);
\r
566 args.page = RDETAIL;
\r
567 args[PARAM_OFFSET] = 0;
\r
568 args[PARAM_RID] = rec.doc_id();
\r
569 pic.parentNode.setAttribute("href", buildOPACLink(args));
\r
571 unHideMe($n(r,'place_hold_span'));
\r
572 //$n(r,'place_hold_link').setAttribute('href','javascript:holdsDrawEditor({record:"'+rec.doc_id()+'",type:"T"});');
\r
573 $n(r,'place_hold_link').onclick = function() { resultDrawHoldsWindow(rec.doc_id(), 'T'); }
\r
576 //dojo.require('openils.BibTemplate'); // -- this causes redundant requests per record - put in js_common.xml instead
\r
579 //new openils.BibTemplate({root : $n(r, 'bib_cn_list'), record : rec.doc_id()}).render();
\r
580 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 = 'Remove from my list';
\r
599 $n(r, 'result_my_list_link').title = 'Remove from my list';
\r
600 //$n(r, 'result_my_list_link').appendChild(elem('img', {src:'/opac/skin/kcls/graphics/add_mylist_sel.gif'}, null));
\r
603 if(!isNull(rec.edition())) {
\r
604 unHideMe( $n(r, "result_table_extra_span"));
\r
605 $n(r, "result_table_edition_span").appendChild( text( rec.edition()) );
\r
607 if(!isNull(rec.pubdate())) {
\r
608 unHideMe( $n(r, "result_table_extra_span"));
\r
609 unHideMe($n(r, "result_table_pub_span"));
\r
610 $n(r, "result_table_pub_span").appendChild( text( rec.pubdate() ));
\r
612 if(!isNull(rec.publisher()) ) {
\r
613 unHideMe( $n(r, "result_table_extra_span"));
\r
614 unHideMe($n(r, "result_table_pub_span"));
\r
615 $n(r, "result_table_pub_span").appendChild( text( " " + rec.publisher() ));
\r
618 if(!isNull(rec.physical_description()) ) {
\r
619 unHideMe( $n(r, "result_table_extra_span"));
\r
620 var t = " " + rec.physical_description();
\r
621 //$n(r, "result_table_phys_span").appendChild( text(t.replace(/:.*/g,'')));
\r
622 $n(r, "result_table_phys_span").appendChild( text(t));
\r
626 resultBuildFormatIcons( r, rec, is_mr );
\r
628 runEvt("result", "recordDrawn", rec.doc_id(), title_link);
\r
631 if(resultPageIsDone()) {
\r
632 runEvt('result', 'allRecordsReceived', recordsCache);
\r
636 function resultDrawHoldsWindow(hold_target, hold_type) {
\r
637 var src = location.href;
\r
638 if(forceLoginSSL && src.match(/^http:/)) {
\r
639 src = src.replace(/^http:/, 'https:');
\r
640 if(src.match(/&hold_target=/)) {
\r
641 src.replace(/&hold_target=(\d+)/, hold_target);
\r
643 src += '&hold_target=' + hold_target;
\r
645 location.href = src;
\r
647 holdsDrawEditor({record:hold_target, type:hold_type});
\r
652 function _resultFindRec(id) {
\r
653 for( var i = 0; i != recordsCache.length; i++ ) {
\r
654 var rec = recordsCache[i];
\r
655 if( rec && rec.doc_id() == id )
\r
662 function resultBuildFormatIcons( row, rec, is_mr ) {
\r
664 var imgEl = $n(row, "result_mat_type");
\r
667 ress = getMarcData(rec.doc_id(),"998","d");
\r
668 if(setFormatIcon(imgEl, ress)) unHideMe(imgEl);
\r
672 function fetchGoogleBooksLink () {
\r
674 if (isbnList && googleBooksLink) {
\r
675 var scriptElement = document.createElement("script");
\r
676 scriptElement.setAttribute("id", "jsonScript");
\r
677 scriptElement.setAttribute("src",
\r
678 "https://books.google.com/books?bibkeys=" +
\r
679 escape(isbnList) + "&jscmd=viewapi&callback=unhideGoogleBooksLink");
\r
680 scriptElement.setAttribute("type", "text/javascript");
\r
681 // make the request to Google Book Search
\r
682 document.documentElement.firstChild.appendChild(scriptElement);
\r
686 function resultPageIsDone(pos) {
\r
688 return (recordsHandled == getDisplayCount()
\r
689 || recordsHandled + getOffset() == getHitCount());
\r
692 var resultCCHeaderApplied = false;
\r
694 /* -------------------------------------------------------------------- */
\r
695 /* dynamically add the copy count rows based on the org type 'countsrow'
\r
696 is the row into which we will add TD's to hold the copy counts
\r
697 This code generates copy count cells with an id of
\r
698 'copy_count_cell_<depth>_<pagePosition>' */
\r
699 function resultAddCopyCounts(rec, pagePosition) {
\r
701 var r = table.rows[pagePosition + 1];
\r
702 var countsrow = $n(r, config.names.result.counts_row );
\r
703 var ccell = $n(countsrow, config.names.result.count_cell);
\r
705 var nodes = orgNodeTrail(findOrgUnit(getLocation()));
\r
706 var node = nodes[0];
\r
707 var type = findOrgType(node.ou_type());
\r
708 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
\r
709 ccell.title = type.opac_label();
\r
710 //addCSSClass(ccell, config.css.result.cc_cell_even);
\r
712 var lastcell = ccell;
\r
713 var lastheadcell = null;
\r
716 var ccheadcell = null;
\r
717 if(!resultCCHeaderApplied && !getLasso()) {
\r
718 ccrow = $('result_thead_row');
\r
719 ccheadcell = ccrow.removeChild($n(ccrow, "result_thead_ccell"));
\r
720 var t = ccheadcell.cloneNode(true);
\r
722 t.appendChild(text(type.opac_label()));
\r
723 ccrow.appendChild(t);
\r
724 resultCCHeaderApplied = true;
\r
728 /* collect copy counts for a record using method 'methodName' */
\r
729 function resultCollectCopyCounts(rec, pagePosition, methodName) {
\r
730 if(rec == null || rec.doc_id() == null) return;
\r
732 var loc = getLasso();
\r
733 if (loc) loc = -loc;
\r
734 else loc= getLocation();
\r
736 var req = new Request(methodName, loc, rec.doc_id(), getForm() );
\r
737 req.request.userdata = [ rec, pagePosition ];
\r
738 req.callback(resultHandleCopyCounts);
\r
742 function resultHandleCopyCounts(r) {
\r
743 runEvt('result', 'copyCountsReceived', r.userdata[0], r.userdata[1], r.getResultObject());
\r
747 /* XXX Needs to understand Lasso copy counts... */
\r
748 /* display the collected copy counts */
\r
749 function resultDisplayCopyCounts(rec, pagePosition, copy_counts) {
\r
750 if(copy_counts == null || rec == null) return;
\r
751 var r = table.rows[pagePosition + 1];
\r
752 var cnt_avail = $n(r, "copy_count_avail");
\r
753 if(cnt_avail && copy_counts[0]) {
\r
754 /*if(copy_counts[0].available)*/ cnt_avail.innerHTML = copy_counts[0].available+' cop'+(copy_counts[0].available==1?'y':'ies')+' available';
\r
756 fieldmapper.standardRequest(['open-ils.circ','open-ils.circ.bre.holds.count'], {async:true, params:[rec.doc_id(), r.id], oncomplete: drawHoldsCount});
\r
757 $n(r, 'copy_holds2').innerHTML = ' on first copy returned of '+copy_counts[0].count+' cop'+(copy_counts[0].count==1?'y':'ies');
\r
762 function drawHoldsCount(r) {
\r
763 if(!r.params[1]) return;
\r
764 var row = $(r.params[1]);
\r
766 var span = $n(row, 'copy_holds');
\r
767 var resp = r.recv().content();
\r
768 span.innerHTML = resp+' hold'+(resp==1?'':'s')+' ';
\r
771 function showDetailedInfo(bool) {
\r
773 var tbls = dojo.query('.results_info_table',$('result_table'));
\r
775 tbls.forEach(function(node, index, arr){
\r
776 unHideMe($n(node,'results_pub_tr'));
\r
777 unHideMe($n(node,'results_isbn_tr'));
\r
778 unHideMe($n(node,'results_edition_tr'));
\r
779 unHideMe($n(node,'results_phys_desc_tr'));
\r
782 tbls.forEach(function(node, index, arr){
\r
783 hideMe($n(node,'results_pub_tr'));
\r
784 hideMe($n(node,'results_isbn_tr'));
\r
785 hideMe($n(node,'results_edition_tr'));
\r
786 hideMe($n(node,'results_phys_desc_tr'));
\r
791 function fetchChiliFreshReviews() {
\r
792 if (chilifresh && chilifresh != '(none)') {
\r
793 try { chili_init(); } catch(E) { dump(E + '\n'); }
\r
797 function postResultsCollect() {
\r
798 var it = getCacheValue('showHoldEditor');
\r
800 setCacheValue('showHoldEditor', null);
\r
801 holdsDrawEditor({record:it.record, type:it.type});
\r