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;
201 G.ui.result.next_link.setAttribute("href", buildOPACLink(args));
202 addCSSClass(G.ui.result.next_link, config.css.result.nav_active);
204 args[PARAM_OFFSET] = getHitCount() - (getHitCount() % getDisplayCount());
205 G.ui.result.end_link.setAttribute("href", buildOPACLink(args));
206 addCSSClass(G.ui.result.end_link, config.css.result.nav_active);
212 args[PARAM_SORT] = SORT;
213 args[PARAM_SORT_DIR] = SORT_DIR;
215 args[PARAM_OFFSET] = o - getDisplayCount();
216 G.ui.result.prev_link.setAttribute( "href", buildOPACLink(args));
217 addCSSClass(G.ui.result.prev_link, config.css.result.nav_active);
219 args[PARAM_OFFSET] = 0;
220 G.ui.result.home_link.setAttribute( "href", buildOPACLink(args));
221 addCSSClass(G.ui.result.home_link, config.css.result.nav_active);
223 if(getDisplayCount() < getHitCount())
224 unHideMe($('start_end_links_span'));
227 try{searchTimer.stop()}catch(e){}
231 /* display the record info in the record display table 'pos' is the
232 zero based position the record should have in the display table */
233 function resultDisplayRecord(rec, pos, is_mr) {
235 if(rec == null) rec = new mvr(); /* so the page won't die if there was an error */
237 recordsCache.push(rec);
239 var r = table.rows[pos + 1];
242 var rank = parseFloat(ranks[pos + getOffset()]);
243 rank = parseInt( rank * 100 );
244 var relspan = $n(r, "relevancy_span");
245 relspan.appendChild(text(rank));
246 unHideMe(relspan.parentNode);
249 var pic = $n(r, config.names.result.item_jacket);
250 pic.setAttribute("src", buildISBNSrc(cleanISBN(rec.isbn())));
252 var title_link = $n(r, config.names.result.item_title);
253 var author_link = $n(r, config.names.result.item_author);
256 var onlyrec = onlyrecord[ getOffset() + pos ];
260 args[PARAM_OFFSET] = 0;
261 args[PARAM_RID] = onlyrec;
262 args[PARAM_MRID] = rec.doc_id();
263 pic.parentNode.setAttribute("href", buildOPACLink(args));
264 title_link.setAttribute("href", buildOPACLink(args));
265 title_link.appendChild(text(normalize(truncate(rec.title(), 65))));
268 buildTitleLink(rec, title_link);
271 args[PARAM_OFFSET] = 0;
272 args[PARAM_MRID] = rec.doc_id();
273 pic.parentNode.setAttribute("href", buildOPACLink(args));
277 buildTitleDetailLink(rec, title_link);
280 args[PARAM_OFFSET] = 0;
281 args[PARAM_RID] = rec.doc_id();
282 pic.parentNode.setAttribute("href", buildOPACLink(args));
284 unHideMe($n(r,'place_hold_span'));
285 $n(r,'place_hold_link').setAttribute(
286 'href','javascript:holdsDrawWindow("'+rec.doc_id()+'");');
289 buildSearchLink(STYPE_AUTHOR, rec.author(), author_link);
293 if(!isNull(rec.edition())) {
294 unHideMe( $n(r, "result_table_extra_span"));
295 $n(r, "result_table_edition_span").appendChild( text( rec.edition()) );
297 if(!isNull(rec.pubdate())) {
298 unHideMe( $n(r, "result_table_extra_span"));
299 unHideMe($n(r, "result_table_pub_span"));
300 $n(r, "result_table_pub_span").appendChild( text( rec.pubdate() ));
302 if(!isNull(rec.publisher()) ) {
303 unHideMe( $n(r, "result_table_extra_span"));
304 unHideMe($n(r, "result_table_pub_span"));
305 $n(r, "result_table_pub_span").appendChild( text( " " + rec.publisher() ));
309 resultBuildFormatIcons( r, rec, is_mr );
313 runEvt("result", "recordDrawn", rec.doc_id(), title_link);
315 if(resultPageIsDone()) {
317 /* hide the 'now loading...' message */
319 hideMe(G.ui.common.loading);
321 runEvt('result', 'allRecordsReceived', recordsCache);
325 function _resultFindRec(id) {
326 for( var i = 0; i != recordsCache.length; i++ ) {
327 var rec = recordsCache[i];
328 if( rec && rec.doc_id() == id )
335 function resultBuildFormatIcons( row, rec, is_mr ) {
337 var ress = rec.types_of_resource();
339 for( var i in ress ) {
342 var link = $n(row, res + "_link");
344 var img = link.getElementsByTagName("img")[0];
345 removeCSSClass( img, config.css.dim );
349 if( f == modsFormatToMARC(res) )
350 addCSSClass( img, "dim2_border");
354 args[PARAM_OFFSET] = 0;
355 args[PARAM_FORM] = modsFormatToMARC(res);
359 args[PARAM_MRID] = rec.doc_id();
362 args[PARAM_RID] = rec.doc_id();
365 link.setAttribute("href", buildOPACLink(args));
371 function resultPageIsDone(pos) {
372 return (recordsHandled == getDisplayCount()
373 || recordsHandled + getOffset() == getHitCount());
376 var resultCCHeaderApplied = false;
378 /* -------------------------------------------------------------------- */
379 /* dynamically add the copy count rows based on the org type 'countsrow'
380 is the row into which we will add TD's to hold the copy counts
381 This code generates copy count cells with an id of
382 'copy_count_cell_<depth>_<pagePosition>' */
383 function resultAddCopyCounts(rec, pagePosition) {
385 var r = table.rows[pagePosition + 1];
386 var countsrow = $n(r, config.names.result.counts_row );
387 var ccell = $n(countsrow, config.names.result.count_cell);
389 var nodes = orgNodeTrail(findOrgUnit(getLocation()));
391 var type = findOrgType(node.ou_type());
392 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
393 ccell.title = type.opac_label();
394 //addCSSClass(ccell, config.css.result.cc_cell_even);
396 var lastcell = ccell;
397 var lastheadcell = null;
400 var ccheadcell = null;
401 if(!resultCCHeaderApplied) {
402 ccrow = $('result_thead_row');
403 ccheadcell = ccrow.removeChild($n(ccrow, "result_thead_ccell"));
404 var t = ccheadcell.cloneNode(true);
406 t.appendChild(text(type.opac_label()));
407 ccrow.appendChild(t);
408 resultCCHeaderApplied = true;
414 var d = findOrgDepth(nodes[1]);
415 var d2 = findOrgDepth(nodes[nodes.length -1]);
417 for( var i = d; i <= d2 ; i++ ) {
419 ccell = ccell.cloneNode(true);
421 //if((i % 2)) removeCSSClass(ccell, "copy_count_cell_even");
422 //else addCSSClass(ccell, "copy_count_cell_even");
424 var node = nodes[x++];
425 var type = findOrgType(node.ou_type());
427 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
428 ccell.title = type.opac_label();
429 countsrow.insertBefore(ccell, lastcell);
433 var t = ccheadcell.cloneNode(true);
434 t.appendChild(text(type.opac_label()));
435 ccrow.insertBefore(t, lastheadcell);
441 unHideMe($("search_info_table"));
444 /* collect copy counts for a record using method 'methodName' */
445 function resultCollectCopyCounts(rec, pagePosition, methodName) {
446 if(rec == null || rec.doc_id() == null) return;
447 var req = new Request(methodName, getLocation(), rec.doc_id(), getForm() );
448 req.request.userdata = [ rec, pagePosition ];
449 req.callback(resultHandleCopyCounts);
453 function resultHandleCopyCounts(r) {
454 runEvt('result', 'copyCountsReceived', r.userdata[0], r.userdata[1], r.getResultObject());
458 /* display the collected copy counts */
459 function resultDisplayCopyCounts(rec, pagePosition, copy_counts) {
460 if(copy_counts == null || rec == null) return;
462 while(copy_counts[i] != null) {
463 var cell = $("copy_count_cell_" + i +"_" + pagePosition);
465 var span = cell.getElementsByTagName("div")[0];
467 cell.appendChild(text(copy_counts[i].available + " / " + copy_counts[i].count));