function array_intersect() {
var sorted, shortest, ret = [], add, found, obj={}, nOthers;
sorted = Array.prototype.slice.call(arguments).sort(function(i,j){return i.length>j.length;});
nOthers = sorted.length-1;
shortest = sorted[0];
for (var i=nOthers; i>0; --i) {
for (var j=sorted[i].length-1; j>=0; --j) {
obj[sorted[i][j]] = (obj[sorted[i][j]]||0)+1;
}
}
for (var k=shortest.length-1; k>=0; k--) {
if (obj[shortest[k]]===nOthers) {ret.push(shortest[k]);}
}
return ret;
}