a769033a8ffdb132cbf83f5d5fafef3f53c09972
[evergreen-equinox.git] / Open-ILS / web / opac / skin / kcls / js / rresult.js
1 var records = new Array();
2 var table;
3 var rowtemplate;
4 var rresultLimit = 200;
5 var resultFacetKey;
6
7 var rresultIsPaged = false;
8
9 function rresultUnload() { removeChildren(table); table = null;}
10
11 attachEvt("common", "unload", rresultUnload);
12 attachEvt("common", "run", rresultDoSearch);
13 attachEvt("result", "idsReceived", rresultCollectRecords); 
14 attachEvt("result", "recordDrawn", rresultLaunchDrawn); 
15
16 hideMe($('copyright_block')); 
17
18 function rresultDoSearch() {
19
20         swapCanvas($('loading_alt'));
21
22         table = G.ui.result.main_table;
23         hideMe(G.ui.result.row_template);
24         if( table && table.parentNode ) {
25                 while( table.parentNode.rows.length <= (getDisplayCount() +1) ) 
26                         hideMe(table.appendChild(G.ui.result.row_template.cloneNode(true)));
27         }
28         unHideMe($('results_header_bar'));
29         rresultCollectIds();
30 }
31
32 function rresultCollectIds() {
33         var ids;
34
35     var rtype = getRtype();
36     if (rtype && rtype.indexOf('|') > -1)
37         rtype = rtype.substring(0,rtype.indexOf('|'));
38
39         switch(rtype) {
40
41                 case RTYPE_COOKIE:
42                         ids = JSON2js(cookieManager.read(COOKIE_RIDS));
43                         _rresultHandleIds( ids, ids.length );
44                         break;
45
46                 case RTYPE_TITLE:
47                 case RTYPE_AUTHOR:
48                 case RTYPE_SUBJECT:
49                 case RTYPE_SERIES:
50                 case RTYPE_KEYWORD:
51                         rresultDoRecordSearch();
52                         break;
53
54                 case RTYPE_MULTI:
55                         rresultDoRecordMultiSearch();
56                         break;
57                         
58                 case RTYPE_LIST :
59                         rresultHandleList();
60                         break;
61
62                 case RTYPE_MARC :
63                         rresultCollectMARCIds();
64                         break;
65
66                 case RTYPE_ISBN :
67                         rresultCollectISBNIds();
68                         break;
69
70                 case RTYPE_TCN :
71                         rresultCollectTCNIds();
72                         break;
73
74                 case RTYPE_ISSN :
75                         rresultCollectISSNIds();
76                         break;
77
78
79                 case RTYPE_MRID :
80                 case null :
81                 case "" :
82                 default:
83                         var form = rresultGetForm();
84                         var args = { format : form, org : getLocation(), depth : rresultGetDepth() };
85
86                         var lasso = getLasso();
87                         if (lasso) args.org = -lasso;
88
89                         var req = new Request(FETCH_RIDS, getMrid(), args);
90                         req.callback( rresultHandleRIds );
91                         req.send();
92
93                         if( rresultGetDepth() != findOrgDepth(globalOrgTree) ) {
94                                 var link = $('rresult_show_all_link');
95                                 if(link) {
96                                         unHideMe($('rresult_show_all'));
97                                         link.appendChild( text(
98                                                 findOrgType(globalOrgTree.ou_type()).opac_label()));
99                                 }
100
101                         } else {
102                                 if( rresultGetDepth() != getDepth() ) { /* inside a limited display */
103                                         var link = $('rresult_show_here_link');
104                                         if(link) {
105                                                 link.appendChild( text(
106                                                         findOrgType(findOrgUnit(getLocation()).ou_type()).opac_label()));
107                                                 unHideMe($('rresult_show_here'));
108                                         }
109                                 }
110                         }
111         }
112 }
113
114 function rresultExpandSearch() {
115         var args = {};
116         args[PARAM_RDEPTH] = findOrgDepth(globalOrgTree);
117         goTo(buildOPACLink(args));
118 }
119
120 function rresultContractSearch() {
121         var args = {};
122         RDEPTH = null;
123         args[PARAM_OFFSET] = 0;
124         goTo(buildOPACLink(args));
125 }
126
127
128 function rresultGetDepth() {
129         if( getRdepth() != null) return getRdepth();
130         return getDepth();
131 }
132
133
134 function rresultGetForm() {
135         var form;
136
137         if(getTform())  /* did the user select a format from the icon list (temporary) */
138                 form = (getTform() == 'all') ? null : getTform();
139         else  /* did the use select a format from simple search dropdown */
140                 form = (getForm() == 'all') ? null : getForm();
141
142         if(!form) { /* did the user select a format from the advanced search */
143                 form = getItemType();
144                 var f = getItemForm();
145
146                 if(form) {
147                         form = form.replace(/,/,'');
148                         if(f) form += '-' + f;
149                 } else {
150                         if(f) form = '-' + f;
151                 }
152         }
153
154         return form;
155 }
156
157
158 function rresultCollectMARCIds() {
159
160         var args                        = {};
161         args.searches   = JSON2js(getSearches());
162         args.limit              = 200;
163         args.org_unit   = globalOrgTree.id();
164         args.depth              = 0;
165
166         rresultIsPaged = true;
167         var req = new Request(FETCH_ADV_MARC_MRIDS, args, getDisplayCount(), getOffset());
168         req.callback(rresultHandleRIds);
169         req.request.noretry = true;
170         req.send();
171 }
172
173
174 function rresultCollectISBNIds() {
175         var req = new Request(FETCH_ADV_ISBN_RIDS, getAdvTerm() );
176         req.callback(
177                 function(r) {
178                         var blob = r.getResultObject();
179                         _rresultHandleIds(blob.ids, blob.count);
180                 }
181         );
182         req.send();
183 }
184
185 function rresultCollectTCNIds() {
186         var req = new Request(FETCH_ADV_TCN_RIDS, getAdvTerm() );
187         req.callback(
188                 function(r) {
189                         var blob = r.getResultObject();
190                         _rresultHandleIds(blob.ids, blob.count);
191                 }
192         );
193         req.send();
194 }
195
196 function rresultCollectISSNIds() {
197         var req = new Request(FETCH_ADV_ISSN_RIDS, getAdvTerm() );
198         req.callback(
199                 function(r) {
200                         var blob = r.getResultObject();
201                         _rresultHandleIds(blob.ids, blob.count);
202                 }
203         );
204         req.send();
205 }
206
207 function rresultHandleList() {
208         var ids = new CGI().param(PARAM_RLIST);
209     var count;
210     if(!dojo.isArray(ids)) {
211         count = 1;
212         ids = [ids];
213     } else {
214         count = ids.length;
215     }
216         if(ids) _rresultHandleIds(ids, count);
217 }
218
219 var rresultTries = 0;
220 function rresultHandleRIds(r) {
221         var res = r.getResultObject();
222
223         if(!res) res = {count:0,ids:[]};
224
225         if( res.count == 0 && rresultTries == 0 && ! r.noretry) {
226
227                 rresultTries++;
228                 var form = rresultGetForm();
229                 var args = { format : form, org : getLocation(), depth : findOrgDepth(globalOrgTree) };
230
231                 var lasso = getLasso();
232                 if (lasso) args.org = -lasso;
233
234                 var req = new Request(FETCH_RIDS, getMrid(), args );
235                 req.callback( rresultHandleRIds );
236                 req.send();
237                 unHideMe($('no_formats'));
238                 hideMe($('rresult_show_all'));
239
240         } else {
241
242                 _rresultHandleIds(res.ids, res.count);
243         }
244 }
245
246 function _rresultHandleIds(ids, count) {
247         //var json = js2JSON({ids:ids,count:count});
248         /*
249         cookieManager.write(COOKIE_SRIDS, json, '+1d');
250         */
251
252         HITCOUNT = parseInt(count);
253         runEvt('result', 'hitCountReceived');
254         runEvt('result', 'idsReceived', ids, getOffset());
255 }
256
257 /*
258 function rresultCollectRecords(ids) {
259         runEvt("result", "preCollectRecords");
260         var x = 0;
261         for( var i = getOffset(); i!= getDisplayCount() + getOffset(); i++ ) {
262                 if(ids[i] == null) break;
263                 var req = new Request(FETCH_RMODS, parseInt(ids[i]));
264                 req.callback(rresultHandleMods);
265                 req.request.userdata = x++;
266                 req.send();
267         }
268 }
269 */
270
271
272 function rresultCollectRecords(ids, base) {
273         runEvt("result", "preCollectRecords");
274         var x = 0;
275
276         if (!base) base = 0;
277         if( rresultIsPaged )  base = 0;
278
279         for( var i = base; i!= getDisplayCount() + base; i++ ) {
280                 if(ids[i] == null) break;
281                 var req = new Request(FETCH_RMODS, parseInt(ids[i]));
282                 req.callback(rresultHandleMods);
283                 req.request.userdata = x++;
284                 req.send();
285         }
286 }
287
288 var recsReceivedCalled = false;
289 function rresultHandleMods(r) {
290         var rec = r.getResultObject();
291         runEvt('result', 'recordReceived', rec, r.userdata, false);
292         resultCollectCopyCounts(rec, r.userdata, FETCH_R_COPY_COUNTS);
293     if(resultPageIsDone() && !recsReceivedCalled) {
294         recsReceivedCalled = true;
295                 runEvt('result', 'allRecordsReceived', recordsCache);
296                 unHideMe($('copyright_block')); 
297         }
298 }
299
300 function rresultLaunchDrawn(id, node) {
301         runEvt("rresult", "recordDrawn", id, node);
302 }
303
304
305 function rresultDoRecordSearch() { 
306         rresultIsPaged = true;
307         resultCollectSearchIds(true, SEARCH_RS_QUERY, rresultFilterSearchResults ); 
308 }
309
310 function rresultDoRecordMultiSearch() { 
311         rresultIsPaged = true;
312         resultCollectSearchIds(false, SEARCH_RS_QUERY, rresultFilterSearchResults ); 
313 }
314
315
316 function rresultFilterSearchResults(r) {
317         var result = r.getResultObject();
318         var ids = [];
319         if( result.count > 0 ) {
320                 for( var i = 0; i != result.ids.length; i++ ) 
321                         ids.push(result.ids[i][0]);
322         }
323
324     resultFacetKey = result.facet_key;
325     resultCompiledSearch = result.compiled_search;
326     cookieManager.write(COOKIE_SEARCH, js2JSON(result.compiled_search), -1);
327         _rresultHandleIds( ids, result.count );
328 }
329
330 function rresultHandlePlaceHold(target) {
331     function reload() {
332         location.href = location.href.replace(/&hold_target=\d+/, '');
333     }
334     attachEvt("common", "holdUpdated", reload);
335     attachEvt("common", "holdUpdateCanceled", reload);
336     attachEvt("common", "loginCanceled", reload);
337     holdsDrawEditor({record:target, type: 'T'});
338 }
339