1/**
2* Handles the cookie used by several JavaScript functions
3*
4* Only a single cookie is written and read. You may only save
5* simple name-value pairs - no complex types!
6*
7* You should only use the getValue and setValue methods
8*
9* @author Andreas Gohr <andi@splitbrain.org>
10* @author Michal Rezler <m.rezler@centrum.cz>
11*/
12var DokuCookie = {
13    data: {},
14    name: 'DOKU_PREFS',
15
16    /**
17     * Save a value to the cookie
18     *
19     * @author Andreas Gohr <andi@splitbrain.org>
20     */
21    setValue: function(key,val){
22        var text = [],
23            _this = this;
24        this.init();
25        if (val === false){
26            delete this.data[key];
27        }else{
28            val = val + "";
29            this.data[key] = val;
30        }
31
32
33        //save the whole data array
34        jQuery.each(_this.data, function (key, val) {
35            if (_this.data.hasOwnProperty(key)) {
36                text.push(encodeURIComponent(key)+'#'+encodeURIComponent(val));
37            }
38        });
39        jQuery.cookie(this.name, text.join('#'), {expires: 365, path: DOKU_COOKIE_PARAM.path, secure: DOKU_COOKIE_PARAM.secure});
40    },
41
42    /**
43     * Get a Value from the Cookie
44     *
45     * @author Andreas Gohr <andi@splitbrain.org>
46     * @param def default value if key does not exist; if not set, returns undefined by default
47     */
48    getValue: function(key, def){
49        this.init();
50        return this.data.hasOwnProperty(key) ? this.data[key] : def;
51    },
52
53    /**
54     * Loads the current set cookie
55     *
56     * @author Andreas Gohr <andi@splitbrain.org>
57     */
58    init: function(){
59        var text, parts, i;
60        if(!jQuery.isEmptyObject(this.data)) {
61            return;
62        }
63        text = jQuery.cookie(this.name);
64        if(text){
65            parts = text.split('#');
66            for(i = 0; i < parts.length; i += 2){
67                this.data[decodeURIComponent(parts[i])] = decodeURIComponent(parts[i+1]);
68            }
69        }
70    }
71};
72