var unique = require('./unique');
var filter = require('./filter');
var every = require('./every');
var contains = require('./contains');


    /**
     * Return a new Array with elements common to all Arrays.
     * - based on underscore.js implementation
     */
    function intersection(arr) {
	var arrs = Array.prototype.slice.call(arguments, 1),
	    result = filter(unique(arr), function(needle){
		return every(arrs, function(haystack){
		    return contains(haystack, needle);
		});
	    });
	return result;
    }

    module.exports = intersection;
