function forall(array, fn, bBackwards) {
	if(bBackwards) {
		for(var i = array.length - 1; i >= 0; i--) {
			fn(array[i], i);
		}
	} else {
		var iLen = array.length;
		for(var i = 0; i < iLen; i++) {
			fn(array[i], i);
		}
	}
}

Array.backwards = true;

p = Array.prototype;

p.indexOf = function (find) {
	for(var i = this.length - 1; i >= 0; i--) {
		if(this[i] == find)
			return i;
	}
	
	return i;
}

p.has = function (find) {
	return this.indexOf(find) >= 0;
}

p.remove = function (find) {
	return this.splice(this.indexOf(find), 1);
}

p.getById = function (sId) {
	return this.getBy('id', sId);
}

p.getBy = function (sProperty, sValue) {
	for(var i = this.length - 1; i >= 0; i--) {
		if(this[i][sProperty] == sValue)
			return this[i];
	}
	
	return null;
}

p.join = function (sSeparator) {
	var sReturn = '';
	if(this.length > 0)
		sReturn = this[0];
	
	for(var i = 1; i < this.length; i++)
		sReturn += sSeparator + this[i];
	
	return sReturn;
}