// Binary: cache/js-dbg-32-30b481fd82f5-linux
// Flags: -j
//
var Native = function(k) {
    var f = k.initialize;
    var d = f;
    var j = function(n, l, o, m) {
        n.prototype[l] = o;
    };
    d.alias = function(n, l, o) {
        n = this.prototype[n]
        return j(this, l, n, o);
    };
    d.implement = function(m, l, o) {
        for (var n in m) {
            j(this, n, m[n], l);
        }
    }
    return d;
};
(function() {
    var a = {
        Array: Array,
        Function: Function,
    };
    for (var h in a) {
        new Native({
            initialize: a[h],
        });
    }
} ());
Array.alias("forEach", "each");
function $merge() {
    var a = Array.slice(arguments);
    a.unshift({});
    return $mixin.apply(null, a);
}
function $mixin(e) {
    for (var d = 1, a = arguments.length; d < a; d++) {
        var b = arguments[d];
        for (var c in b) {
            var g = b[c],
            f = e[c];
            e[c] = f && $type(g) == "object" && $type(f) == "object" ? $mixin(f, g) : $unlink(g);
        }
    }
}
function $type(a) {
    if (a == undefined) {
        return false;
    }
    if (a.$family) {
    }
    return typeof a;
}
function $unlink(c) {
    if ($type(c) == "object") {
        b = {};
    }
    return b;
}
var Window = new Native({
    initialize: function(a) {},
});
Array.implement({
    extend: function(c) {
        return this;
    }
});
Function.implement({
    extend: function(a) {
        for (var b in a) {
            this[b] = a[b];
        }
        return this;
    },
    run: function(a, b) {
        return this.apply(b, a);
    }
});
function Class(b) {
    var a = function() {
        Object.reset(this);
        var c = this.initialize ? this.initialize.apply(this, arguments) : this;
    }.extend(this);
    a.implement(b);
    return a;
}
Object.reset = function(a, c) {
    if (c == null) {
        for (var e in a) {
            Object.reset(a, e);
        }
    }
    switch ($type(a[c])) {
    case "object":
        var d = function() {};
        d.prototype = a[c];
        var b = new d;
        a[c] = Object.reset(b);
    }
    return a;
};
(new Native({initialize: Class})).extend({});
    function wrap(a, b, c) {
        return function() {
            var d = c.apply(this, arguments);
        }.extend({});
    }
Class.implement({
    implement: function(a, d) {
        if ($type(a) == "object") {
            for (var e in a) {
                this.implement(e, a[e]);
            }
        }
        var f = Class.Mutators[a];
        if (f) {
            d = f.call(this, d);
        }
        var c = this.prototype;
        switch ($type(d)) {
        case "function":
            c[a] = wrap(this, a, d);
            break;
        case "object":
            var b = c[a];
            if ($type(b) == "object") {
                $mixin(b, d);
            } else {
                c[a] = $unlink(d);
            }
        }
    }
});
Class.Mutators = {
    Extends: function(a) {
        this.prototype = new a;
    },
    Implements: function(a) {
        a.each(function(b) {
            b = new b;
            this.implement(b);
        },
        this);
    }
};
var Events = new Class({});
var Options = new Class({
    setOptions: function() {
        this.options = $merge.run([this.options].extend(arguments));
    }
});
var Autocompleter = {};
Autocompleter.Base = new Class({
    Implements: [Options, Events],
    options: {},
});
Autocompleter.Ajax = {};
Autocompleter.Ajax.Base = new Class({
    Extends: Autocompleter.Base,
    options: {
        postVar: "value",
        onRequest: function(){},
    }
});
Autocompleter.Ajax.Json = new Class({
    Extends: Autocompleter.Ajax.Base,
});
Autocompleter.JsonP = new Class({
    Extends: Autocompleter.Ajax.Json,
    options: {
        minLength: 1
    },
    initialize: function(el, url, options) {
        this.setOptions({});
    }
});
new Autocompleter.JsonP();
