﻿var Text = {

};

Text.StringBuilder = function(baseString)
{
    this.strings = [];
    this.length = 0;
    
    if(baseString)
    {
        this.length += baseString.length;
        this.strings.push(baseString);
    }
}

Text.StringBuilder.prototype.Append = function(str)
{
    if(str != null)
    {
        this.length += str.length;
        this.strings.push(str);
    }
    return this;
}

Text.StringBuilder.prototype.toString = function() 
{
    return this.strings.join("");
}

Text.StringBuilder.prototype.Clear = function ()
{
    this.length = 0;
    this.strings.length = 0;    
}

Text.StringBuilder.prototype.AppendFormat = function(format, params_)
{
    this.Append(Text._Format(arguments));
    return this;
}

Text.Format = function(format, params_)
{
    return Text._Format(arguments);
}

Text._Format = function(params_)
{
    var sb = new Text.StringBuilder();
    
    var start = 0;
    var pOpen = 0, pClose = 0, ind = -1;
    var format = params_[0];
    
    while(start < format.length && pOpen >= 0)
    {
        pOpen = format.indexOf("{", start);
        
        if(pOpen == -1)
            sb.Append(format.substring(start));
        else {
            sb.Append(format.substring(start, pOpen));
            
            pClose = format.indexOf("}", pOpen);
            
            ind = parseInt(format.substring(pOpen + 1, pClose));
            
            sb.Append(params_[ind + 1]);
            
            start = pClose + 1;
        }
    }
    
    return sb.toString();
}

function ltrim(xstr) {
    if(xstr && xstr != null) {
    var str = xstr;
    while (str.substring(0,1) == ' ')
        str = str.substring(1, str.length);

    return str;
    } else return xstr;
    
}

function rtrim(xstr) 
{
    if(xstr && xstr != null) {
    var str = xstr;
    while (str.substring(str.length-1, str.length) == ' ')
        str = str.substring(0,str.length-1);
    return str;
    } else return xstr;
}

function trim(xstr) {
    return ltrim(rtrim(xstr));
}
