2 var recordsHandled = 0;
6 /* set up the event handlers */
7 G.evt.result.hitCountReceived.push(resultSetHitInfo);
8 G.evt.result.recordReceived.push(resultDisplayRecord, resultAddCopyCounts);
9 G.evt.result.copyCountsReceived.push(resultDisplayCopyCounts);
10 G.evt.result.allRecordsReceived.push(resultBuildCaches, resultDrawSubjects, resultDrawAuthors, resultDrawSeries);
11 //G.evt.result.allRecordsReceived.push(resultBuildCaches );
13 attachEvt('result','lowHits',resultLowHits);
14 attachEvt('result','zeroHits',resultZeroHits);
16 attachEvt( "common", "locationUpdated", resultSBSubmit );
17 function resultSBSubmit(){searchBarSubmit();}
19 /* do this after we have ID's so the rank for mr pages will be correct */
20 attachEvt("result", "preCollectRecords", resultPaginate);
22 /* returns the last 'index' postion ocurring in this page */
23 function resultFinalPageIndex() {
24 if(getHitCount() < (getOffset() + getDisplayCount()))
25 return getHitCount() - 1;
26 return getOffset() + getDisplayCount() - 1;
29 /* set the search result info, number of hits, which results we're
30 displaying, links to the next/prev pages, etc. */
31 function resultSetHitInfo() {
33 try{searchTimer.stop()}catch(e){}
35 if( findCurrentPage() == MRESULT ) {
36 if(getHitCount() <= lowHitCount && getTerm())
37 runEvt('result', 'lowHits');
38 if(getHitCount() == 0) {
39 runEvt('result', 'zeroHits');
45 if( getDisplayCount() > (getHitCount() - getOffset())) c = getHitCount();
46 else c = getDisplayCount() + getOffset();
48 var pages = getHitCount() / getDisplayCount();
49 if(pages % 1) pages = parseInt(pages) + 1;
51 G.ui.result.current_page.appendChild(text( (getOffset()/getDisplayCount()) + 1));
52 G.ui.result.num_pages.appendChild(text(pages + ")")); /* the ) is dumb */
54 G.ui.result.offset_start.appendChild(text(getOffset() + 1));
55 G.ui.result.offset_end.appendChild(text(c));
56 G.ui.result.result_count.appendChild(text(getHitCount()));
57 unHideMe(G.ui.result.info);
60 function resultLowHits() {
62 unHideMe($('result_low_hits'));
64 unHideMe($('result_low_hits_msg'));
66 var sreq = new Request(CHECK_SPELL, getTerm());
67 sreq.callback(resultSuggestSpelling);
70 var words = getTerm().split(' ');
72 while( word = words.shift() ) {
73 var areq = new Request(FETCH_CROSSREF, getStype(), getTerm() );
74 areq.callback(resultLowHitXRef);
78 if( !(getForm() == null || getForm() == 'all' || getForm == "") ) {
80 a[PARAM_FORM] = "all";
81 $('low_hits_remove_format_link').setAttribute('href',buildOPACLink(a));
82 unHideMe($('low_hits_remove_format'));
85 resultSuggestSearchClass();
89 var lowHitsXRefLinkParent;
90 function resultLowHitXRef(r) {
92 lowHitsXRefLinkParent = $('low_hits_xref_link').parentNode;
93 lowHitsXRefLink = lowHitsXRefLinkParent.removeChild($('low_hits_xref_link'));
95 var res = r.getResultObject();
98 if(arr && arr.length > 0) {
99 unHideMe($('low_hits_cross_ref'));
102 while( word = arr.shift() ) {
105 a[PARAM_TERM] = word;
106 var template = lowHitsXRefLink.cloneNode(true);
107 template.setAttribute('href',buildOPACLink(a));
108 template.appendChild(text(word));
109 lowHitsXRefLinkParent.appendChild(template);
110 lowHitsXRefLinkParent.appendChild(text(' '));
115 function resultZeroHits() {
117 unHideMe($('result_low_hits'));
118 unHideMe($('result_zero_hits_msg'));
119 if(getTerm()) resultExpandSearch(); /* advanced search */
122 function resultExpandSearch() {
123 var top = findOrgDepth(globalOrgTree);
124 if(getDepth() == top) return;
125 unHideMe($('low_hits_expand_range'));
126 var par = $('low_hits_expand_link').parentNode;
127 var template = par.removeChild($('low_hits_expand_link'));
129 var bottom = getDepth();
130 while( top < bottom ) {
132 a[PARAM_DEPTH] = top;
133 var temp = template.cloneNode(true);
134 temp.appendChild(text(findOrgTypeFromDepth(top).opac_label()))
135 temp.setAttribute('href',buildOPACLink(a));
136 par.appendChild(temp);
141 function resultSuggestSearchClass() {
142 var stype = getStype();
143 if(stype == STYPE_KEYWORD) return;
145 unHideMe($('low_hits_search_type'));
146 if(stype != STYPE_TITLE) {
147 ref = $('low_hits_title_search');
149 a[PARAM_STYPE] = STYPE_TITLE;
150 ref.setAttribute('href',buildOPACLink(a));
152 if(stype != STYPE_AUTHOR) {
153 ref = $('low_hits_author_search');
155 a[PARAM_STYPE] = STYPE_AUTHOR;
156 ref.setAttribute('href',buildOPACLink(a));
158 if(stype != STYPE_SUBJECT) {
159 ref = $('low_hits_subject_search');
161 a[PARAM_STYPE] = STYPE_SUBJECT;
162 ref.setAttribute('href',buildOPACLink(a));
164 if(stype != STYPE_KEYWORD) {
165 ref = $('low_hits_keyword_search');
167 a[PARAM_STYPE] = STYPE_KEYWORD;
168 ref.setAttribute('href',buildOPACLink(a));
170 if(stype != STYPE_SERIES) {
171 ref = $('low_hits_series_search');
173 a[PARAM_STYPE] = STYPE_SERIES;
174 ref.setAttribute('href',buildOPACLink(a));
178 function resultSuggestSpelling(r) {
179 var res = r.getResultObject();
181 unHideMe($('did_you_mean'));
183 arg[PARAM_TERM] = res;
184 $('spell_check_link').setAttribute(
185 'href', buildOPACLink(arg) );
186 $('spell_check_link').appendChild(text(res));
191 function resultPaginate() {
194 if( !((o + getDisplayCount()) >= getHitCount()) ) {
197 args[PARAM_OFFSET] = o + getDisplayCount();
198 args[PARAM_SORT] = SORT;
199 args[PARAM_SORT_DIR] = SORT_DIR;
200 args[PARAM_RLIST] = new CGI().param(PARAM_RLIST);
202 G.ui.result.next_link.setAttribute("href", buildOPACLink(args));
203 addCSSClass(G.ui.result.next_link, config.css.result.nav_active);
205 args[PARAM_OFFSET] = getHitCount() - (getHitCount() % getDisplayCount());
206 G.ui.result.end_link.setAttribute("href", buildOPACLink(args));
207 addCSSClass(G.ui.result.end_link, config.css.result.nav_active);
213 args[PARAM_SORT] = SORT;
214 args[PARAM_SORT_DIR] = SORT_DIR;
215 args[PARAM_RLIST] = new CGI().param(PARAM_RLIST);
217 args[PARAM_OFFSET] = o - getDisplayCount();
218 G.ui.result.prev_link.setAttribute( "href", buildOPACLink(args));
219 addCSSClass(G.ui.result.prev_link, config.css.result.nav_active);
221 args[PARAM_OFFSET] = 0;
222 G.ui.result.home_link.setAttribute( "href", buildOPACLink(args));
223 addCSSClass(G.ui.result.home_link, config.css.result.nav_active);
225 if(getDisplayCount() < getHitCount())
226 unHideMe($('start_end_links_span'));
229 try{searchTimer.stop()}catch(e){}
233 /* display the record info in the record display table 'pos' is the
234 zero based position the record should have in the display table */
235 function resultDisplayRecord(rec, pos, is_mr) {
237 if(rec == null) rec = new mvr(); /* so the page won't die if there was an error */
239 recordsCache.push(rec);
241 var r = table.rows[pos + 1];
244 var rank = parseFloat(ranks[pos + getOffset()]);
245 rank = parseInt( rank * 100 );
246 var relspan = $n(r, "relevancy_span");
247 relspan.appendChild(text(rank));
248 unHideMe(relspan.parentNode);
251 var pic = $n(r, config.names.result.item_jacket);
252 pic.setAttribute("src", buildISBNSrc(cleanISBN(rec.isbn())));
254 var title_link = $n(r, config.names.result.item_title);
255 var author_link = $n(r, config.names.result.item_author);
260 var onlyrec = onlyrecord[ getOffset() + pos ];
262 var unapi_span = $n(r,'unapi');
263 unapi_span.appendChild(
265 normalize( rec.title() ) +
266 ' (tag:open-ils.org,' +
267 d.getFullYear() + '-' +
268 (1 + d.getMonth()) + '-' +
270 ':biblio-record_entry/' + onlyrec + ')'
273 unapi_span.setAttribute(
275 'tag:open-ils.org,' +
276 d.getFullYear() + '-' +
277 (1 + d.getMonth()) + '-' +
279 ':biblio-record_entry/' + onlyrec
284 args[PARAM_OFFSET] = 0;
285 args[PARAM_RID] = onlyrec;
286 args[PARAM_MRID] = rec.doc_id();
287 pic.parentNode.setAttribute("href", buildOPACLink(args));
288 title_link.setAttribute("href", buildOPACLink(args));
289 title_link.appendChild(text(normalize(truncate(rec.title(), 65))));
292 var unapi_span = $n(r,'unapi');
293 unapi_span.appendChild(
295 normalize( rec.title() ) +
296 ' (tag:open-ils.org,' +
297 d.getFullYear() + '-' +
298 (1 + d.getMonth()) + '-' +
300 ':metabib-metarecord/' + rec.doc_id() + ')'
303 unapi_span.setAttribute(
305 'tag:open-ils.org,' +
306 d.getFullYear() + '-' +
307 (1 + d.getMonth()) + '-' +
309 ':biblio-record_entry/' + rec.doc_id()
312 buildTitleLink(rec, title_link);
315 args[PARAM_OFFSET] = 0;
316 args[PARAM_MRID] = rec.doc_id();
317 pic.parentNode.setAttribute("href", buildOPACLink(args));
321 var unapi_span = $n(r,'unapi');
322 unapi_span.appendChild(
324 normalize( rec.title() ) +
325 ' (tag:open-ils.org,' +
326 d.getFullYear() + '-' +
327 (1 + d.getMonth()) + '-' +
329 ':biblio-record_entry/' + rec.doc_id() + ')'
332 unapi_span.setAttribute(
334 'tag:open-ils.org,' +
335 d.getFullYear() + '-' +
336 (1 + d.getMonth()) + '-' +
338 ':biblio-record_entry/' + rec.doc_id()
341 buildTitleDetailLink(rec, title_link);
344 args[PARAM_OFFSET] = 0;
345 args[PARAM_RID] = rec.doc_id();
346 pic.parentNode.setAttribute("href", buildOPACLink(args));
348 unHideMe($n(r,'place_hold_span'));
349 $n(r,'place_hold_link').setAttribute(
350 'href','javascript:holdsDrawWindow("'+rec.doc_id()+'");');
353 buildSearchLink(STYPE_AUTHOR, rec.author(), author_link);
357 if(!isNull(rec.edition())) {
358 unHideMe( $n(r, "result_table_extra_span"));
359 $n(r, "result_table_edition_span").appendChild( text( rec.edition()) );
361 if(!isNull(rec.pubdate())) {
362 unHideMe( $n(r, "result_table_extra_span"));
363 unHideMe($n(r, "result_table_pub_span"));
364 $n(r, "result_table_pub_span").appendChild( text( rec.pubdate() ));
366 if(!isNull(rec.publisher()) ) {
367 unHideMe( $n(r, "result_table_extra_span"));
368 unHideMe($n(r, "result_table_pub_span"));
369 $n(r, "result_table_pub_span").appendChild( text( " " + rec.publisher() ));
373 resultBuildFormatIcons( r, rec, is_mr );
377 runEvt("result", "recordDrawn", rec.doc_id(), title_link);
380 if(resultPageIsDone()) {
381 runEvt('result', 'allRecordsReceived', recordsCache);
386 function _resultFindRec(id) {
387 for( var i = 0; i != recordsCache.length; i++ ) {
388 var rec = recordsCache[i];
389 if( rec && rec.doc_id() == id )
396 function resultBuildFormatIcons( row, rec, is_mr ) {
398 var ress = rec.types_of_resource();
400 for( var i in ress ) {
403 var link = $n(row, res + "_link");
405 var img = link.getElementsByTagName("img")[0];
406 removeCSSClass( img, config.css.dim );
410 if( f == modsFormatToMARC(res) )
411 addCSSClass( img, "dim2_border");
415 args[PARAM_OFFSET] = 0;
416 args[PARAM_FORM] = modsFormatToMARC(res);
420 args[PARAM_MRID] = rec.doc_id();
423 args[PARAM_RID] = rec.doc_id();
426 link.setAttribute("href", buildOPACLink(args));
432 function resultPageIsDone(pos) {
433 return (recordsHandled == getDisplayCount()
434 || recordsHandled + getOffset() == getHitCount());
437 var resultCCHeaderApplied = false;
439 /* -------------------------------------------------------------------- */
440 /* dynamically add the copy count rows based on the org type 'countsrow'
441 is the row into which we will add TD's to hold the copy counts
442 This code generates copy count cells with an id of
443 'copy_count_cell_<depth>_<pagePosition>' */
444 function resultAddCopyCounts(rec, pagePosition) {
446 var r = table.rows[pagePosition + 1];
447 var countsrow = $n(r, config.names.result.counts_row );
448 var ccell = $n(countsrow, config.names.result.count_cell);
450 var nodes = orgNodeTrail(findOrgUnit(getLocation()));
452 var type = findOrgType(node.ou_type());
453 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
454 ccell.title = type.opac_label();
455 //addCSSClass(ccell, config.css.result.cc_cell_even);
457 var lastcell = ccell;
458 var lastheadcell = null;
461 var ccheadcell = null;
462 if(!resultCCHeaderApplied) {
463 ccrow = $('result_thead_row');
464 ccheadcell = ccrow.removeChild($n(ccrow, "result_thead_ccell"));
465 var t = ccheadcell.cloneNode(true);
467 t.appendChild(text(type.opac_label()));
468 ccrow.appendChild(t);
469 resultCCHeaderApplied = true;
475 var d = findOrgDepth(nodes[1]);
476 var d2 = findOrgDepth(nodes[nodes.length -1]);
478 for( var i = d; i <= d2 ; i++ ) {
480 ccell = ccell.cloneNode(true);
482 //if((i % 2)) removeCSSClass(ccell, "copy_count_cell_even");
483 //else addCSSClass(ccell, "copy_count_cell_even");
485 var node = nodes[x++];
486 var type = findOrgType(node.ou_type());
488 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
489 ccell.title = type.opac_label();
490 countsrow.insertBefore(ccell, lastcell);
494 var t = ccheadcell.cloneNode(true);
495 t.appendChild(text(type.opac_label()));
496 ccrow.insertBefore(t, lastheadcell);
502 unHideMe($("search_info_table"));
505 /* collect copy counts for a record using method 'methodName' */
506 function resultCollectCopyCounts(rec, pagePosition, methodName) {
507 if(rec == null || rec.doc_id() == null) return;
508 var req = new Request(methodName, getLocation(), rec.doc_id(), getForm() );
509 req.request.userdata = [ rec, pagePosition ];
510 req.callback(resultHandleCopyCounts);
514 function resultHandleCopyCounts(r) {
515 runEvt('result', 'copyCountsReceived', r.userdata[0], r.userdata[1], r.getResultObject());
519 /* display the collected copy counts */
520 function resultDisplayCopyCounts(rec, pagePosition, copy_counts) {
521 if(copy_counts == null || rec == null) return;
523 while(copy_counts[i] != null) {
524 var cell = $("copy_count_cell_" + i +"_" + pagePosition);
526 var span = cell.getElementsByTagName("div")[0];
528 cell.appendChild(text(copy_counts[i].available + " / " + copy_counts[i].count));