/*
	Copyright (c) 2004-2006, The Dojo Foundation
	All Rights Reserved.

	Licensed under the Academic Free License version 2.1 or above OR the
	modified BSD license. For more information on Dojo licensing, see:

		http://dojotoolkit.org/community/licensing.shtml
*/

dojo.provide("dojo.string.Builder");
dojo.require("dojo.string");
dojo.require("dojo.lang.common");
dojo.string.Builder = function (str) {
	this.arrConcat = (dojo.render.html.capable && dojo.render.html["ie"]);
	var a = [];
	var b = "";
	var length = this.length = b.length;
	if (this.arrConcat) {
		if (b.length > 0) {
			a.push(b);
		}
		b = "";
	}
	this.toString = this.valueOf = function () {
		return (this.arrConcat) ? a.join("") : b;
	};
	this.append = function () {
		for (var x = 0; x < arguments.length; x++) {
			var s = arguments[x];
			if (dojo.lang.isArrayLike(s)) {
				this.append.apply(this, s);
			} else {
				if (this.arrConcat) {
					a.push(s);
				} else {
					b += s;
				}
				length += s.length;
				this.length = length;
			}
		}
		return this;
	};
	this.clear = function () {
		a = [];
		b = "";
		length = this.length = 0;
		return this;
	};
	this.remove = function (f, l) {
		var s = "";
		if (this.arrConcat) {
			b = a.join("");
		}
		a = [];
		if (f > 0) {
			s = b.substring(0, (f - 1));
		}
		b = s + b.substring(f + l);
		length = this.length = b.length;
		if (this.arrConcat) {
			a.push(b);
			b = "";
		}
		return this;
	};
	this.replace = function (o, n) {
		if (this.arrConcat) {
			b = a.join("");
		}
		a = [];
		b = b.replace(o, n);
		length = this.length = b.length;
		if (this.arrConcat) {
			a.push(b);
			b = "";
		}
		return this;
	};
	this.insert = function (idx, s) {
		if (this.arrConcat) {
			b = a.join("");
		}
		a = [];
		if (idx == 0) {
			b = s + b;
		} else {
			var t = b.split("");
			t.splice(idx, 0, s);
			b = t.join("");
		}
		length = this.length = b.length;
		if (this.arrConcat) {
			a.push(b);
			b = "";
		}
		return this;
	};
	this.append.apply(this, arguments);
};

