function leftTrim(str)
{
	var whitespace = new String(" \t\n\r");

	var s = new String(str);

	if (whitespace.indexOf(s.charAt(0)) != -1)
	{
		// We have a string with leading blank(s)...
		
		var j=0, i = s.length;

		// Iterate from the far left of string until we don't have any more whitespace...
		while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
			j++;

		// Get the substring from the first non-whitespace
		// character to the end of the string...
		s = s.substring(j, i);
	}
	
	return s;
}
//---------------------------------------------------------------------------------------------------
function rightTrim(str)
{
	var whitespace = new String(" \t\n\r");

    var s = new String(str);

    if (whitespace.indexOf(s.charAt(s.length-1)) != -1)
	{
		// We have a string with trailing blank(s)...

		var i = s.length - 1;

		// Iterate from the far right of string until we don't have any more whitespace...
		while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
			i--;

		// Get the substring from the front of the string to
		// where the last non-whitespace character is...
		s = s.substring(0, i+1);
	}

	return s
}
//---------------------------------------------------------------------------------------------------
function trim(str)
{
	return rightTrim(leftTrim(str));
}
//---------------------------------------------------------------------------------------------------
function quoteSafe(s)
{
	re = new RegExp("\"", "gi");
	s = s.replace(re, "&quot;");
	return s;
}
//---------------------------------------------------------------------------------------------------
function compact(s)
{
	// Remove all spaces from string.
	re = new RegExp(" ", "gi");
	s = s.replace(re, "");
	return s;
}
//---------------------------------------------------------------------------------------------------
function caseCompact(s)
{
	// Convert to all lower case, then compact
	s = s.toLowerCase();
	s = compact(s);
	return s;
}
//---------------------------------------------------------------------------------------------------