1 var globalRecordResultPage = null; /* our global object */
3 RecordResultPage.prototype = new AbstractRecordResultPage();
4 RecordResultPage.prototype.constructor = RecordResultPage;
5 RecordResultPage.baseClass = AbstractRecordResultPage.constructor;
7 /* constructor for our singleton object */
8 function RecordResultPage() {
10 debug("in RecordResultPage()");
12 if( globalRecordResultPage != null ) {
13 debug("globalRecordResultPage already exists: " +
14 globalRecordResultPage.toString() );
15 return globalRecordResultPage;
17 globalRecordResultPage = this;
19 debug("Built a new RecordResultPage()");
23 /* returns the global instance. builds the instance if necessary. All client
24 * code should use this method */
25 RecordResultPage.instance = function() {
26 if( globalRecordResultPage != null ) {
27 return globalRecordResultPage;
29 return new RecordResultPage();
32 RecordResultPage.prototype.next = function() {
33 paramObj.__page = parseInt(paramObj.__page) + 1;
34 var paramArray = build_param_array();
35 url_redirect( paramArray )
39 RecordResultPage.prototype.prev = function() {
40 paramObj.__page = parseInt(paramObj.__page) - 1;
41 var paramArray = build_param_array();
42 url_redirect( paramArray )
45 RecordResultPage.prototype.addMenuItems = function(menu, record) {
47 var func = function() {
48 var req = new RemoteRequest(
50 "open-ils.search.biblio.record.html",
53 buildViewMARCWindow(req.getResultObject(), record.doc_id() );
56 menu.addItem("View MARC", func);
58 xulEvtRecordResultDisplayed( menu, record );
63 function buildViewMARCWindow(html, id) {
64 var win = window.open(null,"MARC_" + id,
65 "location=0,menubar=0,status=0,resizeable,resize," +
66 "outerHeight=500,outerWidth=400,height=500," +
67 "width=400,scrollbars=1,screenX=100," +
68 "screenY=100,top=100,left=100,alwaysraised" )
69 win.document.write(html);
71 win.document.title = "View MARC";
77 RecordResultPage.prototype.mkLink = function(id, type, value) {
84 href = createAppElement("a");
85 add_css_class(href,"record_result_title_link");
86 href.setAttribute("href","?target=record_detail&record=" + id );
87 href.appendChild(createAppTextNode(value));
91 href = createAppElement("a");
92 add_css_class(href,"record_result_author_link");
93 href.setAttribute("href","?target=mr_result&mr_search_type=author&mr_search_query=" +
94 encodeURIComponent(value));
95 href.appendChild(createAppTextNode(value));
99 throw new EXArg("Unknown link type: " + type );
106 RecordResultPage.prototype.toString = function() {
108 return "\nRecordResultPage:\n" +
109 "page: " + this.page + "\n" +
110 "searchOffset: " + this.searchOffset + "\n" +
111 "recordIDs: " + this.recordIDs + "\n" +
112 "hitCount: " + this.hitCount + "\n" +
113 "hitsPerPage: " + this.hitsPerPage + "\n";
118 RecordResultPage.prototype.isNewSearch = function() {
125 /* performs a new search */
126 RecordResultPage.prototype.doSearch = function() {
128 debug( "Key Value Array \n" + js2JSON( paramObj ) );
130 this.page = parseInt(paramObj.__page);
132 if(this.page == null)
135 this.searchOffset = this.page * this.hitsPerPage;
138 if(this.isNewSearch()) {
139 debug("RecordResultPage resetting search..");
143 var offset = parseInt(this.searchOffset);
144 var hitspp = parseInt(this.hitsPerPage);
146 /* is this just a call to next/prev? */
147 if( this.recordIDs && this.recordIDs[offset] != null ) {
148 debug("We have the first part of the ID's");
149 if( this.recordIDs[offset + (hitspp -1 )] != null ||
150 this.recordIDs[this.hitCount - 1] != null ) {
151 /* we already have all of the IDS */
152 debug("We alread have the required mr " +
153 "ids for the search: [" + this.string + "]");
154 this.collectRecords();
160 if( paramObj.__mrid != null ) {
161 this.mrSearch(paramObj.__mrid);
165 if( paramObj.__search == "global" ) {
167 if( paramObj.__tcn != null ) {
168 this.globalSearch("tcn", paramObj.__tcn);
172 if( paramObj.__isbn != null ) {
173 this.globalSearch("isbn", paramObj.__isbn);
176 if( paramObj.__barcode != null ) {
177 this.globalSearch("barcode", paramObj.__barcode);
186 /* these are the simple global searches */
187 RecordResultPage.prototype.globalSearch = function(type, term) {
189 if( !term || term.length < 2 )
190 throw new EXArg( "globalSearch needs valid term: " + term );
192 debug("Performing Global search [" + type + "] for term: " + term );
197 method = "open-ils.search.biblio.tcn";
201 method = "open-ils.search.biblio.isbn";
205 method = "open-ils.search.biblio.find_by_barcode";
209 var request = new RemoteRequest( "open-ils.search", method, term );
212 request.setCompleteCallback(
215 var result = req.getResultObject();
216 debug( "Global Search returned: " + js2JSON(result) );
217 obj.gatherIDs(result)
218 obj.collectRecords();
219 } catch(E) { throw ("Search Error " + E ); }
226 RecordResultPage.prototype.mrSearch = function(mrid) {
228 var request = new RemoteRequest("open-ils.search",
229 "open-ils.search.biblio.metarecord_to_records", mrid );
230 debug("Gathering doc ids for metarecord " + mrid );
233 request.setCompleteCallback(
236 obj.gatherIDs(req.getResultObject());
237 obj.collectRecords();
238 } catch(E) { throw ("Search Error " + E ); }
244 RecordResultPage.prototype.collectRecords = function() {
246 var i = this.searchOffset;
248 while( i < (this.searchOffset + this.hitsPerPage) ) {
249 var id = this.recordIDs[i];
251 if(id==null){ i++; continue; }
253 var request = new RemoteRequest( "open-ils.search",
254 "open-ils.search.biblio.record.mods_slim.retrieve", id );
256 request.name = "record_request_" + i;
257 request.search_id = i;
258 request.page_id = parseInt(i) - parseInt(this.searchOffset);
260 /* define the callback for when we receive the record */
262 request.setCompleteCallback(
264 var record = req.getResultObject();
265 obj.displayRecord( record, req.search_id, req.page_id );
266 obj.doCopyCount( record, req.search_id, req.page_id );
275 RecordResultPage.prototype.doCopyCount = function( record, search_id, page_id ) {
277 var copy_box = getById("record_result_copy_count_box_" + page_id );
279 /* kick off the copy count search */
280 var orgunit = globalSelectedLocation;
281 if(!orgunit) orgunit = globalLocation;
283 var copy_request = new RemoteRequest( "open-ils.search",
284 "open-ils.search.biblio.record.copy_count",
285 orgunit.id(), record.doc_id() );
288 copy_request.search_id = search_id;
289 copy_request.name = "copy_request_" + (search_id+this.searchOffset);
291 debug("Sending copy request " + search_id + ":" + record.doc_id() );
294 copy_request.setCompleteCallback(
297 obj.displayCopyCounts(req.getResultObject(), search_id, page_id );
299 debug("****** Copy Count Retrieval Error:\n" + E );