1 /* advanced search interface */
3 attachEvt("common", "run", advInit);
5 function advInit() { depthSelInit(); }
7 function advWizardRun() {
8 var contains = $('advanced.wizard.contains').value;
9 var nocontains = $('advanced.wizard.nocontains').value;
10 var exact = $('advanced.wizard.exact').value;
11 var form = getSelectorVal($('advanced.wizard.form_selector'));
12 var type = getSelectorVal($('search_type_selector'));
16 arg[PARAM_FORM] = form;
17 arg[PARAM_STYPE] = type;
18 arg[PARAM_OFFSET] = 0;
19 arg[PARAM_DEPTH] = depthSelGetDepth();
20 arg[PARAM_LOCATION] = depthSelGetNewLoc();
21 arg[PARAM_TERM] = advBuildSearch( contains, nocontains, exact );
23 goTo(buildOPACLink(arg));
26 function advBuildSearch( contains, nocontains, exact ) {
28 if(contains) string = contains;
31 if(exact.indexOf('"') > -1) string += " " + exact;
32 else string += " \"" + exact + "\"";
36 var words = nocontains.split(" ");
38 string += " -" + words[i];
44 function advRefinedRun() {
45 var title = $('advanced.refined.title_contains').value;
46 var author = $('advanced.refined.author_contains').value;
47 var subject = $('advanced.refined.subject_contains').value;
48 var series = $('advanced.refined.series_contains').value;
49 var form = getSelectorVal($('advanced.refined.form_selector'));
52 title = advRefinedTerm('title', title);
53 author = advRefinedTerm('author', author);
54 subject = advRefinedTerm('subject', subject);
55 series = advRefinedTerm('series', series);
57 if(title) { blob.title = {}; blob.title.term = title; }
58 if(author) { blob.author = {}; blob.author.term = author;}
59 if(subject) { blob.subject = {}; blob.subject.term = subject;}
60 if(series) { blob.series = {}; blob.series.term = series; }
64 arg[PARAM_FORM] = form;
65 arg[PARAM_STYPE] = "";
67 arg[PARAM_ADVTERM] = js2JSON(blob);
68 arg[PARAM_DEPTH] = depthSelGetDepth();
69 arg[PARAM_LOCATION] = depthSelGetNewLoc();
70 arg[PARAM_OFFSET] = 0;
71 arg[PARAM_ADVTYPE] = ADVTYPE_MULTI;
73 goTo(buildOPACLink(arg));
77 function advRefinedTerm( type, term ) {
78 var t = getSelectorVal($('advanced.refined.' + type + '_type'));
81 if( t == 'contains' ) string = advBuildSearch( term );
82 else if( t == 'nocontains' ) string = advBuildSearch( null, term );
83 else if( t == 'exact' ) string = advBuildSearch( null, null, term );
89 function advAddMARC() {
90 $('advanced.marc.tbody').insertBefore(
91 $('advanced.marc.template').cloneNode(true),
92 $('advanced.marc.submit.row'));
95 function advMARCRun() {
97 var t = $('advanced.marc.tbody');
100 for( var c in t.childNodes ) {
101 var child = t.childNodes[c];
102 if(child.nodeName == 'tr') {
104 var val = advExtractMARC(child);
105 if(val) searches.push(val);
110 var children = t.getElementsByTagName('tr');
111 for( var c in children ) {
112 var child = children[c];
113 if(!(child && child.innerHTML)) continue;
114 var val = advExtractMARC(child);
115 if(val) searches.push(val);
118 if(searches.length == 0) return;
122 arg[PARAM_FORM] = 'all'
123 arg[PARAM_STYPE] = "";
124 arg[PARAM_OFFSET] = 0;
125 arg[PARAM_DEPTH] = depthSelGetDepth();
126 arg[PARAM_LOCATION] = depthSelGetNewLoc();
127 arg[PARAM_ADVTERM] = js2JSON(searches);
128 arg[PARAM_ADVTYPE] = ADVTYPE_MARC;
129 arg[PARAM_TERM] = "";
131 goTo(buildOPACLink(arg));
135 /* EXAMPLE => {"term":"0516011901","restrict":[{"tag":"020","subfield":"a"}]} */
136 function advExtractMARC(row) {
137 if(!row || row.id == 'advanced.marc.submit.row') return null;
138 var term = $n(row, 'advanced.marc.value').value;
139 if(!term) return null;
141 var subfield = $n(row, 'advanced.marc.subfield').value;
142 if(!subfield) subfield = "_";
144 var tag = $n(row, 'advanced.marc.tag').value;
145 if(!tag) return null;
147 return { 'term' : term, 'restrict' : [ { 'tag' : tag, 'subfield' : subfield } ] };