docs: function deepCopy(input, maxDepth, depth) {
  	if (maxDepth === undefined) {
  		maxDepth = 5;
  	}
  	if (depth === undefined) {
  		depth = 0;
  	}
  
  	if (depth > maxDepth) {
  		return null;
  	}
  
  	// Handle the 3 simple types, and null or undefined
  	if (input === null || input === undefined || typeof input !== "object") {
  		return input;
  	}
  
  	// Date
  	if (input instanceof Date) {
  		var dateCopy = new Date();
  		dateCopy.setTime(input.getTime());
  		return dateCopy;
  	}
  
  	// Array
  	if (input instanceof Array) {
  		var arrayCopy = [];
  		for (var i = 0, len = input.length; i < len; i++) {
  			arrayCopy[i] = this.deepCopy(input[i], maxDepth, depth + 1);
  		}
  		return arrayCopy;
  	}
  	// Object
  	if (input instanceof Object) {
  		var newObj = {};
  		for (var prop in input) {
  			if (input.hasOwnProperty(prop)) newObj[prop] = this.deepCopy(input[prop]);
  		}
  		return newObj;
  	}
  }