--- /dev/null
+.main_header { width: 100%; }
+.space { padding-right:5px; }
+.vert_space { padding-top: 82px; width: 100%;}
+.right { position:absolute; right: 0px; }
+.hide_me {display:none; visibility: hidden;}
+
+/* ---------------------------------------------------------------------- */
+.canvas { float:right; width: 80%; text-align: left;}
+#loading_div { width: 100%;}
+
+.logo { height: 80px; width: 200px; position: absolute; top: 0px; left: 0px; }
+
+.org_tree { height: 500px; padding-left: 2px; padding-right: 2px;
+ overflow:-moz-scrollbars-vertical; overflow-y:scroll; overflow-x:hidden; }
+
+.org_link { padding-right: 15px; }
+#org_link_container { margin-bottom: 5px; padding-left: 4px; padding-bottom: 3px; padding-top: 3px; width: 100%; }
+
+/* ---------------------------------------------------------------------- */
+.sidebar_div { float: left; width: 19%; }
+.side_bar_item { padding-left: 15px; padding-right: 10px; padding-top: 5px; padding-bottom: 5px; }
+.sidebar_chunk {margin-bottom: 2px;}
+.sidebar_extra_item { padding: 2px; }
+.sidebar_header { margin-top: 10px; padding-left: 3px; }
+
+/* ---------------------------------------------------------------------- */
+#searchbar { position: absolute; text-align: right; top: 2px; right: 3px; }
+
+.searchbar_item { text-align: center; padding: 3px; }
+
+.searchbar_tag { text-align: right;
+ padding-left: 5px; padding-right: 5px; padding-bottom: 3px; }
+
+#searchbar_main { text-align: right;
+ padding-top: 2px; padding-bottom: 3px; padding-right: 2px; padding-left: 3px; }
+
+.searchbar_extra_td { padding-top: 10px; }
+#searchbar_table { border-collapse: collapse; }
+
+/* ---------------------------------------------------------------------- */
+#login_box { width: 60%; padding: 5px;}
+
+.login_text { margin-left: 8px; }
+
+/* ---------------------------------------------------------------------- */
+#result_table_div { text-align: left; width: 100%; }
+
+#search_nav_links { width: 100%; }
+#result_info_box { text-align: left; }
+#next_prev_links { text-align: right; padding-left: 2px; padding-right: 2px;}
+#goto_page_links { text-align: left; padding-left: 2px; padding-right: 2px;}
+
+#next_prev_links_dead {padding-left: 5px; padding-right: 5px;}
+
+#res_table { width: 100%; }
+
+.result_table_pic_cell { width: 43px;}
+.result_table_pic { height: 50px; width: 40px; }
+.result_table_pic_header { width: 43px; }
+
+.result_table_row { text-align: left; }
+.result_table_subtable { width: 100%; border-collapse: collapse;}
+.result_table_subtbody { height: 100%; width: 100%; }
+.result_table_title_cell { text-align: left; }
+
+.copy_count_cell { width: 8%; text-align: center; padding: 0px; margin: 0px;}
+
+.search_page_nav_link { margin-right: 5px; }
+
+/* ---------------------------------------------------------------------- */
+
+
--- /dev/null
+/* ---------------------------------------------------------------------------- */
+/* Set up ID's, CSS, etc. */
+/* ---------------------------------------------------------------------------- */
+config.ids.common.top_logo = "top_left_logo";
+
+config.css.color_1 = "color_1";
+config.css.color_2 = "color_2";
+config.css.color_3 = "color_3";
+
+/* result */
+config.ids.result = {};
+config.css.result = {};
+config.names.result = {};
+config.ids.result.offset_start = "offset_start";
+config.ids.result.offset_end = "offset_end";
+config.ids.result.result_count = "result_count";
+config.ids.result.next_link = 'next_link';
+config.ids.result.prev_link = 'prev_link';
+config.ids.result.home_link = 'search_home_link';
+config.ids.result.end_link = 'end_link';
+config.ids.result.main_table = 'result_table';
+config.ids.result.row_template = 'result_table_template';
+config.ids.result.num_pages = 'num_pages';
+config.ids.result.current_page = 'current_page';
+config.css.result.nav_active = "nav_link_active";
+config.ids.result.top_div = "result_table_div";
+config.ids.result.nav_links = "search_nav_links";
+config.ids.result.info = "result_info_div";
+config.css.result.cc_cell_even = "copy_count_cell_even";
+
+config.names.result.item_jacket = "item_jacket";
+config.names.result.item_title = "item_title";
+config.names.result.item_author = "item_author";
+config.names.result.counts_row = "counts_row";
+config.names.result.count_cell = "copy_count_cell";
+
+/* login page */
+config.ids.login = {};
+config.css.login = {};
+config.ids.login.box = "login_box";
+config.ids.login.username = "login_username";
+config.ids.login.password = "login_password";
+config.ids.login.button = "login_button";
+config.ids.login.cancel = "login_cancel_button";
+
+
+/* searchbar ids and css */
+config.ids.searchbar = {};
+config.css.searchbar = {};
+config.ids.searchbar.text = 'search_box';
+config.ids.searchbar.submit = 'search_submit';
+config.ids.searchbar.type_selector = 'search_type_selector';
+config.ids.searchbar.depth_selector = 'depth_selector';
+config.ids.searchbar.form_selector = 'form_selector';
+config.ids.searchbar.extra_row = 'searchbar_extra';
+config.ids.searchbar.main_row = 'searchbar_main_row';
+config.ids.searchbar.table = 'searchbar_table';
+config.ids.searchbar.tag = 'search_tag_link';
+config.ids.searchbar.tag_on = 'searchbar_tag_on';
+config.ids.searchbar.tag_off = 'searchbar_tag_off';
+config.ids.searchbar.location_tag = 'search_location_tag_link';
+
+
+/* sidebar */
+config.ids.sidebar = {};
+config.css.sidebar = {};
+config.names.sidebar = {};
+config.css.sidebar.item = {};
+config.ids.sidebar.home = 'home_link_div';
+config.ids.sidebar.advanced = 'advanced_link_div';
+config.ids.sidebar.myopac = 'myopac_link_div';
+config.ids.sidebar.prefs = 'prefs_link_div';
+config.ids.sidebar.mresult = 'mresult_link_div';
+config.ids.sidebar.rresult = 'result_link_div';
+config.ids.sidebar.login = 'login_link';
+config.ids.sidebar.logout = 'logout_link';
+config.ids.sidebar.logoutbox = 'logout_link_div';
+config.ids.sidebar.loginbox = 'login_link_div';
+config.ids.sidebar.logged_in_as = 'logged_in_as_div';
+config.ids.sidebar.username_dest = 'username_dest';
+config.ids.sidebar.subject = 'subject_sidebar';
+config.ids.sidebar.subject_item = 'subject_item';
+config.ids.sidebar.author = 'author_sidebar';
+config.ids.sidebar.author_item = 'author_item';
+config.ids.sidebar.series = 'series_sidebar';
+config.ids.sidebar.series_item = 'series_item';
+
+config.ids.sidebar.home_link = 'home_link'
+config.ids.sidebar.advanced_link = 'advanced_link'
+config.ids.sidebar.myopac_link = 'myopac_link'
+
+config.names.sidebar.subject_item = 'subject_item';
+config.names.sidebar.author_item = 'author_item';
+config.names.sidebar.series_item = 'series_item';
+
+
+/* ---------------------------------------------------------------------------- */
+/* These are pages that may replace the canvas */
+/* ---------------------------------------------------------------------------- */
+config.ids.altcanvas.login = config.ids.login.box;
+config.ids.altcanvas.org_tree = config.ids.common.org_container;
+
+
+
+
--- /dev/null
+var records = {};
+var ranks = {};
+var table;
+var rowtemplate;
+var idsCookie = new cookieObject("ids", 1, "/", COOKIE_IDS);
+
+G.evt.common.unload.push(mresultUnload);
+G.evt.mresult.run.push(mresultDoSearch);
+G.evt.mresult.idsReceived.push(mresultSetRecords, mresultCollectRecords);
+
+function mresultUnload() { removeChildren(table); table = null;}
+
+function mresultDoSearch() {
+
+ table = G.ui.result.main_table;
+
+ hideMe(G.ui.result.row_template);
+ while( table.parentNode.rows.length <= getDisplayCount() ) /* add an extra row so IE and safari won't complain */
+ hideMe(table.appendChild(G.ui.result.row_template.cloneNode(true)));
+
+ if(getOffset() == 0 || getHitCount() == null ) {
+ // mresultGetCount();
+ mresultCollectIds(FETCH_MRIDS_FULL);
+ } else {
+ runEvt('result', 'hitCountReceived');
+ mresultCollectIds(FETCH_MRIDS);
+ }
+}
+
+function mresultGetCount() {
+ var form = (getForm() == "all") ? null : getForm();
+ var req = new Request(FETCH_MRCOUNT,
+ getStype(), getTerm(), getLocation(), getDepth(), form );
+ req.callback(mresultHandleCount);
+ req.send();
+}
+
+function mresultHandleCount(r) {
+ HITCOUNT = parseInt(r.getResultObject());
+ runEvt('result', 'hitCountReceived');
+}
+
+
+/* performs the actual search */
+function mresultCollectIds(method) {
+
+ if(getOffset() == 0) {
+ idsCookie.put(COOKIE_IDS,"");
+ idsCookie.write();
+
+ } else {
+ var c = JSON2js(idsCookie.get(COOKIE_IDS));
+ if(c && c.recs) { records = c.recs; ranks = c.ranks; }
+ }
+
+ if( getOffset() != 0 &&
+ records[getOffset()] != null &&
+ records[resultFinalPageIndex()] != null) {
+ mresultCollectRecords();
+
+ } else {
+
+ var req = new Request(method, getStype(), getTerm(),
+ getLocation(), getDepth(), getDisplayCount() * 10, getOffset(), getForm() );
+ req.callback(mresultHandleMRIds);
+ req.send();
+ }
+}
+
+function mresultHandleMRIds(r) {
+ var res = r.getResultObject();
+
+ if(res.count != null) {
+ HITCOUNT = res.count;
+ runEvt('result', 'hitCountReceived');
+ }
+ runEvt('mresult', 'idsReceived', res.ids);
+}
+
+function mresultSetRecords(idstruct) {
+ var o = getOffset();
+ for( var x = o; x < idstruct.length + o; x++ ) {
+ if(idstruct[x-o] == null) break;
+ records[x] = parseInt(idstruct[x - o][0]);
+ ranks[x] = parseFloat(idstruct[x - o][1]);
+ }
+ idsCookie.put(COOKIE_IDS, js2JSON({ recs: records, ranks : ranks }) );
+ idsCookie.write();
+}
+
+function mresultCollectRecords() {
+ var i = 0;
+ for( var x = getOffset(); x!= getDisplayCount() + getOffset(); x++ ) {
+ if(isNull(records[x])) break;
+ var req = new Request(FETCH_MRMODS, records[x]);
+ req.request.userdata = i++;
+ req.callback(mresultHandleMods);
+ req.send();
+ }
+}
+
+function mresultHandleMods(r) {
+ var rec = r.getResultObject();
+ var pagePosition = r.userdata;
+ runEvt('result', 'recordReceived', rec, pagePosition, true);
+ resultCollectCopyCounts(rec, pagePosition, FETCH_MR_COPY_COUNTS);
+}
+
+
--- /dev/null
+var subjectCache = {};
+var authorCache = {};
+var seriesCache = {};
+
+var recordsHandled = 0;
+var recordsCache = [];
+
+/* set up the event handlers */
+G.evt.result.hitCountReceived.push(resultSetHitInfo, resultPaginate);
+G.evt.result.recordReceived.push(resultDisplayRecord, resultAddCopyCounts);
+G.evt.result.copyCountsReceived.push(resultDisplayCopyCounts);
+G.evt.result.allRecordsReceived.push(resultBuildCaches, resultDrawSubjects, resultDrawAuthors, resultDrawSeries);
+
+
+/* returns the last 'index' postion ocurring in this page */
+function resultFinalPageIndex() {
+ if(getHitCount() < (getOffset() + getDisplayCount()))
+ return getHitCount() - 1;
+ return getOffset() + getDisplayCount() - 1;
+}
+
+/* set the search result info, number of hits, which results we're
+ displaying, links to the next/prev pages, etc. */
+function resultSetHitInfo() {
+ var c;
+ if( getDisplayCount() > (getHitCount() - getOffset())) c = getHitCount();
+ else c = getDisplayCount() + getOffset();
+
+ var pages = getHitCount() / getDisplayCount();
+ if(pages % 1) pages = parseInt(pages) + 1;
+
+ G.ui.result.current_page.appendChild(text( (getOffset()/getDisplayCount()) + 1));
+ G.ui.result.num_pages.appendChild(text(pages + ")")); /* the ) is dumb */
+
+ G.ui.result.offset_start.appendChild(text(getOffset() + 1));
+ G.ui.result.offset_end.appendChild(text(c));
+ G.ui.result.result_count.appendChild(text(getHitCount()));
+ unHideMe(G.ui.result.info);
+}
+
+
+function resultPaginate() {
+ var o = getOffset();
+
+ if( !((o + getDisplayCount()) >= getHitCount()) ) {
+
+ var args = {};
+ args[PARAM_OFFSET] = o + getDisplayCount();
+ G.ui.result.next_link.setAttribute("href", buildOPACLink(args));
+ addCSSClass(G.ui.result.next_link, config.css.result.nav_active);
+
+ args[PARAM_OFFSET] = getHitCount() - (getHitCount() % getDisplayCount());
+ G.ui.result.end_link.setAttribute("href", buildOPACLink(args));
+ addCSSClass(G.ui.result.end_link, config.css.result.nav_active);
+ }
+
+ if( o > 0 ) {
+
+ var args = {};
+ args[PARAM_OFFSET] = o - getDisplayCount();
+ G.ui.result.prev_link.setAttribute( "href", buildOPACLink(args));
+ addCSSClass(G.ui.result.prev_link, config.css.result.nav_active);
+
+ args[PARAM_OFFSET] = 0;
+ G.ui.result.home_link.setAttribute( "href", buildOPACLink(args));
+ addCSSClass(G.ui.result.home_link, config.css.result.nav_active);
+ }
+}
+
+
+/* display the record info in the record display table 'pos' is the
+ zero based position the record should have in the display table */
+function resultDisplayRecord(rec, pos, is_mr) {
+
+ if(rec == null) rec = new mvr(); /* so the page won't die if there was an error */
+ recordsHandled++;
+ recordsCache.push(rec);
+
+ /* hide the 'now loading...' message */
+ hideMe(G.ui.common.loading);
+
+ var r = table.rows[pos];
+
+ var pic = findNodeByName(r, config.names.result.item_jacket);
+ pic.setAttribute("src", buildISBNSrc(cleanISBN(rec.isbn())));
+
+ var title_link = findNodeByName(r, config.names.result.item_title);
+ var author_link = findNodeByName(r, config.names.result.item_author);
+
+ if( is_mr ) buildTitleLink(rec, title_link);
+ else buildTitleDetailLink(rec, title_link);
+ buildSearchLink(STYPE_AUTHOR, rec.author(), author_link);
+
+ findNodeByName(r, "result_table_title_cell").width =
+ 100 - (orgNodeTrail(findOrgUnit(getLocation())).length * 8) + "%";
+
+ unHideMe(r);
+
+ if(resultPageIsDone())
+ runEvt('result', 'allRecordsReceived', recordsCache);
+}
+
+function resultPageIsDone(pos) {
+ return (recordsHandled == getDisplayCount()
+ || recordsHandled + getOffset() == getHitCount());
+}
+
+/* -------------------------------------------------------------------- */
+/* dynamically add the copy count rows based on the org type 'countsrow'
+ is the row into which we will add TD's to hold the copy counts
+ This code generates copy count cells with an id of
+ 'copy_count_cell_<depth>_<pagePosition>' */
+function resultAddCopyCounts(rec, pagePosition) {
+
+ var r = table.rows[pagePosition];
+ var countsrow = findNodeByName(r, config.names.result.counts_row );
+ var ccell = findNodeByName(countsrow, config.names.result.count_cell);
+
+ var nodes = orgNodeTrail(findOrgUnit(getLocation()));
+ var node = nodes[0];
+ var type = findOrgType(node.ou_type());
+ ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
+ ccell.title = type.opac_label();
+ addCSSClass(ccell, config.css.result.cc_cell_even);
+
+ var lastcell = ccell;
+
+ if(nodes[1]) {
+
+ var x = 1;
+ var d = findOrgDepth(nodes[1]);
+ var d2 = findOrgDepth(nodes[nodes.length -1]);
+
+ for( var i = d; i <= d2 ; i++ ) {
+
+ ccell = ccell.cloneNode(true);
+
+ if((i % 2))
+ removeCSSClass(ccell, "copy_count_cell_even");
+ else
+ addCSSClass(ccell, "copy_count_cell_even");
+
+ var node = nodes[x++];
+ var type = findOrgType(node.ou_type());
+
+ ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
+ ccell.title = type.opac_label();
+ countsrow.insertBefore(ccell, lastcell);
+ lastcell = ccell;
+ }
+ }
+}
+
+/* collect copy counts for a record using method 'methodName' */
+function resultCollectCopyCounts(rec, pagePosition, methodName) {
+ if(rec == null || rec.doc_id() == null) return;
+ var req = new Request(methodName, getLocation(), rec.doc_id() );
+ req.request.userdata = [ rec, pagePosition ];
+ req.callback(resultHandleCopyCounts);
+ req.send();
+}
+
+function resultHandleCopyCounts(r) {
+ runEvt('result', 'copyCountsReceived', r.userdata[0], r.userdata[1], r.getResultObject());
+}
+
+
+/* display the collected copy counts */
+function resultDisplayCopyCounts(rec, pagePosition, copy_counts) {
+ if(copy_counts == null || rec == null) return;
+ var i = 0;
+ while(copy_counts[i] != null) {
+ var cell = getId("copy_count_cell_" + i +"_" + pagePosition);
+ cell.appendChild(text(copy_counts[i].available + " / " + copy_counts[i].count));
+ i++;
+ }
+}
+
+
+/* captures extraneous info from each record */
+function resultBuildCaches(records) {
+ for( var r in records ) {
+ var rec = records[r];
+ for( var s in rec.subject() )
+ subjectCache[s] == null ? subjectCache[s] = 1 : subjectCache[s]++;
+ authorCache[rec.author()] = 1;
+ for( var s in rec.series() ) seriesCache[rec.series()[s]] = 1;
+ }
+}
+
+
+function resultSortSubjects(a, b) { return -(a.count - b.count); } /* sort in reverse */
+function resultDrawSubjects() {
+
+ var subjs = [];
+ for( var s in subjectCache )
+ subjs.push( { sub : s, count : subjectCache[s] } );
+ subjs.sort(resultSortSubjects);
+
+ var ss = [];
+ for( var s in subjs ) ss.push(subjs[s].sub);
+ resultDrawSidebarStuff(STYPE_SUBJECT, G.ui.sidebar.subject_item,
+ config.names.sidebar.subject_item, ss, G.ui.sidebar.subject);
+}
+
+function resultDrawAuthors() {
+ var auths = new Array();
+ for( var s in authorCache ) auths.push(s);
+ resultDrawSidebarStuff(STYPE_AUTHOR, G.ui.sidebar.author_item,
+ config.names.sidebar.author_item, auths.sort(), G.ui.sidebar.author);
+}
+
+function resultDrawSeries() {
+ var sers = new Array();
+ for( var s in seriesCache ) sers.push(s);
+ resultDrawSidebarStuff(STYPE_SERIES, G.ui.sidebar.series_item,
+ config.names.sidebar.series_item, sers.sort(), G.ui.sidebar.series);
+}
+
+/* search type, template node, href link name, array of text, node to unhide */
+function resultDrawSidebarStuff(stype, node, linkname, items, wrapperNode) {
+ var parent = node.parentNode;
+ var template = parent.removeChild(node);
+ var x = 0;
+ var newnode = template.cloneNode(true);
+ var found = false;
+ for( var i in items ) {
+ if(isNull(items[i])) continue;
+ if(x++ > 7) break;
+ buildSearchLink(stype, items[i], findNodeByName(newnode, linkname), 100);
+ parent.appendChild(newnode);
+ newnode = template.cloneNode(true);
+ found = true;
+ }
+ if(found) unHideMe(wrapperNode);
+}
+
+
+
+
+
--- /dev/null
+var records = new Array();
+var table;
+var rowtemplate;
+
+function rresultUnload() { removeChildren(table); table = null;}
+
+G.evt.common.unload.push(rresultUnload);
+G.evt.rresult.run.push(rresultDoSearch);
+G.evt.rresult.idsReceived.push(rresultCollectRecords);
+
+function rresultDoSearch() {
+ table = G.ui.result.main_table;
+ hideMe(G.ui.result.row_template);
+ while( table.parentNode.rows.length < getDisplayCount() )
+ hideMe(table.appendChild(G.ui.result.row_template.cloneNode(true)));
+ rresultCollectIds();
+}
+
+function rresultCollectIds() {
+ var form = (getForm() == "all") ? null : getForm();
+ var req = new Request(FETCH_RIDS, getMrid(), form );
+ req.callback( rresultHandleRIds );
+ req.send();
+}
+
+function rresultHandleRIds(r) {
+ var res = r.getResultObject();
+ HITCOUNT = parseInt(res.count);
+ runEvt('result', 'hitCountReceived');
+ runEvt('rresult', 'idsReceived', res.ids);
+}
+
+function rresultCollectRecords(ids) {
+ var x = 0;
+ for( var i = getOffset(); i!= getDisplayCount() + getOffset(); i++ ) {
+ if(ids[i] == null) break;
+ var req = new Request(FETCH_RMODS, parseInt(ids[i]));
+ req.callback(rresultHandleMods);
+ req.request.userdata = x++;
+ req.send();
+ }
+}
+
+function rresultHandleMods(r) {
+ var rec = r.getResultObject();
+ runEvt('result', 'recordReceived', rec, r.userdata, false);
+ resultCollectCopyCounts(rec, r.userdata, FETCH_R_COPY_COUNTS);
+}
+
--- /dev/null
+var searchBarExpanded = false;
+/* our search selector boxes */
+var _ts, _fs, _ds;
+
+
+G.evt.common.init.push(searchBarInit);
+
+
+/* if set by the org selector, this will be the location used the
+ next time the search is submitted */
+var newSearchLocation;
+
+function searchBarInit() {
+
+ _ts = G.ui.searchbar.type_selector;
+ _ds = G.ui.searchbar.depth_selector;
+ _fs = G.ui.searchbar.form_selector;
+
+ G.ui.searchbar.text.focus();
+ G.ui.searchbar.text.onkeydown =
+ function(evt) {if(userPressedEnter(evt)) searchBarSubmit();};
+
+ G.ui.searchbar.submit.onclick = searchBarSubmit;
+ G.ui.searchbar.tag.onclick = searchBarToggle;
+
+ /* set up the selector objects, etc */
+ G.ui.searchbar.text.value = (getTerm() != null) ? getTerm() : "";
+ setSelector(_ts, getStype());
+ setSelector(_ds, getDepth());
+ setSelector(_fs, getForm());
+ G.ui.searchbar.location_tag.onclick = _opacHandleLocationTagClick;
+}
+
+function _opacHandleLocationTagClick() {
+ orgTreeSelector.openTo(
+ (newSearchLocation != null) ? parseInt(newSearchLocation) : getLocation(), true );
+ swapCanvas(G.ui.common.org_container);
+}
+
+function updateLoc(location, depth) {
+ if( location != null )
+ newSearchLocation = location;
+ if( depth != null )
+ setSelector(G.ui.searchbar.depth_selector, depth);
+}
+function searchBarSubmit() {
+
+ var text = G.ui.searchbar.text.value;
+ if(!text || text == "") return;
+
+
+ var args = {};
+ args.page = MRESULT;
+ args[PARAM_OFFSET] = 0;
+ args[PARAM_TERM] = text;
+ args[PARAM_STYPE] = _ts.options[_ts.selectedIndex].value;
+ args[PARAM_LOCATION] = newSearchLocation;
+ args[PARAM_DEPTH] = parseInt(_ds.options[_ds.selectedIndex].value);
+ args[PARAM_FORM] = _fs.options[_fs.selectedIndex].value;
+
+ goTo(buildOPACLink(args));
+}
+
+
+function searchBarToggle() {
+ if(searchBarExpanded) {
+ hideMe(G.ui.searchbar.extra_row);
+ hideMe(G.ui.searchbar.tag_on);
+ unHideMe(G.ui.searchbar.tag_off);
+ } else {
+ unHideMe(G.ui.searchbar.extra_row);
+ hideMe(G.ui.searchbar.tag_off);
+ unHideMe(G.ui.searchbar.tag_on);
+ }
+ searchBarExpanded = !searchBarExpanded;
+}
+
+
--- /dev/null
+/* set up the colors in the sidebar
+ Disables/Enables certain components based on various state data */
+
+attachEvt("common", "init", initSideBar);
+attachEvt("common", "init", setSidebarLinks);
+
+function initSideBar() {
+
+ for( var p in G.ui.sidebar )
+ removeCSSClass(p, config.css.color_2);
+
+ var page = findCurrentPage();
+ unHideMe(G.ui.sidebar[page]);
+ addCSSClass(G.ui.sidebar[page], config.css.color_2);
+
+ /* if we're logged in, show it and replace the Login link with the Logout link */
+ if(grabUser()) {
+ G.ui.sidebar.username_dest.appendChild(text(G.user.usrname()));
+ unHideMe(G.ui.sidebar.logoutbox);
+ unHideMe(G.ui.sidebar.logged_in_as);
+ hideMe(G.ui.sidebar.loginbox);
+ }
+
+ if(G.ui.sidebar.login) G.ui.sidebar.login.onclick = initLogin;
+ if(G.ui.sidebar.logout) G.ui.sidebar.logout.onclick = doLogout;
+ G.ui.common.top_logo.setAttribute("src", buildImageLink(config.images.logo));
+}
+
+/* sets up the login ui components */
+var loginBoxVisible = false;
+function initLogin() {
+
+ var loginDance = function() {
+ if(doLogin()) {
+ showCanvas();
+ G.ui.sidebar.username_dest.appendChild(text(G.user.usrname()));
+ unHideMe(G.ui.sidebar.logoutbox);
+ unHideMe(G.ui.sidebar.logged_in_as);
+ hideMe(G.ui.sidebar.loginbox);
+ }
+ }
+
+ G.ui.login.button.onclick = loginDance;
+ G.ui.login.username.onkeydown =
+ function(evt) {if(userPressedEnter(evt)) loginDance();};
+ G.ui.login.password.onkeydown =
+ function(evt) {if(userPressedEnter(evt)) loginDance();};
+
+ if(loginBoxVisible) {
+ showCanvas();
+ } else {
+ swapCanvas(G.ui.login.box);
+ G.ui.login.username.focus();
+ }
+ loginBoxVisible = !loginBoxVisible;
+ G.ui.login.cancel.onclick = showCanvas;
+}
+
+function setSidebarLinks() {
+ G.ui.sidebar.home_link.setAttribute("href", buildOPACLink({page:HOME}));
+ G.ui.sidebar.advanced_link.setAttribute("href", buildOPACLink({page:ADVANCED}));
+ G.ui.sidebar.myopac_link.setAttribute("href", buildOPACLink({page:MYOPAC}, false, true));
+}
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE x [ <!ENTITY % ent SYSTEM "../../../locale/en-US/lang.dtd"> %ent; ] >
+
+<!-- Advanced search page -->
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:xi="http://www.w3.org/2001/XInclude" xml:lang="en" lang="en">
+
+ <head>
+ <title>Evergreen: Advanced Search</title>
+ <xi:include href="css_common.xml#xpointer(//link)"/>
+ <xi:include href="js_common.xml#xpointer(//script)"/>
+ </head>
+
+ <body onload="init();">
+ <xi:include href="header.xml"/>
+ <div id='canvas' class='canvas'>
+ <xi:include href="altcanvas.xml"/>
+ <div id='canvas_main'>Advanced Search Goes Here</div>
+ </div>
+ </body>
+
+</html>
--- /dev/null
+<?xml version='1.0'?>
+
+<!-- These are the UI components that may be needed on any given page. The must be
+ set to class += 'hide_me' by default -->
+
+<div id='not_the_canvas' xmlns:xi="http://www.w3.org/2001/XInclude">
+
+ <!-- the login page -->
+ <xi:include href="login.xml"/>
+
+ <!-- The org tree -->
+ <xi:include href="orgtree.xml"/>
+
+</div>
--- /dev/null
+<?xml version='1.0'?>
+
+<!-- CSS shared across pages goes here -->
+
+<css>
+
+ <link type='text/css' rel='stylesheet' href='../css/layout.css'/>
+ <link type='text/css' rel='stylesheet' href='../../../common/css/dtree.css'/>
+
+ <!-- Our font CSS's -->
+ <link type='text/css' rel='stylesheet'
+ href='../../../common/css/mediumfont.css' csstype='font'/>
+
+ <link type='text/css' rel='alternate stylesheet'
+ href='../../../common/css/smallfont.css' title='Small Fonts' csstype='font'/>
+
+ <link type='text/css' rel='alternate stylesheet'
+ href='../../../common/css/largefont.css' title='Large Fonts' csstype='font'/>
+
+ <!-- Our colors -->
+ <link type='text/css' rel="stylesheet" href="../../../theme/default/css/colors.css"
+ name='default_colors' csstype='color'/>
+
+ <link type='text/css' rel="alternate stylesheet" href="../../../theme/blackonwhite/css/colors.css"
+ title='Color Test' name='color_test' csstype="color" />
+
+</css>
--- /dev/null
+<?xml version='1.0'?>
+
+<div xmlns:xi="http://www.w3.org/2001/XInclude">
+ <xi:include href="logo.xml"/>
+ <xi:include href="searchbar.xml"/>
+ <div class="vert_space"> </div>
+ <xi:include href="sidebar.xml"/>
+</div>
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE x [ <!ENTITY % ent SYSTEM "../../../locale/en-US/lang.dtd"> %ent; ] >
+
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xi="http://www.w3.org/2001/XInclude">
+
+ <head>
+ <title>Evergreen: Home</title>
+ <xi:include href="css_common.xml#xpointer(//link)"/>
+ <xi:include href="js_common.xml#xpointer(//script)"/>
+ </head>
+
+ <body onload="init();">
+ <xi:include href="header.xml"/>
+
+ <div id='canvas' class='canvas'>
+ <xi:include href="altcanvas.xml"/>
+ <div id='canvas_main'>Home is here, show something interesting...</div>
+ </div>
+
+ </body>
+
+</html>
--- /dev/null
+<?xml version='1.0'?>
+
+<!-- Javascript shared across all pages -->
+
+<div xmlns:xi="http://www.w3.org/2001/XInclude" xml:lang="en" lang="en">
+ <script language='javascript' src='../../../common/js/utils.js'> </script>
+ <script language='javascript' src='../../../common/js//config.js'> </script>
+ <script language='javascript' src='../../../common/js/CGI.js'> </script>
+ <script language='javascript' src='../../../common/js/Cookie.js'> </script>
+ <script language='javascript' src='../../../common/js/md5.js'> </script>
+
+ <script language='javascript' src='../../../common/js/dtree.js'> </script>
+
+ <script language='javascript' src='../../../common/js/JSON.js'> </script>
+ <script language='javascript' src='../../../common/js/fmcore.js'> </script>
+ <script language='javascript' src='../../../common/js/fmgen.js'> </script>
+ <script language='javascript' src='../../../common/js/OrgTree.js'> </script>
+ <script language='javascript' src='../../../common/js/RemoteRequest.js'> </script>
+ <script language='javascript' src='../../../common/js/opac_utils.js'> </script>
+ <script language='javascript' src='../../../common/js/init.js'> </script>
+ <script language='javascript' src='../../../common/js/added_content.js'> </script>
+
+ <!-- our config settings -->
+ <script language='javascript' src='../js/config.js'> </script>
+</div>
+
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE x [ <!ENTITY % ent SYSTEM "../../../locale/en-US/lang.dtd"> %ent; ] >
+
+
+<div id='login_box' class='hide_me color_1'>
+
+ <div class='login_text'>
+ <span> Login in with your username and password. </span>
+ </div>
+
+ <br/>
+
+ <div>
+ <span class='login_text'><input id='login_username' type='text' size='16'> </input></span>
+ <span class='login_text'>Username</span>
+ </div>
+
+ <br/>
+
+ <div>
+ <span class='login_text'><input id='login_password' type='password' size='16'> </input></span>
+ <span class='login_text'>Password</span>
+ </div>
+
+ <br/>
+
+ <div class='login_links_div'>
+ <span class='login_text'><a href="javascript:void(0);" id='login_button'> Login </a></span>
+ <span class='login_text'><a href='javascript:void(0);' id='login_cancel_button'> Cancel </a></span>
+ </div>
+
+</div>
+
+
--- /dev/null
+<?xml version='1.0'?>
+<div id='logo_div'>
+ <img id='top_left_logo' border='0' class='logo'> </img>
+</div>
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE x [ <!ENTITY % ent SYSTEM "../../../locale/en-US/lang.dtd"> %ent; ]>
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:xi="http://www.w3.org/2001/XInclude" xml:lang="en" lang="en">
+
+ <head>
+ <title>Evergreen: Title Groups</title>
+ <xi:include href="css_common.xml#xpointer(//link)"/>
+ <xi:include href="js_common.xml#xpointer(//script)"/>
+ <script language='javascript' src='../js/mresult.js'> </script>
+ <script language='javascript' src='../js/result_common.js'> </script>
+ </head>
+
+ <body onload="init();">
+ <xi:include href="header.xml"/>
+ <div id='canvas' class='canvas'>
+ <xi:include href="altcanvas.xml"/>
+ <xi:include href="result_common.xml"/>
+ </div>
+ </body>
+
+</html>
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE x [ <!ENTITY % ent SYSTEM "../../../locale/en-US/lang.dtd"> %ent; ] >
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:xi="http://www.w3.org/2001/XInclude" xml:lang="en" lang="en">
+
+ <head>
+ <title>Evergreen: My OPAC</title>
+ <xi:include href="css_common.xml#xpointer(//link)"/>
+ <xi:include href="js_common.xml"/>
+ </head>
+
+ <body onload="init();">
+ <xi:include href="header.xml"/>
+ <div id='canvas' class='canvas'>
+ <xi:include href="altcanvas.xml"/>
+ <div id='canvas_main'>My OPAC Goes Here</div>
+ </div>
+ </body>
+
+</html>
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE x [ <!ENTITY % ent SYSTEM "../../../locale/en-US/lang.dtd"> %ent; ]>
+
+<!-- the org tree -->
+<div id='org_container' class='hide_me'>
+ <div id='org_link_container' class='color_1'>
+ <span class='org_link'><a onclick='orgTreeSelector.openAll();' href='javascript:void(0);'>Expand All</a></span>
+ <span class='org_link'><a onclick='orgTreeSelector.closeAll();' href='javascript:void(0);'>Close All</a></span>
+ <span class='org_link'><a onclick='showCanvas();' href='javascript:void(0);'> Exit </a></span>
+ </div>
+ <div id='org_tree' class='org_tree'> </div>
+</div>
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE x [ <!ENTITY % ent SYSTEM "../../../locale/en-US/lang.dtd"> %ent; ] >
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:xi="http://www.w3.org/2001/XInclude" xml:lang="en" lang="en">
+
+ <head>
+ <title>Evergreen: Titles</title>
+ <xi:include href="css_common.xml#xpointer(//link)"/>
+ <xi:include href="js_common.xml#xpointer(//script)"/>
+ </head>
+
+ <body onload="init();">
+ <xi:include href="header.xml"/>
+ <div id='canvas' class='canvas'>
+ <xi:include href="altcanvas.xml"/>
+ <xi:include href="result_common.xml"/>
+ </div>
+ </body>
+
+</html>
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE x [ <!ENTITY % ent SYSTEM "../../../locale/en-US/lang.dtd"> %ent; ] >
+
+<div id='canvas_main' xmlns:xi="http://www.w3.org/2001/XInclude" >
+
+ <table id='search_nav_links'>
+ <tbody>
+ <tr>
+
+ <!-- talk about the number of hits, etc. -->
+ <td id='result_info_box'>
+ <div class='hide_me' id='result_info_div'>
+ <span> Results </span>
+ <span id='offset_start'> </span>
+ <span> - </span>
+ <span id='offset_end'> </span>
+ <span> of </span>
+ <span id='result_count'> </span>
+ <span> (page </span>
+ <span id='current_page'> </span>
+ <span> of </span>
+ <span id='num_pages'> </span>
+ </div>
+ </td>
+
+ <!-- simple next/prev type navigation links -->
+ <td id='next_prev_links'>
+ <a class='search_page_nav_link' id='search_home_link' title="First results page">Start</a>
+ <a class='search_page_nav_link' id='prev_link' title='Previus page'> << </a>
+ <span class='search_page_nav_link' id='page_numbers'> </span>
+ <a class='search_page_nav_link' id='next_link' title='Next Page'> >> </a>
+ <a class='search_page_nav_link' id='end_link' title="Last results page">End</a>
+ </td>
+
+ </tr>
+ </tbody>
+ </table>
+
+ <!-- Load the result table -->
+ <xi:include href="result_table.xml"/>
+
+ <div id='loading_div' class='color_1'> Loading Results... </div>
+
+</div>
+
+
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE x [ <!ENTITY % ent SYSTEM "../../../locale/en-US/lang.dtd"> %ent; ] >
+
+<!-- Search results are spit into this table -->
+
+<div id='result_table_div' xmlns:xi="http://www.w3.org/2001/XInclude">
+
+ <table id='res_table'>
+
+ <!-- for some reason, this is the only way i can force the cell widths -->
+ <thead><td class='result_table_pic_header'></td><td/></thead>
+
+ <tbody id='result_table'>
+
+ <!-- Template for displaying a search result. This row template is cloned and inserted
+ for each result returned -->
+
+ <tr id='result_table_template'>
+
+ <!-- Jacket image goes here -->
+ <td width="10%"><a><img name='item_jacket' class='result_table_pic'/></a></td>
+
+ <td class='result_table_row'>
+ <table class='result_table_subtable'>
+ <tbody class='result_table_subtbody'>
+
+ <tr name='counts_row'>
+
+ <td class='result_table_title_cell' name='result_table_title_cell'>
+ <a title="View titles for this record" name='item_title' class='search_link'>
+ <!-- Title goes here -->
+ </a>
+ </td>
+
+ <!-- Copy this td for each copy count appended -->
+ <td nowrap='nowrap' name="copy_count_cell" class='copy_count_cell' rowspan='3'> </td>
+
+ </tr>
+
+ <tr>
+ <td class='result_table_author_cell'>
+ <a title="Perform an Author Search" name='item_author' class='search_link'>
+ <!-- Author goes here -->
+ </a>
+ </td>
+ </tr>
+
+ <tr>
+ <td class='result_table_format_cell'>
+ <a class='search_link'>
+ <!-- Item formats go here -->
+ </a>
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+ </td>
+
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE x [ <!ENTITY % ent SYSTEM "../../../locale/en-US/lang.dtd"> %ent; ] >
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:xi="http://www.w3.org/2001/XInclude" xml:lang="en" lang="en">
+
+ <head>
+ <title>Evergreen: Titles</title>
+ <xi:include href="css_common.xml#xpointer(//link)"/>
+ <xi:include href="js_common.xml#xpointer(//script)"/>
+ <script language='javascript' src='../js/rresult.js'> </script>
+ <script language='javascript' src='../js/result_common.js'> </script>
+ </head>
+
+ <body onload="init();">
+ <xi:include href="header.xml"/>
+ <div id='canvas' class='canvas'>
+ <xi:include href="altcanvas.xml"/>
+ <xi:include href="result_common.xml"/>
+ </div>
+ </body>
+
+</html>
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE x [ <!ENTITY % ent SYSTEM "../../../locale/en-US/lang.dtd"> %ent; ] >
+
+<!-- Searchbar for doing metarecord searches -->
+
+<div id='searchbar'>
+
+ <!-- load my js -->
+ <script language='javascript' src='../js/search_bar.js'> </script>
+
+ <div id='searchbar_main' class='color_1'>
+
+ <table>
+
+ <tbody id='searchbar_table'>
+
+ <tr id='searchbar_main_row'>
+
+ <!-- Search query text box -->
+ <td align='left' class='searchbar_main_td'>
+ <span class="searchbar_item">
+ <input id='search_box' type='text' size='19'/>
+ </span>
+ </td>
+
+
+ <!-- Selector for choosing the search type -->
+ <td align='left' class='searchbar_main_td'>
+ <span class="searchbar_item">
+ <select id='search_type_selector'>
+ <option value='title' selected='selected'>Title</option>
+ <option value='author'>Author</option>
+ <option value='subject'>Subject</option>
+ <option value='series'>Series</option>
+ <option value='keyword'>Keyword</option>
+ </select>
+ </span>
+
+ <!-- Submit Search Button -->
+ <span class="searchbar_item" style='padding-left: 15px;'>
+ <input type='button' id='search_submit' value='Go!' />
+ </span>
+ </td>
+
+ </tr>
+
+ <!-- Row of extra search options -->
+ <tr id='searchbar_extra' class='hide_me'>
+
+ <!-- Search format selector -->
+ <td align='left' class='searchbar_extra_td'>
+ <span class="searchbar_item">
+ <select id='form_selector'>
+ <option value='all'>All Formats</option>
+ <option value='at'>Books</option>
+ <option value='at-d'>Large Print Books</option>
+ <option value='i'>Audiobooks</option>
+ <option value='g'>Video Recording</option>
+ <option value='j'>Music</option>
+ <option value='m'>Electronic Resources</option>
+ </select>
+ </span>
+ </td>
+
+ <!-- Search 'range' selector -->
+ <td align='left' class='searchbar_extra_td'>
+ <span class="searchbar_item">
+ <select id='depth_selector'>
+ <option value='2' selected='selected'>In This Library</option>
+ <option value='1'>In This Region</option>
+ <option value='0'>In All PINES Libraries</option>
+ </select>
+ </span>
+ </td>
+
+ </tr>
+
+ </tbody>
+ </table>
+
+ </div>
+
+ <!-- Search location changer -->
+ <span class='searchbar_tag color_1'>
+ <a id='search_location_tag_link' href='javascript:void(0);'>
+ <span> Search Location </span>
+ </a>
+ </span>
+
+ <!-- Link for expanding/contracting the extra search options -->
+ <span class='searchbar_tag color_1'>
+ <a id='search_tag_link' href='javascript:void(0);'>
+ <span id='searchbar_tag_off'> More Options </span>
+ <span id='searchbar_tag_on' class='hide_me'> Less Options </span>
+ </a>
+ </span>
+
+
+</div>
+
+
+
+
+
+
--- /dev/null
+<?xml version='1.0'?>
+<!DOCTYPE x [ <!ENTITY % ent SYSTEM "../../../locale/en-US/lang.dtd"> %ent; ] >
+
+<!-- Navigation bar -->
+
+<div id="sidebar_div" class="sidebar_div" xmlns:xi="http://www.w3.org/2001/XInclude">
+
+ <script language='javascript' src='../js/sidebar.js'> </script>
+
+ <div class='sidebar_chunk color_1'>
+
+ <div title="&navigate.home.title;"
+ id='home_link_div' class="side_bar_item">
+ <a id='home_link' href='index.xml'>&navigate.home;</a>
+ </div>
+
+ <div title="&navigate.advanced.title;"
+ id='advanced_link_div' class="side_bar_item">
+ <a id='advanced_link' href='advanced.xml'>&navigate.advanced;</a>
+ </div>
+
+ <div title="&navigate.myopac.title;"
+ id='myopac_link_div' class="side_bar_item">
+ <a id='myopac_link' href='myopac/myopac.xml'>&navigate.myopac;</a>
+ </div>
+
+ <div title="&navigate.login.title;"
+ id='login_link_div' class="side_bar_item">
+ <a id='login_link' href='javascript:void(0);'>&navigate.login;</a>
+ </div>
+
+ <div title="&navigate.logout.title;"
+ id='logout_link_div' class="side_bar_item hide_me">
+ <a id='logout_link' href='javascript:void(0);'>&navigate.logout;</a>
+ </div>
+
+ <!-- Informational sidebar components -->
+
+ <div id='logged_in_as_div' title="&navigate.loggedinas.title;" class="side_bar_item hide_me">
+ <span >&navigate.loggedinas; <b id='username_dest'> </b></span>
+ </div>
+
+ <div title="&navigate.titleGroupResults;"
+ id='mresult_link_div' class="side_bar_item hide_me">
+ <span>&navigate.titleGroupResults;</span>
+ </div>
+
+ <div title="&navigate.titleResults;"
+ id='result_link_div' class="side_bar_item hide_me">
+ <span>&navigate.titleResults;</span>
+ </div>
+
+ </div>
+
+
+ <div id='subject_sidebar' class='sidebar_chunk hide_me'>
+ <div class='sidebar_header color_1'>&sidebar.relevantSubjects.headerLabel;</div>
+ <ul style='margin-left: 1em; padding-left: 1em;'>
+ <li id='subject_item' class='sidebar_extra_item'>
+ <a class='sidebar_extra_link' name='subject_item'> </a>
+ </li>
+ </ul>
+ </div>
+
+ <div id='author_sidebar' class='sidebar_chunk hide_me'>
+ <div class='sidebar_header color_1'>&sidebar.relevantAuthors.headerLabel;</div>
+ <ul style='margin-left: 1em; padding-left: 1em;'>
+ <li id='author_item' class='sidebar_extra_item'>
+ <a class='sidebar_extra_link' name='author_item'> </a>
+ </li>
+ </ul>
+ </div>
+
+ <div id='series_sidebar' class='sidebar_chunk hide_me'>
+ <div class='sidebar_header color_1'>&sidebar.relevantSeries.headerLabel;</div>
+ <ul style='margin-left: 1em; padding-left: 1em;'>
+ <li id='series_item' class='sidebar_extra_item'>
+ <a class='sidebar_extra_link' name='series_item'> </a>
+ </li>
+ </ul>
+ </div>
+
+
+</div>
+
--- /dev/null
+body a { color: black; }
+body a:visited { color: black; }
+body a:hover { color: red; text-decoration: underline;}
+
+.color_1 { background: #A7EA9D; color: #000000; }
+.color_2 { background: #64EA4F; color: #000000; }
+.color_3 { background: #D8B4BE; color: #000000; }
+
+/* ---------------------------------------------------------------------- */
+.sidebar_chunk {border-right: 1px solid lightgrey;}
+.sidebar_extra_link { text-decoration: none; }
+#searchbar_tag_on { color: red; }
+.searchbar_item { color: black; }
+#login_box { border-top: 1px solid #808080; border-bottom: 1px solid #808080; }
+#next_prev_links_dead { color: #808080; text-decoration: none; }
+.nav_link_active { text-decoration: underline; }
+.search_link { text-decoration: none; }
+.result_table_subtable { border-top: 1px solid #E0E0E0; }
+.copy_count_cell_even { border: 1px solid #E0E0E0; }
+/* ---------------------------------------------------------------------- */
+
+