--- /dev/null
+dojo.require('dijit.form.FilteringSelect');
+dojo.require('dijit.ProgressBar');
+dojo.require('dijit.Dialog');
+dojo.require('dojox.form.CheckedMultiSelect');
+dojo.require('fieldmapper.Fieldmapper');
+dojo.require('dijit.form.Form');
+dojo.require('dijit.form.TextBox');
+dojo.require('dijit.form.NumberSpinner');
+dojo.require('openils.Event');
+dojo.require('openils.acq.Picklist');
+dojo.require('openils.acq.Lineitem');
+dojo.require('openils.User');
+dojo.require('openils.Util');
+
+var searchFields = [];
+var resultPicklist;
+var resultLIs;
+var selectedLIs;
+var recvCount = 0;
+var sourceCount = 0; // how many sources are we searching
+var user = new openils.User();
+var searchLimit = 10;
+var liCache = {};
+var liTable;
+
+function drawForm() {
+ liTable = new AcqLiTable();
+ liTable.skipInitialEligibilityCheck = true;
+
+ fieldmapper.standardRequest(
+ ['open-ils.search', 'open-ils.search.z3950.retrieve_services'],
+ { async: true,
+ params: [user.authtoken],
+ oncomplete: _drawForm
+ }
+ );
+}
+
+function _drawForm(r) {
+
+ var sources = openils.Util.readResponse(r);
+ if(!sources) return;
+
+ for(var name in sources) {
+ source = sources[name];
+ if(name == 'native-evergreen-catalog') continue;
+ bibSourceSelect.addOption({value:name, label:source.label});
+ for(var attr in source.attrs)
+ if(!attr.match(/^#/)) // xml comment nodes
+ searchFields.push(source.attrs[attr]);
+ }
+
+ searchFields = searchFields.sort(
+ function(a,b) {
+ if(a.label < b.label)
+ return -1;
+ if(a.label > b.label)
+ return 1;
+ return 0;
+ }
+ );
+
+ var tbody = dojo.byId('oils-acq-search-fields-tbody');
+ var tmpl = tbody.removeChild(dojo.byId('oils-acq-search-fields-template'));
+
+ for(var f in searchFields) {
+ var field = searchFields[f];
+ if(dijit.byId('text_input_'+field.name)) continue;
+ var row = tmpl.cloneNode(true);
+ tbody.insertBefore(row, dojo.byId('oils-acq-seach-fields-count-row'));
+ var labelCell = dojo.query('[name=label]', row)[0];
+ var inputCell = dojo.query('[name=input]', row)[0];
+ labelCell.appendChild(document.createTextNode(field.label));
+ input = new dijit.form.TextBox({name:field.name, label:field.label, id:'text_input_'+field.name});
+ inputCell.appendChild(input.domNode);
+ }
+}
+
+function clearSearchForm() {
+ for(var f in searchFields) {
+ var field = searchFields[f];
+ dijit.byId('text_input_'+field.name).setValue('');
+ }
+}
+
+var resultRow;
+function doSearch(values) {
+ liTable.reset();
+ showDiv('oils-acq-pl-loading');
+
+ search = {
+ service : [],
+ username : [],
+ password : [],
+ search : {},
+ limit : values.limit,
+ offset : searchOffset
+ };
+ searchLimit = values.limit;
+ delete values.limit;
+
+ var selected = bibSourceSelect.getValue();
+ for(var i = 0; i < selected.length; i++) {
+ search.service.push(selected[i]);
+ search.username.push('');
+ search.password.push('');
+ sourceCount++;
+ }
+
+ for(var v in values) {
+ if(values[v]) {
+ var input = dijit.byId('text_input_'+v);
+ search.search[v] = values[v];
+ }
+ }
+
+ fieldmapper.standardRequest(
+ ['open-ils.acq', 'open-ils.acq.picklist.search.z3950'],
+ { async: true,
+ params: [user.authtoken, search, null, {respond_li:1, flesh_attrs:1, clear_marc:1}],
+ onresponse: handleResult
+ }
+ );
+}
+
+
+function setRowAttr(td, liWrapper, field) {
+ var val = liWrapper.findAttr(field, 'lineitem_marc_attr_definition') || '';
+ td.appendChild(document.createTextNode(val));
+}
+
+function handleResult(r) {
+ var result = openils.Util.readResponse(r);
+ liTable.show('list');
+ dojo.style(dojo.byId('oils-acq-pl-search-results'), 'display', 'block');
+ var tbody = dojo.byId('plist-tbody');
+ if(result.lineitem)
+ liTable.addLineitem(result.lineitem);
+ if(result.complete) // hide the loading image
+ dojo.style('oils-acq-pl-loading','display', 'none');
+}
+
+function showDiv(div) {
+ var divs = [
+ 'oils-acq-search-block',
+ 'oils-acq-pl-loading' ];
+ dojo.forEach(divs, function(d) {dojo.style(d,'display', 'none')});
+ liTable.hide();
+ dojo.style(div, 'display', 'block');
+}
+
+
+openils.Util.addOnLoad(drawForm);
+
+