1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*******************************************************
COOKIE FUNCTIONALITY
Based on "Night of the Living Cookie" by Bill Dortch
(c) 2003, Ryan Parman
http://www.skyzyx.com
Distributed according to SkyGPL 2.1, http://www.skyzyx.com/license/
*******************************************************/
function cookie(name, value, expires, path, domain, secure)
{
    // Passed Values
    this.name=name;
    this.value=value;
    this.expires=expires;
    this.path=path;
    this.domain=domain;
    this.secure=secure;

    // Read cookie
    this.read=function()
    {
        // To allow for faster parsing
        var ck=document.cookie;

        var arg = this.name + "=";
        var alen = arg.length;
        var clen = ck.length;
        var i = 0;

        while (i < clen)
        {
            var j = i + alen;
            if (ck.substring(i, j) == arg)
            {
                var endstr = ck.indexOf (";", j);
                if (endstr == -1) endstr = ck.length;
                return unescape(ck.substring(j, endstr));
            }
            i = ck.indexOf(" ", i) + 1;
            if (i == 0) break;
        }
        return null;
    }

    // Set cookie
    this.set=function()
    {
        // Store initial value of "this.expires" for re-initialization.
        expStore=this.expires;

        // Set time to absolute zero.
        exp = new Date();
        base = new Date(0);
        skew = base.getTime();
        if (skew > 0)  exp.setTime (exp.getTime() - skew);
        exp.setTime(exp.getTime() + (this.expires*24*60*60*1000));
        this.expires=exp;

        document.cookie = this.name + "=" + escape (this.value) +
                ((this.expires) ? "; expires=" + this.expires.toGMTString() : "") +
                ((this.path) ? "; path=" + this.path : "") +
                ((this.domain) ? "; domain=" + this.domain : "") +
                ((this.secure) ? "; secure" : "");

        // Re-initialize
        this.expires=expStore;
    }

    // Kill cookie
    this.kill=function()
    {
        document.cookie = this.name + "=" +
                ((this.path) ? "; path=" + this.path : "") +
                ((this.domain) ? "; domain=" + this.domain : "") +
                "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }

    // Change cookie settings.
    this.changeName=function(chName) { this.kill(); this.name=chName; this.set(); }
    this.changeVal=function(chVal) { this.kill(); this.value=chVal; this.set(); }
    this.changeExp=function(chExp) { this.kill(); this.expires=chExp; this.set(); }
    this.changePath=function(chPath) { this.kill(); this.path=chPath; this.set(); }
    this.changeDomain=function(chDom) { this.kill(); this.domain=chDom; this.set(); }
    this.changeSecurity=function(chSec) { this.kill(); this.secure=chSec; this.set(); }
}