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);
114 org = findOrgUnit(loc);
115 LOCATION = org ? org.id() : null;
119 org = findOrgLasso( -loc );
120 LOCATION = org ? -org.id() : null;
123 org = findOrgUnit(loc);
124 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);
170 /* set up some sane defaults */
171 //if(isNaN(DEPTH)) DEPTH = 0;
172 if(isNaN(RDEPTH)) RDEPTH = 0;
173 if(isNaN(OFFSET)) OFFSET = 0;
174 if(isNaN(COUNT)) COUNT = 10;
175 if(isNaN(HITCOUNT)) HITCOUNT = 0;
176 if(isNaN(MRID)) MRID = 0;
177 if(isNaN(RID)) RID = 0;
178 if(isNaN(ORIGLOC)) ORIGLOC = 0; /* so we know it hasn't been set */
179 if(isNaN(AUTHTIME)) AUTHTIME = 0;
180 if(ADVTERM==null) ADVTERM = "";
181 if(isNaN(AVAIL)) AVAIL = 0;
184 function clearSearchParams() {
211 function initCookies() {
212 FONTSIZE = "regular";
213 var font = cookieManager.read(COOKIE_FONT);
215 if(font) FONTSIZE = font;
216 SKIN = cookieManager.read(COOKIE_SKIN);
217 if(findCurrentPage() == HOME)
218 cookieManager.remove(COOKIE_SEARCH);
223 /* URL param accessors */
224 function getTerm(){return TERM;}
225 function getStype(){return STYPE;}
226 function getLocation(){return LOCATION;}
227 function getDepth(){return DEPTH;}
228 function getForm(){return FORM;}
229 function getTform(){return TFORM;}
230 function getOffset(){return OFFSET;}
231 function getDisplayCount(){return COUNT;}
232 function getHitCount(){return HITCOUNT;}
233 function getMrid(){return MRID;};
234 function getRid(){return RID;};
235 function getOrigLocation(){return ORIGLOC;}
236 function getAuthtime() { return AUTHTIME; }
237 function getSearchBarExtras(){return SBEXTRAS;}
238 function getFontSize(){return FONTSIZE;};
239 function getSkin(){return SKIN;};
240 function getAdvTerm(){return ADVTERM;}
241 function getAdvType(){return ADVTYPE;}
242 function getRtype(){return RTYPE;}
243 function getSort(){return SORT;}
244 function getSortDir(){return SORT_DIR;}
245 function getDebug(){return DEBUG;}
246 function getCallnumber() { return CALLNUM; }
247 function getLitForm() { return LITFORM; }
248 function getItemForm() { return ITEMFORM; }
249 function getItemType() { return ITEMTYPE; }
250 function getBibLevel() { return BIBLEVEL; }
251 function getAudience() { return AUDIENCE; }
252 function getSearches() { return SEARCHES; }
253 function getLanguage() { return LANGUAGE; }
254 function getRdepth() { return RDEPTH; }
255 function getAvail() { return AVAIL; }
258 function findBasePath() {
259 var path = location.pathname;
260 if(!path.match(/.*\.xml$/)) path += "index.xml";
261 var idx = path.indexOf(config.page[findCurrentPage()]);
262 return path.substring(0, idx);
265 function findBaseURL(ssl) {
266 var path = findBasePath();
267 var proto = (ssl) ? "https:" : "http:";
269 /* strip port numbers. This is necessary for browsers that
270 send an explicit <host>:80, 443 - explicit ports
271 break links that need to change ports (e.g. http -> https) */
272 var h = location.host.replace(/:.*/,'');
274 return proto + "//" + h + path;
278 function buildISBNSrc(isbn) {
279 return "http://" + location.host + "/jackets/" + isbn;
283 function buildImageLink(name, ssl) {
284 return findBaseURL(ssl) + "../../../../images/" + name;
287 function buildExtrasLink(name, ssl) {
288 return findBaseURL(ssl) + "../../../../extras/" + name;
292 function _debug(str) {
293 try { dump('dbg: ' + str + '\n'); } catch(e) {}
295 /* potentially useful, but usually just annoying */
298 if(!consoleService) {
300 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
301 this.consoleService = Components.classes['@mozilla.org/consoleservice;1']
302 .getService(Components.interfaces.nsIConsoleService);
308 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
309 consoleService.logStringMessage(str + '\n');
316 function buildOPACLink(args, slim, ssl) {
322 string = findBaseURL(ssl);
323 if(args.page) string += config.page[args.page];
324 else string += config.page[findCurrentPage()];
327 /* this may seem unnecessary.. safety precaution for now */
329 if( args[PARAM_DEPTH] == null )
330 args[PARAM_DEPTH] = getDepth();
335 for( var x in args ) {
337 if(x == "page" || v == null || v == undefined || v+'' == 'NaN' ) continue;
338 if(x == PARAM_OFFSET && v == 0) continue;
339 if(x == PARAM_COUNT && v == 10) continue;
340 if(x == PARAM_FORM && v == 'all' ) continue;
341 if( instanceOf(v, Array) && v.length ) {
342 for( var i = 0; i < v.length; i++ ) {
343 string += "&" + x + "=" + encodeURIComponent(v[i]);
346 string += "&" + x + "=" + encodeURIComponent(v);
351 string += _appendParam(DEBUG, PARAM_DEBUG, args, getDebug, string);
352 if(getOrigLocation() != 1)
353 string += _appendParam(ORIGLOC, PARAM_ORIGLOC, args, getOrigLocation, string);
355 string += _appendParam(TERM, PARAM_TERM, args, getTerm, string);
357 string += _appendParam(STYPE, PARAM_STYPE, args, getStype, string);
358 if(getLocation() != 1)
359 string += _appendParam(LOCATION, PARAM_LOCATION, args, getLocation, string);
360 if(getDepth() != null)
361 string += _appendParam(DEPTH, PARAM_DEPTH, args, getDepth, string);
362 if(getForm() && (getForm() != 'all') )
363 string += _appendParam(FORM, PARAM_FORM, args, getForm, string);
364 if(getTform() && (getTform() != 'all') )
365 string += _appendParam(TFORM, PARAM_TFORM, args, getTform, string);
367 string += _appendParam(OFFSET, PARAM_OFFSET, args, getOffset, string);
368 if(getDisplayCount() != 10)
369 string += _appendParam(COUNT, PARAM_COUNT, args, getDisplayCount, string);
371 string += _appendParam(HITCOUNT, PARAM_HITCOUNT, args, getHitCount, string);
373 string += _appendParam(MRID, PARAM_MRID, args, getMrid, string);
375 string += _appendParam(RID, PARAM_RID, args, getRid, string);
377 string += _appendParam(AUTHTIME, PARAM_AUTHTIME, args, getAuthtime, string);
379 string += _appendParam(ADVTERM, PARAM_ADVTERM, args, getAdvTerm, string);
381 string += _appendParam(ADVTYPE, PARAM_ADVTYPE, args, getAdvType, string);
383 string += _appendParam(RTYPE, PARAM_RTYPE, args, getRtype, string);
385 string += _appendParam(ITEMFORM, PARAM_ITEMFORM, args, getItemForm, string);
387 string += _appendParam(ITEMTYPE, PARAM_ITEMTYPE, args, getItemType, string);
389 string += _appendParam(BIBLEVEL, PARAM_BIBLEVEL, args, getBibLevel, string);
391 string += _appendParam(LITFORM, PARAM_LITFORM, args, getLitForm, string);
393 string += _appendParam(AUDIENCE, PARAM_AUDIENCE, args, getAudience, string);
395 string += _appendParam(SEARCHES, PARAM_SEARCHES, args, getSearches, string);
397 string += _appendParam(LANGUAGE, PARAM_LANGUAGE, args, getLanguage, string);
398 if(getRdepth() != null)
399 string += _appendParam(RDEPTH, PARAM_RDEPTH, args, getRdepth, string);
400 if(getSort() != null)
401 string += _appendParam(SORT, PARAM_SORT, args, getSort, string);
402 if(getSortDir() != null)
403 string += _appendParam(SORT_DIR, PARAM_SORT_DIR, args, getSortDir, string);
405 string += _appendParam(AVAIL, PARAM_AVAIL, args, getAvail, string);
407 return string.replace(/\&$/,'').replace(/\?\&/,"?");
411 function _appendParam( fieldVar, fieldName, overrideArgs, getFunc, string ) {
415 if( fieldVar != null &&
416 (fieldVar +'' != 'NaN') &&
417 overrideArgs[fieldName] == null &&
419 getFunc()+'' != '' ) {
421 ret = "&" + fieldName + "=" + encodeURIComponent(getFunc());
427 /* ----------------------------------------------------------------------- */
428 function cleanISBN(isbn) {
430 isbn = isbn.toString().replace(/^\s+/,"");
431 var idx = isbn.indexOf(" ");
432 if(idx > -1) { isbn = isbn.substring(0, idx); }
438 /* builds a link that goes to the title listings for a metarecord */
439 function buildTitleLink(rec, link) {
441 link.appendChild(text(normalize(truncate(rec.title(), 65))));
444 args[PARAM_OFFSET] = 0;
445 args[PARAM_MRID] = rec.doc_id();
446 args[PARAM_RTYPE] = RTYPE_MRID;
447 link.setAttribute("href", buildOPACLink(args));
450 function buildTitleDetailLink(rec, link) {
452 link.appendChild(text(normalize(truncate(rec.title(), 65))));
455 //args[PARAM_OFFSET] = 0;
456 args[PARAM_RID] = rec.doc_id();
457 link.setAttribute("href", buildOPACLink(args));
460 /* 'type' is one of STYPE_AUTHOR, STYPE_SUBJECT, ... found in config.js
461 'trunc' is the number of characters to show in the string, defaults to 65 */
462 function buildSearchLink(type, string, linknode, trunc) {
463 if(!trunc) trunc = 65;
465 if( SHOW_MR_DEFAULT) {
469 args[PARAM_RTYPE] = type;
471 args[PARAM_OFFSET] = 0;
472 args[PARAM_TERM] = string;
473 args[PARAM_STYPE] = type;
474 linknode.appendChild(text(normalize(truncate(string, trunc))));
475 linknode.setAttribute("href", buildOPACLink(args));
478 function setSessionCookie(ses) {
479 cookieManager.write(COOKIE_SES, ses, -1);
484 /* ----------------------------------------------------------------------- */
485 /* user session handling */
486 /* ----------------------------------------------------------------------- */
487 /* session is the login session. If no session is provided, we attempt
488 to find one in the cookies. If 'force' is true we retrieve the
489 user from the server even if there is already a global user present.
490 if ses != G.user.session, we also force a grab */
491 function grabUser(ses, force) {
493 if(!ses && isXUL()) {
494 stash = fetchXULStash();
495 ses = stash.session.key
496 _debug("stash auth token = " + ses);
500 ses = cookieManager.read(COOKIE_SES);
501 /* https cookies don't show up in http servers.. */
504 if(!ses) return false;
507 if(G.user && G.user.session == ses)
510 /* first make sure the session is valid */
511 var request = new Request(FETCH_SESSION, ses, 1 );
512 request.request.alertEvent = false;
514 var user = request.result();
518 return false; /* unable to grab the session */
521 if( !(typeof user == 'object' && user._isfieldmapper) ) {
527 G.user.fleshed = false;
528 G.user.session = ses;
529 setSessionCookie(ses);
532 if(G.user.prefs['opac.hits_per_page'])
533 COUNT = parseInt(G.user.prefs['opac.hits_per_page']);
535 if(G.user.prefs[PREF_DEF_FONT])
536 setFontSize(G.user.prefs[PREF_DEF_FONT]);
538 var at = getAuthtime();
539 //if(isXUL()) at = xulG['authtime'];
541 if(at && !isXUL()) new AuthTimer(at).run();
546 /* sets the 'prefs' field of the user object to their preferences
547 and returns the preferences */
548 function grabUserPrefs(user, force) {
549 if(user == null) user = G.user;
550 if(!force && user.prefs) return user.prefs;
551 var req = new Request(FETCH_USER_PREFS, user.session, user.id());
553 user.prefs = req.result();
557 function grabFleshedUser() {
559 if(!G.user || !G.user.session) {
561 if(!G.user || !G.user.session) return null;
564 if(G.user.fleshed) return G.user;
566 var req = new Request(FETCH_FLESHED_USER, G.user.session);
569 G.user = req.result();
571 if(!G.user || G.user.length == 0) {
572 G.user = null; return false;
573 cookieManager.write(COOKIE_SES,"");
576 G.user.session = ses;
577 G.user.fleshed = true;
579 setSessionCookie(ses);
583 function checkUserSkin(new_skin) {
585 return; /* XXX do some debugging with this... */
587 var user_skin = getSkin();
588 var cur_skin = grabSkinFromURL();
590 if(new_skin) user_skin = new_skin;
595 if(grabUserPrefs()) {
596 user_skin = G.user.prefs["opac.skin"];
597 cookieManager.write( COOKIE_SKIN, user_skin, '+1y' );
602 if(!user_skin) return;
604 if( cur_skin != user_skin ) {
605 var url = buildOPACLink();
606 goTo(url.replace(cur_skin, user_skin));
610 function updateUserSetting(setting, value, user) {
611 if(user == null) user = G.user;
614 var req = new Request( UPDATE_USER_PREFS, user.session, a );
619 function commitUserPrefs() {
620 var req = new Request(
621 UPDATE_USER_PREFS, G.user.session, null, G.user.prefs );
626 function grabSkinFromURL() {
627 var path = findBasePath();
628 path = path.replace("/xml/", "");
630 for( var i = path.length - 1; i >= 0; i-- ) {
631 var ch = path.charAt(i);
637 for( i = skin.length - 1; i >= 0; i--)
638 skin2 += skin.charAt(i);
644 /* returns a fleshed G.user on success, false on failure */
645 function doLogin(suppressEvents) {
649 var uname = G.ui.login.username.value;
650 var passwd = G.ui.login.password.value;
652 var init_request = new Request( LOGIN_INIT, uname );
653 init_request.send(true);
654 var seed = init_request.result();
656 if( ! seed || seed == '0') {
657 alert( "Error Communicating with Authentication Server" );
662 password : hex_md5(seed + hex_md5(passwd)),
664 org : getOrigLocation()
667 r = fetchOrgSettingDefault(globalOrgTree.id(), 'opac.barcode_regex');
668 if(r) REGEX_BARCODE = new RegExp(r);
670 if( uname.match(REGEX_BARCODE) ) args.barcode = uname;
671 else args.username = uname;
673 var auth_request = new Request( LOGIN_COMPLETE, args );
675 auth_request.request.alertEvent = false;
676 auth_request.send(true);
677 var auth_result = auth_request.result();
680 alertId('patron_login_failed');
684 if( checkILSEvent(auth_result) ) {
686 if( auth_result.textcode == 'PATRON_INACTIVE' ) {
687 alertId('patron_inactive_alert');
691 if( auth_result.textcode == 'PATRON_CARD_INACTIVE' ) {
692 alertId('patron_card_inactive_alert');
696 if( auth_result.textcode == 'LOGIN_FAILED' ||
697 auth_result.textcode == 'PERM_FAILURE' ) {
698 alertId('patron_login_failed');
704 AUTHTIME = parseInt(auth_result.payload.authtime);
705 var u = grabUser(auth_result.payload.authtoken, true);
706 if(u && ! suppressEvents)
707 runEvt( "common", "locationChanged", u.ws_ou(), findOrgDepth(u.ws_ou()) );
714 function doLogout(noredirect) {
716 /* cancel everything else */
719 /* be nice and delete the session from the server */
720 if(G.user && G.user.session) {
721 var req = new Request(LOGIN_DELETE, G.user.session);
723 try { req.result(); } catch(E){}
728 /* remove any cached data */
729 //cookieManager.remove(COOKIE_IDS);
730 //cookieManager.remove(COOKIE_SRIDS);
731 cookieManager.remove(COOKIE_RIDS);
732 cookieManager.remove(COOKIE_SES);
733 cookieManager.remove(COOKIE_SKIN);
734 cookieManager.remove(COOKIE_SEARCH);
736 checkUserSkin("default");
741 args[PARAM_TERM] = "";
742 args[PARAM_LOCATION] = getOrigLocation();
743 args[PARAM_DEPTH] = findOrgDepth(getOrigLocation());
748 try{ if(isFrontPage) nored = true; } catch(e){nored = false;}
749 if(!nored) goTo(buildOPACLink(args));
753 function hideMe(obj) { addCSSClass(obj, config.css.hide_me); }
754 function unHideMe(obj) { removeCSSClass(obj, config.css.hide_me); }
757 /* ----------------------------------------------------------------------- */
758 /* build the org tree */
759 /* ----------------------------------------------------------------------- */
760 function drawOrgTree() {
761 //setTimeout( 'buildOrgSelector(G.ui.common.org_tree, orgTreeSelector);', 10 );
762 setTimeout( 'buildOrgSelector(G.ui.common.org_tree, orgTreeSelector);', 1 );
766 function buildOrgSelector(node) {
767 var tree = new SlimTree(node,'orgTreeSelector');
768 orgTreeSelector = tree;
769 for( var i in orgArraySearcher ) {
770 var node = orgArraySearcher[i];
771 if( node == null ) continue;
772 if(!isXUL() && !isTrue(node.opac_visible())) continue;
773 if(node.parent_ou() == null)
774 tree.addNode(node.id(), -1, node.name(),
775 "javascript:orgSelect(" + node.id() + ");", node.name());
777 tree.addNode(node.id(), node.parent_ou(), node.name(),
778 "javascript:orgSelect(" + node.id() + ");", node.name());
781 hideMe($('org_loading_div'));
782 unHideMe($('org_selector_tip'));
786 function orgSelect(id) {
788 runEvt("common", "locationChanged", id, findOrgDepth(id) );
790 removeChildren(G.ui.common.now_searching);
791 G.ui.common.now_searching.appendChild(text(findOrgUnit(id).name()));
794 function setFontSize(size) {
796 cookieManager.write(COOKIE_FONT, size, '+1y');
799 var resourceFormats = [
802 "sound recording", "software, multimedia",
807 "three dimensional object" ];
810 function modsFormatToMARC(format) {
816 case "sound recording":
818 case "sound recording-nonmusical":
820 case "sound recording-musical":
822 case "software, multimedia":
828 case "mixed material":
830 case "notated music":
832 case "three dimensional object":
839 function MARCFormatToMods(format) {
845 return "moving image";
847 return "sound recording-nonmusical";
849 return "sound recording-musical";
851 return "software, multimedia";
853 return "still image";
856 return "cartographic";
859 return "mixed material";
862 return "notated music";
864 return "three dimensional object";
869 function MARCTypeToFriendly(format) {
870 var words = $('format_words');
873 case 't' : return $n(words, 'at').innerHTML;
875 var node = $n(words,format);
876 if( node ) return node.innerHTML;
881 function setResourcePic( img, resource ) {
882 img.setAttribute( "src", "../../../../images/tor/" + resource + ".jpg");
883 img.title = resource;
888 function msg( text ) {
889 try { alert( text ); } catch(e) {}
892 function findRecord(id,type) {
894 for( var i = 0; i != recordsCache.length; i++ ) {
895 var rec = recordsCache[i];
896 if( rec && rec.doc_id() == id ) return rec;
899 var meth = FETCH_RMODS
900 if(type == 'M') meth = FETCH_MRMODS;
901 var req = new Request(meth, id);
902 req.request.alertEvent = false;
904 var res = req.result();
905 if( checkILSEvent(res) ) return null;
909 function Timer(name, node){
914 Timer.prototype.start =
915 function(){_timerRun(this.name);}
916 Timer.prototype.stop =
917 function(){this.done = true;}
918 function _timerRun(tname) {
922 if(_t.count > 100) return;
924 if( (_t.count % 5) == 0 )
926 _t.node.appendChild(text(str));
927 setTimeout("_timerRun('"+tname+"');", 200);
931 function checkILSEvent(obj) {
932 if( obj && obj.ilsevent != null && obj.ilsevent != 0 )
933 return parseInt(obj.ilsevent);
938 function alertILSEvent(evt, msg) {
941 alert(msg +'\n' + evt.textcode + '\n' + evt.desc );
943 alert(evt.textcode + '\n' + evt.desc );
948 function AuthTimer(time) {
949 this.time = (time - LOGOUT_WARNING_TIME) * 1000;
951 try {clearTimeout(__authTimer.id)} catch(e){}
955 AuthTimer.prototype.run = function() {
956 this.id = setTimeout('_authTimerAlert()', this.time);
959 function _authTimerAlert() {
960 alert( $('auth_session_expiring').innerHTML );
961 if(!grabUser(null, true)) doLogout();
965 function grabUserByBarcode( authtoken, barcode ) {
966 var req = new Request( FETCH_USER_BYBARCODE, authtoken, barcode );
973 goTo(buildOPACLink({page:HOME}));
977 function buildOrgSel(selector, org, offset) {
978 insertSelectorVal( selector, -1,
979 org.name(), org.id(), null, findOrgDepth(org) - offset );
980 for( var c in org.children() )
981 buildOrgSel( selector, org.children()[c], offset);
985 function parseForm(form) {
988 var it = form.replace(/-\w+$/,"");
993 if(form.match(/-/)) itf = form.replace(/^\w+-/,"");
997 for( var i = 0; i < it.length; i++ )
998 item_type.push( it.charAt(i) );
1003 for( var i = 0; i < itf.length; i++ )
1004 item_form.push( itf.charAt(i) );
1007 return {item_type: item_type, item_form:item_form};
1011 function isTrue(x) { return ( x && x != "0" && !(x+'').match(/^f$/i) ); }
1013 function fetchPermOrgs() {
1014 var a = []; /* why does arguments come accross as an object and not an array? */
1015 for( var i = 0; i < arguments.length; i++ )
1016 a.push(arguments[i])
1018 var preq = new Request(FETCH_HIGHEST_PERM_ORG,
1019 G.user.session, G.user.id(), a );
1021 return preq.result();
1025 function print_tabs(t) {
1027 for (var j = 0; j < t; j++ ) { r = r + " "; }
1030 function formatJSON(s) {
1031 var r = ''; var t = 0;
1033 if (s[i] == '{' || s[i] == '[' ) {
1034 r = r + s[i] + "\n" + print_tabs(++t);
1035 } else if (s[i] == '}' || s[i] == ']') {
1036 t--; r = r + "\n" + print_tabs(t) + s[i];
1037 } else if (s[i] == ',') {
1038 r = r + s[i] + "\n" + print_tabs(t);