function _dce(element) {
    return document.createElement(element);
}

function _gel(element) {
    return document.getElementById(element);
}

function bind(fn, self, var_args) {
    var boundArgs = fn.boundArgs_;

    if (arguments.length > 2) {
        var args = Array.prototype.slice.call(arguments, 2);
        if (boundArgs) {
            args.unshift.apply(args, boundArgs);
        }
        boundArgs = args;
    }

    self = fn.boundSelf_ || self;
    fn = fn.boundFn_ || fn;

    var newfn;
    var context = self || window;

    if (boundArgs) {
        newfn = function() {
            var args = Array.prototype.slice.call(arguments);
            args.unshift.apply(args, boundArgs);
            return fn.apply(context, args);
        }
    } else {
        newfn = function() {
            return fn.apply(context, arguments);
        }
    }

    newfn.boundArgs_ = boundArgs;
    newfn.boundSelf_ = self;
    newfn.boundFn_ = fn;

    return newfn;
};

function throttle(fn, timeout) {
    window.clearTimeout(throttle.timeout_);
    return function() {
        throttle.timeout_ = window.setTimeout(fn, timeout);
    }
};