Ext.ns('Dms.util');

/**
 * @class Dms.util.Cookie
 * @singleton
 * Provides functions operating on cookies. Singleton
 * @constructor
 */
Dms.util.Cookie = function() {
    return {
        /**
         * Sets cookie value
         *
         * @param {Object} name       Cookie name
         * @param {Object} value      Cookie value
         */
        set: function(name, value){
             var argv = arguments;
             var argc = arguments.length;
             var expires = (argc > 2) ? argv[2] : null;
             var path = (argc > 3) ? argv[3] : '/';
             var domain = (argc > 4) ? argv[4] : null;
             var secure = (argc > 5) ? argv[5] : false;
             document.cookie = name + "=" + escape (value) +
               ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
               ((path == null) ? "" : ("; path=" + path)) +
               ((domain == null) ? "" : ("; domain=" + domain)) +
               ((secure == true) ? "; secure" : "");
        },
        /**
         * Returns cookie value
         *
         * @param {String} name         Cookie value
         * @param {Object} defaultValue Default value if cookie not available
         */
        get: function(name, defaultValue){
            var arg = name + "=";
            var alen = arg.length;
            var clen = document.cookie.length;
            var i = 0;
            var j = 0;
            while(i < clen){
                j = i + alen;
                if (document.cookie.substring(i, j) == arg) {
                    return this.getCookieVal(j);
                }
                i = document.cookie.indexOf(" ", i) + 1;
                if(i == 0) {
                    break;
                }
            }
            return defaultValue === undefined ? null : defaultValue;
        },
        /**
         * Clears cookie
         *
         * @param {Object} name Cookie name
         */
        clear: function(name) {
              var argv = arguments;
              var argc = arguments.length;
              var expires = (argc > 1)  ? argv[1] : null;
              var path = (argc > 2)     ? argv[2] : '/';
              var domain = (argc > 3)   ? argv[3] : null;
              var secure = (argc > 4)   ? argv[4] : false;
              if(this.get(name)){
                  document.cookie = name + "=" + "; expires=Thu, 01-Jan-70 00:00:01 GMT" +
                    ((path == null) ? "" : ("; path=" + path)) +
                    ((domain == null) ? "" : ("; domain=" + domain)) +
                    ((secure == true) ? "; secure" : "");
              }
        },
        /**
         * Cust's out cookie value from cookie string
         *
         * @param {Object} offset
         */
        getCookieVal: function(offset){
            var endstr = document.cookie.indexOf(";", offset);
            if(endstr == -1){
                endstr = document.cookie.length;
            }
            return unescape(document.cookie.substring(offset, endstr));
        }
    };
}();

