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