Widen textarea
[misc/kostenrechnung] / lib / functions.js
index f74c402..de69409 100644 (file)
@@ -7,8 +7,11 @@ function ajax_request_callback(req)
        var data = json_parse(req.responseText);
 
        if (typeof data.error == 'string') {
-           error('Fehler im AJAX-Backend');
-           alert("Error in AJAX backend:\n" + data.error);
+           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);
     }
@@ -24,11 +27,11 @@ function ajax_request(func,params,oncomplete)
     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)
@@ -63,15 +66,61 @@ 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 save_callback(data)
 {
     info('Datensatz gespeichert');
@@ -121,6 +170,9 @@ 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;
 }
 
 /*
@@ -172,3 +224,32 @@ function grid_update(grid, filter, value)
     grid.buffer.fetch(-1);
 }
 
+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);
+}