]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/opac/skin/default/js/rdetail.js
9a49d895d929fd5f0c4d3c7de2d8e6202a1ab70a
[Evergreen.git] / Open-ILS / web / opac / skin / default / js / rdetail.js
1 /* */
2
3 attachEvt("common", "run", rdetailDraw);
4 attachEvt("rdetail", "recordDrawn", rdetailBuildStatusColumns);
5 attachEvt("rdetail", "recordDrawn", rdetailBuildInfoRows);
6
7 var record = null;
8 var cp_statuses = null;
9 var recordsCache = [];
10
11 var copyRowParent = null;
12 var copyRow = null;
13 var statusRow = null;
14 var numStatuses = null;
15
16 function rdetailDraw() {
17
18
19         copyRowParent = G.ui.rdetail.cp_info_row.parentNode;
20         copyRow = copyRowParent.removeChild(G.ui.rdetail.cp_info_row);
21         statusRow = G.ui.rdetail.cp_status.parentNode;
22         statusRow.id = '__rdsrow';
23
24         G.ui.rdetail.cp_info_local.onclick = rdetailShowLocalCopies;
25         G.ui.rdetail.cp_info_all.onclick = rdetailShowAllCopies;
26
27         if(getLocation() == globalOrgTree.id())
28                 hideMe(G.ui.rdetail.cp_info_all);
29
30         var req = new Request(FETCH_RMODS, getRid());
31         req.callback(_rdetailDraw);
32         req.send();
33 }
34
35 var rdeatilMarcFetched = false;
36 function rdetailViewMarc(r) {
37         hideMe($('rdetail_extras_loading'));
38         $('rdetail_view_marc_box').innerHTML = r.getResultObject();
39 }
40
41
42 function rdetailShowLocalCopies() {
43
44         var found = false;
45         var rows = copyRowParent.getElementsByTagName("tr");
46         for( var r in rows ) {
47                 if(rows[r].id == "__rdsrow") continue;
48                 hideMe(rows[r]);
49                 if(rows[r].getAttribute && rows[r].getAttribute("local")) {
50                         unHideMe(rows[r]);
51                         found = true;
52                 }
53         }
54
55         if(!found) unHideMe(G.ui.rdetail.cp_info_none);
56         hideMe(G.ui.rdetail.cp_info_local);
57         unHideMe(G.ui.rdetail.cp_info_all);
58 }
59
60 function rdetailShowAllCopies() {
61         var rows = copyRowParent.getElementsByTagName("tr");
62         for( var r in rows ) 
63                 if(rows[r].getAttribute && rows[r].getAttribute("hasinfo"))
64                         unHideMe(rows[r]);
65
66         hideMe(G.ui.rdetail.cp_info_all);
67         unHideMe(G.ui.rdetail.cp_info_local);
68         hideMe(G.ui.rdetail.cp_info_none);
69 }
70
71
72 function _rdetailDraw(r) {
73         record = r.getResultObject();
74
75         runEvt('rdetail', 'recordRetrieved', record.doc_id());
76
77         G.ui.rdetail.title.appendChild(text(record.title()));
78         buildSearchLink(STYPE_AUTHOR, record.author(), G.ui.rdetail.author);
79         G.ui.rdetail.isbn.appendChild(text(cleanISBN(record.isbn())));
80         G.ui.rdetail.edition.appendChild(text(record.edition()));
81         G.ui.rdetail.pubdate.appendChild(text(record.pubdate()));
82         G.ui.rdetail.publisher.appendChild(text(record.publisher()));
83         G.ui.rdetail.tor.appendChild(text(record.types_of_resource()[0]));
84         setResourcePic( G.ui.rdetail.tor_pic, record.types_of_resource()[0]);
85         G.ui.rdetail.abstr.appendChild(text(record.synopsis()));
86
87
88         $('rdetail_place_hold').setAttribute(
89                 'href','javascript:holdsDrawWindow("'+record.doc_id()+'");');
90
91         G.ui.rdetail.image.setAttribute("src", buildISBNSrc(cleanISBN(record.isbn())));
92         runEvt("rdetail", "recordDrawn");
93         recordsCache.push(record);
94
95         var req = new Request(FETCH_ACONT_SUMMARY, cleanISBN(record.isbn()));
96         req.callback(rdetailHandleAddedContent);
97         req.send();
98
99         resultBuildCaches( [ record ] );
100         resultDrawSubjects();
101         //resultDrawAuthors();
102         resultDrawSeries();
103
104 }
105
106 var rdetailTocFetched           = false;
107 var rdetailReviewFetched        = false;
108 var rdetailMarcFetched          = false;
109
110 function rdetailShowExtra(type) {
111
112         hideMe($('rdetail_copy_info_div'));
113         hideMe($('rdetail_reviews_div'));
114         hideMe($('rdetail_toc_div'));
115         hideMe($('rdetail_marc_div'));
116         hideMe($('cn_browse'));
117         hideMe($('rdetail_viewcn_link'));
118
119         var req;
120         switch(type) {
121                 case "copyinfo": 
122                         unHideMe($('rdetail_copy_info_div')); 
123                         break;
124
125                 case "reviews": 
126                         unHideMe($('rdetail_reviews_div')); 
127                         if(rdetailReviewFetched) break;
128                         unHideMe($('rdetail_extras_loading'));
129                         rdetailReviewFetched = true;
130                         req = new Request(FETCH_REVIEWS, cleanISBN(record.isbn()));
131                         req.callback(rdetailShowReviews);
132                         req.send();
133                         break;
134
135                 case "toc": 
136                         unHideMe($('rdetail_toc_div'));
137                         if(rdetailTocFetched) break;
138                         unHideMe($('rdetail_extras_loading'));
139                         rdetailTocFetched = true;
140                         var req = new Request(FETCH_TOC, cleanISBN(record.isbn()));
141                         req.callback(rdetailShowTOC);
142                         req.send();
143                         break;
144
145                 case "marc": 
146                         unHideMe($('rdetail_marc_div')); 
147                         if(rdetailMarcFetched) return;
148                         unHideMe($('rdetail_extras_loading'));
149                         rdetailMarcFetched = true;
150                         var req = new Request( FETCH_MARC_HTML, record.doc_id() );
151                         req.callback(rdetailViewMarc); 
152                         req.send();
153                         break;
154         }
155 }
156
157 function rdetailShowCNBrowse( cn ) {
158         hideMe($('rdetail_copy_info_div'));
159         hideMe($('rdetail_reviews_div'));
160         hideMe($('rdetail_toc_div'));
161         hideMe($('rdetail_marc_div'));
162         unHideMe($('rdetail_viewcn_link'));
163         unHideMe($('cn_browse'));
164         cnBrowseGo(cn);
165 }
166
167 function rdetailHandleAddedContent(r) {
168         var resp = r.getResultObject();
169         if( resp.Review == 'true' ) unHideMe($('rdetail_reviews_link'));
170         if( resp.TOC == 'true' ) unHideMe($('rdetail_toc_link'));
171 }
172
173
174 function rdetailShowReviews(r) {
175         hideMe($('rdetail_extras_loading'));
176         var res = r.getResultObject();
177         var par = $('rdetail_reviews_div');
178         var template = par.removeChild($('rdetail_review_template'));
179         if( res && res.length > 0 ) {
180                 unHideMe($('rdetail_reviews_link'));
181                 for( var i = 0; i != res.length; i++ ) {
182                         var rev = res[i];       
183                         if( rev.text && rev.info ) {
184                                 var node = template.cloneNode(true);
185                                 $n(node, 'review_header').appendChild(text(rev.info));
186                                 $n(node, 'review_text').appendChild(text(rev.text));
187                                 par.appendChild(node);
188                         }
189                 }
190         }
191 }
192
193 function rdetailShowTOC(r) {
194         hideMe($('rdetail_extras_loading'));
195         var resp = r.getResultObject();
196         if(resp) {
197                 unHideMe($('rdetail_toc_link'));
198                 $('rdetail_toc_div').innerHTML = resp;
199         }
200 }
201
202
203 function rdetailBuildInfoRows() {
204         var req = new Request(FETCH_COPY_COUNTS_SUMMARY, record.doc_id())
205         req.callback(_rdetailBuildInfoRows);
206         req.send();
207 }
208
209 /* pre-allocate the copy info table with all org units in correct order */
210 function _rdetailRows(node) {
211
212         if(node) {
213
214                 var row = copyRow.cloneNode(true);
215                 row.id = "cp_info_" + node.id();
216
217                 var libtd = findNodeByName( row, config.names.rdetail.lib_cell );
218                 var cntd = findNodeByName( row, config.names.rdetail.cn_cell );
219                 var cpctd = findNodeByName( row, config.names.rdetail.cp_count_cell );
220         
221                 libtd.appendChild(text(node.name()));
222                 libtd.setAttribute("style", "padding-left: " + ((findOrgDepth(node) - 1)  * 9) + "px;");
223         
224                 if(!findOrgType(node.ou_type()).can_have_vols()) {
225
226                         row.removeChild(cntd);
227                         row.removeChild(cpctd);
228
229                         libtd.setAttribute("colspan", numStatuses + 2 );
230                         libtd.colSpan = numStatuses + 2;
231                         addCSSClass(row, 'copy_info_region_row');
232                 } 
233         
234                 copyRowParent.appendChild(row);
235
236         } else { node = globalOrgTree; }
237
238         for( var c in node.children() ) 
239                 _rdetailRows(node.children()[c]);
240 }
241
242 /* walk through the copy info and build rows where necessary */
243 function _rdetailBuildInfoRows(r) {
244
245         _rdetailRows();
246
247         var summary = r.getResultObject();
248         if(!summary) return;
249
250         G.ui.rdetail.cp_info_loading.parentNode.removeChild(
251                 G.ui.rdetail.cp_info_loading);
252
253         var found = false;
254         for( var i = 0; i < summary.length; i++ ) {
255
256                 var arr = summary[i];
257                 var thisOrg = findOrgUnit(arr[0]);
258                 var rowNode = $("cp_info_" + thisOrg.id());
259
260                 if(rowNode.getAttribute("used")) {
261
262                         if( rowNode.nextSibling )
263                                 rowNode = copyRowParent.insertBefore(copyRow.cloneNode(true), rowNode.nextSibling);
264                         else
265                                 rowNode = copyRowParent.appendChild(copyRow.cloneNode(true));
266                         var n = findNodeByName( rowNode, config.names.rdetail.lib_cell );
267                         n.appendChild(text(thisOrg.name()));
268                         n.setAttribute("style", "padding-left: " + ((findOrgDepth(thisOrg) - 1)  * 9) + "px;");
269
270                 } else rowNode.setAttribute("used", "1");
271
272                 //var a = elem("a", {href:'javascript:cnBrowseGo("' + arr[1] + '");' }, arr[1]);
273                 var a = elem("a", {href:'javascript:rdetailShowCNBrowse("' + arr[1] + '");' }, arr[1]);
274                 addCSSClass(a, 'classic_link');
275                 findNodeByName( rowNode, config.names.rdetail.cn_cell ).appendChild(a);
276                 
277                 //findNodeByName( rowNode, config.names.rdetail.cn_cell ).appendChild(text(arr[1]));
278
279                 var cpc_temp = rowNode.removeChild(
280                         findNodeByName(rowNode, config.names.rdetail.cp_count_cell));
281
282                 rdetailApplyStatuses(rowNode, cpc_temp, arr[2]);
283
284                 var isLocal = false;
285                 if( orgIsMine( findOrgUnit(getLocation()), thisOrg ) ) { found = true; isLocal = true; }
286                 rdetailSetPath( thisOrg, isLocal );
287
288         }
289
290         if(!found) unHideMe(G.ui.rdetail.cp_info_none);
291
292 }
293
294 /* sets the path to org as 'active' and displays the 
295         path if it's local */
296 function rdetailSetPath(org, local) {
297         if( findOrgDepth(org) == 0 ) return;
298         var row = $("cp_info_" + org.id());
299         row.setAttribute("hasinfo", "1");
300         if(local) {
301                 unHideMe(row);
302                 row.setAttribute("local", "1");
303         }
304         rdetailSetPath(findOrgUnit(org.parent_ou()), local);
305 }
306
307 function rdetailApplyStatuses( row, template, statuses ) {
308         for( var j in _statusPositions ) {
309                 var stat = _statusPositions[j];
310                 var val = statuses[stat.id()];
311                 var nn = template.cloneNode(true);
312                 if(val) nn.appendChild(text(val));
313                 else nn.appendChild(text(0));
314                 row.appendChild(nn);    
315         }
316 }
317
318
319 /* --------------------------------------------------------------------- */
320 var _statusPositions = {};
321
322 function rdetailBuildStatusColumns() {
323
324         rdetailGrabCopyStatuses();
325         var parent = statusRow;
326         var template = parent.removeChild(G.ui.rdetail.cp_status);
327
328         var i = 0;
329         for( i = 0; i < cp_statuses.length; i++ ) {
330
331                 var c = cp_statuses[i];
332
333                 if(c && c.holdable()) {
334
335                         var name = c.name();
336                         _statusPositions[i] = c;
337                         var node = template.cloneNode(true);
338                         var data = findNodeByName( node, config.names.rdetail.cp_status);
339
340                         data.appendChild(text(name));
341                         parent.appendChild(node);
342                 }       
343         }       
344
345         numStatuses = 0;
346         for(x in _statusPositions) numStatuses++; 
347 }
348
349 function rdetailGrabCopyStatuses() {
350         if(cp_statuses) return cp_statuses;
351    var req = new Request(FETCH_COPY_STATUSES);
352    req.send(true);
353         cp_statuses = req.result();
354         cp_statuses = cp_statuses.sort(_rdetailSortStatuses);
355 }
356
357 function _rdetailSortStatuses(a, b) {
358         return parseInt(a.id()) - parseInt(b.id());
359 }
360
361