]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/javascript/opac/RecordResultPage.js
opac javascript
[working/Evergreen.git] / Open-ILS / src / javascript / opac / RecordResultPage.js
1 var globalRecordResultPage = null;                                      /* our global object */
2
3 RecordResultPage.prototype                                      = new AbstractRecordResultPage();
4 RecordResultPage.prototype.constructor  = RecordResultPage;
5 RecordResultPage.baseClass                                      = AbstractRecordResultPage.constructor;
6
7 /* constructor for our singleton object */
8 function RecordResultPage() {
9         if( globalRecordResultPage != null ) 
10                 return globalRecordResultPage;
11
12         this.searchBarForm = new SearchBarFormChunk();
13         this.init();
14         globalRecordResultPage = this;
15 }
16
17
18 /* returns the global instance. builds the instance if necessary.  All client
19  * code should use this method */
20 RecordResultPage.instance = function() {
21         if( globalRecordResultPage != null ) {
22                 return globalRecordResultPage;
23         } 
24         return new RecordResultPage();
25 }
26
27
28
29 RecordResultPage.prototype.mkLink = function(id, type, value) {
30
31         var href;
32
33         switch(type) {
34
35                 case "title":
36                         href = document.createElement("a");
37                         add_css_class(href,"record_result_title_link");
38                         href.setAttribute("href","?target=record_result&mrid=" + id );
39                         href.appendChild(document.createTextNode(value));
40                         break;
41
42                 case "author":
43                         href = document.createElement("a");
44                         add_css_class(href,"record_result_author_link");
45                         href.setAttribute("href","?target=mr_result&mr_search_type=author&mr_search_query=" +
46                                               encodeURIComponent(value));
47                         href.appendChild(document.createTextNode(value));
48                         break;
49
50                 default:
51                         throw new EXArg("Unknown link type: " + type );
52         }
53
54         debug("Returning HREF for link: " + href );
55
56         return href;
57
58 }
59
60
61
62 /* performs a new search */
63 RecordResultPage.prototype.doSearch = function() {
64
65         debug( "Key Value Array \n" + js2JSON( paramObj ) );
66
67         this.reset();
68
69         if( paramObj.mrid != null ) {
70                 this.mrSearch(paramObj.mrid);
71                 return;
72         }
73
74         if( paramObj.search == "global" ) {
75
76                 if( paramObj.tcn != null ) {
77                         this.globalSearch("tcn", paramObj.tcn);
78                         return;
79                 }
80
81                 if( paramObj.isbn != null ) {
82                         this.globalSearch("isbn", paramObj.isbn);
83                         return;
84                 }
85         }
86                 
87 }
88
89
90 /* these are the simple global searches */
91 RecordResultPage.prototype.globalSearch = function(type, term) {
92
93         if( !term || term.length < 2 )
94                 throw new EXArg( "globalSearch needs valid term: " + term );
95
96         debug("Performing Global search for term: " + term );
97
98         var method;
99         switch( type ) {
100                 case "tcn":
101                         method = "open-ils.search.biblio.tcn";
102                         break;
103
104                 case "isbn":
105                         method = "open-ils.search.biblio.isbn";
106                         break;
107         }
108
109         var request = new RemoteRequest( "open-ils.search",  method, term );
110
111         var obj = this;
112         request.setCompleteCallback(
113                 function(req) {
114                         try {
115                                 var result = req.getResultObject();
116                                 debug( "Global Search returned: " + js2JSON(result) );
117                                 obj.gatherIDs(result) 
118                                 obj.collectRecords();
119                         } catch(E) { throw ("Search Error " + E ); }
120                 }
121         );
122         request.send();
123 }
124
125
126 RecordResultPage.prototype.mrSearch = function(mrid) {
127
128         var request = new RemoteRequest("open-ils.search",
129                 "open-ils.search.biblio.metarecord_to_records", mrid );
130         debug("Gathering doc ids for metarecord " + mrid );
131
132         var obj = this;
133         request.setCompleteCallback(
134                 function(req) {
135                         try{
136                                 obj.gatherIDs(req.getResultObject());
137                                 obj.collectRecords();
138                         } catch(E) { throw ("Search Error " + E ); }
139                 }
140         );
141         request.send();
142 }
143
144 RecordResultPage.prototype.collectRecords = function() {
145
146         var i = this.searchOffset;
147
148         while( i < (this.searchOffset + this.hitsPerPage) ) {
149                 var id = this.recordIDs[i];
150
151                 if(id==null){ i++;  continue; }
152
153                 var request = new RemoteRequest( "open-ils.search",
154                         "open-ils.search.biblio.record.mods_slim.retrieve", id );
155                 this.requestBatch.push(request);
156
157                 request.name = "record_request_" + i;
158                 request.search_id = i;
159                 request.page_id = parseInt(i) - parseInt(this.searchOffset);
160
161                 var hit_box = document.getElementById("hit_count_count_box");
162                 //hit_box.innerHTML = this.hitCount;
163                 hit_box.appendChild(
164                                 document.createTextNode(this.hitCount));
165
166                 /* define the callback for when we receive the record */
167                 var obj = this;
168                 request.setCompleteCallback(
169                         function(req) {
170                         //      try {
171                                         var record = req.getResultObject();
172                                         obj.displayRecord( record, req.search_id, req.page_id );
173                                         obj.doCopyCount( record, req.search_id, req.page_id );
174                         //      } catch(E) { 
175                                         //alert("Doc Retrieval Error:\n" + E); 
176                         //              debug(" !!! Doc Retrieval Error:\n" + E); 
177                 //              }
178                         }
179                 );
180
181                 request.send();
182                 i++;
183         }
184 }
185
186 RecordResultPage.prototype.doCopyCount = function( record, search_id, page_id ) {
187
188         var copy_box    = document.getElementById("record_result_copy_count_box_" + page_id );
189
190         /* kick off the copy count search */
191         var copy_request = new RemoteRequest( "open-ils.search",
192                 "open-ils.search.biblio.record.copy_count", 1, record.doc_id );
193         this.requestBatch.push(copy_request);
194
195         copy_request.search_id = search_id;
196         copy_request.name = "copy_request_" + (search_id+this.searchOffset);
197
198         debug("Sending copy request " + search_id + ":" + record.doc_id );
199
200         var obj = this;
201         copy_request.setCompleteCallback( 
202                 function(req) {
203                         try {   
204                                 //copy_box.innerHTML = req.getResultObject();   
205                                 copy_box.appendChild(
206                                         document.createTextNode(req.getResultObject()));        
207                         } catch(E) { 
208                                 alert("Copy Count Retrieval Error:\n" + E ); 
209                         }
210                 }
211         );
212
213         copy_request.send();
214 }
215
216
217