	function UrlUtility_SetQueryStringValue(queryString, name, value)
    {
		name = encodeURIComponent(name);
		value = encodeURIComponent(value);
		var newQueryString;
		var re = new RegExp(name + "=[^&]*", "g");
		if(queryString.search(re) > 0) //name exists, set the value
		{
			newQueryString = queryString.replace(re, name + '=' + value);
		}
		else
		{
			//name does not exist. Append the value.
			sDelimiter = queryString.indexOf('?') >= 0 ? '&' : '?';
			newQueryString = queryString + sDelimiter + name + '=' + value;
		}
		return newQueryString;
	}

	function UrlUtility_AppendQueryString(url, queryString)
	{
		if(queryString != null && queryString.length > 0)
		{
			//if the url has a "?"
			url += (url.indexOf("?") > -1 ? "&" : "?");
			//trim the leading "?" off of the querystirng
			url += (queryString.indexOf("?") == 0 ? queryString.substr(1) : queryString);
		}
		return url;
	}
	function UrlUtility_GetQueryStringValue(queryString, name)
	{
		// remove leading '?'
		if(queryString.charAt(0)=='?') { queryString=queryString.substring(1); }
		
		name = encodeURIComponent(name).toLowerCase();
		
		var nameValuePairs = queryString.split(/&/);
		var nameValuePair;		
		for (var i=0; i<nameValuePairs.length; i++) 
		{
			nameValuePair = nameValuePairs[i].split(/=/);
			if(nameValuePair[0].toLowerCase() == name)
			{
				return nameValuePair[1];
			}
		}
		return '';
	}


	function UrlUtility_GetCurrentPath()
	{
		var url = window.location.pathname;
		var pos = url.lastIndexOf('/');
		if(pos > -1)
		{
			url = url.substring(0, pos);
		}
		return window.document.location.protocol + '//' + window.document.location.host + url;
	}
	
	
	function UrlUtility_GetFullyQualifiedVirtualDirectory()
	{
		var url = window.location.pathname;
		var pos = url.indexOf('/', 1);
		if(pos > -1)
		{
			url = url.substring(0, pos);
		}
		return window.document.location.protocol + '//' + window.document.location.host + url;
	}

