// $Id:$ 
// FILIP

// Functions -------------------------------------------------------------------

function generateId()
{
	var d = "" + Math.random();
	return d.substr(2);
	
}	

// Vector ----------------------------------------------------------------------
function Vector()
{
    this.elements = new Array();
}

Vector.prototype.size = function()
{
    return this.elements.length;
}

Vector.prototype.add = function(element)
{
    this.elements[this.elements.length] = element;
}

Vector.prototype.get = function(offset)
{
    if (offset>=this.size() || offset<0) 
    {
        alert("Invalid offset: " + offset);
        return(null);
    }
    return this.elements[offset];
}

// HashMap ---------------------------------------------------------------------
function HashMap()
{
    this.elements = new Array();
}

HashMap.prototype.size = function()
{
    return this.elements.length;
}

HashMap.prototype.put = function(key,value)
{
    var a = this._getItem(key);
    if (a)
    {
        a[1] = value;
    }
    else
    {
        a = new Array();
        a[0] = key;
        a[1] = value;
        this.elements[this.elements.length] = a;
    }
}

HashMap.prototype.remove = function(key)
{
    var aa = this.elements;
    for (i=0; i<aa.length; i++)
    {
        a = aa[i];
        if (a[0]==key)
        {
            if (i==0)
            {
                this.elements = this.elements.slice(1);
            }
            else
            {
                this.elements = (new Array()).concat(this.elements.slice(0,i),this.elements.slice(i+1,this.elements.length));
            }
        }
    }
}

HashMap.prototype.get = function(key)
{
    var a = this._getItem(key);
    if (!a) return null;
    return a[1];
}

HashMap.prototype._getItem = function(key)
{
    var aa = this.elements;
    for (i=0; i<aa.length; i++)
    {
        a = aa[i];
        if (a[0]==key) return aa[i];
    }
    return null;
}

HashMap.prototype.getOffset = function(key)
{
    var aa = this.elements;
    for (i=0; i<aa.length; i++)
    {
        a = aa[i];
        if (a[0]==key) return i;
    }
    return -1;
}

HashMap.prototype.getKey = function(offset)
{
    if (offset>=this.size() || offset<0) 
    {
        alert("Invalid offset: " + offset);
        return(null);
    }
    var a = this.elements[offset]; 
    return a[0];
}

HashMap.prototype.getValue = function(offset)
{
    if (offset>=this.size() || offset<0) 
    {
        alert("Invalid offset: " + offset);
        return(null);
    }
    var a = this.elements[offset]; 
    return a[1];
}

// StringTokenizer--------------------------------------------------------------
function StringTokenizer(s,tokens)
{
    this.s          = s;
    this.tokens     = tokens;
    this.elements   = new Array();

    var i=0,token='',ch;
    while (i<s.length)
    {
        ch = s.charAt(i);
        if (tokens.indexOf(ch)==-1)
        {
            token += ch;
        }
        else
        {   
            this.elements[this.elements.length] = token;
            token='';
        }
        i++;
    }

    if (token!='')
    {
        this.elements[this.elements.length] = token;
    }

}

StringTokenizer.prototype.size = function()
{
    return this.elements.length;
}

StringTokenizer.prototype.get = function(offset)
{
    if (offset>=this.size() || offset<0) 
    {
        alert("Invalid offset: " + offset);
        return(null);
    }
    return this.elements[offset];
}