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);"},
201 null, "Change Search Location");
203 loc.onclick = function(evt) {
204 globalPage.locationTree.toggle(getById("location_nav_link"));
209 if(globalPort == "443") globalPort = "80";
210 var prefix = "http://" + globalRootURL + ":" + globalPort + globalRootPath;
212 arr.push(elem("a", {href: prefix + '?target=advanced_search'}, null, "Advanced Search"));
213 arr.push(elem("a", {href: prefix + '?target=my_opac'}, null, "My OPAC"));
214 //arr.push(elem("a", {href: prefix + '?target=about'}, null, "About PINES"));
215 if(loc) arr.push(this.buildDeepLink());
217 if(UserSession.instance().verifySession()) {
218 arr.push(elem("a", {href: prefix + "?target=logout"}, null, "Logout"));
222 for( var i in arr ) {
223 var row = table.insertRow(table.rows.length);
224 add_css_class(row, "main_nav_row");
225 var cell = row.insertCell(row.cells.length);
226 add_css_class(cell, "main_nav_cell");
227 cell.appendChild(arr[i]);
229 arr[i].setAttribute("target", "_top");
232 /* append to the page */
233 Page.navBox.addItem(table);
234 Page.navBox.finalize();
236 var location = getById("main_page_nav_box");
238 location.appendChild(Page.navBox.getNode());
241 return Page.navBox.getNode();
244 Page.prototype.buildDeepLink = function() {
248 } catch(E) { return elem("div"); }
250 var org = globalSelectedLocation;
252 org = globalLocation;
253 if(org) org = org.id();
255 var depth = globalSearchDepth;
257 if(globalPort == "443") globalPort = "80";
258 var prefix = "http://" + globalRootURL + ":" + globalPort + globalRootPath;
260 var string =globalAppFrame.location.href;
261 if(!string.match(/sub_frame/))
262 string += "&sub_frame=1"
265 if(!string.match(/location/))
266 string += "&location=" + org;
270 if(!string.match(/depth/))
271 string += "&depth=" + depth;
274 debug("Redirecting deep link to " + string );
277 { href: prefix + string }, null, "Link to this page"
280 a.setAttribute("target", "_blank");
285 Page.prototype.destroy = function() {
286 for( var x in this ){