function Trim(s)
{
	s = s.replace(/^\s+|\s+$/g, '');

	var chars = String.fromCharCode(0x0085, 0x00A0, 0x2028, 0x2029, 0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000);
	for (var i = 0; i < chars.length; i++)
	{
		var iChar = chars.charCodeAt(i);
		var sChar = "";
		if (iChar < 0x100)
		{
			sChar += "00";
		}
		else if (iChar < 0x1000)
		{
			sChar += "0";
		}

		sChar += iChar.toString(16);

		s = s.replace(new RegExp("^\\u" + sChar + "+|\\u" + sChar + "+$", "g"), '');
	}

	return s;
}

function TrimSpaces(s)
{
	if (s != null)
	{

		s = Trim(s);



		return s.replace(/\s+/g,' ');
	}

	return null;
}

function ConvertUserTypeToLike(searchValue)
{
	var s = "";
	var sChar = "";
	var iLength = searchValue.length;

	for (var i = 0; i < iLength; i++)
	{
		sChar = searchValue.charAt(i);
		switch (sChar)
		{
		case "%":	s += "[%]";	break;
		case "_":	s += "[_]";	break;
		case "[":	s += "[[]";	break;
		case "*":	s += "%";	break;
		default:	s += sChar;	break;
		}
	}

	return s;
}

function GetNodeValue(input, searchName, bNoDecode)
{
	if (!input || !searchName)
	{
		return "";
	}

	var rootStart = input.indexOf('<' + searchName + '>');

	if (rootStart == -1)
	{

		rootStart = input.indexOf('<' + searchName + ' ');

		if (rootStart == -1)
		{
			return "";
		}
	}

	var startIndex	= input.indexOf(">", rootStart) + 1;
	var endIndex = input.indexOf("</" + searchName + '>', startIndex);


	if (endIndex == -1)
	{
		return "";
	}
	else
	{
		return bNoDecode ? input.substring(startIndex, endIndex) :
		XmlDecode(input.substring(startIndex, endIndex));
	}
}













function SetQueryString(url, name, val)
{
	var newString = (IsNull(val) || val.toString()=="") ? "" : (name + "=" + encodeURIComponent(val));
	var hasNewString = (newString!="");
	var hashMarkExpression = /\#/;
	var hashMarkIndex = url.search(hashMarkExpression);
	if(hashMarkIndex != -1)
	{
		url = url.substring(0, hashMarkIndex);
	}
	var questionMarkExpression = /\?/;
	var questionMarkIndex = url.search(questionMarkExpression);

	if (questionMarkIndex == -1)
	{
		if(hasNewString)
		{
			return url + "?" + newString;
		}
		else
		{
			return url;
		}
	}

	var qs = url.substring(questionMarkIndex+1, url.length);
	var regEx = new RegExp("(^|&)" + name +"=[^&]*", "ig");

	var isExistingName = (qs.search(regEx) != -1);

	if(!isExistingName && hasNewString)
	{
		return url + "&" + newString;
	}


	var path = url.substring(0, questionMarkIndex);
	qs = qs.replace(regEx, "");

	if (qs.length > 0 && hasNewString)
	{
		qs += "&";
	}
	qs += newString;

	if (qs.length > 0)
	{
		if (qs.charAt(0) == '&')
		{
			qs = qs.substring(1, qs.length);
		}
		qs = "?" + qs;
	}

	return path + qs;
}



function GetCachedSetting(settingName, defaultValue)
{
	if (window.top.oSettingsCache != null)
	{
		var stateValue = window.top.oSettingsCache[settingName];
		if (stateValue != null)
		{
			return stateValue;
		}
	}
	return defaultValue;
}

function SetCachedSetting(settingName, stateValue)
{
	if (window.top.oSettingsCache == null)
	{
		window.top.oSettingsCache = new Object();
	}
	window.top.oSettingsCache[settingName] = stateValue;
}



function ScrollVerticalList (oContainer, oSelected, iSelectedIndex, iNumItems, bAlignToTop)
{


	if ((oContainer.scrollTop > iSelectedIndex / iNumItems * oContainer.scrollHeight)
		|| (oContainer.scrollTop + oContainer.clientHeight < (iSelectedIndex + 1) / iNumItems * oContainer.scrollHeight))
	{
		oSelected.scrollIntoView (bAlignToTop)
	}
}