/*global document, escape, unescape */
var Cookie = {

    /**
    *   Установка cookie
    *   name - имя
    *   value - значение
    *   extra - дополнительные настройки, объект с полями expires, path, domain, secure
    */
    set: function (name, value, extra) {
        "use strict";
        
        var cookie_parts,
            param;
        cookie_parts = [name + '=' + escape(value)];

        extra = extra || {};
        extra.path = extra.path || '/';

        for (param in extra) {
            if (extra.hasOwnProperty(param)) {
                switch (param) {
                case 'secure':
                    cookie_parts.push('secure');
                    break;
                case 'expires':
                    cookie_parts.push(param + '=' + extra[param].toGMTString());
                    break;
                default:
                    cookie_parts.push(param + '=' + extra[param]);
                    break;
                }
            }
        }

        document.cookie = cookie_parts.join('; ');
        
        return this;
    },
    
    /**
    *   Получение куки по имени
    *   Возвращает значение куки или null, если ее нет
    */
    get: function (name) {
        "use strict";
        
        var prefix,
            start,
            end;
        
        prefix = name + "=";

        start = document.cookie.indexOf(prefix);
        if (start === -1) {
            return null;
        }
        
        end = document.cookie.indexOf(";", start + prefix.length);
        if (end === -1) {
            end = document.cookie.length;
        }
        
        return unescape(document.cookie.substring(start + prefix.length, end));
    },
    
    /**
    *   Удаление куки
    */
    erase: function (name, extra) {
        "use strict";
        extra = extra || {};
        extra.path = extra.path || '/';
        extra.expires = new Date(1000);
        return this.set(name, '', extra);
    }
};
