1 dojo.require('dijit.form.FilteringSelect');
2 dojo.require('dijit.ProgressBar');
3 dojo.require('dijit.Dialog');
4 dojo.require('dojox.form.CheckedMultiSelect');
5 dojo.require('fieldmapper.Fieldmapper');
6 dojo.require('dijit.form.Form');
7 dojo.require('dijit.form.TextBox');
8 dojo.require('dijit.form.NumberSpinner');
9 dojo.require('openils.Event');
10 dojo.require('openils.acq.Picklist');
11 dojo.require('openils.acq.Lineitem');
12 dojo.require('openils.User');
13 dojo.require('openils.Util');
15 var searchFields = [];
20 var sourceCount = 0; // how many sources are we searching
21 var user = new openils.User();
27 liTable = new AcqLiTable();
28 liTable.skipInitialEligibilityCheck = true;
30 fieldmapper.standardRequest(
31 ['open-ils.search', 'open-ils.search.z3950.retrieve_services'],
33 params: [user.authtoken],
39 function _drawForm(r) {
41 var sources = openils.Util.readResponse(r);
44 for(var name in sources) {
45 source = sources[name];
46 if(name == 'native-evergreen-catalog') continue;
47 bibSourceSelect.addOption({value:name, label:source.label});
48 for(var attr in source.attrs)
49 if(!attr.match(/^#/)) // xml comment nodes
50 searchFields.push(source.attrs[attr]);
53 searchFields = searchFields.sort(
63 var tbody = dojo.byId('oils-acq-search-fields-tbody');
64 var tmpl = tbody.removeChild(dojo.byId('oils-acq-search-fields-template'));
66 for(var f in searchFields) {
67 var field = searchFields[f];
68 if(dijit.byId('text_input_'+field.name)) continue;
69 var row = tmpl.cloneNode(true);
70 tbody.insertBefore(row, dojo.byId('oils-acq-seach-fields-count-row'));
71 var labelCell = dojo.query('[name=label]', row)[0];
72 var inputCell = dojo.query('[name=input]', row)[0];
73 labelCell.appendChild(document.createTextNode(field.label));
74 input = new dijit.form.TextBox({name:field.name, label:field.label, id:'text_input_'+field.name});
75 inputCell.appendChild(input.domNode);
79 function clearSearchForm() {
80 for(var f in searchFields) {
81 var field = searchFields[f];
82 dijit.byId('text_input_'+field.name).setValue('');
87 function doSearch(values) {
89 showDiv('oils-acq-pl-loading');
99 searchLimit = values.limit;
102 var selected = bibSourceSelect.getValue();
103 for(var i = 0; i < selected.length; i++) {
104 search.service.push(selected[i]);
105 search.username.push('');
106 search.password.push('');
110 for(var v in values) {
112 var input = dijit.byId('text_input_'+v);
113 search.search[v] = values[v];
117 fieldmapper.standardRequest(
118 ['open-ils.acq', 'open-ils.acq.picklist.search.z3950'],
120 params: [user.authtoken, search, null, {respond_li:1, flesh_attrs:1, clear_marc:1}],
121 onresponse: handleResult
127 function setRowAttr(td, liWrapper, field) {
128 var val = liWrapper.findAttr(field, 'lineitem_marc_attr_definition') || '';
129 td.appendChild(document.createTextNode(val));
132 function handleResult(r) {
133 var result = openils.Util.readResponse(r);
134 liTable.show('list');
135 dojo.style(dojo.byId('oils-acq-pl-search-results'), 'display', 'block');
136 var tbody = dojo.byId('plist-tbody');
138 liTable.addLineitem(result.lineitem);
139 if(result.complete) // hide the loading image
140 dojo.style('oils-acq-pl-loading','display', 'none');
143 function showDiv(div) {
145 'oils-acq-search-block',
146 'oils-acq-pl-loading' ];
147 dojo.forEach(divs, function(d) {dojo.style(d,'display', 'none')});
149 dojo.style(div, 'display', 'block');
153 openils.Util.addOnLoad(drawForm);