if (req.readyState == 4 && req.status == 200) {
var data = json_parse(req.responseText);
- if (req.oncomplete)
+ if (typeof data.error == 'string') {
+ if (typeof data.errormsg == 'string')
+ error(data.errormsg);
+ else
+ error('Fehler im AJAX-Backend');
+ alert("Fehler im AJAX-Backend:\n" + data.error);
+ } else if (req.oncomplete)
req.oncomplete(data);
}
}
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("Content-length", params.length);
req.setRequestHeader("Connection", "close");
- if (typeof oncomplete == 'function') {
- req.onreadystatechange = function() { ajax_request_callback(req); }
+ req.onreadystatechange = function() { ajax_request_callback(req); }
+ if (typeof oncomplete == 'function')
req.oncomplete = oncomplete;
- }
req.send(params);
+ info('');
+}
+
+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)
obj.value = value;
else if (obj.nodeName.toLowerCase() == 'span')
obj.innerHTML = value;
- else if (obj.nodeName.toLowerCase() == 'select')
+ else if (obj.nodeName.toLowerCase() == 'select') {
for (var i=0; i < obj.options.length; i++)
if (obj.options[i].value == value)
obj.selectedIndex = i;
+ } else
+ obj.innerHTML = value;
+}
+
+function setvar(obj, name, callback, status)
+{
+ if (!obj.options[obj.selectedIndex].value.length)
+ value = -1;
+ else
+ value = obj.options[obj.selectedIndex].value;
+
+ var source = document.getElementById('source');
+
+ if (!source) return false;
+
+ var parms = 'source=' + source.innerHTML + '&name=' + name + '&value=' + value;
+
+ ajax_request('setvar', parms, callback);
+
+ if (typeof status == 'function')
+ status(obj,value,obj.options[obj.selectedIndex].innerHTML);
+}
+
+function get_info(name, values, callback)
+{
+ var source = document.getElementById('source');
+
+ if (!source) return false;
+
+ var parms = 'source=' + source.innerHTML + '&name=' + name;
+ for (key in values)
+ parms += '&' + key + '=' + values[key];
+
+ ajax_request('info', parms, callback);
}
/*
* Form functions
*/
+function form_init()
+{
+ var form = document.getElementById('form_edit');
+
+ if (!form) return;
+
+ for (var i=0; i<form.children.length; i++)
+ if (form.children[i].tagName.toLowerCase() == 'input'
+ && form.children[i].type.toLowerCase() == 'password')
+ form.children[i].value = '';
+}
+
+function select_update(id, options, empty)
+{
+ var obj = document.getElementById(id);
+ if (!obj) return;
+
+ if (typeof empty == 'undefined') empty = 0;
+
+ obj.options.length = empty;
+
+ for (var i=0; i < options.length; i++)
+ obj.options[empty+i] = new Option(options[i].text,options[i].id,false,false);
+}
+
+var post_save = function() { grid_update(grid); }
+var post_delete = function() { grid_update(grid); }
+
+function save_callback(data)
+{
+ info('Datensatz gespeichert');
+
+ if (typeof post_save == 'function')
+ post_save();
+}
+
+function delete_callback(data)
+{
+ info('Datensatz gelöscht');
+
+ if (typeof post_delete == 'function')
+ post_delete();
+}
+
function form_save(obj)
{
+ var id = document.getElementById('edit_id');
+
+ if (!id.value.length)
+ return form_insert(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');
+
+ if (!id.value.length) return;
+
+ var source = document.getElementById('edit_source');
+ info('');
+ var params = 'id='+id.value + '&source='+source.value;
+ ajax_request('delete', params, delete_callback);
return false;
}
{
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;
}
/*
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);
+}
+
+function grid_update_filters(grid)
+{
+ var todo = false;
+ for (var c=0; c < grid.headerColCnt; c++) {
+ var fmt = grid.columns[c].format;
+ if (typeof fmt.filterUI != 'string') continue;
+ if (fmt.filterUI != 's') continue;
+ $(grid.filterId(c)).options.length = 1;
+
+ var options = {};
+ Object.extend(options, grid.buffer.ajaxOptions);
+ var colnum = typeof(fmt.filterCol)=='number' ? fmt.filterCol : c;
+
+ options.parameters = 'id='+grid.tableId+'&distinct='+colnum;
+ options.onComplete = grid.filterValuesUpdate.bind(grid,c);
+ new Ajax.Request(grid.buffer.dataSource, options);
+ }
+}
+
+var calendars = new Array();
+function calendar_callback(value)
+{
+ this.input.value = value;
+}
+
+function calendar(name,event)
+{
+ var input = document.getElementById(name);
+ if (!input) return;
+
+ if (calendars[name] == undefined) {
+ calendars[name] = new Rico.CalendarControl('calendar_'+name,
+ {startAt: 1,
+ dateFmt: 'dd.mm.yyyy',
+ showWeekNumber: 1});
+ calendars[name].atLoad();
+ calendars[name].returnValue = calendar_callback;
+ RicoUtil.positionCtlOverIcon(calendars[name].container,input);
+ calendars[name].open(input.value);
+ calendars[name].input = input;
+ } else {
+ if (Element.visible(calendars[name].container))
+ calendars[name].close();
+ else
+ calendars[name].open(input.value);
+ }
+ Event.stop(event);
+}