
	var err=new Object();
	err.number=0;
	err.description="";
	
	function raise_error(n, d)
	{
		err.number=n;
		err.description=d;
	}
	
	function clear_error()
	{
		err.number=0;
		err.description="";
	}

	// *********
	// EXISTS IN
	// *********
	function exists_in(val, val_list)
	{
		var i;
		var exists=false;
		for(i=0; i<=val_list.length;i++)
		{
			if(val_list[i]==val)
			{
				exists=true;
				break;
			}
		}
		return(exists);
	}

	// *********************************************************
	// inStr(pos, str, substr)
	// ---------------------------------------------------------
	// returns the first occurence of the string (substr) in the 
	// string (str), starting from position (pos), or "0" if 
	// no occurence(s) found.
	// *********************************************************
	function InStr(pos, str, substr)
	{
		var i;
		var L, l;
		var exists;
		L=len(str);
		l=len(substr);
		if((pos<1) || (pos>L))
		{
			return(-1);
		}
		exists=false;

		for(i=0;i<=L-l;i++)
		{
			if(substr==mid(str, i+pos, l))
			{
				exists=true;
				break;
			}
		}
		if (!exists)
		{
			return(0);
		}
		else
		{
			return(i+pos);
		}
	}
	
	
	// ******************************************************
	// ArrayToString([array], [separator character], [Skip empty values(true/false)])
	// ------------------------------------------------------
	// This funciton converts an array into a list of values
	// separated by the given character.
	// ******************************************************
	function ArrayToString(arr, sep, skip)
	{
		var i;
		var list='';
		for (i=0;i<arr.length;i++)
		{
			if ((skip) && arr[i]=='')
			{
				// skip this value.
			}
			else
			{
				list=list + sep + arr[i];
			}
		}
		return(right(list, len(list)-1));
	}
	


	// *****************************************************************
	// StringToArray([String], [separator character], [skip empty values])
	// -----------------------------------------------------------------
	// This function converts a string into an array.
	// *****************************************************************
	function StringToArray(str, sep, skip)
	{
		var arr = new Array();
		if(len(str)==0)
		{
			return(arr);
		}
		var i, p;
		/*
		//debugger;
		p=InStr(1, str, sep);
		arr[0]=left(str, p-1);
		str=right(str, len(str)-p);
		*/
			p=InStr(1, str, sep);
			for(i=0;p>0;i++)
			{
				if((skip) && left(str, p-1)=='')
				{
					// skip this value
				}
				else
				{
					arr[i]=left(str, p-1);
					str=right(str, len(str)-p);
					p=InStr(1, str, sep);
				}
			}
			arr[i]=str;
		
		return(arr);
	}
	


	// ********************
	// left(string, length)
	// ********************
	function left(str, len)
	{
		return(str.substring(0, len));
	}




	// ********************
	// right(string, length)
	// ********************
	function right(str, len)
	{
		return(str.substring(str.length-len, str.length));
	}



	// ***************************************
	// replace(str, expression, by_expression)
	// ***************************************
	function replace(str, exp1, exp2)
	{
		str=str.replace(exp1, exp2);
		return(str);
	}



	// ********************
	// mid(string, start, length)
	// ********************
	function mid(str, start, len)
	{
		if(start<1)
		{
			start=1;
		}
		if(start+len>str.length)
		{
			len=str.length-start+1;
		}
		return(str.substring(start-1, start+len-1));
	}




	// ********************
	// len(string)
	// ********************
	function len(str)
	{
		return(str.length);
	}

	
	function SQLEncode(str)
	{
		str=str.replace(/'/g, "\'\'");
		//str=str.replace(/"/g, "\"\"");
		return(str);
	}
	

	function javascriptEncode(str)
	{
		str=str.toString();
		str=str.replace(/'/g, "\\" + "\'");
		return(str);
	}

	
		// ************
	// HANDLE ERROR
	// ************
	function handle_error(e, text)
	{
		if (e.number!=0)
		{
			alert(text + '\nError:' + err.number + '\n' + err.description);
			return(false);
		}
		else
		{
			return(true);
		}
	}


	// this function is meant to be used by the .sort property.
	// it will make string comparison not case sensitive.
	function caselessCompare(str1, str2)
	{
		// the method .tpLowerCase is used instead of the .toUpperCase to have
		// characters such as "_" listed at the top.
		
		var s1, s2;
		s1=str1.toLowerCase();
		s2=str2.toLowerCase();
		
		if(s1<s2)
		{
			return(-1);
		}
		if(s1>s2)
		{
			return(1);
		}
		return(0);
	}



	function trim_string()
	{
     var ichar, icount;
     var strValue = this;
     ichar = strValue.length - 1;
     icount = -1;
     while (strValue.charAt(ichar)==' ' && ichar > icount)
         --ichar;
     if (ichar!=(strValue.length-1))
         strValue = strValue.slice(0,ichar+1);
     ichar = 0;
     icount = strValue.length - 1;
     while (strValue.charAt(ichar)==' ' && ichar < icount)
         ++ichar;
     if (ichar!=0)
         strValue = strValue.slice(ichar,strValue.length);
     return strValue;
	}

String.prototype.Trim = trim_string;
	
