1 /* - Request ------------------------------------------------------------- */
3 /* define it again here for pages that don't load RemoteRequest */
4 function isXUL() { try { if(IAMXUL) return true;}catch(e){return false;}; }
7 var cookieManager = new HTTP.Cookies();
9 var __ilsEvent; /* the last event the occurred */
12 function Request(type) {
14 var s = type.split(":");
15 if(s[2] == "1" && isXUL()) s[1] += ".staff";
16 this.request = new RemoteRequest(s[0], s[1]);
20 if(!location.href.match(/^https:/))
21 this.request.setSecure(false);
25 if( G.user && G.user.session ) {
26 /* if the user is logged in, all activity resets the timeout
27 This is not entirely accurate in the sense that not all
28 requests will reset the server timeout - this should
29 get close enough, however.
31 var at = getAuthtime();
32 if(at) new AuthTimer(at).run();
36 for( var x = 1; x!= arguments.length; x++ ) {
38 this.request.addParam(arguments[x]);
43 for( var i = 0; i != p.length; i++ ) {
44 if( i > 0 ) str += ", "
47 _debug('request ' + s[0] + ' ' + s[1] + ' ' + str );
49 } else if( DEBUGSLIM ) {
50 _debug('request ' + s[1]);
54 Request.prototype.callback = function(cal) {this.request.setCompleteCallback(cal);}
55 Request.prototype.send = function(block){this.request.send(block);}
56 Request.prototype.result = function(){return this.request.getResultObject();}
58 function showCanvas() {
59 for( var x in G.ui.altcanvas ) {
60 hideMe(G.ui.altcanvas[x]);
62 hideMe(G.ui.common.loading);
63 unHideMe(G.ui.common.canvas_main);
64 try{G.ui.searchbar.text.focus();}catch(e){}
67 function swapCanvas(newNode) {
68 for( var x in G.ui.altcanvas )
69 hideMe(G.ui.altcanvas[x]);
71 hideMe(G.ui.common.loading);
72 hideMe(G.ui.common.canvas_main);
76 /* finds the name of the current page */
77 var currentPage = null;
78 function findCurrentPage() {
79 if(currentPage) return currentPage;
82 for( var p in config.page ) pages.push(config.page[p]);
83 pages = pages.sort( function(a,b){ return - (a.length - b.length); } );
85 var path = location.pathname;
86 if(!path.match(/.*\.xml$/))
87 path += "index.xml"; /* in case they go to / */
90 for( var p in pages ) {
91 if( path.indexOf(pages[p]) != -1)
95 for( var p in config.page ) {
96 if(config.page[p] == page) {
105 /* sets all of the params values ----------------------------- */
106 function initParams() {
109 /* handle the location var */
111 var loc = cgi.param(PARAM_LOCATION);
112 var lasso = cgi.param(PARAM_LASSO);
115 lasso = findOrgLasso( lasso );
116 LASSO = lasso ? lasso.id() : null;
120 org = findOrgUnit(loc);
121 LOCATION = org ? org.id() : null;
124 org = findOrgUnit(loc);
125 LOCATION = org ? org.id() : null;
130 loc = cgi.param(PARAM_ORIGLOC);
132 org = findOrgUnit(loc);
133 if(!org) org = findOrgUnitSN(loc);
135 ORIGLOC = (org) ? org.id() : null;
138 DEPTH = parseInt(cgi.param(PARAM_DEPTH));
139 if(isNaN(DEPTH)) DEPTH = null;
142 TERM = cgi.param(PARAM_TERM);
143 STYPE = cgi.param(PARAM_STYPE);
144 FORM = cgi.param(PARAM_FORM);
145 //DEPTH = parseInt(cgi.param(PARAM_DEPTH));
146 OFFSET = parseInt(cgi.param(PARAM_OFFSET));
147 COUNT = parseInt(cgi.param(PARAM_COUNT));
148 HITCOUNT = parseInt(cgi.param(PARAM_HITCOUNT));
149 MRID = parseInt(cgi.param(PARAM_MRID));
150 RID = parseInt(cgi.param(PARAM_RID));
151 AUTHTIME = parseInt(cgi.param(PARAM_AUTHTIME));
152 ADVTERM = cgi.param(PARAM_ADVTERM);
153 ADVTYPE = cgi.param(PARAM_ADVTYPE);
154 RTYPE = cgi.param(PARAM_RTYPE);
155 SORT = cgi.param(PARAM_SORT);
156 SORT_DIR = cgi.param(PARAM_SORT_DIR);
157 DEBUG = cgi.param(PARAM_DEBUG);
158 CALLNUM = cgi.param(PARAM_CN);
159 LITFORM = cgi.param(PARAM_LITFORM);
160 ITEMFORM = cgi.param(PARAM_ITEMFORM);
161 ITEMTYPE = cgi.param(PARAM_ITEMTYPE);
162 BIBLEVEL = cgi.param(PARAM_BIBLEVEL);
163 AUDIENCE = cgi.param(PARAM_AUDIENCE);
164 SEARCHES = cgi.param(PARAM_SEARCHES);
165 LANGUAGE = cgi.param(PARAM_LANGUAGE);
166 TFORM = cgi.param(PARAM_TFORM);
167 RDEPTH = cgi.param(PARAM_RDEPTH);
168 AVAIL = cgi.param(PARAM_AVAIL);
169 COPYLOCS = cgi.param(PARAM_COPYLOCS);
170 PUBD_BEFORE = cgi.param(PARAM_PUBD_BEFORE);
171 PUBD_AFTER = cgi.param(PARAM_PUBD_AFTER);
172 PUBD_BETWEEN = cgi.param(PARAM_PUBD_BETWEEN);
173 PUBD_DURING = cgi.param(PARAM_PUBD_DURING);
176 /* set up some sane defaults */
177 //if(isNaN(DEPTH)) DEPTH = 0;
178 if(isNaN(RDEPTH)) RDEPTH = 0;
179 if(isNaN(OFFSET)) OFFSET = 0;
180 if(isNaN(COUNT)) COUNT = 10;
181 if(isNaN(HITCOUNT)) HITCOUNT = 0;
182 if(isNaN(MRID)) MRID = 0;
183 if(isNaN(RID)) RID = 0;
184 if(isNaN(ORIGLOC)) ORIGLOC = 0; /* so we know it hasn't been set */
185 if(isNaN(AUTHTIME)) AUTHTIME = 0;
186 if(ADVTERM==null) ADVTERM = "";
187 if(isNaN(AVAIL)) AVAIL = 0;
190 function clearSearchParams() {
222 function initCookies() {
223 FONTSIZE = "regular";
224 var font = cookieManager.read(COOKIE_FONT);
226 if(font) FONTSIZE = font;
227 SKIN = cookieManager.read(COOKIE_SKIN);
228 if(findCurrentPage() == HOME)
229 cookieManager.remove(COOKIE_SEARCH);
232 /* URL param accessors */
233 function getTerm(){return TERM;}
234 function getStype(){return STYPE;}
235 function getLocation(){return LOCATION;}
236 function getLasso(){return LASSO;}
237 function getDepth(){return DEPTH;}
238 function getForm(){return FORM;}
239 function getTform(){return TFORM;}
240 function getOffset(){return OFFSET;}
241 function getDisplayCount(){return COUNT;}
242 function getHitCount(){return HITCOUNT;}
243 function getMrid(){return MRID;};
244 function getRid(){return RID;};
245 function getOrigLocation(){return ORIGLOC;}
246 function getAuthtime() { return AUTHTIME; }
247 function getSearchBarExtras(){return SBEXTRAS;}
248 function getFontSize(){return FONTSIZE;};
249 function getSkin(){return SKIN;};
250 function getAdvTerm(){return ADVTERM;}
251 function getAdvType(){return ADVTYPE;}
252 function getRtype(){return RTYPE;}
253 function getSort(){return SORT;}
254 function getSortDir(){return SORT_DIR;}
255 function getDebug(){return DEBUG;}
256 function getCallnumber() { return CALLNUM; }
257 function getLitForm() { return LITFORM; }
258 function getItemForm() { return ITEMFORM; }
259 function getItemType() { return ITEMTYPE; }
260 function getBibLevel() { return BIBLEVEL; }
261 function getAudience() { return AUDIENCE; }
262 function getSearches() { return SEARCHES; }
263 function getLanguage() { return LANGUAGE; }
264 function getRdepth() { return RDEPTH; }
265 function getAvail() { return AVAIL; }
266 function getCopyLocs() { return COPYLOCS; }
267 function getPubdBefore() { return PUBD_BEFORE; }
268 function getPubdAfter() { return PUBD_AFTER; }
269 function getPubdBetween() { return PUBD_BETWEEN; }
270 function getPubdDuring() { return PUBD_DURING; }
273 function findBasePath() {
274 var path = location.pathname;
275 if(!path.match(/.*\.xml$/)) path += "index.xml";
276 var idx = path.indexOf(config.page[findCurrentPage()]);
277 return path.substring(0, idx);
280 function findBaseURL(ssl) {
281 var path = findBasePath();
282 var proto = (ssl) ? "https:" : "http:";
284 /* strip port numbers. This is necessary for browsers that
285 send an explicit <host>:80, 443 - explicit ports
286 break links that need to change ports (e.g. http -> https) */
287 var h = location.host.replace(/:.*/,'');
289 return proto + "//" + h + path;
293 function buildISBNSrc(isbn) {
294 return "http://" + location.host + "/jackets/" + isbn;
298 function buildImageLink(name, ssl) {
299 return findBaseURL(ssl) + "../../../../images/" + name;
302 function buildExtrasLink(name, ssl) {
303 return findBaseURL(ssl) + "../../../../extras/" + name;
307 function _debug(str) {
308 try { dump('dbg: ' + str + '\n'); } catch(e) {}
310 /* potentially useful, but usually just annoying */
313 if(!consoleService) {
315 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
316 this.consoleService = Components.classes['@mozilla.org/consoleservice;1']
317 .getService(Components.interfaces.nsIConsoleService);
323 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
324 consoleService.logStringMessage(str + '\n');
331 function buildOPACLink(args, slim, ssl) {
337 string = findBaseURL(ssl);
338 if(args.page) string += config.page[args.page];
339 else string += config.page[findCurrentPage()];
342 /* this may seem unnecessary.. safety precaution for now */
344 if( args[PARAM_DEPTH] == null )
345 args[PARAM_DEPTH] = getDepth();
350 for( var x in args ) {
352 if(x == "page" || v == null || v == undefined || v+'' == 'NaN' ) continue;
353 if(x == PARAM_OFFSET && v == 0) continue;
354 if(x == PARAM_COUNT && v == 10) continue;
355 if(x == PARAM_FORM && v == 'all' ) continue;
356 if( instanceOf(v, Array) && v.length ) {
357 for( var i = 0; i < v.length; i++ ) {
358 string += "&" + x + "=" + encodeURIComponent(v[i]);
361 string += "&" + x + "=" + encodeURIComponent(v);
366 string += _appendParam(DEBUG, PARAM_DEBUG, args, getDebug, string);
367 if(getOrigLocation() != 1)
368 string += _appendParam(ORIGLOC, PARAM_ORIGLOC, args, getOrigLocation, string);
370 string += _appendParam(TERM, PARAM_TERM, args, getTerm, string);
372 string += _appendParam(STYPE, PARAM_STYPE, args, getStype, string);
373 if(getLocation() != 1)
374 string += _appendParam(LOCATION, PARAM_LOCATION, args, getLocation, string);
375 if(getLasso() != null)
376 string += _appendParam(LASSO, PARAM_LASSO, args, getLasso, string);
377 if(getDepth() != null)
378 string += _appendParam(DEPTH, PARAM_DEPTH, args, getDepth, string);
379 if(getForm() && (getForm() != 'all') )
380 string += _appendParam(FORM, PARAM_FORM, args, getForm, string);
381 if(getTform() && (getTform() != 'all') )
382 string += _appendParam(TFORM, PARAM_TFORM, args, getTform, string);
384 string += _appendParam(OFFSET, PARAM_OFFSET, args, getOffset, string);
385 if(getDisplayCount() != 10)
386 string += _appendParam(COUNT, PARAM_COUNT, args, getDisplayCount, string);
388 string += _appendParam(HITCOUNT, PARAM_HITCOUNT, args, getHitCount, string);
390 string += _appendParam(MRID, PARAM_MRID, args, getMrid, string);
392 string += _appendParam(RID, PARAM_RID, args, getRid, string);
394 string += _appendParam(AUTHTIME, PARAM_AUTHTIME, args, getAuthtime, string);
396 string += _appendParam(ADVTERM, PARAM_ADVTERM, args, getAdvTerm, string);
398 string += _appendParam(ADVTYPE, PARAM_ADVTYPE, args, getAdvType, string);
400 string += _appendParam(RTYPE, PARAM_RTYPE, args, getRtype, string);
402 string += _appendParam(ITEMFORM, PARAM_ITEMFORM, args, getItemForm, string);
404 string += _appendParam(ITEMTYPE, PARAM_ITEMTYPE, args, getItemType, string);
406 string += _appendParam(BIBLEVEL, PARAM_BIBLEVEL, args, getBibLevel, string);
408 string += _appendParam(LITFORM, PARAM_LITFORM, args, getLitForm, string);
410 string += _appendParam(AUDIENCE, PARAM_AUDIENCE, args, getAudience, string);
412 string += _appendParam(SEARCHES, PARAM_SEARCHES, args, getSearches, string);
414 string += _appendParam(LANGUAGE, PARAM_LANGUAGE, args, getLanguage, string);
415 if(getRdepth() != null)
416 string += _appendParam(RDEPTH, PARAM_RDEPTH, args, getRdepth, string);
417 if(getSort() != null)
418 string += _appendParam(SORT, PARAM_SORT, args, getSort, string);
419 if(getSortDir() != null)
420 string += _appendParam(SORT_DIR, PARAM_SORT_DIR, args, getSortDir, string);
422 string += _appendParam(AVAIL, PARAM_AVAIL, args, getAvail, string);
424 string += _appendParam(COPYLOCS, PARAM_COPYLOCS, args, getCopyLocs, string);
426 string += _appendParam(PUBD_BEFORE, PARAM_PUBD_BEFORE, args, getPubdBefore, string);
428 string += _appendParam(PUBD_AFTER, PARAM_PUBD_AFTER, args, getPubdAfter, string);
430 string += _appendParam(PUBD_BETWEEN, PARAM_PUBD_BETWEEN, args, getPubdBetween, string);
432 string += _appendParam(PUBD_DURING, PARAM_PUBD_DURING, args, getPubdDuring, string);
435 return string.replace(/\&$/,'').replace(/\?\&/,"?");
439 function _appendParam( fieldVar, fieldName, overrideArgs, getFunc, string ) {
443 if( fieldVar != null &&
444 (fieldVar +'' != 'NaN') &&
445 overrideArgs[fieldName] == null &&
447 getFunc()+'' != '' ) {
449 ret = "&" + fieldName + "=" + encodeURIComponent(getFunc());
455 /* ----------------------------------------------------------------------- */
456 function cleanISBN(isbn) {
458 isbn = isbn.toString().replace(/^\s+/,"");
459 var idx = isbn.indexOf(" ");
460 if(idx > -1) { isbn = isbn.substring(0, idx); }
466 /* builds a link that goes to the title listings for a metarecord */
467 function buildTitleLink(rec, link) {
469 link.appendChild(text(normalize(truncate(rec.title(), 65))));
472 args[PARAM_OFFSET] = 0;
473 args[PARAM_MRID] = rec.doc_id();
474 args[PARAM_RTYPE] = RTYPE_MRID;
475 link.setAttribute("href", buildOPACLink(args));
478 function buildTitleDetailLink(rec, link) {
480 link.appendChild(text(normalize(truncate(rec.title(), 65))));
483 //args[PARAM_OFFSET] = 0;
484 args[PARAM_RID] = rec.doc_id();
485 link.setAttribute("href", buildOPACLink(args));
488 /* 'type' is one of STYPE_AUTHOR, STYPE_SUBJECT, ... found in config.js
489 'trunc' is the number of characters to show in the string, defaults to 65 */
490 function buildSearchLink(type, string, linknode, trunc) {
491 if(!trunc) trunc = 65;
493 if( SHOW_MR_DEFAULT) {
497 args[PARAM_RTYPE] = type;
499 args[PARAM_OFFSET] = 0;
500 args[PARAM_TERM] = string;
501 args[PARAM_STYPE] = type;
502 linknode.appendChild(text(normalize(truncate(string, trunc))));
503 linknode.setAttribute("href", buildOPACLink(args));
506 function setSessionCookie(ses) {
507 cookieManager.write(COOKIE_SES, ses, -1);
512 /* ----------------------------------------------------------------------- */
513 /* user session handling */
514 /* ----------------------------------------------------------------------- */
515 /* session is the login session. If no session is provided, we attempt
516 to find one in the cookies. If 'force' is true we retrieve the
517 user from the server even if there is already a global user present.
518 if ses != G.user.session, we also force a grab */
519 function grabUser(ses, force) {
521 if(!ses && isXUL()) {
522 stash = fetchXULStash();
523 ses = stash.session.key
524 _debug("stash auth token = " + ses);
528 ses = cookieManager.read(COOKIE_SES);
529 /* https cookies don't show up in http servers.. */
532 if(!ses) return false;
535 if(G.user && G.user.session == ses)
538 /* first make sure the session is valid */
539 var request = new Request(FETCH_SESSION, ses, 1 );
540 request.request.alertEvent = false;
542 var user = request.result();
546 return false; /* unable to grab the session */
549 if( !(typeof user == 'object' && user._isfieldmapper) ) {
555 G.user.fleshed = false;
556 G.user.session = ses;
557 setSessionCookie(ses);
560 if(G.user.prefs['opac.hits_per_page'])
561 COUNT = parseInt(G.user.prefs['opac.hits_per_page']);
563 if(G.user.prefs[PREF_DEF_FONT])
564 setFontSize(G.user.prefs[PREF_DEF_FONT]);
566 var at = getAuthtime();
567 //if(isXUL()) at = xulG['authtime'];
569 if(at && !isXUL()) new AuthTimer(at).run();
574 /* sets the 'prefs' field of the user object to their preferences
575 and returns the preferences */
576 function grabUserPrefs(user, force) {
577 if(user == null) user = G.user;
578 if(!force && user.prefs) return user.prefs;
579 var req = new Request(FETCH_USER_PREFS, user.session, user.id());
581 user.prefs = req.result();
585 function grabFleshedUser() {
587 if(!G.user || !G.user.session) {
589 if(!G.user || !G.user.session) return null;
592 if(G.user.fleshed) return G.user;
594 var req = new Request(FETCH_FLESHED_USER, G.user.session);
597 G.user = req.result();
599 if(!G.user || G.user.length == 0) {
600 G.user = null; return false;
601 cookieManager.write(COOKIE_SES,"");
604 G.user.session = ses;
605 G.user.fleshed = true;
607 setSessionCookie(ses);
611 function checkUserSkin(new_skin) {
613 return; /* XXX do some debugging with this... */
615 var user_skin = getSkin();
616 var cur_skin = grabSkinFromURL();
618 if(new_skin) user_skin = new_skin;
623 if(grabUserPrefs()) {
624 user_skin = G.user.prefs["opac.skin"];
625 cookieManager.write( COOKIE_SKIN, user_skin, '+1y' );
630 if(!user_skin) return;
632 if( cur_skin != user_skin ) {
633 var url = buildOPACLink();
634 goTo(url.replace(cur_skin, user_skin));
638 function updateUserSetting(setting, value, user) {
639 if(user == null) user = G.user;
642 var req = new Request( UPDATE_USER_PREFS, user.session, a );
647 function commitUserPrefs() {
648 var req = new Request(
649 UPDATE_USER_PREFS, G.user.session, null, G.user.prefs );
654 function grabSkinFromURL() {
655 var path = findBasePath();
656 path = path.replace("/xml/", "");
658 for( var i = path.length - 1; i >= 0; i-- ) {
659 var ch = path.charAt(i);
665 for( i = skin.length - 1; i >= 0; i--)
666 skin2 += skin.charAt(i);
672 /* returns a fleshed G.user on success, false on failure */
673 function doLogin(suppressEvents) {
677 var uname = G.ui.login.username.value;
678 var passwd = G.ui.login.password.value;
680 var init_request = new Request( LOGIN_INIT, uname );
681 init_request.send(true);
682 var seed = init_request.result();
684 if( ! seed || seed == '0') {
685 alert( "Error Communicating with Authentication Server" );
690 password : hex_md5(seed + hex_md5(passwd)),
692 org : getOrigLocation()
695 r = fetchOrgSettingDefault(globalOrgTree.id(), 'opac.barcode_regex');
696 if(r) REGEX_BARCODE = new RegExp(r);
698 if( uname.match(REGEX_BARCODE) ) args.barcode = uname;
699 else args.username = uname;
701 var auth_request = new Request( LOGIN_COMPLETE, args );
703 auth_request.request.alertEvent = false;
704 auth_request.send(true);
705 var auth_result = auth_request.result();
708 alertId('patron_login_failed');
712 if( checkILSEvent(auth_result) ) {
714 if( auth_result.textcode == 'PATRON_INACTIVE' ) {
715 alertId('patron_inactive_alert');
719 if( auth_result.textcode == 'PATRON_CARD_INACTIVE' ) {
720 alertId('patron_card_inactive_alert');
724 if( auth_result.textcode == 'LOGIN_FAILED' ||
725 auth_result.textcode == 'PERM_FAILURE' ) {
726 alertId('patron_login_failed');
732 AUTHTIME = parseInt(auth_result.payload.authtime);
733 var u = grabUser(auth_result.payload.authtoken, true);
734 if(u && ! suppressEvents)
735 runEvt( "common", "locationChanged", u.ws_ou(), findOrgDepth(u.ws_ou()) );
742 function doLogout() {
744 /* cancel everything else */
747 /* be nice and delete the session from the server */
748 if(G.user && G.user.session) {
749 var req = new Request(LOGIN_DELETE, G.user.session);
751 try { req.result(); } catch(E){}
756 /* remove any cached data */
757 //cookieManager.remove(COOKIE_IDS);
758 //cookieManager.remove(COOKIE_SRIDS);
759 cookieManager.remove(COOKIE_RIDS);
760 cookieManager.remove(COOKIE_SES);
761 cookieManager.remove(COOKIE_SKIN);
762 cookieManager.remove(COOKIE_SEARCH);
764 checkUserSkin("default");
769 args[PARAM_TERM] = "";
770 args[PARAM_LOCATION] = getOrigLocation();
771 args[PARAM_DEPTH] = findOrgDepth(getOrigLocation());
776 try{ if(isFrontPage) nored = true; } catch(e){nored = false;}
777 if(!nored) goTo(buildOPACLink(args));
781 function hideMe(obj) { addCSSClass(obj, config.css.hide_me); }
782 function unHideMe(obj) { removeCSSClass(obj, config.css.hide_me); }
785 /* ----------------------------------------------------------------------- */
786 /* build the org tree */
787 /* ----------------------------------------------------------------------- */
788 function drawOrgTree() {
789 //setTimeout( 'buildOrgSelector(G.ui.common.org_tree, orgTreeSelector);', 10 );
790 setTimeout( 'buildOrgSelector(G.ui.common.org_tree, orgTreeSelector);', 1 );
794 function buildOrgSelector(node) {
795 var tree = new SlimTree(node,'orgTreeSelector');
796 orgTreeSelector = tree;
797 for( var i in orgArraySearcher ) {
798 var node = orgArraySearcher[i];
799 if( node == null ) continue;
800 if(!isXUL() && !isTrue(node.opac_visible())) continue;
801 if(node.parent_ou() == null)
802 tree.addNode(node.id(), -1, node.name(),
803 "javascript:orgSelect(" + node.id() + ");", node.name());
805 tree.addNode(node.id(), node.parent_ou(), node.name(),
806 "javascript:orgSelect(" + node.id() + ");", node.name());
809 hideMe($('org_loading_div'));
810 unHideMe($('org_selector_tip'));
814 function orgSelect(id) {
816 runEvt("common", "locationChanged", id, findOrgDepth(id) );
819 var loc = findOrgLasso(getLasso());
820 if (!loc) loc = findOrgUnit(id);
822 removeChildren(G.ui.common.now_searching);
823 G.ui.common.now_searching.appendChild(text(loc.name()));
826 function setFontSize(size) {
828 cookieManager.write(COOKIE_FONT, size, '+1y');
831 var resourceFormats = [
834 "sound recording", "software, multimedia",
839 "three dimensional object" ];
842 function modsFormatToMARC(format) {
848 case "sound recording":
850 case "sound recording-nonmusical":
852 case "sound recording-musical":
854 case "software, multimedia":
860 case "mixed material":
862 case "notated music":
864 case "three dimensional object":
871 function MARCFormatToMods(format) {
877 return "moving image";
879 return "sound recording-nonmusical";
881 return "sound recording-musical";
883 return "software, multimedia";
885 return "still image";
888 return "cartographic";
891 return "mixed material";
894 return "notated music";
896 return "three dimensional object";
901 function MARCTypeToFriendly(format) {
902 var words = $('format_words');
905 case 't' : return $n(words, 'at').innerHTML;
907 var node = $n(words,format);
908 if( node ) return node.innerHTML;
913 function setResourcePic( img, resource ) {
914 img.setAttribute( "src", "../../../../images/tor/" + resource + ".jpg");
915 img.title = resource;
920 function msg( text ) {
921 try { alert( text ); } catch(e) {}
924 function findRecord(id,type) {
926 for( var i = 0; i != recordsCache.length; i++ ) {
927 var rec = recordsCache[i];
928 if( rec && rec.doc_id() == id ) return rec;
931 var meth = FETCH_RMODS
932 if(type == 'M') meth = FETCH_MRMODS;
933 var req = new Request(meth, id);
934 req.request.alertEvent = false;
936 var res = req.result();
937 if( checkILSEvent(res) ) return null;
941 function Timer(name, node){
946 Timer.prototype.start =
947 function(){_timerRun(this.name);}
948 Timer.prototype.stop =
949 function(){this.done = true;}
950 function _timerRun(tname) {
954 if(_t.count > 100) return;
956 if( (_t.count % 5) == 0 )
958 _t.node.appendChild(text(str));
959 setTimeout("_timerRun('"+tname+"');", 200);
963 function checkILSEvent(obj) {
964 if( obj && obj.ilsevent != null && obj.ilsevent != 0 )
965 return parseInt(obj.ilsevent);
970 function alertILSEvent(evt, msg) {
973 alert(msg +'\n' + evt.textcode + '\n' + evt.desc );
975 alert(evt.textcode + '\n' + evt.desc );
980 function AuthTimer(time) {
981 this.time = (time - LOGOUT_WARNING_TIME) * 1000;
983 try {clearTimeout(__authTimer.id)} catch(e){}
987 AuthTimer.prototype.run = function() {
988 this.id = setTimeout('_authTimerAlert()', this.time);
991 function _authTimerAlert() {
992 alert( $('auth_session_expiring').innerHTML );
993 if(!grabUser(null, true)) doLogout();
997 function grabUserByBarcode( authtoken, barcode ) {
998 var req = new Request( FETCH_USER_BYBARCODE, authtoken, barcode );
1000 return req.result();
1005 goTo(buildOPACLink({page:HOME}));
1009 function buildOrgSel(selector, org, offset, namecol) {
1010 if(!namecol) namecol = 'name';
1011 insertSelectorVal( selector, -1,
1012 org[namecol](), org.id(), null, findOrgDepth(org) - offset );
1013 for( var c in org.children() )
1014 buildOrgSel( selector, org.children()[c], offset, namecol);
1017 function buildMergedOrgSel(selector, org_list, offset, namecol) {
1018 if(!namecol) namecol = 'name';
1019 for(var i = 0; i < org_list.length; i++) {
1020 var org = findOrgUnit(org_list[i]);
1021 insertSelectorVal( selector, -1,
1022 org[namecol](), org.id(), null, findOrgDepth(org) - offset );
1023 for( var c in org.children() )
1024 buildOrgSel( selector, org.children()[c], offset, namecol);
1029 function parseForm(form) {
1030 if(!form) return {};
1032 var it = form.replace(/-\w+$/,"");
1037 if(form.match(/-/)) itf = form.replace(/^\w+-/,"");
1041 for( var i = 0; i < it.length; i++ )
1042 item_type.push( it.charAt(i) );
1047 for( var i = 0; i < itf.length; i++ )
1048 item_form.push( itf.charAt(i) );
1051 return {item_type: item_type, item_form:item_form};
1055 function isTrue(x) { return ( x && x != "0" && !(x+'').match(/^f$/i) ); }
1057 function fetchPermOrgs() {
1058 var a = []; /* why does arguments come accross as an object and not an array? */
1059 for( var i = 0; i < arguments.length; i++ )
1060 a.push(arguments[i])
1062 var preq = new Request(FETCH_HIGHEST_PERM_ORG,
1063 G.user.session, G.user.id(), a );
1065 return preq.result();
1069 function print_tabs(t) {
1071 for (var j = 0; j < t; j++ ) { r = r + " "; }
1074 function formatJSON(s) {
1075 var r = ''; var t = 0;
1077 if (s[i] == '{' || s[i] == '[' ) {
1078 r = r + s[i] + "\n" + print_tabs(++t);
1079 } else if (s[i] == '}' || s[i] == ']') {
1080 t--; r = r + "\n" + print_tabs(t) + s[i];
1081 } else if (s[i] == ',') {
1082 r = r + s[i] + "\n" + print_tabs(t);