function BorderLayout()
{
	extend(this, Layout);
}

BorderLayout.prototype = new Layout();

// public void doLayout(Container container);
BorderLayout.prototype.doLayout = function BorderLayout_doLayout(container)
{
	var widgets = this.getWidgets(container);
	var x = 0, y = 0, nx = 0, ny = 0;
	var widget = null;
		
	if(widget = widgets[BorderLayout.NORTH])
	{
		widget.setBounds(0, 0, container.getWidth(), widget.getPreferredSize().height);
		y += widget.getHeight();
	}
	
	if(widget = widgets[BorderLayout.SOUTH])
	{
		var widgetHeight = widget.getPreferredSize().height;
		widget.setBounds(0, Math.max(container.getHeight() - widgetHeight, 0), container.getWidth(), widgetHeight);
		ny += widgetHeight;
	}
	
	if(widget = widgets[BorderLayout.WEST])
	{
		widget.setBounds(0, y, widget.getPreferredSize().width, Math.max(container.getHeight() - y - ny, 0));
		x += widget.getWidth();
	}
	
	if(widget = widgets[BorderLayout.EAST])
	{
		var width = widget.getPreferredSize().width;
		widget.setBounds(Math.max(container.getWidth() - width, 0), y, width, Math.max(container.getHeight() - y - ny, 0));
		nx += width;	
	}
	
	if(widget = widgets[BorderLayout.CENTER])
	{
		widget.setBounds(x, y, Math.max(container.getWidth() - x - nx, 0), Math.max(container.getHeight() - y - ny, 0));
	}
}

// public void getPreferredSize(Container container);
BorderLayout.prototype.getPreferredSize = function BorderLayout_getPreferredSize(container)
{
	var widgets = this.getWidgets(container);
	var width = 0, height = 0;
	var widget = null;
	
	if(widget = widgets[BorderLayout.NORTH])
	{
		var size = widget.getPreferredSize();
		
		width = size.width;
		height = size.height;
	}
	
	if(widget = widgets[BorderLayout.SOUTH])
	{
		var size = widget.getPreferredSize();
		
		width = Math.max(size.width, width);
		height += size.height;
	}
	
	if(widget = widgets[BorderLayout.WEST])
	{
		var size = widget.getPreferredSize();
		
		width += size.width;
		height = Math.max(size.height, height);
	}
	
	if(widget = widgets[BorderLayout.EAST])
	{
		var size = widget.getPreferredSize();
		
		width += size.width;
		height = Math.max(size.height, height);
	}
	
	if(widget = widgets[BorderLayout.CENTER])
	{
		var size = widget.getPreferredSize();
	
		width += size.width;
		height += size.height;
	}
	
	return size;
}

BorderLayout.prototype.getWidgets = function BorderLayout_getWidgets(container)
{
	var count = container.getWidgetCount();
	var view = new Object();
	
	for(var i = 0; i < count; i++)
	{
		var widget = container.getWidget(i);
		
		if(!widget.layoutConstraints)
		{
			view[BorderLayout.CENTER] = widget;
		} else
		{
			switch(widget.layoutConstraints)
			{
				case BorderLayout.CENTER:
				case BorderLayout.NORTH:
				case BorderLayout.EAST:
				case BorderLayout.SOUTH:
				case BorderLayout.WEST:
					view[widget.layoutConstraints] = widget;
					break;
				default:
					view[BorderLayout.CENTER] = widget;
			}
		}
	}

	return view;
}

BorderLayout.prototype.toString = function BorderLayout_toString()
{
	return "BorderLayout";
}

BorderLayout.CENTER = 0;
BorderLayout.NORTH = 1;
BorderLayout.EAST = 2;
BorderLayout.SOUTH = 3;
BorderLayout.WEST = 4;
