]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/opac/skin/default/js/adv_global.js
Added limit2available on advanced search page
[Evergreen.git] / Open-ILS / web / opac / skin / default / js / adv_global.js
1
2 attachEvt("common", "run", advgInit);
3
4 var COOKIE_NOGROUP_RECORDS = 'grpt';
5
6 function advgInit() {
7
8         /* XXX */
9         if( cookieManager.read(COOKIE_NOGROUP_RECORDS) || SHOW_MR_DEFAULT )
10                 $('adv_group_titles').checked = true;
11
12         $n($('adv_global_tbody'), 'term').focus();
13
14         var extras = [ 
15                 FETCH_LIT_FORMS, 
16                 FETCH_ITEM_FORMS, 
17                 FETCH_ITEM_TYPES, 
18                 FETCH_AUDIENCES ];
19
20         for( var x in extras ) {
21
22                 var req = new Request(extras[x]);
23
24                 if(x == 0) req.request.sel = $('adv_global_lit_form');
25                 if(x == 1) req.request.sel = $('adv_global_item_form');
26                 if(x == 2) req.request.sel = $('adv_global_item_type');
27                 if(x == 3) req.request.sel = $('adv_global_audience');
28
29                 req.callback(advDrawBibExtras);
30                 req.send();
31         }
32
33         var input = $n($('adv_global_trow'), 'term');
34         input.focus();
35         setEnterFunc(input, advSubmitGlobal);
36
37     if(getSort() && getSortDir()) {
38             setSelector($('adv_global_sort_by'), getSort());
39             setSelector($('adv_global_sort_dir'), getSortDir());
40         if(getSort() != 'rel')
41             $('adv_global_sort_dir').disabled = false;
42     }
43
44     if(getAvail())
45         $('opac.result.limit2avail').checked = true;
46 }
47
48 function advAddGblRow() {
49         var tbody = $("adv_global_tbody");
50         var newrow = $("adv_global_trow").cloneNode(true);
51         tbody.insertBefore(newrow, $("adv_global_addrow"));
52         var input = $n(newrow, "term");
53         input.value = "";
54         setEnterFunc(input, advSubmitGlobal);
55         $n(newrow, 'type').focus();
56 }
57
58 function advDrawBibExtras(r) {
59         var data = r.getResultObject();
60         var sel = r.sel;
61
62         data = data.sort( /* sort alphabetically */
63                 function(a,b) { 
64                         if( a.value() < b.value() ) return -1;
65                         if( a.value() > b.value() ) return 1;
66                         return 0;
67                 }
68         );
69
70         for( var d = 0; d < data.length; d++ ) {
71                 var thing = data[d];
72                 var opt = insertSelectorVal( sel, -1, thing.value(), thing.code() );
73                 opt.setAttribute('title', thing.value());
74         }
75 }
76
77 function advSelToStringList(sel) {
78         var list = getSelectedList(sel);
79         var vals = [];
80         for( var i = 0; i < list.length; i++ ) {
81                 var str = list[i];
82                 for( var j = 0; j < str.length; j++ ) {
83                         //if(str.charAt(j) == ' ') continue;
84                         vals.push(str.charAt(j));
85                 }
86         }
87         return vals.toString();
88 }
89
90 function advGetVisSelectorVals(id) {
91         var basic = id + '_basic';
92         if(! $(id).className.match(/hide_me/)) 
93                 return advSelToStringList($(id));
94         return advSelToStringList($(basic));
95 }
96
97 function advSubmitGlobal() {
98         
99         var sortdir = getSelectorVal($('adv_global_sort_dir'));
100         var sortby  = getSelectorVal($('adv_global_sort_by'));
101
102         var litforms  = advGetVisSelectorVals('adv_global_lit_form');
103         var itemforms = advGetVisSelectorVals('adv_global_item_form');
104         var itemtypes = advGetVisSelectorVals('adv_global_item_type');
105         var audiences = advGetVisSelectorVals('adv_global_audience');
106         var languages = getSelectedList($('adv_global_lang')) + '';     
107     var limit2avail = $('opac.result.limit2avail').checked ? 1 : ''
108
109         var searches = advBuildSearchBlob();
110         if(!searches) return;
111
112         clearSearchParams();
113
114         var args = {};
115         args.page = MRESULT;
116         args[PARAM_ITEMFORM] = itemforms;
117         args[PARAM_ITEMTYPE] = itemtypes;
118         args[PARAM_LITFORM]     = litforms;
119         args[PARAM_AUDIENCE]    = audiences;
120         args[PARAM_LANGUAGE] = languages;
121         args[PARAM_SEARCHES]    = js2JSON(searches); /* break these out */
122         args[PARAM_DEPTH]               = depthSelGetDepth();
123         args[PARAM_LOCATION]    = depthSelGetNewLoc();
124         args[PARAM_SORT]                = sortby;
125         args[PARAM_SORT_DIR]    = sortdir;
126         args[PARAM_ADVTYPE]     = ADVTYPE_MULTI;
127         args[PARAM_STYPE]               = "";
128         args[PARAM_TERM]                = "";
129         args[PARAM_AVAIL]               = limit2avail;
130
131         /* pubdate sorting causes a record (not metarecord) search */
132         if( sortby == SORT_TYPE_PUBDATE || !$('adv_group_titles').checked ) {
133                 args.page = RRESULT;
134                 args[PARAM_RTYPE] = RTYPE_MULTI;
135         }
136
137         if($('adv_group_titles').checked ) 
138                 cookieManager.write(COOKIE_NOGROUP_RECORDS,'1',-1);
139         else
140                 cookieManager.write(COOKIE_NOGROUP_RECORDS,'');
141
142
143         goTo(buildOPACLink(args));
144 }
145
146
147 function advBuildSearchBlob() {
148
149         var searches;
150         var tbody    = $('adv_global_tbody');
151         var rows     = tbody.getElementsByTagName('tr');
152
153         for( var i = 0; i < rows.length; i++ ) {
154
155                 var row = rows[i];
156                 if(!(row && typeof row == 'object')) continue;
157                 if(!row.getAttribute('type')) continue;
158                 
159                 var stype        = getSelectorVal($n(row, 'type'));
160                 var contains = getSelectorVal($n(row, 'contains'));
161                 var term                 = $n(row, 'term').value;
162                 if(!term) continue;
163
164                 var string = "";
165
166                 if(!searches) searches = {};
167
168                 if(searches[stype]) 
169                         string = searches[stype].term;
170                 else 
171                         searches[stype] = { term : "" };
172
173                 switch(contains) {
174                         case 'contains' : 
175                                 string += " " + term; 
176                                 break;
177
178                         case 'nocontains' : {
179                                 var words = term.split(" ");
180                                         for( var j in words ) 
181                                                 string += " -" + words[j];
182                                 }
183                                 break;
184
185                         case 'exact' : 
186                                 if(term.indexOf('"') > -1) string += " " + term;
187                                 else string += " \"" + term + "\"";
188                                 break;
189                 }
190                 if(string) {
191                         string = string.replace(/'/g,' ');
192                         string = string.replace(/\\/g,' ');
193                         searches[stype].term = string;
194                 }
195         }
196
197         return searches;
198 }
199
200
201
202