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 G.ui.result.next_link.setAttribute("href", buildOPACLink(args));
199 addCSSClass(G.ui.result.next_link, config.css.result.nav_active);
201 args[PARAM_OFFSET] = getHitCount() - (getHitCount() % getDisplayCount());
202 G.ui.result.end_link.setAttribute("href", buildOPACLink(args));
203 addCSSClass(G.ui.result.end_link, config.css.result.nav_active);
209 args[PARAM_OFFSET] = o - getDisplayCount();
210 G.ui.result.prev_link.setAttribute( "href", buildOPACLink(args));
211 addCSSClass(G.ui.result.prev_link, config.css.result.nav_active);
213 args[PARAM_OFFSET] = 0;
214 G.ui.result.home_link.setAttribute( "href", buildOPACLink(args));
215 addCSSClass(G.ui.result.home_link, config.css.result.nav_active);
217 if(getDisplayCount() < getHitCount())
218 unHideMe($('start_end_links_span'));
221 try{searchTimer.stop()}catch(e){}
225 /* display the record info in the record display table 'pos' is the
226 zero based position the record should have in the display table */
227 function resultDisplayRecord(rec, pos, is_mr) {
229 if(rec == null) rec = new mvr(); /* so the page won't die if there was an error */
231 recordsCache.push(rec);
233 var r = table.rows[pos + 1];
236 var rank = parseFloat(ranks[pos + getOffset()]);
237 rank = ( rank / getTopRank() ) * 100;
238 rank = parseInt(rank) + "%";
239 var relspan = $n(r, "relevancy_span");
240 relspan.appendChild(text(rank));
241 unHideMe(relspan.parentNode);
244 var pic = $n(r, config.names.result.item_jacket);
245 pic.setAttribute("src", buildISBNSrc(cleanISBN(rec.isbn())));
247 var title_link = $n(r, config.names.result.item_title);
248 var author_link = $n(r, config.names.result.item_author);
251 var onlyrec = onlyrecord[ getOffset() + pos ];
255 args[PARAM_OFFSET] = 0;
256 args[PARAM_RID] = onlyrec;
257 args[PARAM_MRID] = rec.doc_id();
258 pic.parentNode.setAttribute("href", buildOPACLink(args));
259 title_link.setAttribute("href", buildOPACLink(args));
260 title_link.appendChild(text(normalize(truncate(rec.title(), 65))));
263 buildTitleLink(rec, title_link);
266 args[PARAM_OFFSET] = 0;
267 args[PARAM_MRID] = rec.doc_id();
268 pic.parentNode.setAttribute("href", buildOPACLink(args));
272 buildTitleDetailLink(rec, title_link);
275 args[PARAM_OFFSET] = 0;
276 args[PARAM_RID] = rec.doc_id();
277 pic.parentNode.setAttribute("href", buildOPACLink(args));
279 unHideMe($n(r,'place_hold_span'));
280 $n(r,'place_hold_link').setAttribute(
281 'href','javascript:holdsDrawWindow("'+rec.doc_id()+'");');
284 buildSearchLink(STYPE_AUTHOR, rec.author(), author_link);
288 if(!isNull(rec.edition())) {
289 unHideMe( $n(r, "result_table_extra_span"));
290 $n(r, "result_table_edition_span").appendChild( text( rec.edition()) );
292 if(!isNull(rec.pubdate())) {
293 unHideMe( $n(r, "result_table_extra_span"));
294 unHideMe($n(r, "result_table_pub_span"));
295 $n(r, "result_table_pub_span").appendChild( text( rec.pubdate() ));
297 if(!isNull(rec.publisher()) ) {
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.publisher() ));
304 resultBuildFormatIcons( r, rec );
308 runEvt("result", "recordDrawn", rec.doc_id(), title_link);
310 if(resultPageIsDone()) {
312 /* hide the 'now loading...' message */
314 hideMe(G.ui.common.loading);
316 runEvt('result', 'allRecordsReceived', recordsCache);
320 function _resultFindRec(id) {
321 for( var i = 0; i != recordsCache.length; i++ ) {
322 var rec = recordsCache[i];
323 if( rec && rec.doc_id() == id )
330 function resultBuildFormatIcons( row, rec ) {
332 var ress = rec.types_of_resource();
334 for( var i in ress ) {
337 var link = $n(row, res + "_link");
339 var img = link.getElementsByTagName("img")[0];
340 removeCSSClass( img, config.css.dim );
344 if( f == modsFormatToMARC(res) )
345 addCSSClass( img, "dim2_border");
350 args[PARAM_OFFSET] = 0;
351 args[PARAM_MRID] = rec.doc_id();
352 args[PARAM_FORM] = modsFormatToMARC(res);
354 link.setAttribute("href", buildOPACLink(args));
360 function resultPageIsDone(pos) {
361 return (recordsHandled == getDisplayCount()
362 || recordsHandled + getOffset() == getHitCount());
365 var resultCCHeaderApplied = false;
367 /* -------------------------------------------------------------------- */
368 /* dynamically add the copy count rows based on the org type 'countsrow'
369 is the row into which we will add TD's to hold the copy counts
370 This code generates copy count cells with an id of
371 'copy_count_cell_<depth>_<pagePosition>' */
372 function resultAddCopyCounts(rec, pagePosition) {
374 var r = table.rows[pagePosition + 1];
375 var countsrow = $n(r, config.names.result.counts_row );
376 var ccell = $n(countsrow, config.names.result.count_cell);
378 var nodes = orgNodeTrail(findOrgUnit(getLocation()));
380 var type = findOrgType(node.ou_type());
381 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
382 ccell.title = type.opac_label();
383 //addCSSClass(ccell, config.css.result.cc_cell_even);
385 var lastcell = ccell;
386 var lastheadcell = null;
389 var ccheadcell = null;
390 if(!resultCCHeaderApplied) {
391 ccrow = $('result_thead_row');
392 ccheadcell = ccrow.removeChild($n(ccrow, "result_thead_ccell"));
393 var t = ccheadcell.cloneNode(true);
395 t.appendChild(text(type.opac_label()));
396 ccrow.appendChild(t);
397 resultCCHeaderApplied = true;
403 var d = findOrgDepth(nodes[1]);
404 var d2 = findOrgDepth(nodes[nodes.length -1]);
406 for( var i = d; i <= d2 ; i++ ) {
408 ccell = ccell.cloneNode(true);
410 //if((i % 2)) removeCSSClass(ccell, "copy_count_cell_even");
411 //else addCSSClass(ccell, "copy_count_cell_even");
413 var node = nodes[x++];
414 var type = findOrgType(node.ou_type());
416 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
417 ccell.title = type.opac_label();
418 countsrow.insertBefore(ccell, lastcell);
422 var t = ccheadcell.cloneNode(true);
423 t.appendChild(text(type.opac_label()));
424 ccrow.insertBefore(t, lastheadcell);
430 unHideMe($("search_info_table"));
433 /* collect copy counts for a record using method 'methodName' */
434 function resultCollectCopyCounts(rec, pagePosition, methodName) {
435 if(rec == null || rec.doc_id() == null) return;
436 var req = new Request(methodName, getLocation(), rec.doc_id(), getForm() );
437 req.request.userdata = [ rec, pagePosition ];
438 req.callback(resultHandleCopyCounts);
442 function resultHandleCopyCounts(r) {
443 runEvt('result', 'copyCountsReceived', r.userdata[0], r.userdata[1], r.getResultObject());
447 /* display the collected copy counts */
448 function resultDisplayCopyCounts(rec, pagePosition, copy_counts) {
449 if(copy_counts == null || rec == null) return;
451 while(copy_counts[i] != null) {
452 var cell = $("copy_count_cell_" + i +"_" + pagePosition);
454 var span = cell.getElementsByTagName("div")[0];
456 cell.appendChild(text(copy_counts[i].available + " / " + copy_counts[i].count));