2 attachEvt("common", "run", advgInit);
3 attachEvt("common", "locationChanged", advSyncCopyLocLink );
5 var COOKIE_NOGROUP_RECORDS = 'grpt';
6 var advSelectedOrg = null;
11 dojo.require('dojo.cookie');
12 if( dojo.cookie(COOKIE_NOGROUP_RECORDS) || SHOW_MR_DEFAULT )
13 $('adv_group_titles').checked = true;
15 $n($('adv_global_tbody'), 'term').focus();
25 for( var x in extras ) {
27 var req = new Request(extras[x]);
29 if(x == 0) req.request.sel = $('adv_global_lit_form');
30 if(x == 1) req.request.sel = $('adv_global_item_form');
31 if(x == 2) req.request.sel = $('adv_global_item_type');
32 if(x == 3) req.request.sel = $('adv_global_audience');
33 if(x == 4) req.request.sel = $('adv_global_bib_level');
35 req.callback(advDrawBibExtras);
39 var input = $n($('adv_global_trow'), 'term');
41 setEnterFunc(input, advSubmitGlobal);
43 if(getSort() && getSortDir()) {
44 setSelector($('adv_global_sort_by'), getSort());
45 setSelector($('adv_global_sort_dir'), getSortDir());
46 if(getSort() != 'rel')
47 $('adv_global_sort_dir').disabled = false;
51 $('opac.result.limit2avail').checked = true;
53 // not sure we want to propogate the pubdate filter,
54 // since other filters are not propogated
57 if(!new CGI().param(PARAM_NOPERSIST_SEARCH))
59 advSyncCopyLocLink(getLocation());
62 function advInitPubFilter() {
63 var i1 = $('adv_global_pub_date_1');
64 var i2 = $('adv_global_pub_date_2');
65 var sel = $('adv_global_pub_date_type');
67 i1.value = getPubdBefore();
68 setSelector(sel, 'before');
69 } else if(getPubdAfter()) {
70 i1.value = getPubdAfter();
71 setSelector(sel, 'after');
72 } else if(getPubdBetween()) {
73 var values = getPubdBetween().split(',');
75 if(values[0] == values[1]) {
76 setSelector(sel, 'equals');
78 setSelector(sel, 'between');
84 function advSyncCopyLocLink(org) {
85 // display the option to filter by copy location
86 advLocationsLoaded = false;
88 removeChildren($('adv_copy_location_filter_select'));
90 if(isTrue(findOrgType(findOrgUnit(org).ou_type()).can_have_vols())) {
91 unHideMe($('adv_copy_location_filter_row'));
92 advLoadCopyLocations(org);
94 hideMe($('adv_copy_location_filter_row'));
99 function clearSearchBoxes() {
100 var rows = $('adv_global_tbody').getElementsByTagName('tr');
101 for(var t = 0; t < rows.length; t++) {
102 if($n(rows[t], 'term')) {
103 $n(rows[t], 'term').value = '';
104 setSelector($n(rows[t], 'contains'), 'contains');
105 setSelector($n(rows[t], 'type'), 'keyword');
108 $n(rows[0], 'term').focus();
112 function initSearchBoxes() {
113 /* loads the compiled search from the search cookie
114 and sets the widgets accordingly */
116 search = dojo.cookie(COOKIE_SEARCH);
118 _debug("loaded compiled search cookie: " + search);
120 search = JSON2js(search);
123 var types = getObjectKeys(search.searches);
125 // if we have browser cached data, clear it before populating from cookie
126 if (search.searches[types[0]].term)
129 /* pre-add the needed rows */
130 while($('adv_global_tbody').getElementsByTagName('tr').length - 1 < types.length)
133 var rows = $('adv_global_tbody').getElementsByTagName('tr');
135 for(var t = 0; t < types.length; t++) {
137 setSelector($n(row, 'type'), types[t]);
138 var term = search.searches[types[t]].term;
140 /* if this is a single -<term> search, set the selector to nocontains */
141 if(match = term.match(/^-(\w+)$/)) {
143 setSelector($n(row, 'contains'), 'nocontains');
145 $n(row, 'term').value = term;
149 function advAddGblRow() {
150 var tbody = $("adv_global_tbody");
151 var newrow = $("adv_global_trow").cloneNode(true);
152 tbody.insertBefore(newrow, $("adv_global_addrow"));
153 var input = $n(newrow, "term");
155 setEnterFunc(input, advSubmitGlobal);
156 $n(newrow, 'type').focus();
159 function advDrawBibExtras(r) {
160 var data = r.getResultObject();
163 data = data.sort( /* sort alphabetically */
165 if( a.value() < b.value() ) return -1;
166 if( a.value() > b.value() ) return 1;
171 for( var d = 0; d < data.length; d++ ) {
173 var opt = insertSelectorVal( sel, -1, thing.value(), thing.code() );
174 opt.setAttribute('title', thing.value());
178 function advSelToStringList(sel) {
179 var list = getSelectedList(sel);
181 for( var i = 0; i < list.length; i++ ) {
183 for( var j = 0; j < str.length; j++ ) {
184 //if(str.charAt(j) == ' ') continue;
185 vals.push(str.charAt(j));
188 return vals.toString();
191 function advGetVisSelectorVals(id) {
192 var basic = id + '_basic';
193 if(! $(id).className.match(/hide_me/))
194 return advSelToStringList($(id));
195 return advSelToStringList($(basic));
198 function advSubmitGlobal() {
200 var sortdir = getSelectorVal($('adv_global_sort_dir'));
201 var sortby = getSelectorVal($('adv_global_sort_by'));
203 var litforms = advGetVisSelectorVals('adv_global_lit_form');
204 var itemforms = advGetVisSelectorVals('adv_global_item_form');
205 var itemtypes = advGetVisSelectorVals('adv_global_item_type');
206 var audiences = advGetVisSelectorVals('adv_global_audience');
207 var biblevels = advGetVisSelectorVals('adv_global_bib_level');
208 var locations = getSelectedList($('adv_copy_location_filter_select')) + '';
209 var languages = getSelectedList($('adv_global_lang')) + '';
210 var limit2avail = $('opac.result.limit2avail').checked ? 1 : ''
212 var searches = advBuildSearchBlob();
213 if(!searches) return;
219 args[PARAM_ITEMFORM] = itemforms;
220 args[PARAM_ITEMTYPE] = itemtypes;
221 args[PARAM_BIBLEVEL] = biblevels;
222 args[PARAM_LITFORM] = litforms;
223 args[PARAM_AUDIENCE] = audiences;
224 args[PARAM_LANGUAGE] = languages;
225 args[PARAM_COPYLOCS] = locations;
226 //args[PARAM_SEARCHES] = js2JSON(searches); /* break these out */
227 args[PARAM_DEPTH] = depthSelGetDepth();
228 args[PARAM_LOCATION] = depthSelGetNewLoc();
229 args[PARAM_SORT] = sortby;
230 args[PARAM_SORT_DIR] = sortdir;
231 args[PARAM_ADVTYPE] = ADVTYPE_MULTI;
232 args[PARAM_STYPE] = "";
233 args[PARAM_TERM] = searches;
234 args[PARAM_AVAIL] = limit2avail;
236 // publicate year filtering
238 if( (pub1 = $('adv_global_pub_date_1').value) && (''+pub1).match(/\d{4}/)) {
239 switch(getSelectorVal($('adv_global_pub_date_type'))) {
241 args[PARAM_PUBD_BETWEEN] = pub1+','+pub1;
244 args[PARAM_PUBD_BEFORE] = pub1;
247 args[PARAM_PUBD_AFTER] = pub1;
250 var pub2 = $('adv_global_pub_date_2').value;
251 if((''+pub2).match(/\d{4}/))
252 args[PARAM_PUBD_BETWEEN] = pub1+','+pub2;
257 /* pubdate sorting causes a record (not metarecord) search */
258 if( sortby == SORT_TYPE_PUBDATE || !$('adv_group_titles').checked ) {
260 args[PARAM_RTYPE] = RTYPE_MULTI;
263 if($('adv_group_titles').checked )
264 dojo.cookie(COOKIE_NOGROUP_RECORDS,'1');
266 dojo.cookie(COOKIE_NOGROUP_RECORDS,null,{'expires':-1});
269 goTo(buildOPACLink(args));
273 function advBuildSearchBlob() {
276 var tbody = $('adv_global_tbody');
277 var rows = tbody.getElementsByTagName('tr');
279 for( var i = 0; i < rows.length; i++ ) {
282 if(!(row && typeof row == 'object')) continue;
283 if(!row.getAttribute('type')) continue;
285 var stype = getSelectorVal($n(row, 'type'));
286 var contains = getSelectorVal($n(row, 'contains'));
287 var term = $n(row, 'term').value;
293 string += " " + term;
296 case 'nocontains' : {
297 // Normalize spaces so we don't get "- " embedded in the query
298 var words = term.replace(/\s+/g,' ').replace(/^\s*/,'').replace(/\s*$/,'').split(" ");
299 for( var j in words )
300 string += " -" + words[j];
305 if(term.indexOf('"') > -1) string += " " + term;
306 else string += " \"" + term + "\"";
310 string = string.replace(/'/g,' ');
311 string = string.replace(/\\/g,' ');
312 string = string.replace(/^\s*/,'');
313 string = string.replace(/\s*$/,'');
314 //searches[stype].term = string;
315 if(searches) searches += ' ';
316 searches += stype + ': '+ string;
320 _debug("created search query " + searches);
325 // retrieves the shelving locations
326 var advLocationsLoaded = false;
327 function advLoadCopyLocations(org) {
329 org = advSelectedOrg;
330 var req = new Request(FETCH_COPY_LOCATIONS, org);
331 req.callback(advShowCopyLocations);
333 advLocationsLoaded = true;
336 // inserts the shelving locations into the multi-select
337 function advShowCopyLocations(r) {
338 var locations = r.getResultObject();
339 var sel = $('adv_copy_location_filter_select');
340 for(var i = 0; i < locations.length; i++)
341 insertSelectorVal(sel, -1, locations[i].name(), locations[i].id());