var Evo = 
{
	Version: '0.0.1',
	prototypeVersion: parseFloat(Prototype.Version.split(".")[0] + "." + Prototype.Version.split(".")[1])
}

if(typeof Prototype=='undefined')
	throw("Evo Application requires the Prototype JavaScript framework");

Evo.ArrayExtensions = new Array();

if (Object.prototype.extend) {
	Evo.ArrayExtensions[ Evo.ArrayExtensions.length ] = Object.prototype.extend;
}
else{
	Object.prototype.extend = 
	function(object) 
	{
		return Object.extend.apply(this, [this, object]);
	}
	
	Evo.ArrayExtensions[ Evo.ArrayExtensions.length ] = Object.prototype.extend;
}

if (Array.prototype.push) {
	Evo.ArrayExtensions[ Evo.ArrayExtensions.length ] = Array.prototype.push;
}

if (!Array.prototype.remove) {
	Array.prototype.remove = function(dx) {
	if( isNaN(dx) || dx > this.length )
		return false;
	
	for( var i=0,n=0; i<this.length; i++ )
		if( i != dx )
		this[n++]=this[i];
		this.length-=1;
	};
	
	Evo.ArrayExtensions[ Evo.ArrayExtensions.length ] = Array.prototype.remove;
};

if (!Array.prototype.removeItem) {
	Array.prototype.removeItem = function(item) {
	for ( var i = 0 ; i < this.length ; i++ )
		if ( this[i] == item ) {
			this.remove(i);
			break;
		}
	};

	Evo.ArrayExtensions[ Evo.ArrayExtensions.length ] = Array.prototype.removeItem;
}

if (!Array.prototype.indices) {

	Array.prototype.indices = function() {
	var indexArray = new Array();
	
	for ( index in this ) {
		var ignoreThis = false;
		for ( var i = 0 ; i < Evo.ArrayExtensions.length ; i++ ) {
			if ( this[index] == Evo.ArrayExtensions[i] ) {
				ignoreThis = true;
				break;
			}
		}
		
		if ( !ignoreThis )
			indexArray[ indexArray.length ] = index;
		}
		return indexArray;
	}
	Evo.ArrayExtensions[ Evo.ArrayExtensions.length ] = Array.prototype.indices;
}