var Cookie = {

    key: 'HGC_Showroom',

    set: function(key, value) {
        var cookies = this.getCookies();
        cookies[key] = value;
        var src = Object.toJSON(cookies).toString();
        this.setCookie(this.key, src);
    },

    get: function(key) {
        if (this.exists(key)) {
            var cookies = this.getCookies();
            return cookies[key];
        }
        if (arguments.length == 2) {
            return arguments[1];
        }
        return;
    },

    exists: function(key) {
        var cookies = this.getCookies();
        return this.structKeyExists(cookies, key);
    },

    clear: function(key) {
        var cookies = this.getCookies();
        delete cookies[key];
        var src = Object.toJSON(cookies).toString();
        this.setCookie(this.key, src);
    },

    getCookies: function() {
        var cookies = {};
        if (this.hasCookie(this.key)) {
            cookies = this.getCookie(this.key).evalJSON();
        }
        return cookies;
    },

    hasCookie: function(key) {
        var cookie = this.getCookie(key);
        if (cookie == null) {
            return false;
        }
        return true;
    },

    setCookie: function(key, value) {
        var expires = new Date();
        expires.setTime(expires.getTime() + 1000 * 60 * 60 * 24 * 365)
        document.cookie = key + '=' + escape(value) + '; expires=' + expires + '; path=/';
    },

    getCookie: function(key) {
        var cookie = key + '=';
        var array = document.cookie.split(';');
        for (var i = 0; i < array.length; i++) {
            var c = array[i];
            while (c.charAt(0) == ' ') {
                c = c.substring(1, c.length);
            }
            if (c.indexOf(cookie) == 0) {
                var result = c.substring(cookie.length, c.length);
                return unescape(result);
            };
        }
        return null;
    },

    structKeyExists: function(struct, key) {
        for (var i in struct) {
            if (i == key) {
                return true;
            }
        }
        return false;
    }
}
