2 attachEvt("common", "run", advgInit);
\r
3 attachEvt("common", "locationChanged", advSyncCopyLocLink );
\r
5 var COOKIE_NOGROUP_RECORDS = 'grpt';
\r
6 var advSelectedOrg = null;
\r
8 function advgInit() {
\r
11 if( cookieManager.read(COOKIE_NOGROUP_RECORDS) || SHOW_MR_DEFAULT )
\r
12 $('adv_group_titles').checked = true;
\r
14 try{$n($('adv_global_tbody'), 'term').focus();} catch(e){}
\r
24 for( var x in extras ) {
\r
26 var req = new Request(extras[x]);
\r
28 if(x == 0) req.request.sel = $('adv_global_lit_form');
\r
29 if(x == 1) req.request.sel = $('adv_global_item_form');
\r
30 if(x == 2) req.request.sel = $('adv_global_item_type');
\r
31 if(x == 3) req.request.sel = $('adv_global_audience');
\r
32 if(x == 4) req.request.sel = $('adv_global_bib_level');
\r
34 req.callback(advDrawBibExtras);
\r
38 var input = $n($('adv_global_trow'), 'term');
\r
39 try {input.focus();} catch(e){}
\r
40 setEnterFunc(input, advSubmitGlobal);
\r
42 if(getSort() && getSortDir()) {
\r
43 setSelector($('adv_global_sort_by'), getSort());
\r
44 setSelector($('adv_global_sort_dir'), getSortDir());
\r
45 if(getSort() != 'rel')
\r
46 $('adv_global_sort_dir').disabled = false;
\r
50 $('opac.result.limit2avail').checked = true;
\r
52 // not sure we want to propogate the pubdate filter,
\r
53 // since other filters are not propogated
\r
54 //advInitPubFilter();
\r
56 if(!new CGI().param(PARAM_NOPERSIST_SEARCH))
\r
58 advSyncCopyLocLink(getLocation());
\r
59 //if(findCurrentPage()=="advanced") { hideMe(G.ui.login.box); /*unHideMe(G.ui.login.box);*/ }
\r
62 function advInitPubFilter() {
\r
63 var i1 = $('adv_global_pub_date_1');
\r
64 var i2 = $('adv_global_pub_date_2');
\r
65 var sel = $('adv_global_pub_date_type');
\r
66 if(getPubdBefore()) {
\r
67 i1.value = getPubdBefore();
\r
68 setSelector(sel, 'before');
\r
69 } else if(getPubdAfter()) {
\r
70 i1.value = getPubdAfter();
\r
71 setSelector(sel, 'after');
\r
72 } else if(getPubdBetween()) {
\r
73 var values = getPubdBetween().split(',');
\r
74 i1.value = values[0]
\r
75 if(values[0] == values[1]) {
\r
76 setSelector(sel, 'equals');
\r
78 setSelector(sel, 'between');
\r
79 i2.value = values[1];
\r
84 function advSyncCopyLocLink(org) {
\r
85 // display the option to filter by copy location
\r
86 advLocationsLoaded = false;
\r
87 advSelectedOrg = org;
\r
88 removeChildren($('adv_copy_location_filter_select'));
\r
90 if(isTrue(findOrgType(findOrgUnit(org).ou_type()).can_have_vols())) {
\r
91 unHideMe($('adv_copy_location_filter_row'));
\r
92 advLoadCopyLocations(org);
\r
94 hideMe($('adv_copy_location_filter_row'));
\r
98 function clearSearchBoxes() {
\r
99 var rows = $('adv_global_tbody').getElementsByTagName('tr');
\r
100 for(var t = 0; t < rows.length; t++) {
\r
101 if($n(rows[t], 'term')) {
\r
102 $n(rows[t], 'term').value = '';
\r
103 setSelector($n(rows[t], 'contains'), 'contains');
\r
104 setSelector($n(rows[t], 'type'), 'keyword');
\r
107 try{$n(rows[0], 'term').focus();} catch(e){}
\r
111 function initSearchBoxes() {
\r
112 /* loads the compiled search from the search cookie
\r
113 and sets the widgets accordingly */
\r
115 search = cookieManager.read(COOKIE_SEARCH);
\r
116 if(!search) return;
\r
117 _debug("loaded compiled search cookie: " + search);
\r
119 search = JSON2js(search);
\r
120 if(!search) return;
\r
122 var types = getObjectKeys(search.searches);
\r
124 // if we have browser cached data, clear it before populating from cookie
\r
125 if (search.searches[types[0]].term)
\r
126 clearSearchBoxes();
\r
128 /* pre-add the needed rows */
\r
129 while($('adv_global_tbody').getElementsByTagName('tr').length - 1 < types.length)
\r
132 var rows = $('adv_global_tbody').getElementsByTagName('tr');
\r
134 for(var t = 0; t < types.length; t++) {
\r
136 setSelector($n(row, 'type'), types[t]);
\r
137 var term = search.searches[types[t]].term;
\r
139 /* if this is a single -<term> search, set the selector to nocontains */
\r
140 if(match = term.match(/^-(\w+)$/)) {
\r
142 setSelector($n(row, 'contains'), 'nocontains');
\r
144 $n(row, 'term').value = term;
\r
148 function advAddGblRow() {
\r
149 var tbody = $("adv_global_tbody");
\r
150 var newrow = $("adv_global_trow").cloneNode(true);
\r
151 tbody.insertBefore(newrow, $("adv_global_addrow"));
\r
152 var input = $n(newrow, "term");
\r
154 setEnterFunc(input, advSubmitGlobal);
\r
155 $n(newrow, 'type').focus();
\r
158 function advDrawBibExtras(r) {
\r
159 var data = r.getResultObject();
\r
162 data = data.sort( /* sort alphabetically */
\r
164 if( a.value() < b.value() ) return -1;
\r
165 if( a.value() > b.value() ) return 1;
\r
170 for( var d = 0; d < data.length; d++ ) {
\r
171 var thing = data[d];
\r
172 var opt = insertSelectorVal( sel, -1, thing.value(), thing.code() );
\r
173 opt.setAttribute('title', thing.value());
\r
177 function advSelToStringList(sel) {
\r
178 var list = getSelectedList(sel);
\r
180 for( var i = 0; i < list.length; i++ ) {
\r
182 for( var j = 0; j < str.length; j++ ) {
\r
183 //if(str.charAt(j) == ' ') continue;
\r
184 vals.push(str.charAt(j));
\r
187 return vals.toString();
\r
190 function advGetVisSelectorVals(id) {
\r
191 var basic = id + '_basic';
\r
192 if(! $(id).className.match(/hide_me/))
\r
193 return advSelToStringList($(id));
\r
194 return advSelToStringList($(basic));
\r
197 function advSubmitGlobal() {
\r
199 var sortdir = getSelectorVal($('adv_global_sort_dir'));
\r
200 var sortby = getSelectorVal($('adv_global_sort_by'));
\r
202 var litforms = advGetVisSelectorVals('adv_global_lit_form');
\r
203 var itemforms = advGetVisSelectorVals('adv_global_item_form');
\r
204 var itemtypes = advGetVisSelectorVals('adv_global_item_type');
\r
205 var audiences = advGetVisSelectorVals('adv_global_audience');
\r
206 var biblevels = advGetVisSelectorVals('adv_global_bib_level');
\r
207 var locations = getSelectedList($('adv_copy_location_filter_select')) + '';
\r
208 var languages = getSelectedList($('adv_global_lang')) + '';
\r
209 var limit2avail = $('opac.result.limit2avail').checked ? 1 : ''
\r
211 var searches = advBuildSearchBlob();
\r
212 if(!searches) return;
\r
214 clearSearchParams();
\r
217 args.page = MRESULT;
\r
218 args[PARAM_ITEMFORM] = itemforms;
\r
219 args[PARAM_ITEMTYPE] = itemtypes;
\r
220 args[PARAM_BIBLEVEL] = biblevels;
\r
221 args[PARAM_LITFORM] = litforms;
\r
222 args[PARAM_AUDIENCE] = audiences;
\r
223 args[PARAM_LANGUAGE] = languages;
\r
224 args[PARAM_COPYLOCS] = locations;
\r
225 //args[PARAM_SEARCHES] = js2JSON(searches); /* break these out */
\r
226 args[PARAM_DEPTH] = depthSelGetDepth();
\r
227 args[PARAM_LOCATION] = depthSelGetNewLoc();
\r
228 args[PARAM_SORT] = sortby;
\r
229 args[PARAM_SORT_DIR] = sortdir;
\r
230 args[PARAM_ADVTYPE] = ADVTYPE_MULTI;
\r
231 args[PARAM_STYPE] = "";
\r
232 args[PARAM_TERM] = searches;
\r
233 args[PARAM_AVAIL] = limit2avail;
\r
234 args[PARAM_FORM] = itemtypes[0];
\r
235 args[PARAM_FACET] = itemtypes==''?'':"identifier|mattype["+itemtypes.replace(/[,]/, function(a){switch(a){case ",": return "#";}})+"]";
\r
237 // publicate year filtering
\r
239 if( (pub1 = $('adv_global_pub_date_1').value) && (''+pub1).match(/\d{4}/)) {
\r
240 switch(getSelectorVal($('adv_global_pub_date_type'))) {
\r
242 args[PARAM_PUBD_BETWEEN] = pub1+','+pub1;
\r
245 args[PARAM_PUBD_BEFORE] = pub1;
\r
248 args[PARAM_PUBD_AFTER] = pub1;
\r
251 var pub2 = $('adv_global_pub_date_2').value;
\r
252 if((''+pub2).match(/\d{4}/))
\r
253 args[PARAM_PUBD_BETWEEN] = pub1+','+pub2;
\r
258 /* pubdate sorting causes a record (not metarecord) search */
\r
259 if( sortby == SORT_TYPE_PUBDATE || !$('adv_group_titles').checked ) {
\r
260 args.page = RRESULT;
\r
261 args[PARAM_RTYPE] = RTYPE_MULTI;
\r
264 if($('adv_group_titles').checked )
\r
265 cookieManager.write(COOKIE_NOGROUP_RECORDS,'1',-1);
\r
267 cookieManager.write(COOKIE_NOGROUP_RECORDS,'');
\r
269 goTo(buildOPACLink(args));
\r
273 function advBuildSearchBlob() {
\r
276 var tbody = $('adv_global_tbody');
\r
277 var rows = tbody.getElementsByTagName('tr');
\r
279 for( var i = 0; i < rows.length; i++ ) {
\r
282 if(!(row && typeof row == 'object')) continue;
\r
283 if(!row.getAttribute('type')) continue;
\r
285 var stype = getSelectorVal($n(row, 'type'));
\r
286 var contains = getSelectorVal($n(row, 'contains'));
\r
287 var term = $n(row, 'term').value;
\r
288 if(!term) continue;
\r
293 string += " " + term;
\r
296 case 'nocontains' : {
\r
297 var words = term.split(" ");
\r
298 for( var j in words )
\r
299 string += " -" + words[j];
\r
304 if(term.indexOf('"') > -1) string += " " + term;
\r
305 else string += " \"" + term + "\"";
\r
309 string = string.replace(/'/g,' ');
\r
310 string = string.replace(/\\/g,' ');
\r
311 string = string.replace(/^\s*/,'');
\r
312 string = string.replace(/\s*$/,'');
\r
313 //searches[stype].term = string;
\r
314 if(searches) searches += ' ';
\r
315 searches += stype + ':'+ string;
\r
319 _debug("created search query " + searches);
\r
324 // retrieves the shelving locations
\r
325 var advLocationsLoaded = false;
\r
326 function advLoadCopyLocations(org) {
\r
328 org = advSelectedOrg;
\r
329 var req = new Request(FETCH_COPY_LOCATIONS, org);
\r
330 req.callback(advShowCopyLocations);
\r
332 advLocationsLoaded = true;
\r
335 // inserts the shelving locations into the multi-select
\r
336 function advShowCopyLocations(r) {
\r
337 var locations = r.getResultObject();
\r
338 var sel = $('adv_copy_location_filter_select');
\r
339 for(var i = 0; i < locations.length; i++)
\r
340 insertSelectorVal(sel, -1, locations[i].name(), locations[i].id());
\r