/** Defines Cookie as a JS Singleton with all public methods. */
var Cookie = function() {
    return {

        // set a cookie (e.g., a session key or a user id)
        set : function(name, value, days, domain, path) {
            var expires = "";
            if (days) {
                var date = new Date();
                date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
                expires = "; expires=" + date.toGMTString();
            }
        
            if (!domain) domain = document.domain;
            if (!path) path = '/';
            // document.domain to allow multiple domains.
            document.cookie = name + "=" + value + expires + "; path="+ path +"; domain=" + domain;
        },
    
        eat : function(name) {
            this.set(name, "eaten", -10);
        },
    
        get : function(cookieName) {
            // first we'll split this cookie up into name/value pairs
            // note: document.cookie only returns name=value, not the other components
            var a_all_cookies = document.cookie.split( ';' );
            var a_temp_cookie = '';
            var cookie_name = '';
            var cookie_value = '';
            var b_cookie_found = false; // set boolean t/f default f
        
            for (var i = 0; i < a_all_cookies.length; i++ ) {
                // now we'll split apart each name=value pair
                a_temp_cookie = a_all_cookies[i].split( '=' );
            
                // and trim left/right whitespace while we're at it
                cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');
            
                // if the extracted name matches passed check_name
                if ( cookie_name == cookieName ) {
                    b_cookie_found = true;
                    // we need to handle case where cookie has no value but exists (no = sign, that is):
                    if ( a_temp_cookie.length > 1 ) {
                        cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
                    }
                    // note that in cases where cookie is initialized but no value, null is returned
                    return cookie_value;
                }
                a_temp_cookie = null;
                cookie_name = '';
            }
            if ( !b_cookie_found ) {
                return null;
            }
        }
    };
}();