/**/
function object_copy(src) {
	var dst = {};
	for (var i in src) {
		dst[i] = src[i];
	}
	return dst;
}

function array_copy(src) {
	var dst = [];
	for (var i in src) {
		dst[i] = src[i];
	}
	return dst;
}

function array_search(needle, haystack) {

	for (var i in haystack) {
		if (haystack[i] == needle) {
			return i;
		}
	}
	return -1;
}

function array_humanlyJoin(parts) {
	conjunctionAnd = conjunctionAnd || "and";

	switch (parts.length) {
		case 0: return;
		case 1:	return parts[0];
		default:

			var str = parts[0];

			for (var i=1; i < parts.length-1; i++) {
				str += ", " + parts[i];
			}

			str += " " + conjunctionAnd + " " + parts[parts.length-1];
			
			return str;
	}

}

/* Class Augmentation *
// Still kind of experimental

Object.prototype.copy = function() {
	var dst = {};
	for (var i in this) {
		dst[i] = this[i];
	}
	return dst;
}

Array.prototype.copy = function() {
	var dst = [];
	for (var i in this) {
		dst[i] = this[i];
	}
	return dst;
}

Array.prototype.search = function(needle) {

	for (var i in this) {
		if (this[i] == needle) {
			return i;
		}
	}
	return -1;
}

Array.prototype.humanlyJoin = function(conjunctionAnd) {

	conjunctionAnd = conjunctionAnd || "and";

	switch (this.length) {
		case 0: return;
		case 1:	return this[0];
		default:

			var str = this[0];

			for (var i=1; i < this.length-1; i++) {
				str += ", " + this[i];
			}

			str += " " + conjunctionAnd + " " + this[this.length-1];
			
			return str;
	}
}

Array.prototype.getRandomItem = function(){

	var idx = Math.round(idx = Math.random() * (this.length - 1));
	return this[idx];
}
/**/