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 /* hide the 'now loading...' message */
79 hideMe(G.ui.common.loading);
81 var r = table.rows[pos + 1];
84 var rank = parseFloat(ranks[pos + getOffset()]);
85 rank = ( rank / getTopRank() ) * 100;
86 rank = parseInt(rank) + "%";
87 var relspan = findNodeByName(r, "relevancy_span");
88 relspan.appendChild(text(rank));
89 unHideMe(relspan.parentNode);
92 var pic = findNodeByName(r, config.names.result.item_jacket);
93 pic.setAttribute("src", buildISBNSrc(cleanISBN(rec.isbn())));
95 var title_link = findNodeByName(r, config.names.result.item_title);
96 var author_link = findNodeByName(r, config.names.result.item_author);
99 var onlyrec = onlyrecord[ getOffset() + pos ];
101 var id = rec.doc_id();
103 buildTitleDetailLink(rec, title_link);
105 } else buildTitleLink(rec, title_link);
106 } else buildTitleDetailLink(rec, title_link);
108 buildSearchLink(STYPE_AUTHOR, rec.author(), author_link);
110 resultBuildFormatIcons( r, rec );
114 runEvt("result", "recordDrawn", rec.doc_id(), title_link);
116 if(resultPageIsDone())
117 runEvt('result', 'allRecordsReceived', recordsCache);
120 function resultBuildFormatIcons( row, rec ) {
122 var ress = rec.types_of_resource();
124 for( var i in ress ) {
127 var link = findNodeByName(row, res + "_link");
129 var img = link.getElementsByTagName("img")[0];
130 removeCSSClass( img, config.css.dim );
134 if( f != modsFormatToMARC(res) )
135 addCSSClass( img, config.css.dim2);
141 args[PARAM_OFFSET] = 0;
142 args[PARAM_MRID] = rec.doc_id();
143 args[PARAM_FORM] = modsFormatToMARC(res);
145 link.setAttribute("href", buildOPACLink(args));
152 function resultPageIsDone(pos) {
153 return (recordsHandled == getDisplayCount()
154 || recordsHandled + getOffset() == getHitCount());
157 var resultCCHeaderApplied = false;
159 /* -------------------------------------------------------------------- */
160 /* dynamically add the copy count rows based on the org type 'countsrow'
161 is the row into which we will add TD's to hold the copy counts
162 This code generates copy count cells with an id of
163 'copy_count_cell_<depth>_<pagePosition>' */
164 function resultAddCopyCounts(rec, pagePosition) {
166 var r = table.rows[pagePosition + 1];
167 var countsrow = findNodeByName(r, config.names.result.counts_row );
168 var ccell = findNodeByName(countsrow, config.names.result.count_cell);
170 var nodes = orgNodeTrail(findOrgUnit(getLocation()));
172 var type = findOrgType(node.ou_type());
173 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
174 ccell.title = type.opac_label();
175 //addCSSClass(ccell, config.css.result.cc_cell_even);
177 var lastcell = ccell;
178 var lastheadcell = null;
181 var ccheadcell = null;
182 if(!resultCCHeaderApplied) {
183 ccrow = getId('result_thead_row');
184 ccheadcell = ccrow.removeChild(findNodeByName(ccrow, "result_thead_ccell"));
185 var t = ccheadcell.cloneNode(true);
187 t.appendChild(text(type.opac_label()));
188 ccrow.appendChild(t);
189 resultCCHeaderApplied = true;
195 var d = findOrgDepth(nodes[1]);
196 var d2 = findOrgDepth(nodes[nodes.length -1]);
198 for( var i = d; i <= d2 ; i++ ) {
200 ccell = ccell.cloneNode(true);
202 //if((i % 2)) removeCSSClass(ccell, "copy_count_cell_even");
203 //else addCSSClass(ccell, "copy_count_cell_even");
205 var node = nodes[x++];
206 var type = findOrgType(node.ou_type());
208 ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
209 ccell.title = type.opac_label();
210 countsrow.insertBefore(ccell, lastcell);
214 var t = ccheadcell.cloneNode(true);
215 t.appendChild(text(type.opac_label()));
216 ccrow.insertBefore(t, lastheadcell);
222 unHideMe(getId("search_info_table"));
225 /* collect copy counts for a record using method 'methodName' */
226 function resultCollectCopyCounts(rec, pagePosition, methodName) {
227 if(rec == null || rec.doc_id() == null) return;
228 var req = new Request(methodName, getLocation(), rec.doc_id() );
229 req.request.userdata = [ rec, pagePosition ];
230 req.callback(resultHandleCopyCounts);
234 function resultHandleCopyCounts(r) {
235 runEvt('result', 'copyCountsReceived', r.userdata[0], r.userdata[1], r.getResultObject());
239 /* display the collected copy counts */
240 function resultDisplayCopyCounts(rec, pagePosition, copy_counts) {
241 if(copy_counts == null || rec == null) return;
243 while(copy_counts[i] != null) {
244 var cell = getId("copy_count_cell_" + i +"_" + pagePosition);
246 var span = cell.getElementsByTagName("div")[0];
248 cell.appendChild(text(copy_counts[i].available + " / " + copy_counts[i].count));
255 /* captures extraneous info from each record */
257 var subjectCache = {};
258 var authorCache = {};
259 var seriesCache = {};
261 function resultBuildCaches(records) {
262 for( var r in records ) {
263 var rec = records[r];
264 for( var s in rec.subject() )
265 subjectCache[s] == null ? subjectCache[s] = 1 : subjectCache[s]++;
266 authorCache[rec.author()] = 1;
267 for( var s in rec.series() ) seriesCache[rec.series()[s]] = 1;
271 function resultSortSubjects(a, b) { return -(a.count - b.count); } /* sort in reverse */
272 function resultDrawSubjects() {
275 for( var s in subjectCache )
276 subjs.push( { sub : s, count : subjectCache[s] } );
277 subjs.sort(resultSortSubjects);
280 for( var s in subjs ) ss.push(subjs[s].sub);
281 resultDrawSidebarStuff(STYPE_SUBJECT, G.ui.sidebar.subject_item,
282 config.names.sidebar.subject_item, ss, G.ui.sidebar.subject);
285 function resultDrawAuthors() {
286 var auths = new Array();
287 for( var s in authorCache ) auths.push(s);
288 resultDrawSidebarStuff(STYPE_AUTHOR, G.ui.sidebar.author_item,
289 config.names.sidebar.author_item, auths.sort(), G.ui.sidebar.author);
292 function resultDrawSeries() {
293 var sers = new Array();
294 for( var s in seriesCache ) sers.push(s);
295 resultDrawSidebarStuff(STYPE_SERIES, G.ui.sidebar.series_item,
296 config.names.sidebar.series_item, sers.sort(), G.ui.sidebar.series);
299 /* search type, template node, href link name, array of text, node to unhide */
300 function resultDrawSidebarStuff(stype, node, linkname, items, wrapperNode) {
301 var parent = node.parentNode;
302 var template = parent.removeChild(node);
304 var newnode = template.cloneNode(true);
306 for( var i in items ) {
307 if(isNull(items[i])) continue;
309 buildSearchLink(stype, items[i], findNodeByName(newnode, linkname), 100);
310 parent.appendChild(newnode);
311 newnode = template.cloneNode(true);
314 if(found) unHideMe(wrapperNode);