// <![CDATA[

// Quelques extensions pour les tableau Javascript
// Brian Dréau 2007-2008

// dumpLikeJS
// Return the array in JS style text (eg: ['hello',['world','you']])
Array.prototype.dumpLikeJS=function() {
	var s = new Array;
	for ( var i = 0; i < this.length; i++ ) {
		if ( typeof(this[i]) == "object" ) {
			s[i] = this[i].dumpLikeJS();
		} else {
			s[i] = this[i];
			// s[i] = '\'' + this[i] + '\'';
		}
	}
	s = '[' + s.join(',') + ']';
	return s;
}


// dumpLikePHP
// Return the array as the PHP print_r() function
Array.prototype.dumpLikePHP=function(level) {
	if ( !level ) { var level = 0; };
	var s = new Array;
	for ( var i = 0; i < this.length; i++ ) {
		if ( typeof(this[i]) == "object" ) {
			s[i] = '\n' + GetTab(level) + '[' + i + '] => Array\n' + GetTab(level + 1) + '(' + this[i].dumpLikePHP(level + 2) + '\n' + GetTab(level + 1) + ')\n';
		} else {
			s[i] = '\n' + GetTab(level) + '[' + i + '] => ' + this[i];
		}
	}
	s = s.join('');
	if ( level == 0 ) {
		s = 'Array\n(\n' + s + '\n)';
	}
	return s;
}

// For dumpLikePHP
function GetTab(n,k)
{
	if ( !k ) {
		var k = '    ';
	}
	var t = '';
	for ( var x = 0; x <= n; x++ ) {
		t += k;
	}
	return t;
}

// Insert
Array.prototype.insert=function(value,index) {
	var a1 = this.slice(0,index);
	var a2 = this.slice(index,this.length);
	a1.push(value);
	return a1.concat(a2);
}

// Remove
Array.prototype.remove=function(index) {
	var a1 = this.slice(0,index);
	var a2 = this.slice(index + 1,this.length);
	return a1.concat(a2);
}

// Find key
Array.prototype.findKey=function(val) {
	for (var i = 0; i < this.length; i++) {
		if ( this[i] == val ) {
			return i;
		}
	}
	return false;
}

// findHole
// Find the first available (e.g. : the smallest) value
// in an array of numbers
// if [0,1,2,4] then it will return 3
Array.prototype.findHole=function() {
	if (this.length == 0) {
		return 0;
	}
	var numSortedArray = this.concat().sort(SortNum);
	if ( numSortedArray[0] > 0 ) {
		return 0;
	}
	for (var i = 0; i < numSortedArray.length; i++) {
		if ( (numSortedArray[i] + 1) < numSortedArray[i + 1] ) {
			return (numSortedArray[i] + 1);
		}
	}
	return (numSortedArray[numSortedArray.length - 1] + 1);
}

// Get the biggest value in an array of numbers
Array.prototype.maxNum=function() {
	if ( this.length == 0 ) {
		return -1;
	}
	var a1 = this.concat().sort(SortNum);
	return a1[a1.length - 1];
}

// Get the smallest value in an array of numbers
Array.prototype.minNum=function() {
	if ( this.length == 0 ) {
		return -1;
	}
	var a1 = this.concat().sort(SortNum);
	return a1[0];
}

// SortNum() for maxNum() and minNum()
function SortNum(a,b)
{
	return a - b;
}

// ]]>
