aString_replaceRecursive=function(find, replaceWith){
	var output = this.value;
	var i = output.indexOf(find);
	while (i != -1){
		output = output.replace(find, replaceWith)
		i = output.indexOf(find);
	}//while
	return new aString(output);
}//function


aString_right=function(length){
//GET THE RIGHTMOST PORTION OF A STRING
//NEGATIVE MEANS ALL BUT length CHARACTERS
	if (!this.value) return new aString("");
	if (length<0){
		length=-length;
		if (length>this.value.length) return new aString("");
		return new aString(this.value.substring(length, this.value.length));
	}//endif
	if (length>this.value.length) length=this.value.length;
	return new aString(this.value.substring(this.value.length-length, this.value.length));
}//mathod

aString_left=function(length){
//GET THE RIGHTMOST PORTION OF A STRING
//NEGATIVE MEANS ALL BUT length CHARACTERS
	if (!this.value) return new aString("");
	if (length<0){
		length=-length;
		if (length>this.value.length) return new aString("");
		return new aString(this.value.substring(0, this.value.length-length));
	}//endif
	if (length>this.value.length) length=this.value.length;
	return new aString(this.value.substring(0, length));
}//mathod


aString_allowed="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
aString_deformat=function(){
//GET THE RIGHTMOST PORTION OF A STRING
//NEGATIVE MEANS ALL BUT length CHARACTERS
	var output="";
	for(var i=0;i<this.value.length;i++){
		var c=this.value.charAt(i);
		if (aString_allowed.indexOf(c)>=0){
			output=output+c;
		}//endif
	}//for
	return new aString(output);
}//method


aString_numbers="0123456789,."
aString_isNumber=function(){
	for(var i=0;i<this.value.length;i++){
		var c=this.value.charAt(i);
		if (aString_numbers.indexOf(c)==-1) return false;
	}//for
	return true;
}//method



aString_mid=function(start, length){
	return new aString(this.value.substr(start, length));
}//method


aString_getAllWord=function(seperator){
	var arr=new Array();
	arr=this.value.split(seperator);
	for(var i=0;i<arr.length;i++){
		arr[i]=new aString(arr[i]);
	}//for
	return arr;
}//method


aString_hasPrefix=function(prefix){
	if (this.value.length<prefix.length) return false;
	temp=this.value.substring(0, prefix.value.length);
	if (temp==prefix.value) return true;
	return false;
}//method


aString_ltrim=function(v){
	if (v==null){
		for(var i=0;i<this.value.length;i++){
			if (this.value.charCodeAt(i)>32){
				return new aString(this.value.substring(i, this.value.length));
			}//endif
		}//for
	}else{
		for(var i=0;i<this.value.length;i++){
			if (this.value.charAt(i)!=v){
				return new aString(this.value.substring(i, this.value.length));
			}//endif
		}//for
	}//endif
	return new aString("");
}//method


aString_rtrim=function(v){
	if (v==null){
		for(var i=this.value.length-1;i>=0;i--){
			if (this.value.charCodeAt(i)>32){
				return new aString(this.value.substring(0, i+1));
			}//endif
		}//for
	}else{
		for(var i=this.value.length-1;i>=0;i--){
			if (this.value.charAt(i)!=v){
				return new aString(this.value.substring(0, i+1));
			}//endif
		}//for
	}//endif
	return new aString("");
}//method


aString_trim=function(v){
	return this.ltrim(v).rtrim(v);
}//method


/**
 * EXTRACT SUBSTRING BETWEEN prefix AND suffix IN source
 * ONLY ONE ALLOWED
 */
aString_between=function(prefix, suffix){
	var output = this.value;
	start=output.indexOf(prefix.value, 0);
	if (start==-1) D.error("Can not find prefix");

	end=output.indexOf(suffix.value, start+prefix.value.length);
	if (end==-1) D.error("Can not find suffix");

	//FIND LAST INSTANCE OF prefix/suffix pair
	for(;;){
		potentialStart=output.indexOf(prefix.value, start+prefix.value.length);
		if (potentialStart==-1) break;

		//int potentialEnd=find(suffix, potentialStart+prefix.length());
		//if (potentialEnd==-1) break;
		if (potentialStart+prefix.value.length>end) break;

		start=potentialStart;
		//end=potentialEnd;
	}//for
	return new aString(output.substring(start+prefix.value.length, end));
}






function aString(value){
	this.value=value;

	this.replaceRecursive=aString_replaceRecursive;
	this.right=aString_right;
	this.left=aString_left;
	this.mid=aString_mid;
	this.deformat=aString_deformat;
	this.isNumber=aString_isNumber;
	this.getAllWord=aString_getAllWord;
	this.hasPrefix=aString_hasPrefix;
	this.ltrim=aString_ltrim;
	this.rtrim=aString_rtrim;
	this.trim=aString_trim;
	this.between=aString_between;
}//constructor




