var CookieJar = Class.create();

CookieJar.prototype = {

    /**
     * Append before all cookie names to differntiate them.
     */
    appendString: "__CJ_",

    /**
     * Initializes the cookie jar with the options.
     */
    initialize: function(options) {
        this.options = {
            expires: 3600,      // seconds (1 hr)
            path: '',           // cookie path
            domain: '',         // cookie domain
            secure: ''          // secure ?
        };
        Object.extend(this.options, options || {});

        if (this.options.expires != '') {
            var date = new Date();
            date = new Date(date.getTime() + (this.options.expires * 1000));
            this.options.expires = '; expires=' + date.toGMTString();
        }
        if (this.options.path != '') {
            this.options.path = '; path=' + escape(this.options.path);
        }
        if (this.options.domain != '') {
            this.options.domain = '; domain=' + escape(this.options.domain);
        }
        if (this.options.secure == 'secure') {
            this.options.secure = '; secure';
        } else {
            this.options.secure = '';
        }
    },

    /**
     * Adds a name values pair.
     */
    put: function(name, value) {
        name = this.appendString + name;
        cookie = this.options;
        var type = typeof value;
        switch(type) {
          case 'undefined':
          case 'function' :
          case 'unknown'  : return false;
          case 'boolean'  : 
          case 'string'   : 
          case 'number'   : value = String(value.toString());
        }
        var cookie_str = name + "=" + escape(Object.toJSON(value));
        try {
            document.cookie = cookie_str + cookie.expires + cookie.path + cookie.domain + cookie.secure;
        } catch (e) {
            return false;
        }
        return true;
    },

    /**
     * Removes a particular cookie (name value pair) form the Cookie Jar.
     */
    remove: function(name) {
        name = this.appendString + name;
        cookie = this.options;
        try {
            var date = new Date();
            date.setTime(date.getTime() - (3600 * 1000));
            var expires = '; expires=' + date.toGMTString();
            document.cookie = name + "=" + expires + cookie.path + cookie.domain + cookie.secure;
        } catch (e) {
            return false;
        }
        return true;
    },

    /**
     * Return a particular cookie by name;
     */
    get: function(name) {
        name = this.appendString + name;
        var cookies = document.cookie.match(name + '=(.*?)(;|$)');
        if (cookies) {
            return (unescape(cookies[1])).evalJSON();
        } else {
            return null;
        }
    },

    /**
     * Empties the Cookie Jar. Deletes all the cookies.
     */
    empty: function() {
        keys = this.getKeys();
        size = keys.size();
        for(i=0; i<size; i++) {
            this.remove(keys[i]);
        }
    },

    /**
     * Returns all cookies as a single object
     */
    getPack: function() {
        pack = {};
        keys = this.getKeys();

        size = keys.size();
        for(i=0; i<size; i++) {
            pack[keys[i]] = this.get(keys[i]);
        }
        return pack;
    },

    /**
     * Returns all keys.
     */
    getKeys: function() {
        keys = $A();
        keyRe= /[^=; ]+(?=\=)/g;
        str  = document.cookie;
        CJRe = new RegExp("^" + this.appendString);
        while((match = keyRe.exec(str)) != undefined) {
            if (CJRe.test(match[0].strip())) {
                keys.push(match[0].strip().gsub("^" + this.appendString,""));
            }
        }
        return keys;
    }
};

dsscData = new CookieJar({
    expires: 60 * 60 * 24 * 30,   // 30 days in seconds
    path: '/'
});

Element.observe(window, 'load', function() {
    
    startStopFlash();
    

    $("stopflashbutton").observe('click', function(e) {
        toggleFlash();
    });
    
    if (null != $("quicklogin")) {
        checkQuickLoginName();
        checkQuickLoginPass();
        
        $("quicklogin:loginemail").observe('focus', function() {
            checkQuickLoginName("focus");
        });
        
        $("quicklogin:loginpassword").observe('focus', function() {
            checkQuickLoginPass("focus");
        });
        
        $("quicklogin:loginemail").observe('blur', function() {
            checkQuickLoginName("lostfocus");
        });
        
        $("quicklogin:loginpassword").observe('blur', function() {
            checkQuickLoginPass("lostfocus");
        });
        
        $("quicklogin:loginemail").observe('keydown', checkQuickLoginName);
        $("quicklogin:loginpassword").observe('keydown', checkQuickLoginPass);
    }
});

var cookie = dsscData.get("dssc");

function startStopFlash() {
    if (null == cookie) {
        var flash = {headerflash: false};
        dsscData.put("dssc", flash);
        cookie = dsscData.get("dssc");
    } else {
        if (false == cookie.headerflash) {
            toggleFlash();
        }
    }
}

function toggleFlash() {
    $("headerflash").toggle();
    $("stopflashbutton").toggleClassName('startflashbutton', 'stopflashbutton');
    cookie.headerflash = $("headerflash").visible();
    dsscData.put("dssc", cookie);
    
}


function checkQuickLoginName(action) {
    if ("" == $("quicklogin:loginemail").value && action == "focus") {
        $("quicklogin:labelloginmail").setStyle({ opacity: 0.4 });
    }
    
    if ("" == $("quicklogin:loginemail").value && action == "lostfocus") {
        $("quicklogin:labelloginmail").setStyle({ opacity: 1 });
    }
    
    if ("" != $("quicklogin:loginemail").value) {
        $("quicklogin:labelloginmail").setStyle({ opacity: 0});
    }
}

function checkQuickLoginPass(action) {
    if ("" == $("quicklogin:loginpassword").value && action == "focus") {
        $("quicklogin:labelloginpass").setStyle({ opacity: 0.4 });
    }
    
    if ("" == $("quicklogin:loginpassword").value && action == "lostfocus") {
        $("quicklogin:labelloginpass").setStyle({ opacity: 1 });
    }
    
    if ("" != $("quicklogin:loginpassword").value) {
        $("quicklogin:labelloginpass").setStyle({ opacity: 0});
    }
}