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);
258 var onlyrec = onlyrecord[ getOffset() + pos ];
262 args[PARAM_OFFSET] = 0;
263 args[PARAM_RID] = onlyrec;
264 args[PARAM_MRID] = rec.doc_id();
265 pic.parentNode.setAttribute("href", buildOPACLink(args));
266 title_link.setAttribute("href", buildOPACLink(args));
267 title_link.appendChild(text(normalize(truncate(rec.title(), 65))));
270 buildTitleLink(rec, title_link);
273 args[PARAM_OFFSET] = 0;
274 args[PARAM_MRID] = rec.doc_id();
275 pic.parentNode.setAttribute("href", buildOPACLink(args));
279 buildTitleDetailLink(rec, title_link);
282 args[PARAM_OFFSET] = 0;
283 args[PARAM_RID] = rec.doc_id();
284 pic.parentNode.setAttribute("href", buildOPACLink(args));
286 unHideMe($n(r,'place_hold_span'));
287 $n(r,'place_hold_link').setAttribute(
288 'href','javascript:holdsDrawWindow("'+rec.doc_id()+'");');
291 buildSearchLink(STYPE_AUTHOR, rec.author(), author_link);
295 if(!isNull(rec.edition())) {
296 unHideMe( $n(r, "result_table_extra_span"));
297 $n(r, "result_table_edition_span").appendChild( text( rec.edition()) );
299 if(!isNull(rec.pubdate())) {
300 unHideMe( $n(r, "result_table_extra_span"));
301 unHideMe($n(r, "result_table_pub_span"));
302 $n(r, "result_table_pub_span").appendChild( text( rec.pubdate() ));
304 if(!isNull(rec.publisher()) ) {
305 unHideMe( $n(r, "result_table_extra_span"));
306 unHideMe($n(r, "result_table_pub_span"));
307 $n(r, "result_table_pub_span").appendChild( text( " " + rec.publisher() ));
311 resultBuildFormatIcons( r, rec, is_mr );
315 runEvt("result", "recordDrawn", rec.doc_id(), title_link);
317 if(resultPageIsDone()) {
319 /* hide the 'now loading...' message */
321 hideMe(G.ui.common.loading);
323 runEvt('result', 'allRecordsReceived', recordsCache);
327 function _resultFindRec(id) {
328 for( var i = 0; i != recordsCache.length; i++ ) {
329 var rec = recordsCache[i];
330 if( rec && rec.doc_id() == id )
337 function resultBuildFormatIcons( row, rec, is_mr ) {
339 var ress = rec.types_of_resource();
341 for( var i in ress ) {
344 var link = $n(row, res + "_link");
346 var img = link.getElementsByTagName("img")[0];
347 removeCSSClass( img, config.css.dim );
351 if( f == modsFormatToMARC(res) )
352 addCSSClass( img, "dim2_border");
356 args[PARAM_OFFSET] = 0;
357 args[PARAM_FORM] = modsFormatToMARC(res);
361 args[PARAM_MRID] = rec.doc_id();
364 args[PARAM_RID] = rec.doc_id();
367 link.setAttribute("href", buildOPACLink(args));
373 function resultPageIsDone(pos) {
374 return (recordsHandled == getDisplayCount()
375 || recordsHandled + getOffset() == getHitCount());
378 var resultCCHeaderApplied = false;
380 /* -------------------------------------------------------------------- */
381 /* dynamically add the copy count rows based on the org type 'countsrow'
382 is the row into which we will add TD's to hold the copy counts
383 This code generates copy count cells with an id of
384 'copy_count_cell_<depth>_<pagePosition>' */
385 function resultAddCopyCounts(rec, pagePosition) {
387 var r = table.rows[pagePosition + 1];
388 var countsrow = $n(r, config.names.result.counts_row );
389 var ccell = $n(countsrow, config.names.result.count_cell);
391 var nodes = orgNodeTrail(findOrgUnit(getLocation()));
393 var type = findOrgType(node.ou_type());
394 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
395 ccell.title = type.opac_label();
396 //addCSSClass(ccell, config.css.result.cc_cell_even);
398 var lastcell = ccell;
399 var lastheadcell = null;
402 var ccheadcell = null;
403 if(!resultCCHeaderApplied) {
404 ccrow = $('result_thead_row');
405 ccheadcell = ccrow.removeChild($n(ccrow, "result_thead_ccell"));
406 var t = ccheadcell.cloneNode(true);
408 t.appendChild(text(type.opac_label()));
409 ccrow.appendChild(t);
410 resultCCHeaderApplied = true;
416 var d = findOrgDepth(nodes[1]);
417 var d2 = findOrgDepth(nodes[nodes.length -1]);
419 for( var i = d; i <= d2 ; i++ ) {
421 ccell = ccell.cloneNode(true);
423 //if((i % 2)) removeCSSClass(ccell, "copy_count_cell_even");
424 //else addCSSClass(ccell, "copy_count_cell_even");
426 var node = nodes[x++];
427 var type = findOrgType(node.ou_type());
429 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
430 ccell.title = type.opac_label();
431 countsrow.insertBefore(ccell, lastcell);
435 var t = ccheadcell.cloneNode(true);
436 t.appendChild(text(type.opac_label()));
437 ccrow.insertBefore(t, lastheadcell);
443 unHideMe($("search_info_table"));
446 /* collect copy counts for a record using method 'methodName' */
447 function resultCollectCopyCounts(rec, pagePosition, methodName) {
448 if(rec == null || rec.doc_id() == null) return;
449 var req = new Request(methodName, getLocation(), rec.doc_id(), getForm() );
450 req.request.userdata = [ rec, pagePosition ];
451 req.callback(resultHandleCopyCounts);
455 function resultHandleCopyCounts(r) {
456 runEvt('result', 'copyCountsReceived', r.userdata[0], r.userdata[1], r.getResultObject());
460 /* display the collected copy counts */
461 function resultDisplayCopyCounts(rec, pagePosition, copy_counts) {
462 if(copy_counts == null || rec == null) return;
464 while(copy_counts[i] != null) {
465 var cell = $("copy_count_cell_" + i +"_" + pagePosition);
467 var span = cell.getElementsByTagName("div")[0];
469 cell.appendChild(text(copy_counts[i].available + " / " + copy_counts[i].count));