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.enableActionsDropdownOptions("fs");
29 liTable.skipInitialEligibilityCheck = true;
31 fieldmapper.standardRequest(
32 ['open-ils.search', 'open-ils.search.z3950.retrieve_services'],
34 params: [user.authtoken],
40 function _drawForm(r) {
42 var sources = openils.Util.readResponse(r);
45 for(var name in sources) {
46 source = sources[name];
47 if(name == 'native-evergreen-catalog') continue;
48 bibSourceSelect.addOption({value:name, label:source.label});
49 for(var attr in source.attrs)
50 if(!attr.match(/^#/)) // xml comment nodes
51 searchFields.push(source.attrs[attr]);
54 searchFields = searchFields.sort(
64 var tbody = dojo.byId('oils-acq-search-fields-tbody');
65 var tmpl = tbody.removeChild(dojo.byId('oils-acq-search-fields-template'));
67 for(var f in searchFields) {
68 var field = searchFields[f];
69 if(dijit.byId('text_input_'+field.name)) continue;
70 var row = tmpl.cloneNode(true);
71 tbody.insertBefore(row, dojo.byId('oils-acq-seach-fields-count-row'));
72 var labelCell = dojo.query('[name=label]', row)[0];
73 var inputCell = dojo.query('[name=input]', row)[0];
74 labelCell.appendChild(document.createTextNode(field.label));
75 input = new dijit.form.TextBox({name:field.name, label:field.label, id:'text_input_'+field.name});
76 inputCell.appendChild(input.domNode);
80 function clearSearchForm() {
81 for(var f in searchFields) {
82 var field = searchFields[f];
83 dijit.byId('text_input_'+field.name).setValue('');
88 function doSearch(values) {
90 showDiv('oils-acq-pl-loading');
100 searchLimit = values.limit;
103 var selected = bibSourceSelect.getValue();
104 for(var i = 0; i < selected.length; i++) {
105 search.service.push(selected[i]);
106 search.username.push('');
107 search.password.push('');
111 for(var v in values) {
113 var input = dijit.byId('text_input_'+v);
114 search.search[v] = values[v];
118 fieldmapper.standardRequest(
119 ['open-ils.acq', 'open-ils.acq.picklist.search.z3950'],
121 params: [user.authtoken, search, null, {respond_li:1, flesh_attrs:1, clear_marc:1}],
122 onresponse: handleResult
128 function setRowAttr(td, liWrapper, field) {
129 var val = liWrapper.findAttr(field, 'lineitem_marc_attr_definition') || '';
130 td.appendChild(document.createTextNode(val));
133 function handleResult(r) {
134 var result = openils.Util.readResponse(r);
135 liTable.show('list');
136 dojo.style(dojo.byId('oils-acq-pl-search-results'), 'display', 'block');
137 var tbody = dojo.byId('plist-tbody');
139 liTable.addLineitem(result.lineitem);
140 if(result.complete) // hide the loading image
141 dojo.style('oils-acq-pl-loading','display', 'none');
144 function showDiv(div) {
146 'oils-acq-search-block',
147 'oils-acq-pl-loading' ];
148 dojo.forEach(divs, function(d) {dojo.style(d,'display', 'none')});
150 dojo.style(div, 'display', 'block');
154 openils.Util.addOnLoad(drawForm);