1 /* advanced search interface */
3 attachEvt("common", "run", advInit);
6 $('advanced.wizard.contains').focus();
10 'advanced.wizard.contains',
11 'advanced.wizard.nocontains',
12 'advanced.wizard.exact',
13 'search_type_selector',
14 'advanced.wizard.form_selector' ];
15 for( var node in wiz )
16 setEnterFunc( $(wiz[node]), advWizardRun );
19 'advanced.refined.title_contains',
20 'advanced.refined.author_contains',
21 'advanced.refined.subject_contains',
22 'advanced.refined.series_contains',
23 'advanced.refined.form_selector',
24 'advanced.refined.series_type',
25 'advanced.refined.subject_type',
26 'advanced.refined.author_type',
27 'advanced.refined.title_type' ];
29 setEnterFunc( $(ref[i]), advRefinedRun );
31 setEnterFunc($('opac.advanced.quick.isbn'), advISBNRun );
32 setEnterFunc($('opac.advanced.quick.issn'), advISSNRun );
33 setEnterFunc( $n( $('advanced.marc.tbody'), 'advanced.marc.value'), advMARCRun );
36 setSelector($('advanced.wizard.sort_by'), getSort());
37 setSelector($('advanced.wizard.sort_dir'), getSortDir());
38 if(getSort() && getSort() != SORT_TYPE_REL)
39 $('advanced.wizard.sort_dir').disabled = false;
44 function advWizardRun() {
45 var contains = $('advanced.wizard.contains').value;
46 var nocontains = $('advanced.wizard.nocontains').value;
47 var exact = $('advanced.wizard.exact').value;
48 var form = getSelectorVal($('advanced.wizard.form_selector'));
49 var type = getSelectorVal($('search_type_selector'));
50 var sort = getSelectorVal($('advanced.wizard.sort_by'));
51 var sortdir = getSelectorVal($('advanced.wizard.sort_dir'));
55 arg[PARAM_FORM] = form;
56 arg[PARAM_STYPE] = type;
57 arg[PARAM_OFFSET] = 0;
58 arg[PARAM_DEPTH] = depthSelGetDepth();
59 arg[PARAM_LOCATION] = depthSelGetNewLoc();
60 arg[PARAM_TERM] = advBuildSearch( contains, nocontains, exact );
61 arg[PARAM_SORT] = sort;
62 arg[PARAM_SORT_DIR] = sortdir;
64 goTo(buildOPACLink(arg));
67 function advBuildSearch( contains, nocontains, exact ) {
69 if(contains) string = contains;
72 if(exact.indexOf('"') > -1) string += " " + exact;
73 else string += " \"" + exact + "\"";
77 var words = nocontains.split(" ");
79 string += " -" + words[i];
85 function advRefinedRun() {
86 var title = $('advanced.refined.title_contains').value;
87 var author = $('advanced.refined.author_contains').value;
88 var subject = $('advanced.refined.subject_contains').value;
89 var series = $('advanced.refined.series_contains').value;
90 var form = getSelectorVal($('advanced.refined.form_selector'));
91 var sort = getSelectorVal($('advanced.refined.sort_by'));
92 var sortdir = getSelectorVal($('advanced.refined.sort_dir'));
95 title = advRefinedTerm('title', title);
96 author = advRefinedTerm('author', author);
97 subject = advRefinedTerm('subject', subject);
98 series = advRefinedTerm('series', series);
100 if(title) { blob.title = {}; blob.title.term = title; }
101 if(author) { blob.author = {}; blob.author.term = author;}
102 if(subject) { blob.subject = {}; blob.subject.term = subject;}
103 if(series) { blob.series = {}; blob.series.term = series; }
107 arg[PARAM_FORM] = form;
108 arg[PARAM_STYPE] = "";
109 arg[PARAM_TERM] = "";
110 arg[PARAM_ADVTERM] = js2JSON(blob);
111 arg[PARAM_DEPTH] = depthSelGetDepth();
112 arg[PARAM_LOCATION] = depthSelGetNewLoc();
113 arg[PARAM_OFFSET] = 0;
114 arg[PARAM_ADVTYPE] = ADVTYPE_MULTI;
115 arg[PARAM_SORT] = sort;
116 arg[PARAM_SORT_DIR] = sortdir;
118 goTo(buildOPACLink(arg));
122 function advISBNRun() {
123 var isbn = $('opac.advanced.quick.isbn').value;
127 arg[PARAM_STYPE] = "";
128 arg[PARAM_TERM] = "";
129 arg[PARAM_ADVTERM] = isbn;
130 arg[PARAM_OFFSET] = 0;
131 arg[PARAM_ADVTYPE] = ADVTYPE_ISBN;
132 goTo(buildOPACLink(arg));
135 function advISSNRun() {
136 var issn = $('opac.advanced.quick.issn').value;
140 arg[PARAM_STYPE] = "";
141 arg[PARAM_TERM] = "";
142 arg[PARAM_ADVTERM] = issn;
143 arg[PARAM_OFFSET] = 0;
144 arg[PARAM_ADVTYPE] = ADVTYPE_ISSN;
145 goTo(buildOPACLink(arg));
149 function advRefinedTerm( type, term ) {
150 var t = getSelectorVal($('advanced.refined.' + type + '_type'));
153 if( t == 'contains' ) string = advBuildSearch( term );
154 else if( t == 'nocontains' ) string = advBuildSearch( null, term );
155 else if( t == 'exact' ) string = advBuildSearch( null, null, term );
161 function advAddMARC() {
162 $('advanced.marc.tbody').insertBefore(
163 $('advanced.marc.template').cloneNode(true),
164 $('advanced.marc.submit.row'));
167 function advMARCRun() {
169 var t = $('advanced.marc.tbody');
172 for( var c in t.childNodes ) {
173 var child = t.childNodes[c];
174 if(child.nodeName == 'tr') {
176 var val = advExtractMARC(child);
177 if(val) searches.push(val);
182 var children = t.getElementsByTagName('tr');
183 for( var c in children ) {
184 var child = children[c];
185 if(!(child && child.innerHTML)) continue;
186 var val = advExtractMARC(child);
187 if(val) searches.push(val);
190 if(searches.length == 0) return;
194 arg[PARAM_FORM] = 'all'
195 arg[PARAM_STYPE] = "";
196 arg[PARAM_OFFSET] = 0;
197 arg[PARAM_DEPTH] = depthSelGetDepth();
198 arg[PARAM_LOCATION] = depthSelGetNewLoc();
199 arg[PARAM_ADVTERM] = js2JSON(searches);
200 arg[PARAM_ADVTYPE] = ADVTYPE_MARC;
201 arg[PARAM_TERM] = "";
203 goTo(buildOPACLink(arg));
207 /* EXAMPLE => {"term":"0516011901","restrict":[{"tag":"020","subfield":"a"}]} */
208 function advExtractMARC(row) {
209 if(!row || row.id == 'advanced.marc.submit.row') return null;
210 var term = $n(row, 'advanced.marc.value').value;
211 if(!term) return null;
213 var subfield = $n(row, 'advanced.marc.subfield').value;
214 if(!subfield) subfield = "_";
216 var tag = $n(row, 'advanced.marc.tag').value;
217 if(!tag) return null;
219 return { 'term' : term, 'restrict' : [ { 'tag' : tag, 'subfield' : subfield } ] };