
// Query class
function SearchQuery(uri)
{
	this.args = [];
	
	this.initSQ(uri);
}

SearchQuery.prototype.initSQ = function(uri)
{
	var cArgs = uri.split('&');
	var len = cArgs.length;
	for (var i = 0; i < len; i++)
	{
		var aParam = cArgs[i].split('=');
		if (aParam.length != 2)
			continue;
		var values = [];
		if (aParam[1].length != 0)
			values = aParam[1].split(',');
		while (values != null && values.length > 0 && values[0] == '')
			values.shift();
		this.AddValue(aParam[0], values);
	}
}

SearchQuery.prototype.Clear = function()
{
	this.args = [];
}

SearchQuery.prototype.AddValue = function(name, value)
{
	var par = this.GetParameter(name);
	var values;

	if (value != null && value.constructor.toString().indexOf("Array") != -1)
		values = value;
	else
		values = [value];
	if (par == null)
	{
		par = {name:name, values:values};
		this.args.push(par);
		return par;
	}
	else
	{
		for (var j = 0; j < values.length; j++)
		{
			for (var i = 0; i < par.values.length; i++)
			{
				if (par.values[i] == values[j])
					break;
			}
			if (i == par.values.length)
				par.values.push(values[j]);
		}
	}
}

SearchQuery.prototype.SetParameter = function(name, value)
{
	var par = this.GetParameter(name);
	var values;

	if (value != null && value.constructor == Array.prototype.constructor)
		values = value;
	else
		values = [value];
	if (par == null)
	{
		par = {name:name, values:values};
		this.args.push(par);
		return par;
	}
	else
	{
		par.values = values;
	}
}

SearchQuery.prototype.RmParameter = function(name, value)
{
	var len = this.args.length;
	var nArgs = [];
	if (name == null)
		return;
	for (var i = 0; i < len; i++)
	{
		if (this.args[i].name != null &&
			this.args[i].name.toLowerCase() != name.toLowerCase())
		{
			nArgs.push(this.args[i]);
		}
	}
	this.args = nArgs;
}

SearchQuery.prototype.GetParameters = function()
{
	return this.args;
}

SearchQuery.prototype.GetParameter = function(name)
{
	var len = this.args.length;
	for (var i = 0; i < len; i++)
	{
		if (this.args[i].name.toLowerCase() == name.toLowerCase())
		{
			return this.args[i];
		}
	}
	return null;
}

SearchQuery.prototype.GetValues = function(name)
{
	var par = this.GetParameter(name);
	if (par != null)
		return par.values;
	return null;
}

SearchQuery.prototype.GetFirstValueOrDefault = function(name)
{
	var par = this.GetParameter(name);
	if (par != null && par.values.length > 0 && par.values[0] != '')
		return par.values[0];
	return null;
}

SearchQuery.prototype.toString = function()
{
	var strBuilder = [];
	var len = this.args.length;
	for (var i = 0; i < len; i++)
	{
		// patch for nbchambre, nbpieces : 4+. Should cleary be put elsewhere
		strBuilder.push([this.args[i].name, this.args[i].values.join(',').replace('+', '%2b')].join('='));
	}
	return strBuilder.join('&');
}


var searchQuery = null;

function initQuery()
{
	var curUri = document.location.search;
	if (curUri == "")
	{
		if($j("#query_urlrewriting")){
			curUri = $j("#query_urlrewriting").val();
		}
	}
	if(curUri){
		searchQuery = new SearchQuery(curUri.split('?')[1]);
	}
}

initQuery();
