//Créateur : Philippe FOGUENNE.
//Dernière modification le 09/01/2007.

/* Fonctions présentes dans ce fichier:
   qsExistsElement(strQuerystring, elementName)
   qsGetElementValue(strQuerystring, elementName)
   qsSetElementValue(strQuerystring, elementName, elementValue) */


// -------------------------------------------
// qsExistsElement(strQuerystring, elementName)
// -------------------------------------------
// Fonction : Détecte la présence ou non d'un élément dans le querystring.
// Entrée : strQuerystring = la valeur de la propriété document.location.search ou document.location.href d'une fenêtre.
//          elementName = nom de l'élément recherché dans le querystring.
// Sortie : true si l'élément est trouvé dans le querystring; false sinon.

function qsExistsElement(strQuerystring, elementName) {
	var reg = new RegExp('^.*[?&]{1}' + elementName + '[=]{1}[^&]*[&]?.*$', 'g');
	return reg.test(strQuerystring);
}

// ----------------------------------------------
// qsGetElementValue(strQuerystring, elementName)
// ----------------------------------------------
// Fonction : Retourne la valeur d'un élément du querystring.
// Entrée : strQuerystring = la valeur de la propriété document.location.search ou document.location.href d'une fenêtre.
//          elementName = nom de l'élement du querystring pour lequel il faut retourner la valeur.
// Sortie : la valeur de l'élément si celui-ci est trouvé dans le querystring; une chaîne vide sinon.

function qsGetElementValue(strQuerystring, elementName) {
	if (!qsExistsElement(strQuerystring, elementName)) {
		return '';
	} else {
		var reg = new RegExp('^.*[?&]{1}' + elementName + '[=]{1}([^&]*)[&]?.*$', 'g');
		return strQuerystring.replace(reg, '$1');
	}
}

// ------------------------------------------------------------
// qsSetElementValue(strQuerystring, elementName, elementValue)
// ------------------------------------------------------------
// Fonction : Modifie la valeur d'un élement du querystring.
// Entrée : strQuerystring = la valeur de la propriété document.location.search ou document.location.href d'une fenêtre.
//          elementName = nom de l'élement du querystring pour lequel il faut modifier la valeur.
// Sortie : Le querystring complet est retourné avec la nouvelle valeur de l'élément.
//          Si l'élément n'a pas été trouvé dans le querystring, alors l'élément est ajouté au querystring.

function qsSetElementValue(strQuerystring, elementName, elementValue) {
	var strNewQs = strQuerystring;

	if (qsExistsElement(strNewQs, elementName)) {
		var reg = new RegExp('^(.*[?&]{1}' + elementName + '[=]{1})[^&]*([&]?.*)$', 'g');
		strNewQs = strNewQs.replace(reg, '$1' + elementValue + '$2');
	} else {
		var strEndingAnchor = '';
		var regEndingAnchor = new RegExp('^([^#]+)(#.*)$', 'g'); //Recherche après une ancre dans le querystring.

		//Si une ancre se trouve dans le querystring, alors l'isoler dans une variable.
		if (regEndingAnchor.test(strNewQs)) {
			strEndingAnchor = strNewQs.replace(regEndingAnchor, '$2');
			strNewQs = strNewQs.replace(regEndingAnchor, '$1');
		}

		//Suppression d'un éventuel '&', '?', '/' ou '\' en fin de chaîne.
		var regRemoveEndingSeparator = new RegExp('^(.*[^?&\\\\/]{1})[?&\\\\/]*$', 'g');
		strNewQs = strNewQs.replace(regRemoveEndingSeparator, '$1');

		//Ajout du nouvel élément.
		if (strNewQs.indexOf('?', 0) != -1) {
			strNewQs += '&' + elementName + '=' + elementValue;
		} else {
			strNewQs += '?' + elementName + '=' + elementValue;
		}

		//Remettre l'ancre si il y en avait une.
		strNewQs += strEndingAnchor;
	}

	return strNewQs;
}
