Automatically calculate the filesystem path of the application and use
[misc/kostenrechnung] / lib / functions.js
1 /*
2  * Small AJAX framework
3  */
4 function ajax_request_callback(req)
5 {
6     if (req.readyState == 4 && req.status == 200) {
7         var data = json_parse(req.responseText);
8
9         if (req.oncomplete)
10             req.oncomplete(data);
11     }
12 }
13
14 function ajax_request(func,params,oncomplete)
15 {
16     var req = new XMLHttpRequest();
17     if (!req) return;
18
19     var params = 'func=' + func + '&' + params;
20     req.open ("POST", 'ajax/ajax.php');
21     req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
22     req.setRequestHeader("Content-length", params.length);
23     req.setRequestHeader("Connection", "close");
24     if (typeof oncomplete == 'function') {
25         req.onreadystatechange = function() { ajax_request_callback(req); }
26         req.oncomplete = oncomplete;
27     }
28     req.send(params);
29 }
30
31 function set_value(id, value)
32 {
33     var obj = document.getElementById(id);
34     if (!obj) return;
35
36     if (obj.nodeName.toLowerCase() == 'input'
37         && obj.type.toLowerCase() == 'checkbox')
38         if (value) obj.checked = true;
39         else obj.checked = false;
40     else if (obj.nodeName.toLowerCase() == 'input'
41         || obj.nodeName.toLowerCase() == 'textarea')
42         obj.value = value;
43     else if (obj.nodeName.toLowerCase() == 'span')
44         obj.innerHTML = value;
45     else if (obj.nodeName.toLowerCase() == 'select')
46         for (var i=0; i < obj.options.length; i++)
47             if (obj.options[i].value == value)
48                 obj.selectedIndex = i;
49 }
50
51 /*
52  * Form functions
53  */
54 function form_save(obj)
55 {
56     return false;
57 }
58
59 /*
60  * Table functions
61  */
62 function details_callback(data)
63 {
64     for (var id in data)
65         set_value('detail_'+id, data[id]);
66 }
67
68 function fetch_callback(data)
69 {
70     for (var id in data)
71         set_value('edit_'+id, data[id]);
72 }
73
74 /*
75  * Rico functions
76  */
77 function gridDrillDown(e)
78 {
79     if (e.originalTarget && e.originalTarget.target && e.originalTarget.target == '_top')
80         return;
81
82     var id = 0; // Column 0 contains ID
83     var row = grid.edit.drillDown(e,0,0);
84     var cell = grid.columns[id].cell(row);
85     if (!cell) return;
86     var value = cell.innerHTML;
87
88     if (document.getElementById('details')) {
89         var params = 'source=' + grid.tableId.substr(5) + '&id=' + value;
90         ajax_request('details', params, details_callback);
91     }
92
93     if (document.getElementById('form_edit')) {
94         var params = 'source=' + grid.tableId.substr(5) + '&id=' + value;
95         ajax_request('fetch', params, fetch_callback);
96     }
97 }