1 /* advanced search interface */
3 attachEvt("common", "run", advInit);
5 /* tests the cookie rresult stuff
7 function advTestCookie() {
9 40791, 40792, 40793, 40794, 40795, 40797, 40798, 40799, 362178, 362179,
10 362180, 362170, 338215, 333398, 329010, 17, 362182, 362183, 362184, 362185 ];
12 cookieManager.write(COOKIE_RIDS, js2JSON(ids), '+1h');
15 a[PARAM_RTYPE] = RTYPE_COOKIE;
16 goTo(buildOPACLink(a));
23 $('advanced.wizard.contains').focus();
26 if(new CGI().param('advall') ) unHideMe($('adv_combined_search'));
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 );
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' ];
48 setEnterFunc( $(ref[i]), advRefinedRun );
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 );
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'));
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;
77 if( sort == SORT_TYPE_PUBDATE ) {
79 arg[PARAM_RTYPE] = type;
82 if(!arg[PARAM_TERM]) return;
84 goTo(buildOPACLink(arg));
87 function advBuildSearch( contains, nocontains, exact ) {
89 if(contains) string = contains;
92 if(exact.indexOf('"') > -1) string += " " + exact;
93 else string += " \"" + exact + "\"";
97 var words = nocontains.split(" ");
99 string += " -" + words[i];
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'));
115 title = advRefinedTerm('title', title);
116 author = advRefinedTerm('author', author);
117 subject = advRefinedTerm('subject', subject);
118 series = advRefinedTerm('series', series);
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; }
125 if( !(title || author|| subject|| series) ) return;
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;
140 if( sort == SORT_TYPE_PUBDATE ) {
142 arg[PARAM_RTYPE] = RTYPE_MULTI;
145 goTo(buildOPACLink(arg));
149 function advISBNRun() {
150 var isbn = $('opac.advanced.quick.isbn').value;
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));
162 function advISSNRun() {
163 var issn = $('opac.advanced.quick.issn').value;
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));
175 function advCNRun() {
176 var cn = $('opac.advanced.quick.cn').value;
181 goTo(buildOPACLink(arg));
185 function advRefinedTerm( type, term ) {
186 var t = getSelectorVal($('advanced.refined.' + type + '_type'));
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 );
197 function advAddMARC() {
198 $('advanced.marc.tbody').insertBefore(
199 $('advanced.marc.template').cloneNode(true),
200 $('advanced.marc.submit.row'));
203 function advMARCRun() {
205 var t = $('advanced.marc.tbody');
208 for( var c in t.childNodes ) {
209 var child = t.childNodes[c];
210 if(child.nodeName == 'tr') {
212 var val = advExtractMARC(child);
213 if(val) searches.push(val);
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);
226 if(searches.length == 0) return;
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] = "";
239 goTo(buildOPACLink(arg));
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;
249 var subfield = $n(row, 'advanced.marc.subfield').value;
250 if(!subfield) subfield = "_";
252 var tag = $n(row, 'advanced.marc.tag').value;
253 if(!tag) return null;
255 return { 'term' : term, 'restrict' : [ { 'tag' : tag, 'subfield' : subfield } ] };