﻿// JScript File
UPSHashTable = function (){
	this.hashtable = new Array();
	this.keytable = new Array();
}

UPSHashTable.prototype = {
	clear:function()
	{
		this.hashtable = new Array();
	    this.keytable = new Array();
	},
	
	containsKey:function(key)
	{
		var exists = false;
        for (var i = 0; i < this.keytable.length; i++)
        {
		    //did we found our key?
		    if (key == this.keytable[i])
		    {
				exists = true;
				break;
			}
		}
		return exists;
	},
	
	get:function(key)
	{
		return this.hashtable[key];
	},
	
	isEmpty:function()
	{
		return (this.keytable.length == 0) ? true : false;
	},	
	
	remove:function(key)
	{
		var rtn = this.hashtable[key];
		for (var i = 0; i < this.keytable.length; i++)
		{//We need to find our key so that we remove it.
		    if (key == this.keytable[i])
		    {//remove it from the hash
			    this.hashtable[this.keytable[i]] = null;
			    //and throw away the key...
			    this.keytable.splice(i ,1);
			    break;
		    }
	    }
		return rtn;
	},
	
	size:function()
	{
		return this.keytable.length;
	},
	
	keys:function()
	{
		var keyArray = new Array();
		for (var i = 0; i < this.keytable.length; i++)
		{
		    keyArray.push(this.keytable[i]);
		}
		return keyArray;
	},
	
	values:function()
	{
		var vals = new Array();
		for (var i = 0; i < this.keytable.length; i++)
		{
			if(this.hashtable[this.keytable[i]] != null)
			{
				vals.push(this.hashtable[this.keytable[i]]);
			}
		}
		return vals;
	},

	put:function(key, value)
	{
		if (key == null || value == null) 
		{
			throw "NullPointerException {" + key+ "},{" + value + "}";
		}
		else
		{
			if (this.hashtable[key] == null)
			{// A new Key Value is being added into the system.
        		this.keytable[this.keytable.length] = key;
            }
			this.hashtable[key] = value;
		}
	},
	
	
    /**
     * toString
     * Returns a string representation of this Hashtable object in the form of a set of entries,
     * enclosed in braces and separated by the ASCII characters ", " (comma and space).
     * Each entry is rendered as the key, an equals sign =, and the associated element,
     * where the toString method is used to convert the key and element to strings.
     * Return: a string representation of this hashtable.
     */
    toString:function ()
    {
	    try 
	    {
		    var s = new Array(this.keytable.length);
		    s[s.length] = "{";

		    for (var i = 0; i < this.keytable.length; i++)
		    {
			    s[s.length] = this.keytable[i];
			    s[s.length] = "=";
			    var v = this.hashtable[this.keytable[i]];
			    if (v)
				    s[s.length] = v.toString();
			    else
				    s[s.length] = "null";

			    if (i != this.keytable.length-1)
				    s[s.length] = ", ";
		    }
	    } 
	    catch(e) 
	    {
		    //do nothing here
	    }
	    finally
	    {
		    s[s.length] = "}";
	    }
	    return s.join("");
    }

};
