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