1 /* Top level page object. All pages descend from this class */
5 Page.prototype.init = function() {
6 debug("Falling back to Page.init()");
10 Page.prototype.instance = function() {
12 "instance() must be overridden by all Page subclasses");
16 /* XXX move me to the status bar */
17 Page.prototype.updateSelectedLocation = function(org) {
19 if( typeof org == 'object' ) node = org;
20 else node = getOrgById(org);
21 globalSelectedLocation = node;
22 globalSearchDepth = findOrgType(node.ou_type()).depth();
26 Page.prototype.updateCurrentLocation = function(org) {
27 if( typeof org == 'object' ) node = org;
28 else node = getOrgById(orgid);
29 globalLocation = node;
34 /* tells the user where he is searching */
35 Page.prototype.setLocDisplay = function(name) {
37 debug("Setting loc display on the status bar");
38 this.searchingCell = getById("now_searching_cell");
40 if( this.searchingCell == null ) return;
44 if( globalSelectedLocation )
45 orgunit = globalSelectedLocation;
46 else { orgunit = globalLocation; }
48 this.searchingCell.innerHTML =
49 "Now Searching <span class='breadcrumb_label'>" + orgunit.name() + "</span>";
57 var arr = orgNodeTrail(orgunit);
59 this.searchingCell.innerHTML = "";
60 var names = new Array()
62 names.push(arr[i].name());
64 this.searchingCell.innerHTML =
65 "<span class='breadcrumb_label'>" +
66 names.join("</span> / <span class='breadcrumb_label'>") +
73 Page.prototype.resetRange = function() {
75 this.searchRange = getById("search_range_select");
77 while( this.searchRange.options.length ) {
78 this.searchRange.options[0] = null;
81 var orgunit = globalSelectedLocation;
83 orgunit = globalLocation;
85 debug("Reseting search range with search location " + orgunit);
86 debug("Resetting search range with search depth " + globalSearchDepth );
88 var selectedOption = null;
90 if(this.searchRange) {
92 for( var index in globalOrgTypes ) {
93 var otype = globalOrgTypes[index];
95 if( otype.depth() > findOrgType(orgunit.ou_type()).depth() )
98 var select = new Option(otype.opac_label(), otype.depth());
100 this.searchRange.options[this.searchRange.options.length] = select;
102 if( otype.depth() == globalSearchDepth ) {
103 selectedOption = index;
108 this.searchRange.selectedIndex = selectedOption;
109 var opt = this.searchRange.options[selectedOption];
110 if(opt) opt.selected = true;
112 if(this.searchRange.options.length == 1 )
113 hideMe(this.searchRange.parentNode);
115 this.searchRange.parentNode.style.visibility = "visible";
116 this.searchRange.parentNode.style.display = "inline";
119 if( instanceOf(this, AbstractRecordResultPage) ) {
121 /* submit the search when the search range is selected */
124 debug("Setting onclick for selector");
127 this.searchRange.onchange = function() {
129 var location = globalSelectedLocation;
130 if(location == null) location = globalLocation.id();
131 else location = location.id();
132 globalSearchDepth = obj.searchRange.options[obj.searchRange.selectedIndex].value;
135 "target", "mr_result",
136 "mr_search_type", lastSearchType,
137 "mr_search_query", lastSearchString,
138 "mr_search_location", location,
139 "mr_search_depth", globalSearchDepth,
150 Page.prototype.setPageTrail = function() {
151 debug("Falling back to Page.setPageTrail");
155 Page.prototype.buildTrailLink = function(type, active) {
157 var obj = locationStack[type];
158 if(obj == null) return;
160 var div = createAppElement("div");
163 add_css_class(div,"page_trail_word");
164 var a = createAppElement("a");
165 a.setAttribute("href", obj.location);
166 a.appendChild(createAppTextNode(obj.title));
171 add_css_class(div,"page_trail_word_inactive");
172 div.appendChild(createAppTextNode(obj.title));
178 Page.prototype.buildDivider = function() {
179 var div = createAppElement("div");
180 div.className = "page_trail_divider";
181 var text = createAppTextNode(" / ");
182 div.appendChild(text);
186 /* if 'full' add target=_top to break out of the page */
187 Page.prototype.buildNavBox = function(full) {
188 Page.navBox = new Box();
189 Page.navBox.init("Navigation", false, false);
190 var table = elem("table");
191 add_css_class(table, "main_nav_table");
200 {id:"location_nav_link", href:"javascript:void(0);"}, null, "Change Search Location");
202 loc.onclick = function(evt) {
203 globalPage.locationTree.toggle(getById("location_nav_link"));
208 if(globalPort == "443") globalPort = "80";
209 var prefix = "http://" + globalRootURL + ":" + globalPort + globalRootPath;
211 arr.push(elem("a", {href: prefix + '?target=advanced_search'}, null, "Advanced Search"));
212 arr.push(elem("a", {href: prefix + '?target=my_opac'}, null, "My OPAC"));
213 arr.push(elem("a", {href: prefix + '?target=about'}, null, "About PINES"));
214 if(loc) arr.push(this.buildDeepLink());
216 if(UserSession.instance().verifySession()) {
217 arr.push(elem("a", {href: prefix + "?target=logout"}, null, "Logout"));
221 for( var i in arr ) {
222 var row = table.insertRow(table.rows.length);
223 add_css_class(row, "main_nav_row");
224 var cell = row.insertCell(row.cells.length);
225 add_css_class(cell, "main_nav_cell");
226 cell.appendChild(arr[i]);
228 arr[i].setAttribute("target", "_top");
231 /* append to the page */
232 Page.navBox.addItem(table);
233 Page.navBox.finalize();
235 var location = getById("main_page_nav_box");
237 location.appendChild(Page.navBox.getNode());
240 return Page.navBox.getNode();
243 Page.prototype.buildDeepLink = function() {
247 } catch(E) { return elem("div"); }
249 var org = globalSelectedLocation;
251 org = globalLocation;
252 if(org) org = org.id();
254 var depth = globalSearchDepth;
256 if(globalPort == "443") globalPort = "80";
257 var prefix = "http://" + globalRootURL + ":" + globalPort + globalRootPath;
259 var string =globalAppFrame.location.href;
260 if(!string.match(/sub_frame/))
261 string += "&sub_frame=1"
264 if(!string.match(/location/))
265 string += "&location=" + org;
269 if(!string.match(/depth/))
270 string += "&depth=" + depth;
273 debug("Redirecting deep link to " + string );
276 { href: prefix + string }, null, "Link to this page"
279 a.setAttribute("target", "_blank");
284 Page.prototype.destroy = function() {
285 for( var x in this ){