﻿/*
 *   Date: 4/12/2010
 *   
 *   Implements client side session object.
 *   It depends on jquery and extJs and supports all major browsers.
 */


var cache = {

    // private properties
    _provider: null,

    // private functions
    _init: function () {
        this._provider = new Ext.ux.state.ServerCacheProvider();
    },

    // publiic functions
    set: function (key, value) {
        if (isBrowserStorageSupported()) {
            $.jStorage.set(key, value);
        } else {
            if (this._provider === null) this._init();
            this._provider.set(key, value);
        }
    },

    get: function (key) {
        if (isBrowserStorageSupported()) {
            return $.jStorage.get(key);
        } else {
            if (this._provider === null) this._init();
            return this._provider.get(key);
        }
        return null;
    },

    remove: function (key) {
        if (isBrowserStorageSupported()) {
            $.jStorage.deleteKey(key);
        } else {
            if (this._provider === null) this._init();
            this._provider.clear(key);
        }
    },

    clear: function () {
        if (isBrowserStorageSupported()) {
            $.jStorage.flush();
        }
    },

    getSessionId: function () {
        var sessionId = null;
        $.ajax({
            type: 'GET',
            cache: false,
            async: false,
            url: '/Account/GetSessionId',
            success: function (data) {
                sessionId = data;
            }
        });
        return sessionId;
    }
};

function isBrowserStorageSupported() {
    var supported = false;
    if ("localStorage" in window) {
        try {
            if (window.localStorage) {
                supported = true;
            }
        } catch (E3) { /* Firefox fails when touching localStorage and cookies are disabled */ }
    }
    /* Check if browser supports globalStorage */
    else if ("globalStorage" in window) {
        try {
            if (window.globalStorage) {
                supported = true;
            }
        } catch (E4) { /* Firefox fails when touching localStorage and cookies are disabled */ }
    }
    return supported;
}

(function () {
//    if ($.browser.msie && $.browser.version.indexOf('7.') >= 0) {
//        Ext.state.Manager.setProvider(new Ext.ux.state.SessVarsProvider());
//    } else {
//        var loginName = null;
//        $.ajax({
//            type: 'POST',
//            cache: false,
//            async: false,
//            url: '/Account/GetAccountInfo',
//            success: function (response) {
//                if (response.success) {
//                    loginName = response.data.LoginName;
//                }
//            },
//            error: function (request, status, errorThrown) {
//                alert('Your session expired. Please login again.');
//            }
//        });

        Ext.state.Manager.setProvider(new Ext.ux.state.ServerCacheProvider());
//        if (loginName) {
//               Ext.state.Manager.setProvider(new Ext.ux.state.ServerCacheProvider());
////            Ext.state.Manager.setProvider(new Ext.ux.state.CookieProvider({
////                expires: new Date(new Date().getTime() + (1000 * 60 * 60 * 24 * 30)), //30 days from now
////                namespace: function () { return loginName + '_'; } ()
////            }));
//        } else {
//            Ext.state.Manager.setProvider(new Ext.state.CookieProvider({
//                expires: new Date(new Date().getTime() + (1000 * 60 * 60 * 24 * 30)) //30 days from now
//            }));
//        }
    //}
}) ();

