"use strict";

var callable = require("./valid-callable")
  , forEach  = require("./for-each")
  , call     = Function.prototype.call;

module.exports = function (obj, cb/*, thisArg*/) {
	var result = {}, thisArg = arguments[2];
	callable(cb);
	forEach(
		obj,
		function (value, key, targetObj, index) {
			result[call.call(cb, thisArg, key, value, this, index)] = value;
		},
		obj
	);
	return result;
};
