
function ks_keyString(sKeyString)
{
    if ((sKeyString != undefined) && (sKeyString != null)) this.value = sKeyString;
    else this.value = "";
    this.attributes = ks_GetKeyStringArray(this.value);
    this.length = this.attributes.length;
}

ks_keyString.prototype.attributeExist = function(key)
{
    var attr;
    var attrExist = false;
    
    for (var i=0;i<this.attributes.length;i++)
    {
        attr = this.attributes[i];
        attrExist = (attr.key == key);
        if (attrExist) break;
    }
    return attrExist;
}

ks_keyString.prototype.getAttribute = function(key)
{
    var val = "";
    var attr;
    
    for (var i=0;i<this.attributes.length;i++)
    {
        attr = this.attributes[i];
        if (attr.key == key)
        {
            val = attr.value;
            break;
        }
    }
    if (val == "")
    {
        switch (key.toLowerCase())
        {
            case "id":
            case "userid":
                val = "0";
                break;
        }
    }
    return val;
}

ks_keyString.prototype.setAttribute = function(key, newValue, type)
{
    var attr;
    var keyFound;
    
    for (var i=0;i<this.attributes.length;i++)
    {
        attr = this.attributes[i];
        keyFound = (attr.key == key);
        if (keyFound)
        {
            attr.value = newValue;
            if (type) attr.type = type;
            break;
        }
    }
    if (!keyFound) this.attributes.push(new ks_keyStringAttribute(key, newValue, type));
}

ks_keyString.prototype.changeValue = function(sKeyString)
{
    if ((sKeyString != undefined) && (sKeyString != null)) this.value = sKeyString;
    else this.value = "";
    this.attributes = ks_GetKeyStringArray(this.value);
}

ks_keyString.prototype.toString = function()
{
    var attr;
    var retStr = "";
    
    for (var i=0;i<this.attributes.length;i++)
    {
        if (i > 0) retStr += "|^";
        attr = this.attributes[i];
        retStr += attr.key + "~$" + attr.value + "~$" + attr.type;
    }
    return retStr;
}

ks_keyString.prototype.removeAttribute = function(key)
{
    var attr;
    
    for (var i=0;i<this.attributes.length;i++)
    {
        attr = this.attributes[i];
        if (attr.key == key)
        {
            this.attributes.splice(i, 1);
            break;
        }
    }
}

ks_keyString.prototype.getGroup = function(key)
{
    var attr;
    var group = new Array();
    
    if (typeof(key) == "string") for (var i=0;i<this.attributes.length;i++)
    {
        attr = this.attributes[i];
        if (attr.key.indexOf(key) == 0) group.push(attr);
    }
    else if (typeof(key) == "number")
    {
        var index, spl;
        
        for (var i=0;i<this.attributes.length;i++)
        {
            attr = this.attributes[i];
            spl = attr.key.split('-');
            index = parseInt(spl[spl.length - 1]);
            if (isNaN(index))
            {
                spl = attr.key.split('_');
                index = parseInt(spl[spl.length - 1]);
            }
            if (!isNaN(index) && (key == index)) group.push(attr);
        }
    }
    return group;
}

function ks_GetKeyStringArray(sKeyString)
{
    var ks, ksAttrArr;
    var retArr = new Array(); 
    if ((sKeyString == undefined) || (sKeyString == null) || (sKeyString == "")) return retArr;
    var ksArr=sKeyString.split("|^");

    for (var i=0;i<ksArr.length;i++)
    {
        ksAttrArr = ksArr[i].split("~$");
        if (ksAttrArr.length == 3)
        {
            ks = new ks_keyStringAttribute(ksAttrArr[0], ksAttrArr[1]);
            ks.type = ksAttrArr[2];
            retArr.push(ks);
        }
    }
    return retArr;
}

function ks_keyStringAttribute(key, value, type)
{
    this.key = key;
    this.value = value;
    this.type = (type?type:"");
}

// Key String - End

