]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/opac/skin/default/js/advanced.js
08e9b222856f14a362ba056226a9ffdd02c783ab
[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
7         /* propogate these? */
8
9         depthSelInit(); 
10         authoritySelInit(); 
11         setEnterFunc( $n( $('advanced.marc.tbody'), 'advanced.marc.value'), advMARCRun );
12
13         unHideMe($('adv_quick_search_sidebar'));
14
15         /*
16         if(isXUL()) 
17                 setSelector($('adv_quick_type'), 'tcn'); */
18
19         setEnterFunc($('adv_quick_text'), advGenericSearch);
20         setEnterFunc($('authority_browse_term'), advAuthorityBrowse);
21
22         unHideMe($('adv_marc_search_sidebar'));
23         unHideMe($('adv_authority_browse_sidebar'));
24 }
25
26
27 function authoritySelInit() {
28     dojo.require("openils.Util");
29     fieldmapper.standardRequest(
30         ["open-ils.supercat", "open-ils.supercat.authority.browse_axis_list"], {
31             "params": [true /* whole objects */], 
32             "async": true,
33             "oncomplete": function(r) {
34                 if ((r = openils.Util.readResponse(r))) {
35                     dojo.empty("authority_browse_axis");
36                     dojo.forEach(r, function(axis) {
37                         dojo.create("option", {"innerHTML": axis.name(), "value": axis.code()}, "authority_browse_axis");
38                     });
39                 }
40             }
41         }
42     );
43 }
44
45 function advAddMARC() {
46         var newt = $('adv_sdbar_table').cloneNode(true);
47         newt.id = "";
48         unHideMe($n(newt, 'crow'));
49         $n(newt, 'advanced.marc.tag').value = "";
50         $n(newt, 'advanced.marc.subfield').value = "";
51         $n(newt, 'advanced.marc.value').value = "";
52         $('adv_marc_search_sidebar').insertBefore(newt, $('adv_marc_submit'));
53 }
54
55 function advMARCRun() {
56
57         clearSearchParams();
58
59         var div = $('adv_marc_search_sidebar');
60         var tbodies = div.getElementsByTagName('tbody');
61         var searches = [];
62
63         for( var i = 0; i < tbodies.length; i++ ) {
64                 var tbody = tbodies[i];
65                 var val = advExtractMARC(tbody);
66                 if(val) searches.push(val);
67         }
68
69         if(searches.length == 0) return;
70
71         var arg = {};
72         arg.page = RRESULT;
73         arg[PARAM_FORM] = 'all'
74         arg[PARAM_RTYPE] = RTYPE_MARC;
75         arg[PARAM_OFFSET] = 0;
76         arg[PARAM_DEPTH]        = depthSelGetDepth();
77         arg[PARAM_LOCATION]     = depthSelGetNewLoc();
78         arg[PARAM_SEARCHES] = js2JSON(searches);
79         arg[PARAM_ADVTYPE] = ADVTYPE_MARC;
80         arg[PARAM_TERM] = "";
81
82         goTo(buildOPACLink(arg));
83 }
84
85
86 /* EXAMPLE => {"term":"0516011901","restrict":[{"tag":"020","subfield":"a"}]} */
87 function advExtractMARC(tbody) {
88         if(!tbody) return null;
89         var term = $n(tbody, 'advanced.marc.value').value;
90         if(!term) return null;
91
92         var subfield = $n(tbody, 'advanced.marc.subfield').value;
93         if(!subfield) subfield = "_";
94
95         var tag = $n(tbody, 'advanced.marc.tag').value;
96         if(!tag) return null;
97
98         return { 'term' : term.toLowerCase(), 'restrict' :  [ { 'tag' : tag, 'subfield' : subfield } ] };
99 }
100
101 function advGenericSearch() {
102         clearSearchParams();
103         var type = getSelectorVal($('adv_quick_type'));
104         
105         var term = $('adv_quick_text').value;
106         if(!term) return;
107
108         var arg = {};
109
110         switch(type) {
111
112                 case 'isbn' :
113                         arg.page                                        = RRESULT;
114                         arg[PARAM_STYPE]                = "";
115                         arg[PARAM_TERM]         = "";
116                         arg[PARAM_RTYPE]                = RTYPE_ISBN;
117                         arg[PARAM_OFFSET]               = 0;
118                         arg[PARAM_ADVTERM]      = term.toLowerCase();
119                         break;
120                 
121                 case 'issn' :
122                         arg.page                                        = RRESULT;
123                         arg[PARAM_STYPE]                = "";
124                         arg[PARAM_TERM]         = "";
125                         arg[PARAM_ADVTERM]      = term.toLowerCase();
126                         arg[PARAM_OFFSET]               = 0;
127                         arg[PARAM_RTYPE]                = RTYPE_ISSN;
128                         break;
129
130                 case 'tcn' :
131                         arg.page                                        = RRESULT;
132                         arg[PARAM_STYPE]                = "";
133                         arg[PARAM_TERM]         = "";
134                         arg[PARAM_ADVTERM]      = term;
135                         arg[PARAM_OFFSET]               = 0;
136                         arg[PARAM_RTYPE]                = RTYPE_TCN;
137                         break;
138
139         case 'barcode':
140             advFindBarcode(term);
141             break;
142
143
144                 case 'cn':
145                         arg.page                        = CNBROWSE;
146                         arg[PARAM_CN]   = term;
147                         arg[PARAM_DEPTH]                = depthSelGetDepth();
148                         arg[PARAM_LOCATION]     = depthSelGetNewLoc();
149                         break;
150
151                 case 'lccn':
152                         arg.page = RRESULT;
153                         arg[PARAM_FORM] = 'all'
154                         arg[PARAM_RTYPE] = RTYPE_MARC;
155                         arg[PARAM_OFFSET] = 0;
156                         arg[PARAM_DEPTH]        = depthSelGetDepth();
157                         arg[PARAM_LOCATION]     = depthSelGetNewLoc();
158                         arg[PARAM_SEARCHES] = js2JSON([{ 'term' : term.toLowerCase(), 
159                                         'restrict' :  [ { 'tag' : '010', 'subfield' : '_' } ] }]);
160                         arg[PARAM_ADVTYPE] = ADVTYPE_MARC;
161                         arg[PARAM_TERM] = "";
162                         break;
163
164
165                 default: alert('not done');
166         }
167
168         if(arg.page) goTo(buildOPACLink(arg));
169 }
170
171
172 function advFindBarcode(barcode) {
173     var req = new Request(FETCH_BIB_IDS_BY_BARCODE, barcode);
174     req.callback(advDrawBarcode);
175     req.request.alertEvent = false;
176     req.send();
177 }
178
179 function advDrawBarcode(r) {
180     var title_ids = r.getResultObject();
181     if(checkILSEvent(title_ids)) {
182         alertId('myopac.copy.not.found');
183         return;
184     }
185     if(!title_ids) return;
186     var args = {};
187     if (title_ids.length == 1) {
188         args.page = RDETAIL;
189         args[PARAM_RID] = title_ids[0];
190     } else {
191         args.page = RRESULT;
192             args[PARAM_RTYPE] = RTYPE_LIST;
193             args[PARAM_RLIST] = title_ids;
194     }
195     location.href = buildOPACLink(args);
196 }
197
198 function advAuthorityBrowse() {
199     var selector = dojo.byId("authority_browse_axis");
200     var args = {"page": AUTHBROWSE};
201     args[PARAM_AUTHORITY_BROWSE_AXIS] =
202         selector.options[selector.selectedIndex].value;
203     args[PARAM_AUTHORITY_BROWSE_TERM] =
204         dojo.byId("authority_browse_term").value;
205     location.href = buildOPACLink(args);
206 }
207