	function trim_js( strSrc )
	{
		// this function returns a string which has been left and right trimmed.
		var tmpStr = new String();

		tmpStr = ltrim_js( strSrc );
		tmpStr = rtrim_js( tmpStr );
		return tmpStr;
	}

	function strreverse_js( strSrc )
	{
		var intI = new Number();
		var strTmp = new String();

		intI = strSrc.length - 1;
		strTmp = "";
		while ( intI >= 0 )
		{
			strTmp += strSrc.charAt( intI );
			intI--;
		}
		return strTmp;
	}
	
	function ltrim_js( strSrc )
	{
		var tStr = new String();
		var i = new Number();
		var blnFoundChar = new Boolean();

		i = 0;
		tStr = '';
		blnFoundChar = false;

		while ( i < strSrc.length )
		{
			if ( blnFoundChar == false )
			{
				if ( strSrc.charAt( i ) != ' ' )
				{
					tStr += strSrc.charAt( i );
					blnFoundChar = true;
				}
			}
			else
			{
				tStr += strSrc.charAt( i );
			}
			i++;
		}
		return tStr;
	}		

	function rtrim_js( strSrc )
	{
		var tStr = new String();
		var i = new Number();
		var blnFoundChar = new Boolean();

		i = strSrc.length - 1;
		tStr = '';
		blnFoundChar = false;

		while ( i >= 0 )
		{
			if ( blnFoundChar == false )
			{
				if ( strSrc.charAt( i ) != ' ' )
				{
					tStr += strSrc.charAt( i );
					blnFoundChar = true;
				}
			}
			else
			{
				tStr += strSrc.charAt( i );
			}
			i--;
		}
		tStr = strreverse_js( tStr );
		return tStr;
	}			

function isBlank_js( objControl, strFailMsg )
{	
// this function accepts a reference to the html input field ( type=text ) and a message to display
// it trims the input value and if it returns an empty string, the function will return true.
		var blnRet = new Boolean();
		var objTmp = new Object();
		blnRet = false;
		if ( trim_js( objControl.value ) == '' )
		{
			if ( strFailMsg != '' )
			{
				objTmp = objControl.form;	// get a ref to the form object
				alert( strFailMsg );
				eval( "document." + objTmp.name + "." + objControl.name + ".focus()" );
			}
			blnRet = true;
		}
		return blnRet;
	}			

function RegExpValidate( Form, Element, SourceString, Pattern,FailMessage )
{
		var bRet=false;
		var re = new RegExp( Pattern, "ig" );
		var tStr = new String();
		var r = SourceString.match(re);

		if ( r==null )
			bRet=false;
		else
			bRet=true;

		if ( bRet==false )
		{
			alert(FailMessage);
			eval( "document." + Form + "." + Element + ".focus()" );
		}
		return bRet;
}

function isValidEmail( objElement, strFailMsg )
{
		var rePattern = new String();
		var blnSuccess = new Boolean();
		var blnRet = new Boolean;
		var objTmp = new Object();

		objTmp = objElement.form;

		rePattern = "^[a-z][a-z_0-9\\.]*@[a-z_0-9\\.]+\\.[a-z]{2,3}$";
		blnSuccess = RegExpValidate( objTmp.name, objElement.name, trim_js( objElement.value ), rePattern, strFailMsg );
		blnRet = blnSuccess;

		return blnRet;
}
		
function isValidEmail( objElement, strFailMsg )
{
		var rePattern = new String();
		var blnSuccess = new Boolean();
		var blnRet = new Boolean;
		var objTmp = new Object();

		objTmp = objElement.form;

		rePattern = "^[a-z][a-z_0-9\\.]*@[a-z_0-9\\.]+\\.[a-z]{2,3}$";
		blnSuccess = RegExpValidate( objTmp.name, objElement.name, trim_js( objElement.value ), rePattern, strFailMsg );
		blnRet = blnSuccess;

		return blnRet;
}

function isInt_js( objElement, strFailMsg )
	{
		var rePattern = new String();
		var blnSuccess = new Boolean();
		var blnRet = new Boolean;
		var objTmp = new Object();
		var strTmp = new String();
		objTmp = objElement.form;
		rePattern = "^([0-9]{1,})$"
		blnSuccess = RegExpValidate( objTmp.name, objElement.name, trim_js( objElement.value ), rePattern, strFailMsg );
		if ( blnSuccess == true )
		{
			strTmp = objElement.value;
			objElement.value = "";
			objElement.value = trim_js( strTmp );
		}

		blnRet = blnSuccess
		return blnRet;
	}
