/*****************************************************************************
 *
 *  Define the Bag Object and Functions
 *
 *****************************************************************************/
function Bag()
{
	this.bagOfTiles = new Array();

	this.init();
}

Bag.prototype.getTileCount = function()
{
	return this.bagOfTiles.length;
}

Bag.prototype.hasMoreTiles = function()
{
	return this.bagOfTiles.length > 0;
}

Bag.prototype.init = function()
{
	var tiles = new Array();

	// verify - 3 or each tile and 5 doubles of each color
	var symbols = Symbol.getAsArray();
	var floaters = Symbol.getAsArray();
	for (var i=0; i<symbols.length; i++)
	{
		var symbol = symbols[i];
		for (var j=0; j<3; j++)
		{
			for (var k=0; k<floaters.length; k++)
			{
				var floater = floaters[k];
				if (floater.getType() != symbol.getType())
				{
					tiles.push(new Tile(symbol, floater));
				}
			}
		}

		for (var j=0; j<5; j++)
		{
			tiles.push(new Tile(symbol, symbol));
		}
	}

	this.bagOfTiles = this.randomize(tiles);
}

Bag.prototype.draw = function()
{
	if (this.hasMoreTiles())
	{
		return this.bagOfTiles.splice(0,1)[0];
	}
	else
	{
		return null;
	}
}

Bag.prototype.swap = function(tiles, cnt)
{
	var newTiles = new Array();

	while ((cnt > 0) && this.hasMoreTiles())
	{
		newTiles.push(this.draw());
		cnt--;
	}

	for (var i=0; i<tiles.length; i++)
	{
		this.bagOfTiles.push(tiles[i]);
	}
	this.bagOfTiles = this.randomize(this.bagOfTiles);

	return newTiles;
}

Bag.prototype.randomize = function(tiles)
{
    var bagOfTiles = new Array();

    while (tiles.length > 0)
    {
        var rand = Math.floor(Math.random()*15791) % tiles.length;
        if (tiles.length == 1)
        {
            rand = 0;
        }
        bagOfTiles.push((tiles.splice(rand, 1))[0]);
    }

    return bagOfTiles;
}

