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, is_mr );
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, is_mr ) {
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");
349 args[PARAM_OFFSET] = 0;
350 args[PARAM_FORM] = modsFormatToMARC(res);
354 args[PARAM_MRID] = rec.doc_id();
357 args[PARAM_RID] = rec.doc_id();
360 link.setAttribute("href", buildOPACLink(args));
366 function resultPageIsDone(pos) {
367 return (recordsHandled == getDisplayCount()
368 || recordsHandled + getOffset() == getHitCount());
371 var resultCCHeaderApplied = false;
373 /* -------------------------------------------------------------------- */
374 /* dynamically add the copy count rows based on the org type 'countsrow'
375 is the row into which we will add TD's to hold the copy counts
376 This code generates copy count cells with an id of
377 'copy_count_cell_<depth>_<pagePosition>' */
378 function resultAddCopyCounts(rec, pagePosition) {
380 var r = table.rows[pagePosition + 1];
381 var countsrow = $n(r, config.names.result.counts_row );
382 var ccell = $n(countsrow, config.names.result.count_cell);
384 var nodes = orgNodeTrail(findOrgUnit(getLocation()));
386 var type = findOrgType(node.ou_type());
387 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
388 ccell.title = type.opac_label();
389 //addCSSClass(ccell, config.css.result.cc_cell_even);
391 var lastcell = ccell;
392 var lastheadcell = null;
395 var ccheadcell = null;
396 if(!resultCCHeaderApplied) {
397 ccrow = $('result_thead_row');
398 ccheadcell = ccrow.removeChild($n(ccrow, "result_thead_ccell"));
399 var t = ccheadcell.cloneNode(true);
401 t.appendChild(text(type.opac_label()));
402 ccrow.appendChild(t);
403 resultCCHeaderApplied = true;
409 var d = findOrgDepth(nodes[1]);
410 var d2 = findOrgDepth(nodes[nodes.length -1]);
412 for( var i = d; i <= d2 ; i++ ) {
414 ccell = ccell.cloneNode(true);
416 //if((i % 2)) removeCSSClass(ccell, "copy_count_cell_even");
417 //else addCSSClass(ccell, "copy_count_cell_even");
419 var node = nodes[x++];
420 var type = findOrgType(node.ou_type());
422 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
423 ccell.title = type.opac_label();
424 countsrow.insertBefore(ccell, lastcell);
428 var t = ccheadcell.cloneNode(true);
429 t.appendChild(text(type.opac_label()));
430 ccrow.insertBefore(t, lastheadcell);
436 unHideMe($("search_info_table"));
439 /* collect copy counts for a record using method 'methodName' */
440 function resultCollectCopyCounts(rec, pagePosition, methodName) {
441 if(rec == null || rec.doc_id() == null) return;
442 var req = new Request(methodName, getLocation(), rec.doc_id(), getForm() );
443 req.request.userdata = [ rec, pagePosition ];
444 req.callback(resultHandleCopyCounts);
448 function resultHandleCopyCounts(r) {
449 runEvt('result', 'copyCountsReceived', r.userdata[0], r.userdata[1], r.getResultObject());
453 /* display the collected copy counts */
454 function resultDisplayCopyCounts(rec, pagePosition, copy_counts) {
455 if(copy_counts == null || rec == null) return;
457 while(copy_counts[i] != null) {
458 var cell = $("copy_count_cell_" + i +"_" + pagePosition);
460 var span = cell.getElementsByTagName("div")[0];
462 cell.appendChild(text(copy_counts[i].available + " / " + copy_counts[i].count));