Array.prototype.clone = function(){
	var len = this.length ;
	var ret = new Array(len);
	for(var i=0; i<len; i++){
		ret[i] = this[i];
	}
	
	return ret;
}

Array.prototype.removeAll = function(){
	var len = this.length ;
	for(var i=0; i<len; i++){
		this.pop();
	}
}

Array.prototype.removeAt = function(index){
	if(index < 0 || index >= this.length) {
		return null;
	}
	
	return this.splice(index, 1)[0];
}

Array.prototype.insertAt = function(obj, index){
	if(index < 0 || index >= this.length) {
		return;
	}
	
	this.splice(index, 0, obj);
}

Array.prototype.contains = function(obj){
	return this.indexOf(obj) != -1;
}

Array.prototype.indexOf = function(obj){
	if(obj == null){
		return -1;
	}
	
	var len = this.length;
	for(var i=0; i<len; i++){
		if(obj.equals){
			if(obj.equals(this[i])){
				return i;
			}
		}
		else if(this[i] == obj){
			return i;
		}
	}

	return -1;
}

Map.prototype.get = function(key){
	return this.InnerMap[key];
}

function Map(){
	this.Keys = new Array();
	this.InnerMap = new Object();
}

Map.prototype.get = function(key){
	return this.InnerMap[key];
}

Map.prototype.put = function(key, value){
	if(key == null){
		throw "Map.put key cannot be null.";
	}
	if(this.Keys.indexOf(key) == -1)
		this.Keys.push(key);
	this.InnerMap[key] = value;
}

Map.prototype.length = function(){
	return this.Keys.length;
}

Map.prototype.item = function(i){
	return this.InnerMap[this.Keys[i]];
}

String.prototype.replaceBy = function() {
	var arg_search, arg_replace, position; 
	var endText, preText, newText; 
	arg_search = arguments[0];
	arg_replace = arguments[1];
	
	if(arg_search.length==1) 
		return this.split(arg_search).join(arg_replace);
		
	position = this.indexOf(arg_search); 
	if(position == -1)
		return this; 
		
	endText = this; 
	do{ 
		position = endText.indexOf(arg_search); 
		preText = endText.substring(0, position) 
		endText = endText.substring(position + arg_search.length) 
		newText += preText + arg_replace; 
	} while(endText.indexOf(arg_search) != -1);
	newText += endText; 
	
	return newText; 
} 

function utils_setCookie(nom, valeur){
	var argv = utils_setCookie.arguments;
	var argc = utils_setCookie.arguments.length;
	
	var expires = (argc > 2) ? argv[2] : null;
	var path = (argc > 3) ? argv[3] : null;
	var domain = (argc > 4) ? argv[4] : null;
	var secure = (argc > 5) ? argv[5] : false;
	
	if(expires != null){
		expires = new Date();
		var delay = expires.getTime() + argv[2];
		expires.setTime(delay);
	}
	
	document.cookie = nom + "=" + escape(valeur) +
	((expires==null) ? "" : ("; expires="+expires.toGMTString())) +
	((path==null) ? "" : ("; path="+path)) +
	((domain==null) ? "" : ("; domain="+domain)) +
	((secure==true) ? "; secure" : "");
}

function utils_getCookieVal(offset){
	var endstr = document.cookie.indexOf(";", offset);
	if(endstr == -1){
		endstr = document.cookie.length;
	}
	return unescape(document.cookie.substring(offset, endstr));
}

function utils_getCookie(nom){
	var arg = nom + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while(i < clen){
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg) return utils_getCookieVal(j);
		i = document.cookie.indexOf(" ",i) + 1;
		if (i == 0) break;
	}
	return null;
}

function utils_getCookieNames(){
	var cookies = document.cookie.split(" ");
	var cookieNames = new Array();
	for(var i=0; i<cookies.length; i++){
		cookieNames.push(cookies[i].split("=")[0]);
	}

	return cookieNames;
}

function utils_getQueryParameters(){
	var tmp = window.location.search.split("&");
	var queryParameters = new Map();

	for(var i=0; i<tmp.length; i++){
		var tmp2 = tmp[i].split("=");
		var key = (i == 0) ? tmp2[0].substring(1) : tmp2[0];
		queryParameters.put(key, tmp2[1]);
	}
	
	return queryParameters;
}

function utils_loadJS(url){
	var e = document.createElement("script");
	e.src = url;
	e.type="text/javascript";
	document.getElementsByTagName("body").item(0).appendChild(e); 
}

function utils_popup(page,nom,largeur,hauteur, scroll, resize) {
	var top=(screen.height-hauteur)/2;
	var left=(screen.width-largeur)/2;
	utils_popupXY(page,nom,left, top, largeur,hauteur, scroll, resize);
	window.open(page,nom,"top=" + top + ",left=" + left + ",width=" + largeur + ",height=" + hauteur + ",toolbar=no,location=no,directories=no,status=no,scrollbars=" + ((scroll) ? "yes" : "no") + ",resizable=" + ((resize) ? "yes" : "no"));
}

function utils_popupXY(page,nom,absc, ordo, largeur,hauteur, scroll, resize) {
	window.open(page,nom,"top=" + ordo + ",left=" + absc + ",width=" + largeur + ",height=" + hauteur + ",toolbar=no,location=no,directories=no,status=no,scrollbars=" + ((scroll) ? "yes" : "no") + ",resizable=" + ((resize) ? "yes" : "no"));
}

function $(_id){
	return document.getElementById(_id);
}

function utils_writeSWF(_id, _str){
	var flashDiv = $(_id);
	flashDiv.innerHTML = _str;
}