/* * Small AJAX framework */ function ajax_request_callback(req) { if (req.readyState == 4 && req.status == 200) { var data = json_parse(req.responseText); 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); } } function ajax_request(func,params,oncomplete) { var req = new XMLHttpRequest(); if (!req) return; var params = 'func=' + func + '&' + params; req.open ("POST", 'ajax/ajax.php'); 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.oncomplete = oncomplete; } 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]); } /* * Rico functions */ function gridDrillDown(e) { if (e.originalTarget && e.originalTarget.target && e.originalTarget.target == '_top') return; var id = 0; // Column 0 contains ID var row = grid.edit.drillDown(e,0,0); var cell = grid.columns[id].cell(row); 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 = '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); }