// хранение атрибутов в cookie
(function() {

    var encodeValue = function(val) {
        return encodeURIComponent(JSON.stringify(val));
    };

    var decodeValue = function(s) {
        try {
            s = decodeURIComponent(s);
            s = "(" + s + ")";
            return eval(s);
        } catch (ex) {
            return null;
        }
    };

    var write = function(name, value, expires) {
        document.cookie = "myterra-" + name + "=" + encodeValue(value)
            + "; path=/"
            + (!!expires ? "; Expires=" + expires.format_UTC() : "");
    };

    var val = {};
    var c = document.cookie + ";";
    var re = /\s?(.*?)=(.*?);/g;
    var t;
    while ((t = re.exec(c)) != null) {
        var name = t[1];
        if (name && name.substring(0, 8) == "myterra-") {
            val[name.substr(8)] = decodeValue(t[2]);
        }
    }

    myterra.applyIf(myterra, {

        setAttr: function(name, value, expires) {
            if (value == null || (expires != null && expires < new Date())) {
                return this.removeAttr(name);
            }
            var ret = val[name];
            val[name] = value;
            write(name, value, expires);
            return ret;
        },

        getAttr: function(name) {
            return val[name];
        },

        removeAttr: function(name) {
            var ret = val[name];
            delete val[name];
            document.cookie = "myterra-" + name + "=null; path=/"
                + "; expires=Thu, 01-Jan-1970 00:00:01 GMT";
            return ret;
        }

    });

})();
