1function doku_ajax(call, params) {
2    var ajax = new sack(DOKU_BASE + 'lib/plugins/ajaxloader/ajax.php');
3    if (!params) {
4        params = {};
5    } else if (params.tagName && params.tagName.toLowerCase() === 'form') {
6        params = serialize_form(params);
7    }
8    if (call) {
9        params.call = call;
10    }
11    var oldrunAJAX = ajax.runAJAX;
12
13    /* Always apply given params before making a call. sack.runAJAX resets
14       the param string. */
15    ajax.runAJAX = function(more_params) {
16        if (typeof more_params === 'object') {
17            for (val in more_params) {
18                if (more_params.hasOwnProperty(val)) {
19                    params[val] = more_params[val];
20                }
21            }
22            more_params = '';
23        } else if (this.URLString.length > 0) {
24            var strcache = this.URLString;
25            this.URLString = '';
26        }
27        for (val in params) {
28            if (params.hasOwnProperty(val)) {
29                ajax.setVar(val, params[val]);
30            }
31        }
32        if (typeof strcache !== undefined) {
33            this.URLString += '&' + strcache;
34        }
35        return oldrunAJAX.call(this, more_params);
36    };
37    return ajax;
38}
39
40function serialize_form(form) {
41    var data = {};
42    var inps = form.elements;
43    // FIXME: Perform more extensive form processing:
44    //  http://www.w3.org/TR/html401/interact/forms.html#h-17.13
45    for (var i = 0 ; i < inps.length ; ++i) {
46        var name = inps[i].name || inps[i].id;
47        if (!name) {
48            continue;
49        }
50        data[name] = inps[i].value;
51    }
52    return data;
53}
54