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