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