7a824f113ccbc346aacb5a2d9f63e09f6291982f
[evergreen-equinox.git] / Open-ILS / web / opac / skin / kcls / js / advanced.js
1 /* advanced search interface */
2
3 attachEvt("common", "run", advInit);
4
5 function advInit() { 
6
7         unHideMe($('adv_search_parent'));
8         /* propogate these? */
9
10         depthSelInit(); 
11         setEnterFunc( $n( $('advanced.marc.tbody'), 'advanced.marc.value'), advMARCRun );
12         hideMe($('adv_quick_search_sidebar'));
13         
14         var adv_set = true;
15         if(getAdvTerm()) $('adv_quick_text').value = getAdvTerm();
16         if(getRtype()) {
17           var rtype_val = getRtype();
18           if(rtype_val==RTYPE_MARC) rtype_val='iccn';
19           adv_set = setSelector($('adv_quick_type'), rtype_val);
20         }
21         if(getCallnumber()) {
22                 adv_set = setSelector($('adv_quick_type'), 'cn');
23                 $('adv_quick_text').value = getCallnumber();
24         }
25         if(!adv_set) {
26                 setSelector($('adv_quick_type'), 'barcode');
27                 $('adv_quick_text').value = getRid();
28         }
29
30         /*
31         if(isXUL()) 
32                 setSelector($('adv_quick_type'), 'tcn'); */
33
34         setEnterFunc($('adv_quick_text'), advGenericSearch);
35         hideMe($('adv_marc_search_sidebar'));
36         //hideMe($('adv_global_search'));
37         advAddGblRow();
38 }
39
40 function advAddMARC() {
41         var newt = $('adv_sdbar_table').cloneNode(true);
42         newt.id = "";
43         unHideMe($n(newt, 'crow'));
44         $n(newt, 'advanced.marc.tag').value = "";
45         $n(newt, 'advanced.marc.subfield').value = "";
46         $n(newt, 'advanced.marc.value').value = "";
47         $('adv_marc_search_sidebar').insertBefore(newt, $('adv_marc_submit'));
48 }
49
50 function advMARCRun() {
51
52         clearSearchParams();
53
54         var div = $('adv_marc_search_sidebar');
55         var tbodies = div.getElementsByTagName('tbody');
56         var searches = [];
57
58         for( var i = 0; i < tbodies.length; i++ ) {
59                 var tbody = tbodies[i];
60                 var val = advExtractMARC(tbody);
61                 if(val) searches.push(val);
62         }
63
64         if(searches.length == 0) return;
65
66         var arg = {};
67         arg.page = RRESULT;
68         arg[PARAM_FORM] = 'all';
69         arg[PARAM_RTYPE] = RTYPE_MARC;
70         arg[PARAM_OFFSET] = 0;
71         arg[PARAM_DEPTH]        = depthSelGetDepth();
72         arg[PARAM_LOCATION]     = depthSelGetNewLoc();
73         arg[PARAM_SEARCHES] = js2JSON(searches);
74         arg[PARAM_ADVTYPE] = ADVTYPE_MARC;
75         arg[PARAM_TERM] = "";
76
77         goTo(buildOPACLink(arg));
78 }
79
80
81 /* EXAMPLE => {"term":"0516011901","restrict":[{"tag":"020","subfield":"a"}]} */
82 function advExtractMARC(tbody) {
83         if(!tbody) return null;
84         var term = $n(tbody, 'advanced.marc.value').value;
85         if(!term) return null;
86
87         var subfield = $n(tbody, 'advanced.marc.subfield').value;
88         if(!subfield) subfield = "_";
89
90         var tag = $n(tbody, 'advanced.marc.tag').value;
91         if(!tag) return null;
92
93         return { 'term' : term.toLowerCase(), 'restrict' :  [ { 'tag' : tag, 'subfield' : subfield } ] };
94 }
95
96 function advGenericSearch() {
97         clearSearchParams();
98         var type = getSelectorVal($('adv_quick_type'));
99         
100         var term = $('adv_quick_text').value;
101         if(!term) return;
102
103         var arg = {};
104
105         switch(type) {
106
107                 case 'isbn' :
108                         arg.page                                        = RRESULT;
109                         arg[PARAM_STYPE]                = "";
110                         arg[PARAM_TERM]         = "";
111                         arg[PARAM_RTYPE]                = RTYPE_ISBN;
112                         arg[PARAM_OFFSET]               = 0;
113                         arg[PARAM_ADVTERM]      = term.toLowerCase();
114                         break;
115                 
116                 case 'issn' :
117                         arg.page                                        = RRESULT;
118                         arg[PARAM_STYPE]                = "";
119                         arg[PARAM_TERM]         = "";
120                         arg[PARAM_ADVTERM]      = term.toLowerCase();
121                         arg[PARAM_OFFSET]               = 0;
122                         arg[PARAM_RTYPE]                = RTYPE_ISSN;
123                         break;
124
125                 case 'tcn' :
126                         arg.page                                        = RRESULT;
127                         arg[PARAM_STYPE]                = "";
128                         arg[PARAM_TERM]         = "";
129                         arg[PARAM_ADVTERM]      = term;
130                         arg[PARAM_OFFSET]               = 0;
131                         arg[PARAM_RTYPE]                = RTYPE_TCN;
132                         break;
133
134         case 'barcode':
135             advFindBarcode(term);
136             break;
137
138
139                 case 'cn':
140                         arg.page                        = CNBROWSE;
141                         arg[PARAM_CN]   = term;
142                         arg[PARAM_DEPTH]                = depthSelGetDepth();
143                         arg[PARAM_LOCATION]     = depthSelGetNewLoc();
144                         break;
145
146                 case 'lccn':
147                         arg.page = RRESULT;
148                         arg[PARAM_FORM] = 'all'
149                         arg[PARAM_RTYPE] = RTYPE_MARC;
150                         arg[PARAM_OFFSET] = 0;
151                         arg[PARAM_DEPTH]        = depthSelGetDepth();
152                         arg[PARAM_LOCATION]     = depthSelGetNewLoc();
153                         arg[PARAM_SEARCHES] = js2JSON([{ 'term' : term.toLowerCase(), 
154                                         'restrict' :  [ { 'tag' : '010', 'subfield' : '_' } ] }]);
155                         arg[PARAM_ADVTYPE] = ADVTYPE_MARC;
156                         arg[PARAM_TERM] = "";
157                         break;
158
159
160                 default: alert('not done');
161         }
162
163         if(arg.page) goTo(buildOPACLink(arg));
164 }
165
166
167 function advFindBarcode(barcode) {
168     var req = new Request(FETCH_BIB_ID_BY_BARCODE, barcode);
169     req.callback(advDrawBarcode);
170     req.request.alertEvent = false;
171     req.send();
172 }
173
174 function advDrawBarcode(r) {
175     titleid = r.getResultObject();
176     if(checkILSEvent(titleid)) {
177         alertId('myopac.copy.not.found');
178         return;
179     }
180     if(!titleid) return;
181     var args = {};
182     args.page = RDETAIL;
183     args[PARAM_RID] = titleid;
184     location.href = buildOPACLink(args);
185 }
186
187 function __setsortsel() {
188     var sel = $('adv_global_sort_by');
189     if (sel.selectedIndex == 0) {
190         $("adv_global_sort_dir").disabled = true;
191         $("adv_global_sort_dir").selectedIndex = 0;
192     } else $("adv_global_sort_dir").disabled = false;
193 }
194
195 __setsortsel();