]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/opac/skin/default/js/advanced.js
removed the older Cookie.js code.
[Evergreen.git] / Open-ILS / web / opac / skin / default / js / advanced.js
1 /* advanced search interface */
2
3 attachEvt("common", "run", advInit);
4
5 function advInit() { 
6         $('advanced.wizard.contains').focus();
7         depthSelInit(); 
8
9         var wiz = [
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 );
17
18         var ref = [
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' ];
28         for( var i in ref ) 
29                 setEnterFunc( $(ref[i]), advRefinedRun );
30
31         setEnterFunc($('opac.advanced.quick.isbn'), advISBNRun );
32         setEnterFunc($('opac.advanced.quick.issn'), advISSNRun );
33         setEnterFunc( $n( $('advanced.marc.tbody'), 'advanced.marc.value'), advMARCRun );
34 }
35
36
37 function advWizardRun() {
38         var contains = $('advanced.wizard.contains').value;
39         var nocontains = $('advanced.wizard.nocontains').value; 
40         var exact = $('advanced.wizard.exact').value; 
41         var form = getSelectorVal($('advanced.wizard.form_selector'));
42         var type = getSelectorVal($('search_type_selector'));
43
44         var arg = {};
45         arg.page = MRESULT;
46         arg[PARAM_FORM] = form;
47         arg[PARAM_STYPE] = type;
48         arg[PARAM_OFFSET] = 0;
49         arg[PARAM_DEPTH]        = depthSelGetDepth();
50         arg[PARAM_LOCATION]     = depthSelGetNewLoc();
51         arg[PARAM_TERM] = advBuildSearch( contains, nocontains, exact );
52
53         goTo(buildOPACLink(arg));
54 }
55
56 function advBuildSearch( contains, nocontains, exact ) {
57         var string = "";
58         if(contains) string = contains;
59
60         if( exact ) {
61                 if(exact.indexOf('"') > -1) string += " " + exact;
62                 else string += " \"" + exact + "\"";
63         }
64
65         if(nocontains) {
66                 var words = nocontains.split(" ");
67                 for( var i in words ) 
68                         string += " -" + words[i];
69         }
70         return string;
71 }
72
73
74 function advRefinedRun() {
75         var title       = $('advanced.refined.title_contains').value;
76         var author      = $('advanced.refined.author_contains').value;
77         var subject = $('advanced.refined.subject_contains').value;
78         var series      = $('advanced.refined.series_contains').value;
79         var form = getSelectorVal($('advanced.refined.form_selector'));
80
81         var blob = {};
82         title = advRefinedTerm('title', title);
83         author = advRefinedTerm('author', author);
84         subject = advRefinedTerm('subject', subject);
85         series = advRefinedTerm('series', series);
86
87         if(title) { blob.title = {}; blob.title.term =  title; }
88         if(author) { blob.author = {}; blob.author.term = author;}
89         if(subject) { blob.subject = {}; blob.subject.term = subject;}
90         if(series) { blob.series = {}; blob.series.term = series; }
91
92         var arg                                 = {};
93         arg.page                                        = MRESULT;
94         arg[PARAM_FORM]         = form;
95         arg[PARAM_STYPE]                = "";
96         arg[PARAM_TERM]         = "";
97         arg[PARAM_ADVTERM]      = js2JSON(blob);
98         arg[PARAM_DEPTH]                = depthSelGetDepth();
99         arg[PARAM_LOCATION]     = depthSelGetNewLoc();
100         arg[PARAM_OFFSET]               = 0;
101         arg[PARAM_ADVTYPE]      = ADVTYPE_MULTI;
102
103         goTo(buildOPACLink(arg));
104
105 }
106
107 function advISBNRun() {
108         var isbn = $('opac.advanced.quick.isbn').value;
109         if(!isbn) return;
110         var arg                                 = {};
111         arg.page                                        = MRESULT;
112         arg[PARAM_STYPE]                = "";
113         arg[PARAM_TERM]         = "";
114         arg[PARAM_ADVTERM]      = isbn;
115         arg[PARAM_OFFSET]               = 0;
116         arg[PARAM_ADVTYPE]      = ADVTYPE_ISBN;
117         goTo(buildOPACLink(arg));
118 }
119
120 function advISSNRun() {
121         var issn = $('opac.advanced.quick.issn').value;
122         if(!issn) return;
123         var arg                                 = {};
124         arg.page                                        = MRESULT;
125         arg[PARAM_STYPE]                = "";
126         arg[PARAM_TERM]         = "";
127         arg[PARAM_ADVTERM]      = issn;
128         arg[PARAM_OFFSET]               = 0;
129         arg[PARAM_ADVTYPE]      = ADVTYPE_ISSN;
130         goTo(buildOPACLink(arg));
131 }
132
133
134 function advRefinedTerm( type, term ) {
135         var t = getSelectorVal($('advanced.refined.' + type + '_type'));
136         var string;
137
138         if( t == 'contains' ) string = advBuildSearch( term );
139         else if( t == 'nocontains' ) string = advBuildSearch( null, term );
140         else if( t == 'exact' ) string = advBuildSearch( null, null, term );
141
142         return string;
143 }
144
145
146 function advAddMARC() {
147         $('advanced.marc.tbody').insertBefore(
148                 $('advanced.marc.template').cloneNode(true),
149                 $('advanced.marc.submit.row'));
150 }
151
152 function advMARCRun() {
153
154         var t = $('advanced.marc.tbody');
155         var searches = [];
156         /*
157         for( var c in t.childNodes ) {
158                 var child = t.childNodes[c];
159                 if(child.nodeName == 'tr') {
160                         alert("hi");
161                         var val = advExtractMARC(child);
162                         if(val) searches.push(val);
163                 }
164         }
165         */
166
167         var children = t.getElementsByTagName('tr');
168         for( var c in children ) {
169                 var child = children[c];
170                 if(!(child && child.innerHTML)) continue;
171                 var val = advExtractMARC(child);
172                 if(val) searches.push(val);
173         }
174
175         if(searches.length == 0) return;
176
177         var arg = {};
178         arg.page = MRESULT;
179         arg[PARAM_FORM] = 'all'
180         arg[PARAM_STYPE] = "";
181         arg[PARAM_OFFSET] = 0;
182         arg[PARAM_DEPTH]        = depthSelGetDepth();
183         arg[PARAM_LOCATION]     = depthSelGetNewLoc();
184         arg[PARAM_ADVTERM] = js2JSON(searches);
185         arg[PARAM_ADVTYPE] = ADVTYPE_MARC;
186         arg[PARAM_TERM] = "";
187
188         goTo(buildOPACLink(arg));
189 }
190
191
192 /* EXAMPLE => {"term":"0516011901","restrict":[{"tag":"020","subfield":"a"}]} */
193 function advExtractMARC(row) {
194         if(!row || row.id == 'advanced.marc.submit.row') return null;
195         var term = $n(row, 'advanced.marc.value').value;
196         if(!term) return null;
197
198         var subfield = $n(row, 'advanced.marc.subfield').value;
199         if(!subfield) subfield = "_";
200
201         var tag = $n(row, 'advanced.marc.tag').value;
202         if(!tag) return null;
203
204         return { 'term' : term, 'restrict' :  [ { 'tag' : tag, 'subfield' : subfield } ] };
205 }
206