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