if (req.readyState == 4 && req.status == 200) {
var data = json_parse(req.responseText);
- if (req.oncomplete)
+ if (typeof data.error == 'string') {
+ error('Fehler im AJAX-Backend');
+ alert("Error in AJAX backend:\n" + data.error);
+ } else if (req.oncomplete)
req.oncomplete(data);
}
}
req.send(params);
}
+function info(msg)
+{
+ var status = document.getElementById('status');
+ if (!status) return;
+
+ status.innerHTML = msg;
+ status.className = 'status_ok';
+}
+
+function error(msg)
+{
+ var status = document.getElementById('status');
+ if (!status) return;
+
+ status.innerHTML = msg;
+ status.className = 'status_error';
+}
+
+function set_value(id, value)
+{
+ var obj = document.getElementById(id);
+ if (!obj) return;
+
+ if (obj.nodeName.toLowerCase() == 'input'
+ && obj.type.toLowerCase() == 'checkbox')
+ if (value) obj.checked = true;
+ else obj.checked = false;
+ else if (obj.nodeName.toLowerCase() == 'input'
+ || obj.nodeName.toLowerCase() == 'textarea')
+ obj.value = value;
+ else if (obj.nodeName.toLowerCase() == 'span')
+ obj.innerHTML = value;
+ else if (obj.nodeName.toLowerCase() == 'select')
+ for (var i=0; i < obj.options.length; i++)
+ if (obj.options[i].value == value)
+ obj.selectedIndex = i;
+}
+
/*
* Form functions
*/
+function save_callback(data)
+{
+ info('Datensatz gespeichert');
+ grid_update(grid);
+}
+
+function delete_callback(data)
+{
+ info('Datensatz gelöscht');
+ grid_update(grid);
+}
+
function form_save(obj)
{
+ info('');
+ ajax_request('save', Form.serialize(obj.form), save_callback);
+ return false;
+}
+
+function form_insert(obj)
+{
+ info('');
+ ajax_request('insert', Form.serialize(obj.form), save_callback);
return false;
}
+function form_delete(obj)
+{
+ var id = document.getElementById('edit_id');
+ var source = document.getElementById('edit_source');
+ info('');
+ var params = 'id='+id.value + '&source='+source.value;
+ ajax_request('delete', params, delete_callback);
+ return false;
+}
+
+/*
+ * Table functions
+ */
+function details_callback(data)
+{
+ for (var id in data)
+ set_value('detail_'+id, data[id]);
+}
+
+function fetch_callback(data)
+{
+ for (var id in data)
+ set_value('edit_'+id, data[id]);
+
+ var status = document.getElementById('form_status');
+ status.innerHTML = 'Geändert: ' + data.sys_edit + ' von ' + data.sys_user;
+}
+
/*
* Rico functions
*/
if (!cell) return;
var value = cell.innerHTML;
+ if (document.getElementById('details')) {
+ var params = 'source=' + grid.tableId.substr(5) + '&id=' + value;
+ ajax_request('details', params, details_callback);
+ }
+
if (document.getElementById('form_edit')) {
- var params = 'mask=' + grid.tableId.substr(5) + '&id=' + value;
- ajax_request('fetch', params, false);
+ var params = 'source=' + grid.tableId.substr(5) + '&id=' + value;
+ ajax_request('fetch', params, fetch_callback);
}
}
+
+/* Update an existing grid
+ *
+ * grid is a live grid
+ * filter is the array index of the $table_filters array in mskdef
+ * value is the value applied to the filter
+ */
+function grid_update(grid, filter, value)
+{
+ if (grid === undefined)
+ return;
+
+ if (filter !== undefined && filter !== false)
+ grid.buffer.options.requestParameters = ['w'+filter+'=' + value];
+ grid.buffer.clear();
+ grid.buffer.setTotalRows(0);
+ grid.buffer.foundRowCount = false;
+ grid.cancelMenu();
+ grid.ClearSelection();
+ grid.setImages();
+ if (grid.bookmark) grid.bookmark.innerHTML=" ";
+ grid.clearRows();
+ grid.buffer.fetch(-1);
+}
+