2 attachEvt("common", "run", advgInit);
4 var COOKIE_NOGROUP_RECORDS = 'grpt';
9 if( cookieManager.read(COOKIE_NOGROUP_RECORDS) || SHOW_MR_DEFAULT )
10 $('adv_group_titles').checked = true;
12 $n($('adv_global_tbody'), 'term').focus();
22 for( var x in extras ) {
24 var req = new Request(extras[x]);
26 if(x == 0) req.request.sel = $('adv_global_lit_form');
27 if(x == 1) req.request.sel = $('adv_global_item_form');
28 if(x == 2) req.request.sel = $('adv_global_item_type');
29 if(x == 3) req.request.sel = $('adv_global_audience');
30 if(x == 4) req.request.sel = $('adv_global_bib_level');
32 req.callback(advDrawBibExtras);
36 var input = $n($('adv_global_trow'), 'term');
38 setEnterFunc(input, advSubmitGlobal);
40 if(getSort() && getSortDir()) {
41 setSelector($('adv_global_sort_by'), getSort());
42 setSelector($('adv_global_sort_dir'), getSortDir());
43 if(getSort() != 'rel')
44 $('adv_global_sort_dir').disabled = false;
48 $('opac.result.limit2avail').checked = true;
53 function initSearchBoxes() {
54 /* loads the compiled search from the search cookie
55 and sets the widgets accordingly */
57 search = cookieManager.read(COOKIE_SEARCH);
59 _debug("loaded compiled search cookie: " + search);
61 search = JSON2js(search);
64 var types = getObjectKeys(search.searches);
66 /* pre-add the needed rows */
67 while($('adv_global_tbody').getElementsByTagName('tr').length - 1 < types.length)
70 var rows = $('adv_global_tbody').getElementsByTagName('tr');
71 for(var t = 0; t < types.length; t++) {
73 setSelector($n(row, 'type'), types[t]);
74 var term = search.searches[types[t]].term;
76 /* if this is a single -<term> search, set the selector to nocontains */
77 if(match = term.match(/^-(\w+)$/)) {
79 setSelector($n(row, 'contains'), 'nocontains');
81 $n(row, 'term').value = term;
85 function advAddGblRow() {
86 var tbody = $("adv_global_tbody");
87 var newrow = $("adv_global_trow").cloneNode(true);
88 tbody.insertBefore(newrow, $("adv_global_addrow"));
89 var input = $n(newrow, "term");
91 setEnterFunc(input, advSubmitGlobal);
92 $n(newrow, 'type').focus();
95 function advDrawBibExtras(r) {
96 var data = r.getResultObject();
99 data = data.sort( /* sort alphabetically */
101 if( a.value() < b.value() ) return -1;
102 if( a.value() > b.value() ) return 1;
107 for( var d = 0; d < data.length; d++ ) {
109 var opt = insertSelectorVal( sel, -1, thing.value(), thing.code() );
110 opt.setAttribute('title', thing.value());
114 function advSelToStringList(sel) {
115 var list = getSelectedList(sel);
117 for( var i = 0; i < list.length; i++ ) {
119 for( var j = 0; j < str.length; j++ ) {
120 //if(str.charAt(j) == ' ') continue;
121 vals.push(str.charAt(j));
124 return vals.toString();
127 function advGetVisSelectorVals(id) {
128 var basic = id + '_basic';
129 if(! $(id).className.match(/hide_me/))
130 return advSelToStringList($(id));
131 return advSelToStringList($(basic));
134 function advSubmitGlobal() {
136 var sortdir = getSelectorVal($('adv_global_sort_dir'));
137 var sortby = getSelectorVal($('adv_global_sort_by'));
139 var litforms = advGetVisSelectorVals('adv_global_lit_form');
140 var itemforms = advGetVisSelectorVals('adv_global_item_form');
141 var itemtypes = advGetVisSelectorVals('adv_global_item_type');
142 var audiences = advGetVisSelectorVals('adv_global_audience');
143 var biblevels = advGetVisSelectorVals('adv_global_bib_level');
144 var languages = getSelectedList($('adv_global_lang')) + '';
145 var limit2avail = $('opac.result.limit2avail').checked ? 1 : ''
147 var searches = advBuildSearchBlob();
148 if(!searches) return;
154 args[PARAM_ITEMFORM] = itemforms;
155 args[PARAM_ITEMTYPE] = itemtypes;
156 args[PARAM_BIBLEVEL] = biblevels;
157 args[PARAM_LITFORM] = litforms;
158 args[PARAM_AUDIENCE] = audiences;
159 args[PARAM_LANGUAGE] = languages;
160 //args[PARAM_SEARCHES] = js2JSON(searches); /* break these out */
161 args[PARAM_DEPTH] = depthSelGetDepth();
162 args[PARAM_LOCATION] = depthSelGetNewLoc();
163 args[PARAM_SORT] = sortby;
164 args[PARAM_SORT_DIR] = sortdir;
165 args[PARAM_ADVTYPE] = ADVTYPE_MULTI;
166 args[PARAM_STYPE] = "";
167 args[PARAM_TERM] = searches;
168 args[PARAM_AVAIL] = limit2avail;
170 /* pubdate sorting causes a record (not metarecord) search */
171 if( sortby == SORT_TYPE_PUBDATE || !$('adv_group_titles').checked ) {
173 args[PARAM_RTYPE] = RTYPE_MULTI;
176 if($('adv_group_titles').checked )
177 cookieManager.write(COOKIE_NOGROUP_RECORDS,'1',-1);
179 cookieManager.write(COOKIE_NOGROUP_RECORDS,'');
182 goTo(buildOPACLink(args));
186 function advBuildSearchBlob() {
189 var tbody = $('adv_global_tbody');
190 var rows = tbody.getElementsByTagName('tr');
192 for( var i = 0; i < rows.length; i++ ) {
195 if(!(row && typeof row == 'object')) continue;
196 if(!row.getAttribute('type')) continue;
198 var stype = getSelectorVal($n(row, 'type'));
199 var contains = getSelectorVal($n(row, 'contains'));
200 var term = $n(row, 'term').value;
206 string += " " + term;
209 case 'nocontains' : {
210 var words = term.split(" ");
211 for( var j in words )
212 string += " -" + words[j];
217 if(term.indexOf('"') > -1) string += " " + term;
218 else string += " \"" + term + "\"";
222 string = string.replace(/'/g,' ');
223 string = string.replace(/\\/g,' ');
224 string = string.replace(/^\s*/,'');
225 string = string.replace(/\s*$/,'');
226 //searches[stype].term = string;
227 if(searches) searches += ' ';
228 searches += stype + ':'+ string;
232 _debug("created search query " + searches);