function isArray(object)
{
	return (object instanceof Array);
}

/**
 * Compare le tableau avec un autre tableau
 *
 * tableau.compare(tableau2); // Renvoi "true" si tableau1 = tableau2.
 **/
Array.prototype.compare = function (arr)
{
	var j = this.length;
	if (!isArray(arr) || j != arr.length)
		return false;
	for (var i = 0; (i < j) && (this[i] == arr[i]); i++);
	return (i == j);
}

/**
 * Filtre un tableau à partir d'une fonction si elle est définie, efface les membres vides, valant false ou 0 sinon.
 *
 * tableau.filter(function(v){return (v != 4)}, true); // Efface récursivement tous les membres valant 4.
 **/
Array.prototype.filter = function (callBack, recursive)
{
	var cur, arr = [];
	if (typeof callBack != "function")
		callBack = function(value){return Boolean(value);}
	for (i = 0, j = this.length, k = 0; i < j; i++)
	{
		if (isArray(this[i]) && recursive)
		{
			cur = this[i].filter(callBack, true);
			if (cur.length)
				arr[k++] = cur;
		}
		else if (callBack(this[i]))
			arr[k++] = this[i];
	}
	return arr;
}

/**
 * Vérifie si le membre de valeur "val" est dans le tableau.
 *
 * tableau.inArray(4, true); // Renvoi "true" si "4" est dans le tableau ou dans un sous-tableau du tableau.
 **/
Array.prototype.inArray = function (val, recursive)
{
	for (var i = 0, j = this.length; i < j; i++)
	{
		if (isArray(this[i]) && recursive && this[i].inArray(val))
				return true;
		if (this[i] == val)
			return true;
	}
	return false;
}


/**
 * Modifie la fonction toString des tableaux.
 *
 * tableau.toString([1, 2, 3, "4"]); // Renvoi Array(4) {1, 2, 3, "4"}.
 **/
Array.prototype.toString = function ()
{
	var str = [];
	for (var i = 0, j = this.length, k = 0; i < j; i++)
	{
		if (typeof this[i] == "string")
			str[k++] = '"' + this[i] + '"';
		else
			str[k++] = String(this[i]);
		
	}
	return "Array(" + j + ") {" + str.join(", ") + "}";
}