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 )
46 RecordResultPage.prototype.mkLink = function(id, type, value) {
53 href = document.createElement("a");
54 add_css_class(href,"record_result_title_link");
55 href.setAttribute("href","?target=record_result&mrid=" + id );
56 href.appendChild(document.createTextNode(value));
60 href = document.createElement("a");
61 add_css_class(href,"record_result_author_link");
62 href.setAttribute("href","?target=mr_result&mr_search_type=author&mr_search_query=" +
63 encodeURIComponent(value));
64 href.appendChild(document.createTextNode(value));
68 throw new EXArg("Unknown link type: " + type );
75 RecordResultPage.prototype.toString = function() {
77 return "\nRecordResultPage:\n" +
78 "page: " + this.page + "\n" +
79 "searchOffset: " + this.searchOffset + "\n" +
80 "recordIDs: " + this.recordIDs + "\n" +
81 "hitCount: " + this.hitCount + "\n" +
82 "hitsPerPage: " + this.hitsPerPage + "\n";
87 RecordResultPage.prototype.isNewSearch = function() {
94 /* performs a new search */
95 RecordResultPage.prototype.doSearch = function() {
97 debug( "Key Value Array \n" + js2JSON( paramObj ) );
99 this.page = parseInt(paramObj.__page);
100 this.searchOffset = this.page * this.hitsPerPage;
103 if(this.isNewSearch()) {
104 debug("RecordResultPage resetting search..");
108 /* is is just a call to next/prev? */
109 if( this.recordIDs && this.recordIDs[this.searchOffset] != null &&
110 this.recordIDs[this.searchOffset + this.hitsPerPage] != null ) {
111 /* we already have all of the IDS */
112 debug("We alread have the required mr ids for the search: [" + this.string + "]");
113 this.collectRecords();
118 if( paramObj.__mrid != null ) {
119 this.mrSearch(paramObj.__mrid);
123 if( paramObj.__search == "global" ) {
125 if( paramObj.__tcn != null ) {
126 this.globalSearch("tcn", paramObj.__tcn);
130 if( paramObj.__isbn != null ) {
131 this.globalSearch("isbn", paramObj.__isbn);
139 /* these are the simple global searches */
140 RecordResultPage.prototype.globalSearch = function(type, term) {
142 if( !term || term.length < 2 )
143 throw new EXArg( "globalSearch needs valid term: " + term );
145 debug("Performing Global search for term: " + term );
150 method = "open-ils.search.biblio.tcn";
154 method = "open-ils.search.biblio.isbn";
158 var request = new RemoteRequest( "open-ils.search", method, term );
161 request.setCompleteCallback(
164 var result = req.getResultObject();
165 debug( "Global Search returned: " + js2JSON(result) );
166 obj.gatherIDs(result)
167 obj.collectRecords();
168 } catch(E) { throw ("Search Error " + E ); }
175 RecordResultPage.prototype.mrSearch = function(mrid) {
177 var request = new RemoteRequest("open-ils.search",
178 "open-ils.search.biblio.metarecord_to_records", mrid );
179 debug("Gathering doc ids for metarecord " + mrid );
182 request.setCompleteCallback(
185 obj.gatherIDs(req.getResultObject());
186 obj.collectRecords();
187 } catch(E) { throw ("Search Error " + E ); }
193 RecordResultPage.prototype.collectRecords = function() {
195 var i = this.searchOffset;
197 var hit_box = getById("hit_count_count_box");
198 debug("Adding Hit Count: " + this.hitCount );
200 document.createTextNode(parseInt(this.hitCount)));
202 while( i < (this.searchOffset + this.hitsPerPage) ) {
203 var id = this.recordIDs[i];
205 if(id==null){ i++; continue; }
207 var request = new RemoteRequest( "open-ils.search",
208 "open-ils.search.biblio.record.mods_slim.retrieve", id );
209 this.requestBatch.push(request);
211 request.name = "record_request_" + i;
212 request.search_id = i;
213 request.page_id = parseInt(i) - parseInt(this.searchOffset);
215 /* define the callback for when we receive the record */
217 request.setCompleteCallback(
219 var record = req.getResultObject();
220 obj.displayRecord( record, req.search_id, req.page_id );
221 obj.doCopyCount( record, req.search_id, req.page_id );
230 RecordResultPage.prototype.doCopyCount = function( record, search_id, page_id ) {
232 var copy_box = getById("record_result_copy_count_box_" + page_id );
234 /* kick off the copy count search */
235 var copy_request = new RemoteRequest( "open-ils.search",
236 "open-ils.search.biblio.record.copy_count", 1, record.doc_id );
237 this.requestBatch.push(copy_request);
239 copy_request.search_id = search_id;
240 copy_request.name = "copy_request_" + (search_id+this.searchOffset);
242 debug("Sending copy request " + search_id + ":" + record.doc_id );
245 copy_request.setCompleteCallback(
248 //copy_box.innerHTML = req.getResultObject();
249 copy_box.appendChild(
250 document.createTextNode(req.getResultObject()));
252 alert("Copy Count Retrieval Error:\n" + E );