function SlotManager(maxSlotSize, form, handler)
{
	this.MAX_SLOT = maxSlotSize;
	this.form = form;
	this.handler = handler;

	var cookieManager = new CookieManager();
	cookieManager.loadCookie();

	var obj = this.form.slot;

	for (var i = 0; i < this.MAX_SLOT; i++)
	{
		var name = cookieManager.getValue('name' + i);

		if (name)
			obj.options[i] = new Option((i + 1) + ' : ' + name, i);
		else
			obj.options[i] = new Option((i + 1) + ' : EMPTY', i);
	}

	obj.selectedIndex = 0;

	if (!window.clipboardData)
	{
		obj = document.getElementById("clipboard");
		obj.style.display = "none";
	}
}


SlotManager.prototype.applyCID = function(cid)
{
	if (cid == null)
		return false;

	var array = cid.split(',');

	for (var i in array)
	{

		array[i] = num62Decode(array[i]);
	}

	this.handler.onSlotSet(array);

	return true;
}


SlotManager.prototype.makeCID = function()
{
	var array = new Array();

	this.handler.onSlotGet(array);

	for (var i in array)
	{

		array[i] = num62Encode(array[i]);
	}

	return array.join(',');
}


SlotManager.prototype.loadSlotData = function(slot)
{
	var nameName = 'name' + slot;
	var dataName = 'data' + slot;

	var cookieManager = new CookieManager();
	cookieManager.loadCookie();
	var name = cookieManager.getValue(nameName);
	var data = cookieManager.getValue(dataName);

	if (name != null)
	{

		this.form.name.value = name;
	}

	if (!this.applyCID(data))
	{

		alert('No data to load.  CID could not be loaded.');
	}
}


SlotManager.prototype.saveSlotData = function(slot)
{
	var data = this.makeCID();
	var name = this.form.name.value;

	var nameName = 'name' + slot;
	var dataName = 'data' + slot;

	var cookieManager = new CookieManager();
	cookieManager.setValue(nameName, name);
	cookieManager.setValue(dataName, data);
	cookieManager.saveCookie(-1);
}


SlotManager.prototype.deleteSlotData = function(slot)
{
	var nameName = 'name' + slot;
	var dataName = 'data' + slot;

	var cookieManager = new CookieManager();
	cookieManager.setValue(nameName, '');
	cookieManager.setValue(dataName, '');
	cookieManager.saveCookie();
}


SlotManager.prototype.onLoad = function()
{

	var i = this.form.slot.selectedIndex;


	if (confirm('Click OK to load data from Slot ' + (i + 1) + ' '))
	{

		this.loadSlotData(i);
	}
}

SlotManager.prototype.onSave = function()
{

	var i = this.form.slot.selectedIndex;


	if (confirm('Click OK to save to Slot ' + (i + 1) + ' '))
	{
		if (this.form.name.value == '')
		{

			this.form.name.value = 'DEFAULT';
		}


		this.saveSlotData(i);

		this.form.slot.options[i].text =
			(i + 1) + ' : ' + this.form.name.value;
	}
}

SlotManager.prototype.onDelete = function()
{

	var i = this.form.slot.selectedIndex;


	if (confirm('Click OK to confirm deletion of Slot ' + (i + 1)))
	{

		this.deleteSlotData(i);


		this.form.slot.options[i].text = (i + 1) + ' : EMPTY';
	}
}

SlotManager.prototype.onReset = function()
{
	this.handler.onSlotReset();
}

SlotManager.prototype.onMake = function()
{
	this.form.cid.value = this.makeCID();
}

SlotManager.prototype.onApply = function()
{

	var cid = this.form.cid.value;

	if (cid == '')
	{

		alert('No ID Available');

		return;
	}


	if (confirm('CID : ' + cid + ' applied'))
	{

		this.applyCID(cid);
	}
}

SlotManager.prototype.onCopy = function()
{

	if (window.clipboardData)
	{
		this.onMake();

		var data = this.form.cid.value;

		if (data)
		{
			window.clipboardData.setData("text", data);
		}
	}
}

SlotManager.prototype.onPaste = function()
{

	if (window.clipboardData)
	{

		var data = window.clipboardData.getData("text");

		if (data)
		{
			this.form.cid.value = data;

			this.onApply();
		}
	}
}
