/* 
-------------------------------------------------------------------------------
	Functions for manipulating URLs and query strings
	
	Author: Nikolai Rangelov
----------------------------------------------------------------------------- */


/**
 * Creates the URL with given parameters.
 *
 * @param path The full URL path.
 * @param paramName The name of the parameter.
 * @param paramValue The string-value of the parameter.
 * @return The URL with appended parameter.
 */
function addURLParameter(url, paramName, paramValue)
{
	if (urlHasParameter(url))
		url += "&";
	else
		url += "?";
	url += paramName;
	url += "=";
	url += paramValue;
	return url;
}


function urlHasParameter(url)
{
	var strUrl = new String(url);
	if (url.indexOf('?') != -1)
		return true;
	else 
		return false;
}


/*
	Removes a parameter with its value from a query string
*/
function removeURLStringParameter(queryString, param)
{
	var tmp, key;
	var startPos, endPos;

	tmp   = new String("");
	key   = new String("");

	if (queryString) tmp = queryString;
	if (param) key = param;

  startPos = tmp.indexOf(param, 0);
  if (startPos > 0)
  {
		endPos = tmp.indexOf("&", startPos);
		if (endPos == -1)
			tmp = tmp.substring(0, startPos)
		else
			tmp = tmp.substring(0, startPos) + tmp.substring(endPos + 1);
	}

	if (tmp.charAt(tmp.length - 1) == '?' || tmp.charAt(tmp.length - 1) == '&')
		tmp = tmp.substring(0, tmp.length - 1);

	return tmp;
}


/*
	Add or re[lace a parameter with its value in a query string
*/
function addReplaceURLStringParameter(queryString, param, paramValue)
{
	var tmp, key, value;
	var startPos, endPos;

	tmp   = new String("");
	key   = new String("");

	if (queryString) tmp = queryString;
	if (param) key = param;
	value = paramValue;

	if (key.length > 0)
	{
		startPos = tmp.indexOf(key, 0);
		if (startPos > -1)
		{
			startPos = tmp.indexOf("=", startPos);
			endPos   = tmp.indexOf("&", startPos);
			if (endPos == -1)
				tmp = tmp.substring(0, startPos + 1) + value;
			else
				tmp = tmp.substring(0, startPos + 1) + value + tmp.substring(endPos);
		}
		else
		{
	    if (tmp.length > 0)
				tmp = tmp + "&";
			else
				tmp = "?";
			tmp = tmp + key + "=" + value;
		}
	}

	return tmp;
}


/*
	Extract the base url up to the sign '?' from a url
*/
function extractBaseURL(url)
{
	return url.split("?")[0];
}


/*
	Extracts a query string from a url. The part after the sign '?'.
*/
function extractQueryString(url)
{
	var qs = new String(url.split("?")[1]);
	if (qs.length > 0) qs = "?" + qs;
	return qs;
}

