2 var recordsHandled = 0;
5 /* set up the event handlers */
6 G.evt.result.hitCountReceived.push(resultSetHitInfo);
7 G.evt.result.recordReceived.push(resultDisplayRecord, resultAddCopyCounts);
8 G.evt.result.copyCountsReceived.push(resultDisplayCopyCounts);
9 G.evt.result.allRecordsReceived.push(resultBuildCaches, resultDrawSubjects, resultDrawAuthors, resultDrawSeries);
11 /* do this after we have ID's so the rank for mr pages will be correct */
12 attachEvt("result", "preCollectRecords", resultPaginate);
14 /* returns the last 'index' postion ocurring in this page */
15 function resultFinalPageIndex() {
16 if(getHitCount() < (getOffset() + getDisplayCount()))
17 return getHitCount() - 1;
18 return getOffset() + getDisplayCount() - 1;
21 /* set the search result info, number of hits, which results we're
22 displaying, links to the next/prev pages, etc. */
23 function resultSetHitInfo() {
25 if( getDisplayCount() > (getHitCount() - getOffset())) c = getHitCount();
26 else c = getDisplayCount() + getOffset();
28 var pages = getHitCount() / getDisplayCount();
29 if(pages % 1) pages = parseInt(pages) + 1;
31 G.ui.result.current_page.appendChild(text( (getOffset()/getDisplayCount()) + 1));
32 G.ui.result.num_pages.appendChild(text(pages + ")")); /* the ) is dumb */
34 G.ui.result.offset_start.appendChild(text(getOffset() + 1));
35 G.ui.result.offset_end.appendChild(text(c));
36 G.ui.result.result_count.appendChild(text(getHitCount()));
37 unHideMe(G.ui.result.info);
41 function resultPaginate() {
44 if( !((o + getDisplayCount()) >= getHitCount()) ) {
47 args[PARAM_OFFSET] = o + getDisplayCount();
48 G.ui.result.next_link.setAttribute("href", buildOPACLink(args));
49 addCSSClass(G.ui.result.next_link, config.css.result.nav_active);
51 args[PARAM_OFFSET] = getHitCount() - (getHitCount() % getDisplayCount());
52 G.ui.result.end_link.setAttribute("href", buildOPACLink(args));
53 addCSSClass(G.ui.result.end_link, config.css.result.nav_active);
59 args[PARAM_OFFSET] = o - getDisplayCount();
60 G.ui.result.prev_link.setAttribute( "href", buildOPACLink(args));
61 addCSSClass(G.ui.result.prev_link, config.css.result.nav_active);
63 args[PARAM_OFFSET] = 0;
64 G.ui.result.home_link.setAttribute( "href", buildOPACLink(args));
65 addCSSClass(G.ui.result.home_link, config.css.result.nav_active);
70 /* display the record info in the record display table 'pos' is the
71 zero based position the record should have in the display table */
72 function resultDisplayRecord(rec, pos, is_mr) {
74 if(rec == null) rec = new mvr(); /* so the page won't die if there was an error */
76 recordsCache.push(rec);
78 var r = table.rows[pos + 1];
81 var rank = parseFloat(ranks[pos + getOffset()]);
82 rank = ( rank / getTopRank() ) * 100;
83 rank = parseInt(rank) + "%";
84 var relspan = findNodeByName(r, "relevancy_span");
85 relspan.appendChild(text(rank));
86 unHideMe(relspan.parentNode);
89 var pic = findNodeByName(r, config.names.result.item_jacket);
90 pic.setAttribute("src", buildISBNSrc(cleanISBN(rec.isbn())));
92 var title_link = findNodeByName(r, config.names.result.item_title);
93 var author_link = findNodeByName(r, config.names.result.item_author);
96 var onlyrec = onlyrecord[ getOffset() + pos ];
99 var id = rec.doc_id();
101 buildTitleDetailLink(rec, title_link);
107 args[PARAM_OFFSET] = 0;
108 args[PARAM_RID] = onlyrec;
109 args[PARAM_MRID] = rec.doc_id();
110 pic.parentNode.setAttribute("href", buildOPACLink(args));
111 title_link.setAttribute("href", buildOPACLink(args));
112 title_link.appendChild(text(normalize(truncate(rec.title(), 65))));
115 buildTitleLink(rec, title_link);
118 args[PARAM_OFFSET] = 0;
119 args[PARAM_MRID] = rec.doc_id();
120 pic.parentNode.setAttribute("href", buildOPACLink(args));
124 buildTitleDetailLink(rec, title_link);
127 args[PARAM_OFFSET] = 0;
128 args[PARAM_RID] = rec.doc_id();
129 pic.parentNode.setAttribute("href", buildOPACLink(args));
132 buildSearchLink(STYPE_AUTHOR, rec.author(), author_link);
136 if(!isNull(rec.edition())) {
137 unHideMe( findNodeByName(r, "result_table_extra_span"));
138 findNodeByName(r, "result_table_edition_span").appendChild( text( rec.edition()) );
140 if(!isNull(rec.pubdate())) {
141 unHideMe( findNodeByName(r, "result_table_extra_span"));
142 unHideMe(findNodeByName(r, "result_table_pub_span"));
143 findNodeByName(r, "result_table_pub_span").appendChild( text( rec.pubdate() ));
145 if(!isNull(rec.publisher()) ) {
146 unHideMe( findNodeByName(r, "result_table_extra_span"));
147 unHideMe(findNodeByName(r, "result_table_pub_span"));
148 findNodeByName(r, "result_table_pub_span").appendChild( text( " " + rec.publisher() ));
152 resultBuildFormatIcons( r, rec );
156 runEvt("result", "recordDrawn", rec.doc_id(), title_link);
158 if(resultPageIsDone()) {
159 /* hide the 'now loading...' message */
161 hideMe(G.ui.common.loading);
163 runEvt('result', 'allRecordsReceived', recordsCache);
167 function resultBuildFormatIcons( row, rec ) {
169 var ress = rec.types_of_resource();
171 for( var i in ress ) {
174 var link = findNodeByName(row, res + "_link");
176 var img = link.getElementsByTagName("img")[0];
177 removeCSSClass( img, config.css.dim );
182 if( f != modsFormatToMARC(res) )
183 addCSSClass( img, config.css.dim2);
185 addCSSClass( img, "dim2_border");
187 if( f == modsFormatToMARC(res) )
188 addCSSClass( img, "dim2_border");
194 args[PARAM_OFFSET] = 0;
195 args[PARAM_MRID] = rec.doc_id();
196 args[PARAM_FORM] = modsFormatToMARC(res);
198 link.setAttribute("href", buildOPACLink(args));
205 function resultPageIsDone(pos) {
206 return (recordsHandled == getDisplayCount()
207 || recordsHandled + getOffset() == getHitCount());
210 var resultCCHeaderApplied = false;
212 /* -------------------------------------------------------------------- */
213 /* dynamically add the copy count rows based on the org type 'countsrow'
214 is the row into which we will add TD's to hold the copy counts
215 This code generates copy count cells with an id of
216 'copy_count_cell_<depth>_<pagePosition>' */
217 function resultAddCopyCounts(rec, pagePosition) {
219 var r = table.rows[pagePosition + 1];
220 var countsrow = findNodeByName(r, config.names.result.counts_row );
221 var ccell = findNodeByName(countsrow, config.names.result.count_cell);
223 var nodes = orgNodeTrail(findOrgUnit(getLocation()));
225 var type = findOrgType(node.ou_type());
226 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
227 ccell.title = type.opac_label();
228 //addCSSClass(ccell, config.css.result.cc_cell_even);
230 var lastcell = ccell;
231 var lastheadcell = null;
234 var ccheadcell = null;
235 if(!resultCCHeaderApplied) {
236 ccrow = getId('result_thead_row');
237 ccheadcell = ccrow.removeChild(findNodeByName(ccrow, "result_thead_ccell"));
238 var t = ccheadcell.cloneNode(true);
240 t.appendChild(text(type.opac_label()));
241 ccrow.appendChild(t);
242 resultCCHeaderApplied = true;
248 var d = findOrgDepth(nodes[1]);
249 var d2 = findOrgDepth(nodes[nodes.length -1]);
251 for( var i = d; i <= d2 ; i++ ) {
253 ccell = ccell.cloneNode(true);
255 //if((i % 2)) removeCSSClass(ccell, "copy_count_cell_even");
256 //else addCSSClass(ccell, "copy_count_cell_even");
258 var node = nodes[x++];
259 var type = findOrgType(node.ou_type());
261 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
262 ccell.title = type.opac_label();
263 countsrow.insertBefore(ccell, lastcell);
267 var t = ccheadcell.cloneNode(true);
268 t.appendChild(text(type.opac_label()));
269 ccrow.insertBefore(t, lastheadcell);
275 unHideMe(getId("search_info_table"));
278 /* collect copy counts for a record using method 'methodName' */
279 function resultCollectCopyCounts(rec, pagePosition, methodName) {
280 if(rec == null || rec.doc_id() == null) return;
281 var req = new Request(methodName, getLocation(), rec.doc_id(), getForm() );
282 req.request.userdata = [ rec, pagePosition ];
283 req.callback(resultHandleCopyCounts);
287 function resultHandleCopyCounts(r) {
288 runEvt('result', 'copyCountsReceived', r.userdata[0], r.userdata[1], r.getResultObject());
292 /* display the collected copy counts */
293 function resultDisplayCopyCounts(rec, pagePosition, copy_counts) {
294 if(copy_counts == null || rec == null) return;
296 while(copy_counts[i] != null) {
297 var cell = getId("copy_count_cell_" + i +"_" + pagePosition);
299 var span = cell.getElementsByTagName("div")[0];
301 cell.appendChild(text(copy_counts[i].available + " / " + copy_counts[i].count));
308 /* captures extraneous info from each record */
310 var subjectCache = {};
311 var authorCache = {};
312 var seriesCache = {};
314 function resultBuildCaches(records) {
315 for( var r in records ) {
316 var rec = records[r];
317 for( var s in rec.subject() )
318 subjectCache[s] == null ? subjectCache[s] = 1 : subjectCache[s]++;
319 authorCache[rec.author()] = 1;
320 for( var s in rec.series() ) seriesCache[rec.series()[s]] = 1;
324 function resultSortSubjects(a, b) { return -(a.count - b.count); } /* sort in reverse */
325 function resultDrawSubjects() {
328 for( var s in subjectCache )
329 subjs.push( { sub : s, count : subjectCache[s] } );
330 subjs.sort(resultSortSubjects);
333 for( var s in subjs ) ss.push(subjs[s].sub);
335 resultDrawSidebarTrees(
337 "subjectSidebarTree", ss,
338 getId("subject_tree_sidebar"),
339 getId("subject_sidebar_tree_div") );
342 function resultDrawAuthors() {
343 var auths = new Array();
344 for( var s in authorCache ) auths.push(s);
346 resultDrawSidebarTrees(
348 "authorSidebarTree", auths.sort(),
349 getId("author_tree_sidebar"),
350 getId("author_sidebar_tree_div") );
353 function resultDrawSeries() {
354 var sers = new Array();
355 for( var s in seriesCache ) sers.push(s);
356 resultDrawSidebarTrees(
358 "seriesSidebarTree", sers.sort(),
359 getId("series_tree_sidebar"),
360 getId("series_sidebar_tree_div") );
363 function resultDrawSidebarTrees( stype, treeName, items, wrapperNode, destNode ) {
365 eval("tree = " + treeName);
369 for( var i in items ) {
371 if(isNull(items[i])) continue;
375 var item = normalize(truncate(items[i], 65));
378 var href = resultQuickLink( items[i], stype );
379 tree.addNode( stype + "_" + items[i], treeName + 'Root', item, href );
383 setTimeout('resultFireXRefReq("'+treeName+'","'+stype+'","'+item+'");',200);
385 if(!IE) resultFireXRefReq(treeName, stype, items[i]);
389 unHideMe(wrapperNode);
390 //tree.close(tree.rootid);
394 function resultFireXRefReq( treeName, stype, item ) {
396 eval('tree=' + treeName);
397 var req = new Request(FETCH_CROSSREF, stype, item);
398 req.request._tree = tree;
399 req.request._item = item;
400 req.request._stype = stype;
401 req.callback(resultAppendCrossRef);
406 function resultQuickLink( term, type ) {
409 args[PARAM_OFFSET] = 0;
410 args[PARAM_TERM] = term;
411 args[PARAM_STYPE] = type;
412 return buildOPACLink(args);
416 function resultAppendCrossRef(r) {
419 var stype = r._stype;
420 var result = r.getResultObject();
422 var froms = result['from'];
423 var alsos = result['also'];
427 for( var i = 0; (total++ < 5 && i < froms.length); i++ ) {
428 var string = normalize(truncate(froms[i], 45));
429 if(getId(stype + '_' + froms[i])) continue;
430 tree.addNode(stype + '_' + froms[i],
431 stype + '_' + item, string, resultQuickLink(froms[i],stype));
433 for( var i = 0; (total++ < 10 && i < alsos.length); i++ ) {
434 var string = normalize(truncate(alsos[i], 45));
435 if(getId(stype + '_' + alsos[i])) continue;
436 tree.addNode(stype + '_' + alsos[i],
437 stype + '_' + item, string, resultQuickLink(alsos[i],stype));