]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/opac/skin/default/js/rresult.js
ff94bb8158edc339043c9214856511c114405b60
[working/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 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         rresultCollectIds();
29 }
30
31 function rresultCollectIds() {
32         var ids;
33
34
35     var holdTarget = new CGI().param('hold_target');
36     if(holdTarget != null) {
37         rresultHandlePlaceHold(holdTarget);
38         return;
39     }
40
41     var rtype = getRtype();
42     if (rtype && rtype.indexOf('|') > -1)
43         rtype = rtype.substring(0,rtype.indexOf('|'));
44
45         switch(rtype) {
46
47                 case RTYPE_COOKIE:
48                         ids = JSON2js(dojo.cookie(COOKIE_RIDS));
49                         _rresultHandleIds( ids, ids.length );
50                         break;
51
52                 case RTYPE_TITLE:
53                 case RTYPE_AUTHOR:
54                 case RTYPE_SUBJECT:
55                 case RTYPE_SERIES:
56                 case RTYPE_KEYWORD:
57                         rresultDoRecordSearch();
58                         break;
59
60                 case RTYPE_MULTI:
61                         rresultDoRecordMultiSearch();
62                         break;
63                         
64                 case RTYPE_LIST :
65                         rresultHandleList();
66                         break;
67
68                 case RTYPE_MARC :
69                         rresultCollectMARCIds();
70                         break;
71
72                 case RTYPE_ISBN :
73                         rresultCollectISBNIds();
74                         break;
75
76                 case RTYPE_TCN :
77                         rresultCollectTCNIds();
78                         break;
79
80                 case RTYPE_ISSN :
81                         rresultCollectISSNIds();
82                         break;
83
84
85                 case RTYPE_MRID :
86                 case null :
87                 case "" :
88                 default:
89                         var form = rresultGetForm();
90                         var args = { format : form, org : getLocation(), depth : rresultGetDepth() };
91
92                         var lasso = getLasso();
93                         if (lasso) args.org = -lasso;
94
95                         var req = new Request(FETCH_RIDS, getMrid(), args);
96                         req.callback( rresultHandleRIds );
97                         req.send();
98
99                         if( rresultGetDepth() != findOrgDepth(globalOrgTree) ) {
100                                 var link = $('rresult_show_all_link');
101                                 if(link) {
102                                         unHideMe($('rresult_show_all'));
103                                         link.appendChild( text(
104                                                 findOrgType(globalOrgTree.ou_type()).opac_label()));
105                                 }
106
107                         } else {
108                                 if( rresultGetDepth() != getDepth() ) { /* inside a limited display */
109                                         var link = $('rresult_show_here_link');
110                                         if(link) {
111                                                 link.appendChild( text(
112                                                         findOrgType(findOrgUnit(getLocation()).ou_type()).opac_label()));
113                                                 unHideMe($('rresult_show_here'));
114                                         }
115                                 }
116                         }
117         }
118 }
119
120 function rresultExpandSearch() {
121         var args = {};
122         args[PARAM_RDEPTH] = findOrgDepth(globalOrgTree);
123         goTo(buildOPACLink(args));
124 }
125
126 function rresultContractSearch() {
127         var args = {};
128         RDEPTH = null;
129         args[PARAM_OFFSET] = 0;
130         goTo(buildOPACLink(args));
131 }
132
133
134 function rresultGetDepth() {
135         if( getRdepth() != null) return getRdepth();
136         return getDepth();
137 }
138
139
140 function rresultGetForm() {
141         var form;
142
143         if(getTform())  /* did the user select a format from the icon list (temporary) */
144                 form = (getTform() == 'all') ? null : getTform();
145         else  /* did the use select a format from simple search dropdown */
146                 form = (getForm() == 'all') ? null : getForm();
147
148         if(!form) { /* did the user select a format from the advanced search */
149                 form = getItemType();
150                 var f = getItemForm();
151
152                 if(form) {
153                         form = form.replace(/,/,'');
154                         if(f) form += '-' + f;
155                 } else {
156                         if(f) form = '-' + f;
157                 }
158         }
159
160         return form;
161 }
162
163
164 function rresultCollectMARCIds() {
165
166         var args                        = {};
167         args.searches   = JSON2js(getSearches());
168         args.limit              = 200;
169         args.org_unit   = globalOrgTree.id();
170         args.depth              = 0;
171
172         rresultIsPaged = true;
173         var req = new Request(FETCH_ADV_MARC_MRIDS, args, getDisplayCount(), getOffset());
174         req.callback(rresultHandleRIds);
175         req.request.noretry = true;
176         req.send();
177 }
178
179
180 function rresultCollectISBNIds() {
181         var req = new Request(FETCH_ADV_ISBN_RIDS, getAdvTerm() );
182         req.callback(
183                 function(r) {
184                         var blob = r.getResultObject();
185                         _rresultHandleIds(blob.ids, blob.count);
186                 }
187         );
188         req.send();
189 }
190
191 function rresultCollectTCNIds() {
192         var req = new Request(FETCH_ADV_TCN_RIDS, getAdvTerm() );
193         req.callback(
194                 function(r) {
195                         var blob = r.getResultObject();
196                         _rresultHandleIds(blob.ids, blob.count);
197                 }
198         );
199         req.send();
200 }
201
202 function rresultCollectISSNIds() {
203         var req = new Request(FETCH_ADV_ISSN_RIDS, getAdvTerm() );
204         req.callback(
205                 function(r) {
206                         var blob = r.getResultObject();
207                         _rresultHandleIds(blob.ids, blob.count);
208                 }
209         );
210         req.send();
211 }
212
213 function rresultHandleList() {
214         var ids = new CGI().param(PARAM_RLIST);
215     var count;
216     if(!dojo.isArray(ids)) {
217         count = 1;
218         ids = [ids];
219     } else {
220         count = ids.length;
221     }
222         if(ids) _rresultHandleIds(ids, count);
223 }
224
225 var rresultTries = 0;
226 function rresultHandleRIds(r) {
227         var res = r.getResultObject();
228
229         if(!res) res = {count:0,ids:[]};
230
231         if( res.count == 0 && rresultTries == 0 && ! r.noretry) {
232
233                 rresultTries++;
234                 var form = rresultGetForm();
235                 var args = { format : form, org : getLocation(), depth : findOrgDepth(globalOrgTree) };
236
237                 var lasso = getLasso();
238                 if (lasso) args.org = -lasso;
239
240                 var req = new Request(FETCH_RIDS, getMrid(), args );
241                 req.callback( rresultHandleRIds );
242                 req.send();
243                 unHideMe($('no_formats'));
244                 hideMe($('rresult_show_all'));
245
246         } else {
247
248                 _rresultHandleIds(res.ids, res.count);
249         }
250 }
251
252 function _rresultHandleIds(ids, count) {
253         //var json = js2JSON({ids:ids,count:count});
254         /*
255         dojo.cookie(COOKIE_SRIDS, json, {'expires':1});
256         */
257
258         HITCOUNT = parseInt(count);
259         runEvt('result', 'hitCountReceived');
260         runEvt('result', 'idsReceived', ids, getOffset());
261 }
262
263 /*
264 function rresultCollectRecords(ids) {
265         runEvt("result", "preCollectRecords");
266         var x = 0;
267         for( var i = getOffset(); i!= getDisplayCount() + getOffset(); i++ ) {
268                 if(ids[i] == null) break;
269                 var req = new Request(FETCH_RMODS, parseInt(ids[i]));
270                 req.callback(rresultHandleMods);
271                 req.request.userdata = x++;
272                 req.send();
273         }
274 }
275 */
276
277
278 function rresultCollectRecords(ids, base) {
279         runEvt("result", "preCollectRecords");
280         var x = 0;
281
282         if (!base) base = 0;
283         if( rresultIsPaged )  base = 0;
284
285         for( var i = base; i!= getDisplayCount() + base; i++ ) {
286                 if(ids[i] == null) break;
287                 var req = new Request(FETCH_RMODS, parseInt(ids[i]));
288                 req.callback(rresultHandleMods);
289                 req.request.userdata = x++;
290                 req.send();
291         }
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     dojo.require('dojo.cookie');
334     dojo.cookie(COOKIE_SEARCH, js2JSON(result.compiled_search));
335         _rresultHandleIds( ids, result.count );
336 }
337
338
339 function rresultHandlePlaceHold(target) {
340     function reload() {
341         location.href = location.href.replace(/&hold_target=\d+/, '');
342     }
343     attachEvt("common", "holdUpdated", reload);
344     attachEvt("common", "holdUpdateCanceled", reload);
345     attachEvt("common", "loginCanceled", reload);
346     holdsDrawEditor({record:target, type: 'T'});
347 }
348