2 attachEvt("common", "run", advgInit);
3 attachEvt("common", "locationChanged", advSyncCopyLocLink );
5 var COOKIE_NOGROUP_RECORDS = 'grpt';
6 var advSelectedOrg = null;
11 if( cookieManager.read(COOKIE_NOGROUP_RECORDS) || SHOW_MR_DEFAULT )
12 $('adv_group_titles').checked = true;
14 $n($('adv_global_tbody'), 'term').focus();
24 for( var x in extras ) {
26 var req = new Request(extras[x]);
28 if(x == 0) req.request.sel = $('adv_global_lit_form');
29 if(x == 1) req.request.sel = $('adv_global_item_form');
30 if(x == 2) req.request.sel = $('adv_global_item_type');
31 if(x == 3) req.request.sel = $('adv_global_audience');
32 if(x == 4) req.request.sel = $('adv_global_bib_level');
34 req.callback(advDrawBibExtras);
38 var input = $n($('adv_global_trow'), 'term');
40 setEnterFunc(input, advSubmitGlobal);
42 if(getSort() && getSortDir()) {
43 setSelector($('adv_global_sort_by'), getSort());
44 setSelector($('adv_global_sort_dir'), getSortDir());
45 if(getSort() != 'rel')
46 $('adv_global_sort_dir').disabled = false;
50 $('opac.result.limit2avail').checked = true;
54 advSyncCopyLocLink(getLocation());
57 function advSyncCopyLocLink(org) {
58 // display the option to filter by copy location
59 advLocationsLoaded = false;
61 removeChildren($('adv_copy_location_filter_select'));
63 if(isTrue(findOrgType(findOrgUnit(org).ou_type()).can_have_vols())) {
64 unHideMe($('adv_copy_location_filter_row'));
65 advLoadCopyLocations(org);
67 hideMe($('adv_copy_location_filter_row'));
72 function clearSearchBoxes() {
73 var rows = $('adv_global_tbody').getElementsByTagName('tr');
74 for(var t = 0; t < rows.length; t++) {
75 if($n(rows[t], 'term')) {
76 $n(rows[t], 'term').value = '';
77 setSelector($n(rows[t], 'contains'), 'contains');
78 setSelector($n(rows[t], 'type'), 'keyword');
81 $n(rows[0], 'term').focus();
85 function initSearchBoxes() {
86 /* loads the compiled search from the search cookie
87 and sets the widgets accordingly */
89 search = cookieManager.read(COOKIE_SEARCH);
91 _debug("loaded compiled search cookie: " + search);
93 search = JSON2js(search);
96 var types = getObjectKeys(search.searches);
98 /* pre-add the needed rows */
99 while($('adv_global_tbody').getElementsByTagName('tr').length - 1 < types.length)
102 var rows = $('adv_global_tbody').getElementsByTagName('tr');
104 for(var t = 0; t < types.length; t++) {
106 setSelector($n(row, 'type'), types[t]);
107 var term = search.searches[types[t]].term;
109 /* if this is a single -<term> search, set the selector to nocontains */
110 if(match = term.match(/^-(\w+)$/)) {
112 setSelector($n(row, 'contains'), 'nocontains');
114 $n(row, 'term').value = term;
118 function advAddGblRow() {
119 var tbody = $("adv_global_tbody");
120 var newrow = $("adv_global_trow").cloneNode(true);
121 tbody.insertBefore(newrow, $("adv_global_addrow"));
122 var input = $n(newrow, "term");
124 setEnterFunc(input, advSubmitGlobal);
125 $n(newrow, 'type').focus();
128 function advDrawBibExtras(r) {
129 var data = r.getResultObject();
132 data = data.sort( /* sort alphabetically */
134 if( a.value() < b.value() ) return -1;
135 if( a.value() > b.value() ) return 1;
140 for( var d = 0; d < data.length; d++ ) {
142 var opt = insertSelectorVal( sel, -1, thing.value(), thing.code() );
143 opt.setAttribute('title', thing.value());
147 function advSelToStringList(sel) {
148 var list = getSelectedList(sel);
150 for( var i = 0; i < list.length; i++ ) {
152 for( var j = 0; j < str.length; j++ ) {
153 //if(str.charAt(j) == ' ') continue;
154 vals.push(str.charAt(j));
157 return vals.toString();
160 function advGetVisSelectorVals(id) {
161 var basic = id + '_basic';
162 if(! $(id).className.match(/hide_me/))
163 return advSelToStringList($(id));
164 return advSelToStringList($(basic));
167 function advSubmitGlobal() {
169 var sortdir = getSelectorVal($('adv_global_sort_dir'));
170 var sortby = getSelectorVal($('adv_global_sort_by'));
172 var litforms = advGetVisSelectorVals('adv_global_lit_form');
173 var itemforms = advGetVisSelectorVals('adv_global_item_form');
174 var itemtypes = advGetVisSelectorVals('adv_global_item_type');
175 var audiences = advGetVisSelectorVals('adv_global_audience');
176 var biblevels = advGetVisSelectorVals('adv_global_bib_level');
177 var locations = advGetVisSelectorVals('adv_copy_location_filter_select');
178 var languages = getSelectedList($('adv_global_lang')) + '';
179 var limit2avail = $('opac.result.limit2avail').checked ? 1 : ''
181 var searches = advBuildSearchBlob();
182 if(!searches) return;
188 args[PARAM_ITEMFORM] = itemforms;
189 args[PARAM_ITEMTYPE] = itemtypes;
190 args[PARAM_BIBLEVEL] = biblevels;
191 args[PARAM_LITFORM] = litforms;
192 args[PARAM_AUDIENCE] = audiences;
193 args[PARAM_LANGUAGE] = languages;
194 args[PARAM_COPYLOCS] = locations;
195 //args[PARAM_SEARCHES] = js2JSON(searches); /* break these out */
196 args[PARAM_DEPTH] = depthSelGetDepth();
197 args[PARAM_LOCATION] = depthSelGetNewLoc();
198 args[PARAM_SORT] = sortby;
199 args[PARAM_SORT_DIR] = sortdir;
200 args[PARAM_ADVTYPE] = ADVTYPE_MULTI;
201 args[PARAM_STYPE] = "";
202 args[PARAM_TERM] = searches;
203 args[PARAM_AVAIL] = limit2avail;
205 /* pubdate sorting causes a record (not metarecord) search */
206 if( sortby == SORT_TYPE_PUBDATE || !$('adv_group_titles').checked ) {
208 args[PARAM_RTYPE] = RTYPE_MULTI;
211 if($('adv_group_titles').checked )
212 cookieManager.write(COOKIE_NOGROUP_RECORDS,'1',-1);
214 cookieManager.write(COOKIE_NOGROUP_RECORDS,'');
217 goTo(buildOPACLink(args));
221 function advBuildSearchBlob() {
224 var tbody = $('adv_global_tbody');
225 var rows = tbody.getElementsByTagName('tr');
227 for( var i = 0; i < rows.length; i++ ) {
230 if(!(row && typeof row == 'object')) continue;
231 if(!row.getAttribute('type')) continue;
233 var stype = getSelectorVal($n(row, 'type'));
234 var contains = getSelectorVal($n(row, 'contains'));
235 var term = $n(row, 'term').value;
241 string += " " + term;
244 case 'nocontains' : {
245 var words = term.split(" ");
246 for( var j in words )
247 string += " -" + words[j];
252 if(term.indexOf('"') > -1) string += " " + term;
253 else string += " \"" + term + "\"";
257 string = string.replace(/'/g,' ');
258 string = string.replace(/\\/g,' ');
259 string = string.replace(/^\s*/,'');
260 string = string.replace(/\s*$/,'');
261 //searches[stype].term = string;
262 if(searches) searches += ' ';
263 searches += stype + ':'+ string;
267 _debug("created search query " + searches);
272 // retrieves the shelving locations
273 var advLocationsLoaded = false;
274 function advLoadCopyLocations(org) {
276 org = advSelectedOrg;
277 var req = new Request(FETCH_COPY_LOCATIONS, org);
278 req.callback(advShowCopyLocations);
280 advLocationsLoaded = true;
283 // inserts the shelving locations into the multi-select
284 function advShowCopyLocations(r) {
285 var locations = r.getResultObject();
286 var sel = $('adv_copy_location_filter_select');
287 for(var i = 0; i < locations.length; i++)
288 insertSelectorVal(sel, -1, locations[i].name(), locations[i].id());