// хеш
function hash() {

    this.data = new Array();
    this.hash = "";
    
    // обновлятель хеша
    this.upd = function(params) {
        if(!(params instanceof Object))
            return false;
        // обнулили хеш
        location.hash = "";
        // обновили инфу
        for(var key in params)
            this.data[key] = params[key];
        // ттерь соберем в строку
        var hash = new Array();
        var i = 0;
        var val = "";
        // перебираем все элементы инфы
        for(j in this.data) {
            // если мы подошли в доп. параметрам и это массив
            if(j == "d" && this.data[j] instanceof Object) {
                // соберем этот массив в строку
                var d = new Array();
                var l = 0;
                for(k in this.data[j]) {
                    d[l] = k + "=" + this.data[j][k];
                    l++;
                }
                val = implode("&", d);
                hash[i] = val;
            }
            else {
                val = this.data[j];
                hash[i] = j + ":" + val;
            }
            i++;
        }
        location.hash = implode("|", hash);
        return true;
    }

    if(location.hash) {

        this.hash = location.hash;
        var args = this.hash.substring(1, this.hash.length).split("|");
        if(args.length) {

            for(var i = 0; i < args.length; i++) {

                var item = args[i].split(":");
                if(item.length > 1) {
                    this.data[item[0]] = item[1];
                }
                else {
                    var uri = parseUri("/?" + args[i]);
                    this.data['d'] = uri.queryKey;
                }

            }

            if(this.data['url'] && this.data['plugin']) {
                return lpage({
                    href: "/?" + this.data['url'],
                    plugin: this.data['plugin']
                });
            }

        }

    }

    return true;

}
