]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/opac/skin/default/js/advanced.js
using new search methods
[Evergreen.git] / Open-ILS / web / opac / skin / default / js / advanced.js
1 /* advanced search interface */
2
3 attachEvt("common", "run", advInit);
4
5 /* tests the cookie rresult stuff 
6
7 function advTestCookie() {
8         var ids = [ 
9                 40791, 40792, 40793, 40794, 40795, 40797, 40798, 40799, 362178, 362179, 
10                 362180, 362170, 338215, 333398, 329010, 17, 362182, 362183, 362184, 362185 ];
11
12         cookieManager.write(COOKIE_RIDS, js2JSON(ids), '+1h');
13         var a = {};
14         a.page = RRESULT;
15         a[PARAM_RTYPE] = RTYPE_COOKIE;
16         goTo(buildOPACLink(a));
17 }
18 */
19
20
21
22 function advInit() { 
23         $('advanced.wizard.contains').focus();
24         depthSelInit(); 
25
26         if(new CGI().param('advall') ) unHideMe($('adv_combined_search'));
27
28         var wiz = [
29                 'advanced.wizard.contains',
30                 'advanced.wizard.nocontains',
31                 'advanced.wizard.exact',
32                 'search_type_selector',
33                 'advanced.wizard.form_selector' ];
34         for( var node in wiz ) 
35                 setEnterFunc( $(wiz[node]), advWizardRun );
36
37         var ref = [
38                 'advanced.refined.title_contains',
39                 'advanced.refined.author_contains',
40                 'advanced.refined.subject_contains',
41                 'advanced.refined.series_contains',
42                 'advanced.refined.form_selector',
43                 'advanced.refined.series_type',
44                 'advanced.refined.subject_type',
45                 'advanced.refined.author_type',
46                 'advanced.refined.title_type' ];
47         for( var i in ref ) 
48                 setEnterFunc( $(ref[i]), advRefinedRun );
49
50         setEnterFunc($('opac.advanced.quick.isbn'), advISBNRun );
51         setEnterFunc($('opac.advanced.quick.issn'), advISSNRun );
52         setEnterFunc($('opac.advanced.quick.cn'), advCNRun );
53         setEnterFunc( $n( $('advanced.marc.tbody'), 'advanced.marc.value'), advMARCRun );
54 }
55
56
57 function advWizardRun() {
58         var contains = $('advanced.wizard.contains').value;
59         var nocontains = $('advanced.wizard.nocontains').value; 
60         var exact       = $('advanced.wizard.exact').value; 
61         var form                = getSelectorVal($('advanced.wizard.form_selector'));
62         var type                = getSelectorVal($('search_type_selector'));
63         var sort                = getSelectorVal($('advanced.wizard.sort_by'));
64         var sortdir     = getSelectorVal($('advanced.wizard.sort_dir'));
65
66         var arg = {};
67         arg.page = MRESULT;
68         arg[PARAM_FORM]         = form;
69         arg[PARAM_STYPE]                = type;
70         arg[PARAM_OFFSET]               = 0;
71         arg[PARAM_DEPTH]                = depthSelGetDepth();
72         arg[PARAM_LOCATION]     = depthSelGetNewLoc();
73         arg[PARAM_TERM]         = advBuildSearch( contains, nocontains, exact );
74         arg[PARAM_SORT]         = sort;
75         arg[PARAM_SORT_DIR]     = sortdir;
76
77         if( sort == SORT_TYPE_PUBDATE ) {
78                 arg.page = RRESULT;
79                 arg[PARAM_RTYPE]        = type;
80         }
81
82         if(!arg[PARAM_TERM]) return;
83
84         goTo(buildOPACLink(arg));
85 }
86
87 function advBuildSearch( contains, nocontains, exact ) {
88         var string = "";
89         if(contains) string = contains;
90
91         if( exact ) {
92                 if(exact.indexOf('"') > -1) string += " " + exact;
93                 else string += " \"" + exact + "\"";
94         }
95
96         if(nocontains) {
97                 var words = nocontains.split(" ");
98                 for( var i in words ) 
99                         string += " -" + words[i];
100         }
101         return string;
102 }
103
104
105 function advRefinedRun() {
106         var title       = $('advanced.refined.title_contains').value;
107         var author      = $('advanced.refined.author_contains').value;
108         var subject = $('advanced.refined.subject_contains').value;
109         var series      = $('advanced.refined.series_contains').value;
110         var form = getSelectorVal($('advanced.refined.form_selector'));
111         var sort                = getSelectorVal($('advanced.refined.sort_by'));
112         var sortdir     = getSelectorVal($('advanced.refined.sort_dir'));
113
114         var blob = {};
115         title = advRefinedTerm('title', title);
116         author = advRefinedTerm('author', author);
117         subject = advRefinedTerm('subject', subject);
118         series = advRefinedTerm('series', series);
119
120         if(title) { blob.title = {}; blob.title.term =  title; }
121         if(author) { blob.author = {}; blob.author.term = author;}
122         if(subject) { blob.subject = {}; blob.subject.term = subject;}
123         if(series) { blob.series = {}; blob.series.term = series; }
124
125         if( !(title || author|| subject|| series) ) return;
126
127         var arg                                 = {};
128         arg.page                                        = MRESULT;
129         arg[PARAM_FORM]         = form;
130         arg[PARAM_STYPE]                = "";
131         arg[PARAM_TERM]         = "";
132         arg[PARAM_ADVTERM]      = js2JSON(blob);
133         arg[PARAM_DEPTH]                = depthSelGetDepth();
134         arg[PARAM_LOCATION]     = depthSelGetNewLoc();
135         arg[PARAM_OFFSET]               = 0;
136         arg[PARAM_ADVTYPE]      = ADVTYPE_MULTI;
137         arg[PARAM_SORT]         = sort;
138         arg[PARAM_SORT_DIR]     = sortdir;
139
140         if( sort == SORT_TYPE_PUBDATE ) {
141                 arg.page = RRESULT;
142                 arg[PARAM_RTYPE] = RTYPE_MULTI;
143         }
144
145         goTo(buildOPACLink(arg));
146
147 }
148
149 function advISBNRun() {
150         var isbn = $('opac.advanced.quick.isbn').value;
151         if(!isbn) return;
152         var arg                                 = {};
153         arg.page                                        = MRESULT;
154         arg[PARAM_STYPE]                = "";
155         arg[PARAM_TERM]         = "";
156         arg[PARAM_ADVTERM]      = isbn;
157         arg[PARAM_OFFSET]               = 0;
158         arg[PARAM_ADVTYPE]      = ADVTYPE_ISBN;
159         goTo(buildOPACLink(arg));
160 }
161
162 function advISSNRun() {
163         var issn = $('opac.advanced.quick.issn').value;
164         if(!issn) return;
165         var arg                                 = {};
166         arg.page                                        = MRESULT;
167         arg[PARAM_STYPE]                = "";
168         arg[PARAM_TERM]         = "";
169         arg[PARAM_ADVTERM]      = issn;
170         arg[PARAM_OFFSET]               = 0;
171         arg[PARAM_ADVTYPE]      = ADVTYPE_ISSN;
172         goTo(buildOPACLink(arg));
173 }
174
175 function advCNRun() {
176         var cn = $('opac.advanced.quick.cn').value;
177         if(!cn) return;
178         var arg                 = {};
179         arg.page                        = CNBROWSE;
180         arg[PARAM_CN]   = cn;
181         goTo(buildOPACLink(arg));
182 }
183
184
185 function advRefinedTerm( type, term ) {
186         var t = getSelectorVal($('advanced.refined.' + type + '_type'));
187         var string;
188
189         if( t == 'contains' ) string = advBuildSearch( term );
190         else if( t == 'nocontains' ) string = advBuildSearch( null, term );
191         else if( t == 'exact' ) string = advBuildSearch( null, null, term );
192
193         return string;
194 }
195
196
197 function advAddMARC() {
198         $('advanced.marc.tbody').insertBefore(
199                 $('advanced.marc.template').cloneNode(true),
200                 $('advanced.marc.submit.row'));
201 }
202
203 function advMARCRun() {
204
205         var t = $('advanced.marc.tbody');
206         var searches = [];
207         /*
208         for( var c in t.childNodes ) {
209                 var child = t.childNodes[c];
210                 if(child.nodeName == 'tr') {
211                         alert("hi");
212                         var val = advExtractMARC(child);
213                         if(val) searches.push(val);
214                 }
215         }
216         */
217
218         var children = t.getElementsByTagName('tr');
219         for( var c in children ) {
220                 var child = children[c];
221                 if(!(child && child.innerHTML)) continue;
222                 var val = advExtractMARC(child);
223                 if(val) searches.push(val);
224         }
225
226         if(searches.length == 0) return;
227
228         var arg = {};
229         arg.page = MRESULT;
230         arg[PARAM_FORM] = 'all'
231         arg[PARAM_STYPE] = "";
232         arg[PARAM_OFFSET] = 0;
233         arg[PARAM_DEPTH]        = depthSelGetDepth();
234         arg[PARAM_LOCATION]     = depthSelGetNewLoc();
235         arg[PARAM_ADVTERM] = js2JSON(searches);
236         arg[PARAM_ADVTYPE] = ADVTYPE_MARC;
237         arg[PARAM_TERM] = "";
238
239         goTo(buildOPACLink(arg));
240 }
241
242
243 /* EXAMPLE => {"term":"0516011901","restrict":[{"tag":"020","subfield":"a"}]} */
244 function advExtractMARC(row) {
245         if(!row || row.id == 'advanced.marc.submit.row') return null;
246         var term = $n(row, 'advanced.marc.value').value;
247         if(!term) return null;
248
249         var subfield = $n(row, 'advanced.marc.subfield').value;
250         if(!subfield) subfield = "_";
251
252         var tag = $n(row, 'advanced.marc.tag').value;
253         if(!tag) return null;
254
255         return { 'term' : term, 'restrict' :  [ { 'tag' : tag, 'subfield' : subfield } ] };
256 }
257