
/* Décode toutes les séquences %## et les remplace par leur valeur.
Si "inRawMode" vaut "true" les "+" restent des "+",
sinon les "+" sont transformés en espaces (par défaut).
*/
function decodeQueryComponent(/* String */ component /* [ , Boolean inRawMode ]*/) {
	if (arguments[1])
		return unescape(String(component).replace(/\+/g, "%2B"));
	return unescape(String(component).replace(/\+/g, "%20"));
}

/*
Transforme une QUERY_STRING en tableau de pairs d'éléments triées.
Les clefs répétées sont conservées tel quel.
*/
function parseQueryString(/* [ String queryString [ , Boolean inRawMode ] ] */) {
	var inRawMode = false;
	if (arguments[1])
		inRawMode = true;
	var queryString = "";
	if (arguments[0])
		queryString = arguments[0];
	else if (window.location && window.location.search)
		queryString = window.location.search.substr(1);
	var result = new Array();
	var nbResult = 0;
	var qs2;
	var qs1 = String(queryString).split(";");
	for (var i = 0; i < qs1.length; i++) {
		qs2 = qs1[i].split("&");
		for (var j = 0; j < qs2.length; j++) {
			var pos = qs2[j].indexOf("=");
			if (pos < 0)
				pos = qs2[j].length;
			if (pos >= 0) {
				result[nbResult] = new Array();
				result[nbResult]["key"] = "";
				result[nbResult]["value"] = "";
				if (pos > 0)
					result[nbResult]["key"] = decodeQueryComponent(qs2[j].substr(0, pos), inRawMode);
				if (pos + 1 < qs2[j].length)
					result[nbResult]["value"] = decodeQueryComponent(qs2[j].substr(pos + 1), inRawMode);
				nbResult++;
			}
		}
	}
	return result;
}

