2 function isXUL() { return IAMXUL; }
5 /* - Request ------------------------------------------------------------- */
6 function Request(type) {
7 var s = type.split(":");
8 if(s[2] == "1" && isXUL()) s[1] += ".staff";
9 this.request = new RemoteRequest(s[0], s[1]);
10 for( var x = 1; x!= arguments.length; x++ )
11 this.request.addParam(arguments[x]);
14 Request.prototype.callback = function(cal) { this.request.setCompleteCallback(cal); }
15 Request.prototype.send = function(block){this.request.send(block);}
16 Request.prototype.result = function(){return this.request.getResultObject();}
17 /* ----------------------------------------------------------------------- */
20 /* ----------------------------------------------------------------------- */
21 /* Functions for showing the canvas (and hiding any other shown stuff) */
22 /* ----------------------------------------------------------------------- */
23 function showCanvas() { setTimeout(_showCanvas, 200); }
24 function _showCanvas() {
25 for( var x in G.ui.altcanvas ) {
26 hideMe(G.ui.altcanvas[x]);
28 hideMe(G.ui.common.loading);
29 unHideMe(G.ui.common.canvas_main);
30 G.ui.searchbar.text.focus(); /* focus the searchbar */
35 function swapCanvas(newNode) { newCanvasNode = newNode; setTimeout(_swapCanvas, 200); }
36 function _swapCanvas() {
37 for( var x in G.ui.altcanvas )
38 hideMe(G.ui.altcanvas[x]);
40 hideMe(G.ui.common.loading);
41 hideMe(G.ui.common.canvas_main);
42 unHideMe(newCanvasNode);
44 /* ----------------------------------------------------------------------- */
47 /* finds the name of the current page */
48 function findCurrentPage() {
49 for( var p in config.page ) {
50 var path = location.pathname;
52 if(!path.match(/.*\.xml$/))
53 path += "index.xml"; /* in case they go to / */
55 if( config.page[p] == path)
62 /* builds an opac URL. If no page is defined, the current page is used
63 if slim, then only everything after the ? is returned (no host portion)
65 function buildOPACLink(args, slim) {
70 var string = location.protocol + "//" + location.host;
71 if(args.page) string += config.page[args.page];
72 else string += config.page[findCurrentPage()];
77 for( var x in args ) {
78 if(x == "page" || args[x] == null) continue;
79 string += "&" + x + "=" + encodeURIComponent(args[x]);
82 string += _appendParam(TERM, PARAM_TERM, args, getTerm, string);
83 string += _appendParam(STYPE, PARAM_STYPE, args, getStype, string);
84 string += _appendParam(LOCATION, PARAM_LOCATION, args, getLocation, string);
85 string += _appendParam(DEPTH, PARAM_DEPTH, args, getDepth, string);
86 string += _appendParam(FORM, PARAM_FORM, args, getForm, string);
87 string += _appendParam(OFFSET, PARAM_OFFSET, args, getOffset, string);
88 string += _appendParam(COUNT, PARAM_COUNT, args, getDisplayCount, string);
89 string += _appendParam(HITCOUNT, PARAM_HITCOUNT, args, getHitCount, string);
90 string += _appendParam(MRID, PARAM_MRID, args, getMrid, string);
91 string += _appendParam(RID, PARAM_RID, args, getRid, string);
92 return string.replace(/\&$/,'').replace(/\?\&/,"?");
95 function _appendParam( fieldVar, fieldName, overrideArgs, getFunc, string ) {
97 if( fieldVar != null && overrideArgs[fieldName] == null )
98 ret = "&" + fieldName + "=" + encodeURIComponent(getFunc());
106 /* ----------------------------------------------------------------------- */
107 /* some useful exceptions */
108 function EX(message) { this.init(message); }
110 EX.prototype.init = function(message) {
111 this.message = message;
114 EX.prototype.toString = function() {
115 return "\n *** Exception Occured \n" + this.message;
118 EXCommunication.prototype = new EX();
119 EXCommunication.prototype.constructor = EXCommunication;
120 EXCommunication.baseClass = EX.prototype.constructor;
122 function EXCommunication(message) {
123 this.init("EXCommunication: " + message);
125 /* ----------------------------------------------------------------------- */
127 function cleanISBN(isbn) {
129 isbn = isbn.toString().replace(/^\s+/,"");
130 var idx = isbn.indexOf(" ");
131 if(idx > -1) { isbn = isbn.substring(0, idx); }
139 /* ----------------------------------------------------------------------- */
140 /* builds a link that goes to the title listings for a metarecord */
141 function buildTitleLink(rec, link) {
144 t = normalize(truncate(t, 65));
145 link.appendChild(text(t));
149 args[PARAM_OFFSET] = 0;
150 args[PARAM_MRID] = rec.doc_id();
151 link.setAttribute("href", buildOPACLink(args));
154 function buildTitleDetailLink(rec, link) {
157 t = normalize(truncate(t, 65));
158 link.appendChild(text(t));
162 args[PARAM_OFFSET] = 0;
163 args[PARAM_RID] = rec.doc_id();
164 link.setAttribute("href", buildOPACLink(args));
167 /* builds an author search link */
168 function buildAuthorLink(rec, link) {
170 var a = rec.author();
171 a = normalize(truncate(a, 65));
172 link.appendChild(text(a));
176 args[PARAM_OFFSET] = 0;
177 args[PARAM_STYPE] = STYPE_AUTHOR;
178 args[PARAM_TERM] = rec.author();
179 link.setAttribute("href", buildOPACLink(args));
182 /* ----------------------------------------------------------------------- */
186 /* ----------------------------------------------------------------------- */
187 /* user session handling */
188 /* ----------------------------------------------------------------------- */
190 /* session is the login session. If no session is provided, we attempt
191 to find one in the cookies.
192 If 'force' is true we retrieve the
193 user from the server even if there is already a global user present.
194 if ses != G.user.session, we also force a grab */
195 var cookie = new cookieObject("ses", 1, "/", COOKIE_SES);
196 function grabUser(ses, force) {
198 if(!ses) ses = cookie.get(COOKIE_SES);
199 if(!ses) return false;
202 if(G.user && G.user.session == ses)
206 /* first make sure the session is valid */
207 var request = new Request(FETCH_SESSION, ses );
209 var user = request.result();
210 if( !(typeof user == 'object' && user._isfieldmapper) ) {
215 var req = new Request(FETCH_FLESHED_USER, ses);
218 G.user = req.result();
220 if(!G.user || G.user.length == 0) {
221 G.user = null; return false;
222 cookie.remove(COOKIE_SES);
225 G.user.session = ses;
226 cookie.put(COOKIE_SES, ses);
234 /* returns a fleshed G.user on success, false on failure */
237 var uname = G.ui.login.username.value;
238 var passwd = G.ui.login.password.value;
240 var init_request = new Request( LOGIN_INIT, uname );
241 init_request.send(true);
242 var seed = init_request.result();
244 if( ! seed || seed == '0') {
245 alert( "Error Communicating with Authentication Server" );
249 var auth_request = new Request( LOGIN_COMPLETE,
250 uname, hex_md5(seed + hex_md5(passwd)), "opac");
252 auth_request.send(true);
253 var auth_result = auth_request.result();
255 if(auth_result == '0' || auth_result == null || auth_result.length == 0) { return false; }
257 var u = grabUser(auth_result, true);
258 if(u) updateLoc(u.home_ou(), findOrgDepth(u.home_ou()));
263 function doLogout() {
265 /* be nice and delete the session from the server */
266 if(G.user && G.user.session) {
267 var req = new Request(LOGIN_DELETE, G.user.session);
269 try { req.result(); } catch(E){}
273 cookie.remove(COOKIE_SES);
275 hideMe(G.ui.sidebar.logoutbox);
276 unHideMe(G.ui.sidebar.loginbox);
277 hideMe(G.ui.sidebar.logged_in_as);
282 function hideMe(obj) { addCSSClass(obj, config.css.hide_me); }
283 function unHideMe(obj) { removeCSSClass(obj, config.css.hide_me); }
286 /* ----------------------------------------------------------------------- */
287 /* build the org tree */
288 /* ----------------------------------------------------------------------- */
291 function buildOrgSelector() {
292 var tree = new dTree("orgTreeSelector");
293 for( var i in orgArraySearcher ) {
294 var node = orgArraySearcher[i];
295 if( node == null ) continue;
296 if(node.parent_ou() == null)
297 tree.add(node.id(), -1, node.name(),
298 "javascript:orgSelect(" + node.id() + ");", node.name());
300 tree.add(node.id(), node.parent_ou().id(), node.name(),
301 "javascript:orgSelect(" + node.id() + ");", node.name());
304 orgTreeSelector = tree;
308 function orgSelect(id) {
315 /* ----------------------------------------------------------------------- */