/**
 * ブロック要素の高さを揃えるプラグイン
 * Copyright(C) 多摩ネットワークセンター Web事業部 All Rights Reserved.
 */

(function($){
	
	$.fn.boxHeights = function(options) {
		
		var params = $.extend({
			column		: 0,
			clear		: 0,
			currentSize	: 0,
			interval	: 1000,
			height		: 'height',//minHeight
			descend		: function descend(a,b) { return b-a; }
		}, options || {});
		
		var ins = $('<ins>M</ins>').css({
			padding: '0',
			display: 'block',
			position: 'absolute',
			top: '0',
			visibility: 'hidden'
		});
		
		var changed = function(){
			ins.appendTo('body');
			var size = ins[0].offsetHeight;
			ins.remove();
			if (params.currentSize == size) return false;
			params.currentSize = size;
			justify();
			return true;
		};
		
		var self = $(this);
		
		var justify = function() {
			var n = max = 0, lines = [0], line = [];
			self.each(function(i) {
				$(this).height('auto');
				line[i] = $(this).height();
				if (params.column>1) {
					if(lines[n] < line[i]) lines[n] = line[i];
					if(i > 0 && ((i + 1) % params.column) == 0){
						n++;
						lines[n] = 0;
					}
				}
			});
			line = line.sort(params.descend);
			max = line[0];
			var browser = $.browser.version;
			if (params.column > 1) {
				for (var j = 0; j < lines.length; j++) {
					for (var k = 0; k < params.column; k++) {
						if (browser == '6.0') {
							self.eq(j*params.column + k).height(lines[j]);
							if (k == 0 && params.clear != 0) self.eq(j*params.column + k).css('clear', 'both');
						} else {
							self.eq(j*params.column + k).css(params.height, lines[j]);
							if (k == 0 && params.clear != 0) self.eq(j*params.column + k).css('clear', 'both');
						}
					}
				}
			} else {
				if (browser == '6.0') {
					self.height(max);
				} else {
					self.css(params.height, max);
				}
			}
		}
		
		setInterval(changed, params.interval);
		
		return this;
		
	}
	
})(jQuery);

