var oCookie = (function() {
    
        function setSubCookie(sName, sVal) {
                var aSubCookie = _getAllSubCookies();

                sNameTarget = sName;
        for (var i=0; i<aSubCookie.length; i++) {
            var aSubCookiePart = aSubCookie[i].split(/\s*\:\s*/);
            if (aSubCookiePart[0] == sNameTarget) {
                                aSubCookie[i] = sNameTarget + ':' + sVal;
                sNameTarget = null;
                break;
            }
        }
        if (sNameTarget != null) {
                        aSubCookie[aSubCookie.length] = sNameTarget + ':' + sVal;
        }
        _setCookie('queryCookie',
                   aSubCookie.join('&'));
    }

        function getSubCookie(sName) {
        var sVal = null;
        var aSubCookie = _getAllSubCookies();
        for (var i=0; i<aSubCookie.length; i++) {
            var aSubCookiePart = aSubCookie[i].split(/\s*\:\s*/);
            if (aSubCookiePart[0] == sName) {
                sVal = aSubCookiePart[1];
                break;
            }
        }
        return sVal;
    }
    
        function isCookieEnabled() {
                var sCookie = _getCookie(null);
        return ((sCookie != null) && (sCookie.length > 0));
    }

        function _getAllSubCookies() {
        var aSubCookie = [];
        var sCookie = _getCookie('queryCookie');
        if (sCookie != null) {
                        aSubCookie = sCookie.split(/\s*\&\s*/);
        }
        return aSubCookie;
    }

        function _getCookie(sName) {
        var sVal = null;
        var sCookie = document.cookie;
        if (sCookie) {
                        if (sName == null) {
                                sVal = sCookie;
            } else {
                                var aCookie = sCookie.split(/\s*;\s*/);
                for (var i=0; i<aCookie.length; i++) {
                    var aCookiePart = aCookie[i].split(/\s*=\s*/);
                    if (aCookiePart[0] == sName) {
                                                sVal = unescape(aCookiePart[1]);
                        break;
                    }
                }
            }
        }
        return sVal;
    }

        function delSubCookie(sName) {
                var aSubCookie = _getAllSubCookies();

                for (var i=0; i<aSubCookie.length; i++) {
            var aSubCookiePart = aSubCookie[i].split(/\s*\:\s*/);
            if (aSubCookiePart[0] == sName) {
                                delete aSubCookie[i];
                break;
            }
        }
        _setCookie('queryCookie',
                   aSubCookie.join('&'));
    }

        function _setCookie(sName, sVal) {
        document.cookie =
            sName + '=' + escape(sVal) + '; ' +
                        'expires=' + (new Date((new Date()).getTime() + 60*60*24*365)).toGMTString( ) +'; ' +
            'path=/apps';
    }

        return {
        'setSubCookie': setSubCookie,
        'getSubCookie': getSubCookie,
        'delSubCookie': delSubCookie,
        'isCookieEnabled': isCookieEnabled
    }
})();
