5 /* showDueDate will show the due date in the OPAC */
6 var showDueDate = false;
7 /* showDueTime will show the due time (hours and minutes) in the OPAC;
8 if showDueDate is false, then showDueTime has no effect
10 var showDueTime = false;
12 function cpdBuild( contextTbody, contextRow, record, callnumber, orgid, depth, copy_location ) {
13 var i = cpdCheckExisting(contextRow);
16 var counter = cpdCounter++;
18 /* yank out all of the template rows */
19 if(!cpdTemplate) cpdTemplate = $('rdetail_volume_details_row');
20 var templateRow = cpdTemplate.cloneNode(true);
21 templateRow.id = 'cpd_row_' + counter;
23 /* shove a dummy a tag in before the context previous sibling */
25 contextTbody.insertBefore(
26 elem('a',{name:'slot_'+templateRow.id}), contextRow.previousSibling);
27 goTo('#slot_'+templateRow.id);
31 /* unhide before we unhide/clone the parent */
32 unHideMe($n(templateRow, 'age_protect_label'));
33 unHideMe($n(templateRow, 'create_date_label'));
34 unHideMe($n(templateRow, 'holdable_label'));
37 if (isXUL() || showDueDate) {
38 unHideMe($n(templateRow, 'due_date_label'));
41 unHideMe(templateRow);
43 var print = $n(templateRow,'print');
44 print.onclick = function() { cpdBuildPrintPane(
45 contextRow, record, callnumber, orgid, depth) };
47 var mainTbody = $n(templateRow, 'copies_tbody');
48 var extrasRow = mainTbody.removeChild($n(mainTbody, 'copy_extras_row'));
50 var req = new Request(FETCH_COPIES_FROM_VOLUME, record.doc_id(), callnumber, orgid);
51 req.callback(cpdDrawCopies);
54 contextTbody : contextTbody, /* tbody that holds the contextrow */
55 contextRow : contextRow, /* the row our new row will be inserted after */
57 callnumber : callnumber,
60 templateRow : templateRow, /* contains everything */
61 copy_location : copy_location,
62 mainTbody : mainTbody, /* holds the copy rows */
63 extrasRow : extrasRow, /* wrapper row for all extras */
67 if( contextRow.nextSibling )
68 contextTbody.insertBefore( templateRow, contextRow.nextSibling );
70 contextTbody.appendChild( templateRow );
73 _debug('creating new details row with id ' + templateRow.id);
74 cpdNodes[templateRow.id] = { templateRow : templateRow };
75 return templateRow.id;
79 function cpdBuildPrintWindow(record, orgid) {
80 var div = $('rdetail_print_details').cloneNode(true);
83 $n(div, 'lib').appendChild(text(findOrgUnit(orgid).name()));
84 $n(div, 'title').appendChild(text(record.title()));
85 $n(div, 'author').appendChild(text(record.author()));
86 $n(div, 'edition').appendChild(text(record.edition()));
87 $n(div, 'pubdate').appendChild(text(record.pubdate()));
88 $n(div, 'publisher').appendChild(text(record.publisher()));
89 $n(div, 'phys').appendChild(text(record.physical_description()));
94 function cpdStylePopupWindow(div) {
95 var tds = div.getElementsByTagName('td');
96 for( var i = 0; i < tds.length ; i++ ) {
98 var sty = td.getAttribute('style');
100 td.setAttribute('style', sty + 'padding: 2px; border: 1px solid #F0F0E0;');
101 if( td.className && td.className.match(/hide_me/) )
102 td.parentNode.removeChild(td);
107 /* builds a friendly print window for this CNs data */
108 function cpdBuildPrintPane(contextRow, record, callnumber, orgid, depth) {
110 var div = cpdBuildPrintWindow( record, orgid);
112 $n(div, 'cn').appendChild(text(callnumber));
114 unHideMe($n(div, 'copy_header'));
116 var subtbody = $n(contextRow.nextSibling, 'copies_tbody');
117 var rows = subtbody.getElementsByTagName('tr');
119 for( var r = 0; r < rows.length; r++ ) {
122 var name = row.getAttribute('name');
123 if( name.match(/extras_row/) ) continue; /* hide the copy notes, stat-cats */
124 var clone = row.cloneNode(true);
125 var links = clone.getElementsByTagName('a');
126 for( var i = 0; i < links.length; i++ )
127 links[i].style.display = 'none';
129 $n(div, 'tbody').appendChild(clone);
132 cpdStylePopupWindow(div);
133 openWindow( div.innerHTML);
138 /* hide any open tables and if we've already
139 fleshed this cn, just unhide it */
140 function cpdCheckExisting( contextRow ) {
143 var next = contextRow.nextSibling;
145 if( next && next.getAttribute('templateRow') ) {
146 var obj = cpdNodes[next.id];
147 if(obj.templateRow.className.match(/hide_me/))
148 unHideMe(obj.templateRow);
149 else hideMe(obj.templateRow);
150 existingid = next.id;
153 if(existingid) _debug('row exists with id ' + existingid);
155 for( var o in cpdNodes ) {
156 var node = cpdNodes[o];
157 if( existingid && o == existingid ) continue;
158 hideMe(node.templateRow);
159 removeCSSClass(node.templateRow.previousSibling, 'rdetail_context_row');
162 addCSSClass(contextRow, 'rdetail_context_row');
163 if(existingid) return existingid;
168 function cpdFetchCopies(r) {
170 args.cn = r.getResultObject();
171 var req = new Request(FETCH_COPIES_FROM_VOLUME, args.cn.id());
172 req.request.args = args;
173 req.callback(cpdDrawCopies);
178 function cpdDrawCopies(r) {
180 var copies = r.getResultObject();
182 var copytbody = $n(args.templateRow, 'copies_tbody');
183 var copyrow = copytbody.removeChild($n(copytbody, 'copies_row'));
186 /* unhide before we unhide/clone the parent */
187 unHideMe($n(copyrow, 'age_protect_value'));
188 unHideMe($n(copyrow, 'create_date_value'));
189 unHideMe($n(copyrow, 'copy_holdable_td'));
192 if(isXUL() || showDueDate) {
193 unHideMe($n(copyrow, 'copy_due_date_td'));
196 for( var i = 0; i < copies.length; i++ ) {
197 var row = copyrow.cloneNode(true);
198 var copyid = copies[i];
199 var req = new Request(FETCH_FLESHED_COPY, copies[i]);
200 req.callback(cpdDrawCopy);
201 req.request.args = r.args;
202 req.request.row = row;
204 copytbody.appendChild(row);
208 function cpdDrawCopy(r) {
209 var copy = r.getResultObject();
212 if (r.args.copy_location && copy.location().name() != r.args.copy_location) {
217 $n(row, 'barcode').appendChild(text(copy.barcode()));
218 $n(row, 'location').appendChild(text(copy.location().name()));
219 $n(row, 'status').appendChild(text(copy.status().name()));
222 /* show the hold link */
223 var l = $n(row, 'copy_hold_link');
225 l.onclick = function() {
230 onComplete : function(){}
235 if( copy.age_protect() )
236 appendClear($n(row, 'age_protect_value'), text(copy.age_protect().name()));
238 var cd = copy.create_date();
239 cd = cd.replace(/T.*/, '');
240 $n(row, 'create_date_value').appendChild(text(cd));
242 var yes = $('rdetail.yes').innerHTML;
243 var no = $('rdetail.no').innerHTML;
245 if( isTrue(copy.holdable()) &&
246 isTrue(copy.location().holdable()) &&
247 isTrue(copy.status().holdable()) ) {
248 $n(row, 'copy_is_holdable').appendChild(text(yes));
250 $n(row, 'copy_is_holdable').appendChild(text(no));
254 if (isXUL() || showDueDate) {
256 if( copy.circulations() ) {
257 circ = copy.circulations()[0];
259 var due_time = dojo.date.stamp.fromISOString(circ.due_date());
261 $n(row, 'copy_due_date').appendChild(text(dojo.date.locale.format(due_time, {"formatLength": "medium"})));
263 $n(row, 'copy_due_date').appendChild(text(dojo.date.locale.format(due_time, {"selector": "date", "formatLength": "medium"})));
270 r.args.copyrow = row;
271 cpdShowNotes(copy, r.args)
272 cpdShowStats(copy, r.args);
276 function _cpdExtrasInit(args) {
278 var newrid = 'extras_row_' + args.copy.barcode();
279 var newrow = $(newrid);
280 if(!newrow) newrow = args.extrasRow.cloneNode(true);
281 var tbody = $n(newrow, 'extras_tbody');
282 var rowt = $n(tbody, 'extras_row');
285 var cr = args.copyrow;
286 var nr = cr.nextSibling;
287 var np = args.mainTbody;
289 /* insert the extras row into the main table */
290 if(nr) np.insertBefore( newrow, nr );
291 else np.appendChild(newrow);
293 var link = $n(args.copyrow, 'details_link');
294 var link2 = $n(args.copyrow, 'less_details_link');
296 link.id = id + '_morelink';
297 link2.id = id + '_lesslink';
301 link.setAttribute('href',
302 'javascript:unHideMe($("'+link2.id+'")); hideMe($("'+link.id+'"));unHideMe($("'+newrow.id+'"));');
304 link2.setAttribute('href',
305 'javascript:unHideMe($("'+link.id+'")); hideMe($("'+link2.id+'"));hideMe($("'+newrow.id+'"));');
307 return [ tbody, rowt ];
310 function cpdShowNotes(copy, args) {
311 var notes = copy.notes();
312 if(!notes || notes.length == 0) return;
314 var a = _cpdExtrasInit(args);
318 for( var n in notes ) {
320 if(!isTrue(note.pub())) continue;
321 var row = rowt.cloneNode(true);
322 $n(row, 'key').appendChild(text(note.title()));
323 $n(row, 'value').appendChild(text(note.value()));
324 unHideMe($n(row, 'note'));
326 tbody.appendChild(row);
331 function cpdShowStats(copy, args) {
332 var entries = copy.stat_cat_entry_copy_maps();
333 if(!entries || entries.length == 0) return;
335 var visibleStatCat = false;
338 check all copy stat cats; if we find one that's OPAC visible,
339 set the flag and break the loop. If we've found one, or we're
340 in the staff client, build the table. if not, we return doing
341 nothing, as though the stat_cat_entry_copy_map was empty or null
344 for( var n in entries )
346 var entry = entries[n];
347 if(isTrue(entry.stat_cat().opac_visible()))
349 visibleStatCat = true;
354 if(!(isXUL() || visibleStatCat)) return;
356 var a = _cpdExtrasInit(args);
360 for( var n in entries ) {
361 var entry = entries[n];
362 if(!(isXUL() || isTrue(entry.stat_cat().opac_visible()))) continue;
363 var row = rowt.cloneNode(true);
364 $n(row, 'key').appendChild(text(entry.stat_cat().name()));
365 $n(row, 'value').appendChild(text(entry.stat_cat_entry().value()));
366 unHideMe($n(row, 'cat'));
368 tbody.appendChild(row);