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