function Toolbar(orientation)
{
	extend(this, Container);
	
	this.orientation = orientation;
	this.sections = new Object();
	
	this._init();
	this.setLayout(new BorderLayout());
}

Toolbar.prototype = new Container();

// public Container createSection(String name);
Toolbar.prototype.createSection = function Toolbar_createSection(name)
{
	if(this.sections[name])
	{
		throw new Error("Section '" + name + "' already exists");
	} else
	{
		var container = new Container();
		
		container.setLayout(new ToolbarLayout(this.orientation, this.orientation == Toolbar.HORIZONTAL ? 5 : 0, this.orientation == Toolbar.VERTICAL ? 5 : 0));
		this.sections[name] = container;
		this.contentPane.add(container);
		
		return container;
	}
}

// public void removeSection(String name);
Toolbar.prototype.removeSection = function Toolbar_removeSection(name)
{
	var container = this.sections[name];
	
	if(container)
	{
		delete this.sections[name];
		this.contentPane.remove(container);
	}
}

// public Container getSection(String name);
Toolbar.prototype.getSection = function Toolbar_getSection(name)
{
	return this.sections[name];
}

// private void _init();
Toolbar.prototype._init = function Toolbar__init() 
{
	this.contentPane = new Container();
	this.contentPane.setLayout(new ToolbarLayout(this.orientation, this.orientation == Toolbar.HORIZONTAL ? 10 : 0, this.orientation == Toolbar.VERTICAL ? 5 : 0));
	this.add(this.contentPane, BorderLayout.CENTER);
}

Toolbar.prototype.toString = function Toolbar_toString()
{
	return "Widget/Toolbar";
}

Toolbar.VERTICAL = 1;
Toolbar.HORIZONTAL = 2;


// class ToolbarLayout
// Performs layout on the content pane and on sections.

function ToolbarLayout(orientation, hSpacing, vSpacing)
{
	extend(this, Layout);
	
	this.orientation = orientation;
	this.hSpacing = (hSpacing ? hSpacing : 0);
	this.vSpacing = (vSpacing ? vSpacing : 0);
}

ToolbarLayout.prototype = new Layout();

ToolbarLayout.prototype.doLayout = function Toolbar_doLayout(container)
{
	var count = container.getWidgetCount();
	var offset = (this.orientation == Toolbar.VERTICAL ? this.vSpacing : this.hSpacing);
	
	for(var i = 0; i < count; i++)
	{
		var widget = container.getWidget(i);
		
		switch(this.orientation)
		{
			case Toolbar.VERTICAL:
				widget.setBounds(this.hSpacing, offset, container.getWidth() - 2 * this.hSpacing, widget.getPreferredSize().height);
				offset += widget.getHeight() + this.vSpacing;
				break;
			case Toolbar.HORIZONTAL:
				widget.setBounds(offset, this.vSpacing, widget.getPreferredSize().width, container.getHeight() - 2 * this.vSpacing);
				offset += widget.getWidth() + this.hSpacing;
				break;
		}
	}
}

ToolbarLayout.prototype.getPreferredSize = function Toolbar_getPreferredSize(container)
{
	var count = container.getWidgetCount();
	var w = this.hSpacing, h = this.vSpacing;
	
	for(var i = 0; i < count; i++)
	{
		var widget = container.getWidget(i);
		var size = widget.getPreferredSize();
		
		switch(this.orientation)
		{
			case Toolbar.VERTICAL:
				w = Math.max(w, size.width + 2*this.hSpacing);
				h += size.height + vSpacing;
				break;
			case Toolbar.HORIZONTAL:
				w += size.width + this.hSpacing;
				h = Math.max(h, size.height + 2*this.vSpacing);
				break;
		}
	}
	
	return {width:w, height:h};
}

ToolbarLayout.prototype.toString = function Toolbar_toString()
{
	return "ToolbarLayout [orientation = " + this.orientation + ", hSpacing = " + this.hSpacing + ", vSpacing = " + this.vSpacing + "]";
}
