// Spread the contents of a container horizontally. Contents are assumed to share
// the same element tag name. The optional filter parameter specifies a class to
// which an element must belong; this option is useful when handling pull-down menus
// implemented as nested lists. R. Abeles 11/16/2007.

function spread(container, elements, filter)
{
	container = $(container);
	elements = $A(container.getElementsByTagName(elements));
	var cWidth = container.getWidth();
	cWidth -= (parseInt(container.getStyle('padding-left')));
	var eWidth = 0;
	var eCtr = 0;
	
	elements.each(function (e) {
		e = $(e);
		if ((filter == null) || (e.hasClassName(filter))) {
			eCtr++;
			eWidth += e.getWidth();
			e.setStyle( {marginLeft: 0, marginRight: 0} );
		}
	});
	
	var cFill = cWidth - eWidth - 1;
	
	if ((cFill > 0) && (eCtr > 1)) {
		var eMargin = Math.floor(cFill / (eCtr - 1));
		var lMargin = 0;
		var rMargin = 0;
		cFill -= eMargin * (eCtr - 1);
		if (cFill > 0) {
			rMargin = Math.floor(cFill / 2);
			lMargin = cFill - rMargin;
		}
		var first = true;
		elements.each(function (e) {
			if ((filter == null) || (e.hasClassName(filter))) {
				eCtr--;
				if (first) {
					first = false;
				}
				if (eCtr != 0) {
					e.setStyle( {marginRight: eMargin + 'px'} );
				} else {
					e.setStyle( {marginRight: rMargin + 'px'} );
				}
			}
		});
	}
}

function balance(left, right, overhang) {
	left = $(left);
	right = $(right);
	
	var lBot = left.getHeight() + Position.cumulativeOffset(left)[1];
	var rBot = right.getHeight() + Position.cumulativeOffset(right)[1];
	
	if (rBot < (lBot + overhang)) {
		var rPad = parseInt(left.getStyle('padding-bottom'));
		var rAdj = lBot + overhang - rBot;
		rPad += rAdj;
		right.setStyle({paddingBottom: rPad + 'px'});
	}
}

function align(left, right) {
	left = $(left);
	right = $(right);
	
	var lTop = Position.cumulativeOffset(left)[1];
	var rTop = Position.cumulativeOffset(right)[1];
	
	if (rTop < lTop) {
		var rPad = parseInt(left.getStyle('padding-top'));
		rPad += (lTop - rTop);
		right.setStyle({paddingTop: rPad + 'px'});
	}
}
