deep copy for objects and arrays
function copy(object) {
var output, value, key;
output = Array.isArray(object) ? [] : {};
for (key in object) {
value = object[key];
output[key] = (typeof value === 'object') ? copy(value) : value;
}
return output;
}