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