LessonState = function (state) {
    Ext.apply(this, state, {
        SavedTime:new Date()
    });
};
Ext.define('StateManager', {
    constructor:function (config) {
        this.IsLocalStorageSupport = typeof(Storage) !== "undefined";
        this.Path = null;
        this.Expires = 30;
        this.Domain = null;
        this.Secure = false;
        Ext.apply(this, config, {
            Path:'/',
            Expires:30,
            Secure:false
        });
    },
    clear:function (name) {
        if (this.IsLocalStorageSupport) {
            localStorage.removeItem(name);
        } else {
            this.delete_Cookie(name, this.Path, this.Domain);
        }
    },
    set:function (name, value) {
        value = Ext.JSON.encode(value);
        try {
            if (this.IsLocalStorageSupport) {
                localStorage.setItem(name, value);
            } else {
                //  alert(Ext.String.format("Name: {0}\nValue: {1}\nExpires: {2}\nPath: {3}\nDomain: {4}\nSecure: {5}", name, value, this.Expires, this.Path, this.Domain, this.Secure));
                this.set_Cookie(name, value, this.Expires, null, this.Domain, this.Secure);
            }
        } catch (err) {
        }
    },
    get:function (name, defaultValue) {
        var c = false;
        try {
            if (this.IsLocalStorageSupport) {
                c = localStorage.getItem(name);
            } else {
                c = this.get_Cookie(name);
            }
        } catch (err) {
        }
        return c ? Ext.JSON.decode(c, true) : defaultValue;
    },
    get_Cookie:function (check_name) {
        var a_all_cookies = document.cookie.split(';');
        var a_temp_cookie = '';
        var cookie_name = '';
        var cookie_value = '';
        var b_cookie_found = false;
        var i = '';
        for (i = 0; i < a_all_cookies.length; i++) {
            a_temp_cookie = a_all_cookies[i].split('=');
            cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');
            if (cookie_name == check_name) {
                b_cookie_found = true;
                if (a_temp_cookie.length > 1) {
                    cookie_value = unescape(a_temp_cookie[1].replace(/^\s+|\s+$/g, ''));
                }
                return cookie_value;
            }
            a_temp_cookie = null;
            cookie_name = '';
        }
        if (!b_cookie_found) {
            return null;
        }
    },
    set_Cookie:function (name, value, expires, path, domain, secure) {
        // alert(Ext.String.format("Name: {0}\nValue: {1}\nExpires: {2}\nPath: {3}\nDomain: {4}\nSecure: {5}", name, value, expires, path, domain, secure));
        var today = new Date();
        today.setTime(today.getTime());
        if (expires) {
            expires = expires * 1000 * 60 * 60 * 24;
        }
        var expires_date = new Date(today.getTime() + (expires));
        document.cookie = name + "=" + escape(value) +
            ((expires) ? ";expires=" + expires_date.toGMTString() : "") + //expires.toGMTString()
            ((path) ? ";path=" + path : "") +
            ((domain) ? ";domain=" + domain : "") +
            ((secure) ? ";secure" : "");
    },
    delete_Cookie:function (name, path, domain) {
        if (this.get_Cookie(name))
            document.cookie = name + "=" +
                ((path) ? ";path=" + path : "") +
                ((domain) ? ";domain=" + domain : "") +
                ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
    },
    clearVeryOldCookies:function () {
        var cookies = document.cookie.split(";");
        if (cookies.length > 8) {
            for (var i = 0; i < cookies.length; i++) {
                var cookie = cookies[i];
                var eqPos = cookie.indexOf("=");
                var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
                document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
            }
        }
    }
});
