SIX.Tool.Toolbox = function (channel, toolbar, sImage, sToolTip, params)
{
	SIX.Tool.call(this, toolbar, SIX.eToolTypes.NONE, sImage, sToolTip, params);
	
	this.aToolboxItems = new Array();
	this.toolbar = toolbar;
		
	var container = new Object();
	SIX.addRef(container);
	container.toolbox = this;
	container.div = null;
	
	container.init = function ()
	{
		if (!this.div)
			this.div = SIX.Util.createElement("div", "toolbox");
		var toolbox = this.toolbox;
		var sHTML = "";
		for (var i=0; i<toolbox.aToolboxItems.length; i++)
		{
			var toolboxItem = toolbox.aToolboxItems[i];
			var tool = toolboxItem.tool;
			sHTML += "<div class='" + tool.sClass + "'>" +
			"<img id='" + toolboxItem.id + "' src='" + tool.imageOff.src + "' " +
			"border='0' title='" + tool.sToolTip + "' alt='" + tool.sToolTip + "' " + 
			"onclick='" + toolbox.myself + ".onClickTool(" + i + ")' " + 
			"onmouseover='" + toolbox.myself + ".onMouseOverTool(" + i + ")' " + 
			"onmouseout='" + toolbox.myself + ".onMouseOutTool(" + i + ")' " +
			"/>" + 			
			"</div>";
		}
		sHTML += "<div class='toolboxBottomContainer'>";
		sHTML += "<div class='toolboxTip'>Select tool to add to the interface</div>";
		sHTML += "<div class='toolboxButtonsContainer'>";
		sHTML += "<div class='toolboxOK'><input type='button' class='toolboxButton' value='OK' onclick='" + toolbox.myself + ".onClickOK()'></div>";
		sHTML += "<div class='toolboxCancel'><input type='button' class='toolboxButton' value='Cancel' onclick='" + toolbox.myself + ".onClickCancel()'></div>";
		sHTML += "</div>";
		sHTML += "</div>";
		this.div.innerHTML = sHTML;
		return this.div;
	}

	this.win = SIX.App.addWindow(new SIX.Window(channel, "popup", "Toolbox", "visible=false;top=50;left=20;width=260;height=150"));
	this.win.attach(container);
	
	this.addCallback(SIX.eToolCallbacks.ONACTIVATE, 
					function (map) {
						for (var i=0; i<this.aToolboxItems.length; i++)
						{
							var toolboxItem = this.aToolboxItems[i];
							var tool = toolboxItem.tool;
							var bSelected = toolboxItem.bSelectedTemp = toolboxItem.bSelected;
							var elemImg = document.getElementById(toolboxItem.id);
							if (elemImg)
								elemImg.src = bSelected ? tool.imageOn.src : tool.imageOff.src;
						}						
						this.win.showWin();
					});
					
	this.addCallback(SIX.eToolCallbacks.ONDEACTIVATE, 
					function (map) {
						this.win.hideWin();
					});					
}
SIX.Util.extend(SIX.Tool.Toolbox, SIX.Tool);

SIX.Tool.Toolbox.prototype.addTool = function (tool)
{	
	this.aToolboxItems[this.aToolboxItems.length] = {tool : tool, 
									id : SIX.Uid.getUid("toolboxitem"), 
									bSelected : false, 
									bSelectedTemp : false};
	return tool;
}

SIX.Tool.Toolbox.prototype.updateToolbar = function ()
{
	for (var i=0; i<this.aToolboxItems.length; i++)
		this.aToolboxItems[i].bSelected = this.aToolboxItems[i].bSelectedTemp;
				
	var toolbar = this.toolbar;
	
	var nToolboxIndex = toolbar.getToolIndex(this);
	
	//Remove tools
	for (var i=0; i<this.aToolboxItems.length; i++)
	{
		var tool = this.aToolboxItems[i].tool;	
		toolbar.removeTool(tool);		
	}
	
	//Remove spaces
	var nToolIndex = toolbar.items.length - 1;
	while (nToolIndex > nToolboxIndex)
	{
		var tool = toolbar.items[nToolIndex];
		toolbar.removeTool(tool);		
		nToolIndex--;
	}
	
	toolbar.addSpace();
	toolbar.addSpace();
	
	//Add tools
	for (var i=0; i<this.aToolboxItems.length; i++)
	{
		var tool = this.aToolboxItems[i].tool;
		if (this.aToolboxItems[i].bSelected)
		{
			toolbar.addTool(tool);
			toolbar.addSpace();
		}
		else
		{
			if (tool.bActive)
				tool.deactivate();		
		}		
	}
	toolbar.executeCallbacks(SIX.eToolbarCallbacks.ONRESIZE);
}

SIX.Tool.Toolbox.prototype.onMouseOverTool = function(index)
{
	var toolboxItem = this.aToolboxItems[index];
	var elemImg = document.getElementById(toolboxItem.id);
	if (elemImg)
		elemImg.src = toolboxItem.tool.imageOn.src;
}

SIX.Tool.Toolbox.prototype.onMouseOutTool = function(index)
{
	var toolboxItem = this.aToolboxItems[index];
	var elemImg = document.getElementById(toolboxItem.id);
	if (elemImg && !toolboxItem.bSelectedTemp)
		elemImg.src = toolboxItem.tool.imageOff.src;	
}	

SIX.Tool.Toolbox.prototype.onClickTool = function(index)
{
	var toolboxItem = this.aToolboxItems[index];
	var bSelected = toolboxItem.bSelectedTemp = !toolboxItem.bSelectedTemp;
	var elemImg = document.getElementById(toolboxItem.id);
	if (elemImg)
		elemImg.src = bSelected ? toolboxItem.tool.imageOn.src : toolboxItem.tool.imageOff.src;
}

SIX.Tool.Toolbox.prototype.onClickOK = function()
{
	this.updateToolbar();
	this.win.hideWin();
}
	
SIX.Tool.Toolbox.prototype.onClickCancel = function()
{
	this.win.hideWin();
}