var whitespace = " \t\n\r";

function rtrim(s)
	{
	var spaceAt = -1;
	var i;
	
	if (s.length == 0)
		return "";

	for (i = s.length -1; i >= 0; i--)
		{
		if (s.charAt(i) != " ")
			break;
		else
			spaceAt = i;
		}
	
	if (spaceAt == 0)
		return "";
	
	if (i == 0)
		return s.charAt(0);
		
	if (i - 1 > 0)
		return s.substring(0, i + 1);
	else if (i -1 < 0)
		return "";
	else
		return s;
	}
	

function ltrim(s)
	{
	var spaceAt = -1;
	var i;
	
	if (s.length == 0)
		return "";

	for (i = 0; i < s.length; i++)
		{
		if (s.charAt(i) != " ")
			break;
		else
			spaceAt = i;
		}
		
	if (i == 0)
		return s;
		
	if (i > 0)
		{
		return s.substr(i, s.length - i);
		}
	}
	

function trim(s)
	{
	return ltrim(rtrim(s));
	}
	

function right(value, requestLength)
	{
	var len;
		
	len = value.length - requestLength;
		
	return value.substr(len);
	}
	 
		    
function replace(source, originalvalue, newvalue)
	{
	var target;

	switch(originalvalue)
		{
		case "'":
			target = localreplace(source, "'", "!squote!");
			return localreplace(target, "!squote!", "''");
				
		case '"':
			target = localreplace(source, '"', "!dquote!");
			return localreplace(target, "!dquote!", '""');
			
		default:
			return localreplace(source, originalvalue, newvalue);
		}
	}


function format(value, mask)
	{
	var lVTrailing;
	var lMTrailing;
	var lVLeading;
	var lMLeading;
	var lPos;
			
	var formatted;
	
	switch(mask)
		{
		case "yyyy/mm/dd":
			formatted = value.substr(6, 4) + "/" + value.substr(0, 2) + "/" + value.substr(3, 2);
			break;
			
		case "mm/dd/yyyy":
			formatted = value.substr(0, 2) + "/" + value.substr(3, 2) + "/" + value.substr(6, 4);
			break;
			
		case "mm/dd/yy":
			formatted = value.substr(0, 2) + "/" + value.substr(3, 2) + "/" + value.substr(8, 2);
			break;
			
		case "dd-mmm-yyyy":
		case "dd-mmm-yy":
			var year;
			var mon;
			var i;
			
			i = value.substr(0, 2);
			i = stripZeros(i);
			i = parseInt(i);
			
			mon = datemonths[i];
			mon = mon.substr(0, 3);
			mon = mon.toUpperCase();
			
			if ( mask == "dd-mmm-yyyy" )
				year = value.substr(6, 4);
			else
				year = value.substr(8, 2);
			
			formatted = value.substr(3, 2) + "-" + mon + "-" + year;
			break;
			
		default:
			value = value.toString();
			
			formatted = value;
							
			if ( (mask.indexOf("#") >= 0) || (mask.indexOf("0") >= 0) )
				{
				lPos = mask.indexOf(".");

				if ( lPos > 0 )
					{
					lMLeading  = mask.substr(0, lPos - 1).length + 1;
					lMTrailing = mask.substr(lPos + 1).length;
							
					lPos = value.indexOf(".");
					
					if ( lPos > 0 )
						{
						lVLeading  = value.substr(0, lPos - 1).length + 1;
						lVTrailing = value.substr(lPos + 1).length;
					
						if ( lVTrailing > lMTrailing )
							formatted = value.substr(0, (lPos + + 1+ lMTrailing));
						}
					else
						{
						lVLeading  = value.length;
						lVTrailing = 0;
										
						formatted += ".";
						}

					for(var lbyte = lVTrailing; lbyte < lMTrailing; lbyte++)
						formatted = formatted + "0";
					
					for(var lbyte = lVLeading; lbyte < lMLeading; lbyte++)
						formatted = "0" + formatted;
					}
				else 
					{
					lMLeading = mask.length - value.length;
							
					for(var lbyte = 0; lbyte < lMLeading; lbyte++)
						formatted = "0" + formatted;
					}

				//	alert("lVLeading=" + lVLeading + " lVTrailing=" + lVTrailing + "XX\rlMLeading=" + lMLeading + " lMTrailing=" + lMTrailing + "XX\r")
				}
			break;
		}

	return formatted;
	}
		
		
function proper(rawString)
	{
	var formatted;
		
	formatted = trim(rawString);
		
	if ( formatted.length > 0 )
		{
		formatted = formatted.toLowerCase();

		// change SMITH to Smith, start at each word separated by single space
		formatted = formatted.charAt(0).toUpperCase() + formatted.substring(1);
		}
			
	return(formatted);
	}
	
	
function stripZeros(inputStr)
	{
	// javascript sees numbers with leading zeros as octal values, so strip zeros
	
	var result = inputStr;
	
	while (result.substring(0,1) == "0")
		{
		result = result.substring(1, result.length);
		}
	
	return result;
	}
	

function isEmpty(s)
	{ 
	return ((s == null) || (s.length == 0)) 
	}


function isWhitespace(s)
	{
    var i;

    // check if s is empty
    if (isEmpty(s)) return true;

    // search through string's characters one by one until non-whitespace character found
    // seturn false if found, true if not found

    for (i = 0; i < s.length; i++)
		{
        // Check that current character isn't whitespace.
        var c = s.charAt(i);

        if (whitespace.indexOf(c) == -1) return false;
		}

	// all characters are whitespace.
	
	return true;
	}
	
	
function localreplace(source, originalvalue, newvalue)
	{
	if (source.indexOf(originalvalue) == -1)
		{
		return source;
		}
	else
		{
		var pos   = 0;
		var temp2 = "";
		var temp  = source;
	
		while (temp.indexOf(originalvalue) != -1)
			{
			pos    = temp.indexOf(originalvalue);
	   
			temp2 += temp.substring(0, (pos + originalvalue.length));
			temp2  = temp2.replace(originalvalue, newvalue); 
	   
			temp = temp.substring(pos + originalvalue.length);
			}  

		return temp2 + temp;
		}
	}

