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() {
32 if( findCurrentPage() == MRESULT ) {
33 if(getHitCount() <= lowHitCount)
34 runEvt('result', 'lowHits');
35 if(getHitCount() == 0) {
36 runEvt('result', 'zeroHits');
42 if( getDisplayCount() > (getHitCount() - getOffset())) c = getHitCount();
43 else c = getDisplayCount() + getOffset();
45 var pages = getHitCount() / getDisplayCount();
46 if(pages % 1) pages = parseInt(pages) + 1;
48 G.ui.result.current_page.appendChild(text( (getOffset()/getDisplayCount()) + 1));
49 G.ui.result.num_pages.appendChild(text(pages + ")")); /* the ) is dumb */
51 G.ui.result.offset_start.appendChild(text(getOffset() + 1));
52 G.ui.result.offset_end.appendChild(text(c));
53 G.ui.result.result_count.appendChild(text(getHitCount()));
54 unHideMe(G.ui.result.info);
57 function resultLowHits() {
58 try{searchTimer.stop()}catch(e){}
60 unHideMe($('result_low_hits'));
62 unHideMe($('result_low_hits_msg'));
64 var sreq = new Request(CHECK_SPELL, getTerm());
65 sreq.callback(resultSuggestSpelling);
68 var words = getTerm().split(' ');
70 while( word = words.shift() ) {
71 var areq = new Request(FETCH_CROSSREF, getStype(), getTerm() );
72 areq.callback(resultLowHitXRef);
76 if( !(getForm() == null || getForm() == 'all' || getForm == "") ) {
78 a[PARAM_FORM] = "all";
79 $('low_hits_remove_format_link').setAttribute('href',buildOPACLink(a));
80 unHideMe($('low_hits_remove_format'));
83 resultSuggestSearchClass();
87 var lowHitsXRefLinkParent;
88 function resultLowHitXRef(r) {
90 lowHitsXRefLinkParent = $('low_hits_xref_link').parentNode;
91 lowHitsXRefLink = lowHitsXRefLinkParent.removeChild($('low_hits_xref_link'));
93 var res = r.getResultObject();
96 if(arr && arr.length > 0) {
97 unHideMe($('low_hits_cross_ref'));
100 while( word = arr.shift() ) {
103 a[PARAM_TERM] = word;
104 var template = lowHitsXRefLink.cloneNode(true);
105 template.setAttribute('href',buildOPACLink(a));
106 template.appendChild(text(word));
107 lowHitsXRefLinkParent.appendChild(template);
108 lowHitsXRefLinkParent.appendChild(text(' '));
113 function resultZeroHits() {
114 unHideMe($('result_zero_hits_msg'));
115 resultExpandSearch();
118 function resultExpandSearch() {
119 var top = findOrgDepth(globalOrgTree);
120 if(getDepth() == top) return;
121 unHideMe($('low_hits_expand_range'));
122 var par = $('low_hits_expand_link').parentNode;
123 var template = par.removeChild($('low_hits_expand_link'));
125 var bottom = getDepth();
126 while( top < bottom ) {
128 a[PARAM_DEPTH] = top;
129 var temp = template.cloneNode(true);
130 temp.appendChild(text(findOrgTypeFromDepth(top).opac_label()))
131 temp.setAttribute('href',buildOPACLink(a));
132 par.appendChild(temp);
137 function resultSuggestSearchClass() {
138 var stype = getStype();
139 if(stype == STYPE_KEYWORD) return;
141 unHideMe($('low_hits_search_type'));
142 if(stype != STYPE_TITLE) {
143 ref = $('low_hits_title_search');
145 a[PARAM_STYPE] = STYPE_TITLE;
146 ref.setAttribute('href',buildOPACLink(a));
148 if(stype != STYPE_AUTHOR) {
149 ref = $('low_hits_author_search');
151 a[PARAM_STYPE] = STYPE_AUTHOR;
152 ref.setAttribute('href',buildOPACLink(a));
154 if(stype != STYPE_SUBJECT) {
155 ref = $('low_hits_subject_search');
157 a[PARAM_STYPE] = STYPE_SUBJECT;
158 ref.setAttribute('href',buildOPACLink(a));
160 if(stype != STYPE_KEYWORD) {
161 ref = $('low_hits_keyword_search');
163 a[PARAM_STYPE] = STYPE_KEYWORD;
164 ref.setAttribute('href',buildOPACLink(a));
166 if(stype != STYPE_SERIES) {
167 ref = $('low_hits_series_search');
169 a[PARAM_STYPE] = STYPE_SERIES;
170 ref.setAttribute('href',buildOPACLink(a));
174 function resultSuggestSpelling(r) {
175 var res = r.getResultObject();
177 unHideMe($('did_you_mean'));
179 arg[PARAM_TERM] = res;
180 $('spell_check_link').setAttribute(
181 'href', buildOPACLink(arg) );
182 $('spell_check_link').appendChild(text(res));
187 function resultPaginate() {
190 if( !((o + getDisplayCount()) >= getHitCount()) ) {
193 args[PARAM_OFFSET] = o + getDisplayCount();
194 G.ui.result.next_link.setAttribute("href", buildOPACLink(args));
195 addCSSClass(G.ui.result.next_link, config.css.result.nav_active);
197 args[PARAM_OFFSET] = getHitCount() - (getHitCount() % getDisplayCount());
198 G.ui.result.end_link.setAttribute("href", buildOPACLink(args));
199 addCSSClass(G.ui.result.end_link, config.css.result.nav_active);
205 args[PARAM_OFFSET] = o - getDisplayCount();
206 G.ui.result.prev_link.setAttribute( "href", buildOPACLink(args));
207 addCSSClass(G.ui.result.prev_link, config.css.result.nav_active);
209 args[PARAM_OFFSET] = 0;
210 G.ui.result.home_link.setAttribute( "href", buildOPACLink(args));
211 addCSSClass(G.ui.result.home_link, config.css.result.nav_active);
213 if(getDisplayCount() < getHitCount())
214 unHideMe($('start_end_links_span'));
217 try{searchTimer.stop()}catch(e){}
221 /* display the record info in the record display table 'pos' is the
222 zero based position the record should have in the display table */
223 function resultDisplayRecord(rec, pos, is_mr) {
225 if(rec == null) rec = new mvr(); /* so the page won't die if there was an error */
227 recordsCache.push(rec);
229 var r = table.rows[pos + 1];
232 var rank = parseFloat(ranks[pos + getOffset()]);
233 rank = ( rank / getTopRank() ) * 100;
234 rank = parseInt(rank) + "%";
235 var relspan = $n(r, "relevancy_span");
236 relspan.appendChild(text(rank));
237 unHideMe(relspan.parentNode);
240 var pic = $n(r, config.names.result.item_jacket);
241 pic.setAttribute("src", buildISBNSrc(cleanISBN(rec.isbn())));
243 var title_link = $n(r, config.names.result.item_title);
244 var author_link = $n(r, config.names.result.item_author);
247 var onlyrec = onlyrecord[ getOffset() + pos ];
251 args[PARAM_OFFSET] = 0;
252 args[PARAM_RID] = onlyrec;
253 args[PARAM_MRID] = rec.doc_id();
254 pic.parentNode.setAttribute("href", buildOPACLink(args));
255 title_link.setAttribute("href", buildOPACLink(args));
256 title_link.appendChild(text(normalize(truncate(rec.title(), 65))));
259 buildTitleLink(rec, title_link);
262 args[PARAM_OFFSET] = 0;
263 args[PARAM_MRID] = rec.doc_id();
264 pic.parentNode.setAttribute("href", buildOPACLink(args));
268 buildTitleDetailLink(rec, title_link);
271 args[PARAM_OFFSET] = 0;
272 args[PARAM_RID] = rec.doc_id();
273 pic.parentNode.setAttribute("href", buildOPACLink(args));
275 unHideMe($n(r,'place_hold_span'));
276 $n(r,'place_hold_link').setAttribute(
277 'href','javascript:holdsDrawWindow("'+rec.doc_id()+'");');
280 buildSearchLink(STYPE_AUTHOR, rec.author(), author_link);
284 if(!isNull(rec.edition())) {
285 unHideMe( $n(r, "result_table_extra_span"));
286 $n(r, "result_table_edition_span").appendChild( text( rec.edition()) );
288 if(!isNull(rec.pubdate())) {
289 unHideMe( $n(r, "result_table_extra_span"));
290 unHideMe($n(r, "result_table_pub_span"));
291 $n(r, "result_table_pub_span").appendChild( text( rec.pubdate() ));
293 if(!isNull(rec.publisher()) ) {
294 unHideMe( $n(r, "result_table_extra_span"));
295 unHideMe($n(r, "result_table_pub_span"));
296 $n(r, "result_table_pub_span").appendChild( text( " " + rec.publisher() ));
300 resultBuildFormatIcons( r, rec );
304 runEvt("result", "recordDrawn", rec.doc_id(), title_link);
306 if(resultPageIsDone()) {
308 /* hide the 'now loading...' message */
310 hideMe(G.ui.common.loading);
312 runEvt('result', 'allRecordsReceived', recordsCache);
316 function _resultFindRec(id) {
317 for( var i = 0; i != recordsCache.length; i++ ) {
318 var rec = recordsCache[i];
319 if( rec && rec.doc_id() == id )
326 function resultBuildFormatIcons( row, rec ) {
328 var ress = rec.types_of_resource();
330 for( var i in ress ) {
333 var link = $n(row, res + "_link");
335 var img = link.getElementsByTagName("img")[0];
336 removeCSSClass( img, config.css.dim );
340 if( f == modsFormatToMARC(res) )
341 addCSSClass( img, "dim2_border");
346 args[PARAM_OFFSET] = 0;
347 args[PARAM_MRID] = rec.doc_id();
348 args[PARAM_FORM] = modsFormatToMARC(res);
350 link.setAttribute("href", buildOPACLink(args));
356 function resultPageIsDone(pos) {
357 return (recordsHandled == getDisplayCount()
358 || recordsHandled + getOffset() == getHitCount());
361 var resultCCHeaderApplied = false;
363 /* -------------------------------------------------------------------- */
364 /* dynamically add the copy count rows based on the org type 'countsrow'
365 is the row into which we will add TD's to hold the copy counts
366 This code generates copy count cells with an id of
367 'copy_count_cell_<depth>_<pagePosition>' */
368 function resultAddCopyCounts(rec, pagePosition) {
370 var r = table.rows[pagePosition + 1];
371 var countsrow = $n(r, config.names.result.counts_row );
372 var ccell = $n(countsrow, config.names.result.count_cell);
374 var nodes = orgNodeTrail(findOrgUnit(getLocation()));
376 var type = findOrgType(node.ou_type());
377 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
378 ccell.title = type.opac_label();
379 //addCSSClass(ccell, config.css.result.cc_cell_even);
381 var lastcell = ccell;
382 var lastheadcell = null;
385 var ccheadcell = null;
386 if(!resultCCHeaderApplied) {
387 ccrow = $('result_thead_row');
388 ccheadcell = ccrow.removeChild($n(ccrow, "result_thead_ccell"));
389 var t = ccheadcell.cloneNode(true);
391 t.appendChild(text(type.opac_label()));
392 ccrow.appendChild(t);
393 resultCCHeaderApplied = true;
399 var d = findOrgDepth(nodes[1]);
400 var d2 = findOrgDepth(nodes[nodes.length -1]);
402 for( var i = d; i <= d2 ; i++ ) {
404 ccell = ccell.cloneNode(true);
406 //if((i % 2)) removeCSSClass(ccell, "copy_count_cell_even");
407 //else addCSSClass(ccell, "copy_count_cell_even");
409 var node = nodes[x++];
410 var type = findOrgType(node.ou_type());
412 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
413 ccell.title = type.opac_label();
414 countsrow.insertBefore(ccell, lastcell);
418 var t = ccheadcell.cloneNode(true);
419 t.appendChild(text(type.opac_label()));
420 ccrow.insertBefore(t, lastheadcell);
426 unHideMe($("search_info_table"));
429 /* collect copy counts for a record using method 'methodName' */
430 function resultCollectCopyCounts(rec, pagePosition, methodName) {
431 if(rec == null || rec.doc_id() == null) return;
432 var req = new Request(methodName, getLocation(), rec.doc_id(), getForm() );
433 req.request.userdata = [ rec, pagePosition ];
434 req.callback(resultHandleCopyCounts);
438 function resultHandleCopyCounts(r) {
439 runEvt('result', 'copyCountsReceived', r.userdata[0], r.userdata[1], r.getResultObject());
443 /* display the collected copy counts */
444 function resultDisplayCopyCounts(rec, pagePosition, copy_counts) {
445 if(copy_counts == null || rec == null) return;
447 while(copy_counts[i] != null) {
448 var cell = $("copy_count_cell_" + i +"_" + pagePosition);
450 var span = cell.getElementsByTagName("div")[0];
452 cell.appendChild(text(copy_counts[i].available + " / " + copy_counts[i].count));