(function($) {
	$.fn.autoColumn = function(indent) {
		var blocks = this.find('div[class|="auto-column"]');
		var areaWidth = this.width();
		var columns = 0;
		blocks.each(function(index, e){
			columns += parseInt((e.className).substring(12));
		});
		var columnWidth = Math.floor((areaWidth-((columns-1)*indent))/columns);
		blocks.css('margin-right', indent)
		.each(function(index, e){
			var places = parseInt((blocks[index].className).substring(12));
			$(this).width((columnWidth*places)+(indent*(places-1))-(this.offsetWidth-$(this).width()));
		})
		.css('overflow', 'hidden')
		.eq(blocks.length-1).css('margin-right', 0).css('float', 'right');
		return this;
	};

	$.fn.autoAlign = function(blockSelector, indent) {
		if(!blockSelector)
			blockSelector = 'div';
		var blocks = this.find(blockSelector);
		var areaWidth = this.width();
		var totalCount = blocks.length;
		if (totalCount == 1) {
			blocks.css('width', function(index){
				var offset = this.offsetWidth-$(this).width();
				return areaWidth-offset;
			})
			.css('margin-right', 0);
			return this;
		}
		var blocksWidth = 0;
		var toCount = 0;
		blocks.each(function(index, e){
			if (blocksWidth + this.offsetWidth <= areaWidth) {
				blocksWidth += this.offsetWidth;
				toCount++;
			}
		});

		var freeWidth = areaWidth - blocksWidth;
		var blockIndent = freeWidth / (toCount - 1);
		if (blockIndent < indent) {
			blocks.css('margin-right', blockIndent)
			.eq(toCount - 1).css('margin-right', 0).css('float', 'right');
		} else {
			freeWidth -= indent * (toCount - 1);
			blocks.each(function(index, e){
				$(this).width($(this).width()+freeWidth / 100 * (this.offsetWidth / (blocksWidth / 100)));
			})
			.css('margin-right', indent)
			.eq(toCount - 1).css('margin-right', 0).css('float', 'right');
		}
		if(toCount != totalCount) {
			for(var i = toCount; i < totalCount; i++) {
				blocks.eq(i).css('display', 'none');
			}
		};
		return this;
	};

	$.fn.autoHeight = function(selector) {
		var tallest = 0;
		var blocks = this.find(selector);
		blocks.each(function(index, e){
			if ($(this).height() > tallest)
				tallest = $(this).height();
		})
		.each(function(index) {
			$(this).css('min-height', tallest);
		});
	};
})(jQuery);

