//======================
//=
//=
//=     Classe Url
//=
//=
//======================
function cUrl()
{
	// properties
	this.url         = "";
	this.script      = "";
	this.querystring = "";
	this.params      = new Array();
	
	// methods
	this.populate         = URL_populate;
	this.getParam         = URL_getParam;
	this.setParam         = URL_setParam;
	this.getWithParams    = URL_getWithParams;
	this.reloadWithParams = URL_reloadWithParams
}

function MakeParams( psName, psValue )
{
	this.name  = psName;
	this.value = (psValue) ? psValue : "";
}

function URL_populate()
{
	var arParams;
    
  this.url = document.location.href;
	this.script = this.url.split("?")[0];
  this.querystring = (this.url.split("?")[1]) ? this.url.split("?")[1] : "";
  
  if ( this.querystring != "" )
  {  
	  // chaine de requete
	  // -> création du tableau de paramètres
	  arParams = this.querystring.split("&");
    for (var i=0; i<arParams.length; i++)
    {
      arParams[i] = new MakeParams( arParams[i].split("=")[0], arParams[i].split("=")[1] );
    }
   	this.params = arParams;
  }
}

//
// getParam
// -> return the value associate to the param name
function URL_getParam( psName )
{
	for (var i=0; i<this.params.length; i++)
  {
    if ( this.params[i].name.toLowerCase() == psName.toLowerCase() )
    	return this.params[i].value;
  }
  return "";
}

//
// setParam
// -> edit the value associate to the param name
// -> BEWARE when multiple params with the same name !!!
function URL_setParam( psName, psValue )
{
	// boucle sur arParams
	for (var i=0; i<this.params.length; i++)
	{
	  if ( this.params[i][0].toLowerCase() == psName.toLowerCase() )
	  {
	    this.params[i].value = psValue;
	    return;
	  }
	}
}

//
// reloadWithParams
// -> reload page with modified params
function URL_reloadWithParams( params )
{
	document.location = getUrlWithParams( params );
}

//
// getUrlWithParams
// -> return url with modified params
function URL_getWithParams( params )
{
	return changeUrlWithParams( this.url, params );
}

// Fonctions	    
function reloadWithParams( params )
{
	document.location = getUrlWithParams( params );
}

function getUrlWithParams( params )
{
	var adresse = document.location.href;
	return changeUrlWithParams( adresse, params ) ;
}

function changeUrlWithParams( psUrl, params )
{
	var newAdresse, newParamName, newParamValue;
  var arParams, arNewParams;
  var bParamFound;
  var i, j;
  
  var vsUrl = psUrl.split("?")[0];
  var querystring = psUrl.split("?")[1];
  var addToQuerystring = ""
  
  if ( !querystring || querystring=="" && params!="" )
  {  
	  // pas de chaine de requete
	  querystring = params;
  }
  
  else
  {	
	  // il y a une chaine de requete 
		// création du tableau des anciens couples de paramètres
    arParams = querystring.split("&");
    for (i=0; i<arParams.length; i++) {
      arParams[i] = arParams[i].split("=");
    }
    // création du tableau des nouveaux couples de paramètres
    arNewParams = params.split("&");
    for (i=0; i<arNewParams.length; i++) {
      arNewParams[i] = arNewParams[i].split("=");
    }
  
    // boucle sur arNewParams
    for (i=0; i<arNewParams.length; i++) {
		
	    newParamName = arNewParams[i][0];
	    newParamValue = (arNewParams[i][1]) ? arNewParams[i][1] : "";
	  	
      // boucle sur arParams
	    bParamFound = false;
	    for (j=0; j<arParams.length; j++) {
	      if (arParams[j][0].toLowerCase() == newParamName.toLowerCase()) {
	        // trouvé donc on replace
	        arParams[j][1] = newParamValue;
		     bParamFound = true
	      }
	    }
	    if (!bParamFound && newParamValue != "") {
	      // non trouvé et la valeur est non vide
	      // donc on ajoute à une chaine que l'on concatène à la fin
	      addToQuerystring += "&"+newParamName+"="+newParamValue;
	  }
	}
    
    // ecriture de la chaine de requete avec les valeurs modifiées
    for (i=0; i<arParams.length; i++) {
      arParams[i] = arParams[i].join("=");
    }
    querystring = arParams.join("&");
    
    // ajout des parametres non trouvés
    querystring += addToQuerystring;  
  }
  
  newAdresse = (querystring == "") ? vsUrl : vsUrl + "?" + querystring;
  
  return newAdresse;
}
