4 function ajax_request_callback(req)
6 if (req.readyState == 4 && req.status == 200) {
7 var data = json_parse(req.responseText);
9 if (typeof data.error == 'string') {
10 if (typeof data.errormsg == 'string')
13 error('Fehler im AJAX-Backend');
14 alert("Fehler im AJAX-Backend:\n" + data.error);
15 } else if (req.oncomplete)
20 function ajax_request(func,params,oncomplete)
22 var req = new XMLHttpRequest();
25 var params = 'func=' + func + '&' + params;
26 req.open ("POST", 'ajax/ajax.php');
27 req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
28 req.setRequestHeader("Content-length", params.length);
29 req.setRequestHeader("Connection", "close");
30 req.onreadystatechange = function() { ajax_request_callback(req); }
31 if (typeof oncomplete == 'function')
32 req.oncomplete = oncomplete;
39 var status = document.getElementById('status');
42 status.innerHTML = msg;
43 status.className = 'status_ok';
48 var status = document.getElementById('status');
51 status.innerHTML = msg;
52 status.className = 'status_error';
55 function set_value(id, value)
57 var obj = document.getElementById(id);
60 if (obj.nodeName.toLowerCase() == 'input'
61 && obj.type.toLowerCase() == 'checkbox')
62 if (value) obj.checked = true;
63 else obj.checked = false;
64 else if (obj.nodeName.toLowerCase() == 'input'
65 || obj.nodeName.toLowerCase() == 'textarea')
67 else if (obj.nodeName.toLowerCase() == 'span')
68 obj.innerHTML = value;
69 else if (obj.nodeName.toLowerCase() == 'select') {
70 for (var i=0; i < obj.options.length; i++)
71 if (obj.options[i].value == value)
72 obj.selectedIndex = i;
74 obj.innerHTML = value;
77 function setvar(obj, name, callback, status)
79 if (!obj.options[obj.selectedIndex].value.length)
82 value = obj.options[obj.selectedIndex].value;
84 var source = document.getElementById('source');
86 if (!source) return false;
88 var parms = 'source=' + source.innerHTML + '&name=' + name + '&value=' + value;
90 ajax_request('setvar', parms, callback);
92 if (typeof status == 'function')
93 status(obj,value,obj.options[obj.selectedIndex].innerHTML);
96 function get_info(name, values, callback)
98 var source = document.getElementById('source');
100 if (!source) return false;
102 var parms = 'source=' + source.innerHTML + '&name=' + name;
104 parms += '&' + key + '=' + values[key];
106 ajax_request('info', parms, callback);
114 var form = document.getElementById('form_edit');
118 for (var i=0; i < form.childNodes.length; i++)
119 if (form.childNodes[i].nodeName.toLowerCase() == 'input'
120 && form.childNodes[i].type.toLowerCase() == 'password')
121 form.childNodes[i].value = '';
124 function select_update(id, options, empty)
126 var obj = document.getElementById(id);
129 if (typeof empty == 'undefined') empty = 0;
131 obj.options.length = empty;
133 for (var i=0; i < options.length; i++)
134 obj.options[empty+i] = new Option(options[i].text,options[i].id,false,false);
137 var pre_save = false;
138 var pre_insert = false;
139 var post_save = function() { grid_update(grid); }
140 var post_delete = function() { grid_update(grid); }
142 function save_callback(data)
144 info('Datensatz gespeichert');
146 if (typeof post_save == 'function')
150 function delete_callback(data)
152 info('Datensatz gelöscht');
154 if (typeof post_delete == 'function')
158 function form_save(obj)
160 var id = document.getElementById('edit_id');
162 if (!id.value.length)
163 return form_insert(obj);
167 if (typeof pre_save == 'function')
172 ajax_request('save', Form.serialize(obj.form), save_callback);
176 function form_insert(obj)
180 if (typeof pre_insert == 'function')
184 ajax_request('insert', Form.serialize(obj.form), save_callback);
188 function form_delete(obj)
190 var id = document.getElementById('edit_id');
192 if (!id.value.length) return;
194 var source = document.getElementById('edit_source');
196 var params = 'id='+id.value + '&source='+source.value;
197 ajax_request('delete', params, delete_callback);
204 function details_callback(data)
207 set_value('detail_'+id, data[id]);
210 function fetch_callback(data)
213 set_value('edit_'+id, data[id]);
215 var status = document.getElementById('form_status');
216 status.innerHTML = 'Geändert: ' + data.sys_edit + ' von ' + data.sys_user;
222 function gridDrillDown(e)
224 if (e.originalTarget && e.originalTarget.target && e.originalTarget.target == '_top')
227 var id = 0; // Column 0 contains ID
228 var row = grid.edit.drillDown(e,0,0);
229 var cell = grid.columns[id].cell(row);
231 var value = cell.innerHTML;
233 if (!value.length || value == ' ') return;
235 if (document.getElementById('details')) {
236 var params = 'source=' + grid.tableId.substr(5) + '&id=' + value;
237 ajax_request('details', params, details_callback);
240 if (document.getElementById('form_edit')) {
241 var params = 'source=' + grid.tableId.substr(5) + '&id=' + value;
242 ajax_request('fetch', params, fetch_callback);
246 /* Update an existing grid
248 * grid is a live grid
249 * filter is the array index of the $table_filters array in mskdef
250 * value is the value applied to the filter
252 function grid_update(grid, filter, value)
254 if (grid === undefined)
257 if (filter !== undefined && filter !== false)
258 grid.buffer.options.requestParameters = ['w'+filter+'=' + value];
260 grid.buffer.setTotalRows(0);
261 grid.buffer.foundRowCount = false;
263 grid.ClearSelection();
265 if (grid.bookmark) grid.bookmark.innerHTML=" ";
267 grid.buffer.fetch(-1);
270 function grid_update_filters(grid)
273 for (var c=0; c < grid.headerColCnt; c++) {
274 var fmt = grid.columns[c].format;
275 if (typeof fmt.filterUI != 'string') continue;
276 if (fmt.filterUI != 's') continue;
277 $(grid.filterId(c)).options.length = 1;
280 Object.extend(options, grid.buffer.ajaxOptions);
281 var colnum = typeof(fmt.filterCol)=='number' ? fmt.filterCol : c;
283 options.parameters = 'id='+grid.tableId+'&distinct='+colnum;
284 options.onComplete = grid.filterValuesUpdate.bind(grid,c);
285 new Ajax.Request(grid.buffer.dataSource, options);
289 var calendars = new Array();
290 function calendar_callback(value)
292 this.input.value = value;
295 function calendar(name,event)
297 var input = document.getElementById(name);
300 if (calendars[name] == undefined) {
301 calendars[name] = new Rico.CalendarControl('calendar_'+name,
303 dateFmt: 'dd.mm.yyyy',
305 calendars[name].atLoad();
306 calendars[name].returnValue = calendar_callback;
307 RicoUtil.positionCtlOverIcon(calendars[name].container,input);
308 calendars[name].open(input.value);
309 calendars[name].input = input;
311 if (Element.visible(calendars[name].container))
312 calendars[name].close();
314 calendars[name].open(input.value);