1acl = {
2    init: function(){
3        this.ctl = $('auth_manager');
4        if(!this.ctl) return;
5
6        addEvent($('acl__tree'),'click',acl.treehandler);
7    },
8
9
10    /**
11     * parse URL attributes into a associative array
12     *
13     * @todo put into global script lib?
14     */
15    parseatt: function(str){
16        if(str[0] == '?') str = str.substr(1);
17        var attributes = {};
18        var all = str.split('&');
19        for(var i=0; i<all.length; i++){
20            var att = all[i].split('=');
21            attributes[att[0]] = decodeURIComponent(att[1]);
22        }
23        return attributes;
24    },
25
26    /**
27     * htmlspecialchars equivalent
28     *
29     * @todo put in gloabl scripts lib?
30     */
31    hsc: function(str) {
32        str = str.replace(/&/g,"&amp;");
33        str = str.replace(/\"/g,"&quot;");
34        str = str.replace(/\'/g,"&#039;");
35        str = str.replace(/</g,"&lt;");
36        str = str.replace(/>/g,"&gt;");
37        return str;
38    },
39
40
41    /**
42     * Open or close a subtree using AJAX
43     *
44     * @author Andreas Gohr <andi@splitbrain.org>
45     */
46    treetoggle: function(clicky){
47        var listitem = clicky.parentNode.parentNode;
48
49        // if already open, close by removing the sublist
50        var sublists = listitem.getElementsByTagName('ul');
51        if(sublists.length){
52            listitem.removeChild(sublists[0]);
53            clicky.src = DOKU_BASE+'lib/images/plus.gif';
54            clicky.alt = '+';
55            return false;
56        }
57
58        // get the enclosed link (is always the first one)
59        var link = listitem.getElementsByTagName('a')[0];
60
61        // prepare an AJAX call to fetch the subtree
62        var ajax = new sack(DOKU_BASE + 'lib/plugins/autlogin/ajax.php');
63        ajax.AjaxFailedAlert = '';
64        ajax.encodeURIString = false;
65        if(ajax.failed) return true;
66
67        //prepare the new ul
68        var ul = document.createElement('ul');
69        listitem.appendChild(ul);
70        ajax.elementObj = ul;
71        ajax.setVar('ajax', 'tree');
72        var frm = $('auth1__detail').getElementsByTagName('form')[0];
73        ajax.setVar('current_ns', encodeURIComponent(frm.elements['ns'].value));
74        ajax.setVar('current_id', encodeURIComponent(frm.elements['id'].value));
75        ajax.runAJAX(link.search.substr(1));
76        clicky.src = DOKU_BASE+'lib/images/minus.gif';
77        return false;
78    },
79
80    /**
81     * Handles all clicks in the tree, dispatching the right action based on the
82     * clicked element
83     */
84    treehandler: function(e){
85        if(e.target.src){ // is it an image?
86            acl.treetoggle(e.target);
87        } else if(e.target.href){ // is it a link?
88            // remove highlighting
89            var obj = getElementsByClass('cur',$('acl__tree'),'a');
90            for(var i=0; i<obj.length; i++){
91                obj[i].className = obj[i].className.replace(/ cur/,'');
92            }
93
94            // add new highlighting
95            e.target.className += ' cur';
96
97            // set new page to detail form
98            var frm = $('auth1__detail').getElementsByTagName('form')[0];
99            if(e.target.className.search(/wikilink1/) > -1){
100                frm.elements['ns'].value = '';
101                frm.elements['id'].value = acl.hsc(acl.parseatt(e.target.search)['id']);
102            }else if(e.target.className.search(/idx_dir/) > -1){
103                frm.elements['ns'].value = acl.hsc(acl.parseatt(e.target.search)['ns']);
104                frm.elements['id'].value = '';
105            }
106            var frm2 = $('auth2__detail').getElementsByTagName('form')[0];
107            if(e.target.className.search(/wikilink1/) > -1){
108                frm2.elements['ns'].value = '';
109                frm2.elements['id'].value = acl.hsc(acl.parseatt(e.target.search)['id']);
110            }else if(e.target.className.search(/idx_dir/) > -1){
111                frm2.elements['ns'].value = acl.hsc(acl.parseatt(e.target.search)['ns']);
112                frm2.elements['id'].value = '';
113            }
114             var frm3 = $('auth3__detail').getElementsByTagName('form')[0];
115            if(e.target.className.search(/wikilink1/) > -1){
116                frm3.elements['ns'].value = '';
117                frm3.elements['id'].value = acl.hsc(acl.parseatt(e.target.search)['id']);
118            }else if(e.target.className.search(/idx_dir/) > -1){
119                frm3.elements['ns'].value = acl.hsc(acl.parseatt(e.target.search)['ns']);
120                frm3.elements['id'].value = '';
121            }
122
123
124        }
125
126        e.stopPropagation();
127        e.preventDefault();
128        return false;
129    }
130
131};
132
133addInitEvent(acl.init);
134