﻿// bag object
function bag()
{
    this.key = new Array();
    this.val = new Array();
    this.len = 0;
}

// string str must be in the form "{key1:value1;key2:value2; ...keyn:valuen;}" with no spaces in key and value has each char as hex pair
bag.prototype.load = function(str) {
    // parse str into key and val arrays
    var s = str; // making sure there is no global "s"
    var j = 1; // index for string, position 0 should be a "{"
    var k = 0; // index for the arrays
    if (s == "new") { return; }
    //alert("Entered bag.load");
    while (true) {
        this.key[k] = "";
        this.val[k] = "";

        while (true) {
            if (s.charAt(j) == ":") { j++; break; }
            this.key[k] += s.charAt(j);
            j++;
        }
        while (true) {
            if (s.charAt(j) == ";") { j++; break; }
            this.val[k] += s.charAt(j);
            j++;
        }
        k++;
        if (s.charAt(j) == "}") { break; }
    }
    this.len = k;
    this.dehex();
}
bag.prototype.dehex = function()
{
	// dehex the val array;
	var k = 0;
	for (k = 0;k < this.len;k++)
	{
	    this.val[k] = this.unhex(this.val[k]);
	}
}
bag.prototype.put = function(keyin,valin)
{
    var j = 0;
    for (j = 0;j < this.len;j++){if(keyin == this.key[j]){this.val[j] = valin;return;}}
    this.key[this.len] = keyin;
    this.val[this.len] = valin;
    this.len ++;
}
bag.prototype.unhex = function(str)
{
    var hex = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
	var outstr = "";
    var hexint = 0;
    var j,i = 0;
    var ch = "";
    var s = str.toLowerCase();
    for(i=0;i<s.length;i++) // assumes the value is an even length ie, hex pairs
    {
        ch =s.substr(i,1)
        for (j=0;j<16;j++){if (ch == hex[j]){hexint  = j * 16;break;}}
        ch = s.substr(i+1,1)
        for (j=0;j<16;j++){if (ch == hex[j]){hexint += j;break;}}
        outstr += String.fromCharCode(hexint);
        i++;	        
    }
	return outstr;
}
bag.prototype.enhex = function(str)
{
    var hex = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
    var ret = "";
    var code = 0;
    var j = 0;
    for (j = 0;j < str.length;j++)
    {
        code = str.charCodeAt(j);
        ret += hex[parseInt(code/16)];
        ret += hex[code%16]; 
    }
    return ret;
}
bag.prototype.makeOut = function(hexsw)
{
    // hex is true for hex encoding of values is the output stri
    var ret = "{";
    var j = 0;
    if (hexsw == "true"){for (j = 0; j < this.len;j++){ret += this.key[j] + ":" + this.enhex(this.val[j]) + ";";}}
    else      {for (j = 0; j < this.len;j++){ret += this.key[j] + ":" + this.val[j] + ";";}}
    ret += "}";
    return ret;
}
bag.prototype.stringOut = function()
{
    var ret = "{";
    var j = 0;
    for (j = 0; j < this.len;j++){ret += this.key[j] + ":" + this.val[j] + ";";}
    ret = ret + "}";
    return ret;
}
bag.prototype.view = function()
{
    var jL = 0;
    var LL = this.key.length;
    var sL = "<table border=\"1\" cellspacing=\"0\" cellpadding=\"5px\">";
    for (jL = 0; jL < LL; jL++){sL += "<tr><td>" + this.key[jL] + "</td><td>" + this.val[jL] + "</td></tr>";}
    sL += "</table>";
    openMsgBox(sL);
}
bag.prototype.get = function(k)
{
    var j = 0;
    for(j=0;j<this.len;j++){if(this.key[j] == k){return this.val[j];}}
    return "";
}

