/*

 * fixHeight - jQuery Plugin

 * http://www.starryworks.co.jp/blog/tips/javascript/fixheightjs.html

 *

 * Author Koji Kimura @ STARRYWORKS inc.

 * http://www.starryworks.co.jp/

 * 

 * Licensed under the MIT License

 *

 */





(function($){

	

	var isInitialized = false;

	var parents = [];

	var textHeight = 0;

	var $fontSizeDiv;

	

	$.fn.fixHeight = function() {

		this.each(function(){

			var childrenGroups = getChildren( this );

			

			$.each( childrenGroups, function(){

				

				var $children = $(this);

				if ( !$children.filter(":visible").length ) return;

				

				var row = [];

				var top = 0;

				$children.each(function(){

					if ( top != $(this).position().top ) {

						$(row).sameHeight();

						row = [];

						top = $(this).position().top;

					}

					row.push(this);

				});

				if ( row.length ) $(row).sameHeight();

			});

			

			

		});

		init();

		return this;

	}

	

	$.checkFixHeight = function( i_force ) {

		if ( $fontSizeDiv.height() == textHeight && i_force !== true ) return;

		textHeight = $fontSizeDiv.height();

		$(parents).fixHeight();

	}

	

	$.fn.sameHeight = function() {

		var maxHeight = 0;

		this.css("height","auto");

		this.each(function(){

			if ( $(this).height() > maxHeight ) maxHeight = $(this).height();

		});

		return this.height(maxHeight);

	}

	

	function getChildren( i_parent ) {

		var $parent = $( i_parent );

		

		if ( $parent.data("fixHeightChildrenGroups") ) return $parent.data("fixHeightChildrenGroups");

		var childrenGroups = [];

		

		var $children = $parent.find(".fixHeightChild");

		if ( $children.length ) childrenGroups.push( $children );

		

		var $groupedChildren = $parent.find("*[class*='fixHeightChild']:not(.fixHeightChild)");

		if ( $groupedChildren.length ) {

			var classNames = {};

			$groupedChildren.each(function(){

				var a = $(this).attr("class").split(" ");

				var i;

				var l = a.length;

				var c;

				for ( i=0; i<l; i++ ) {

					c = a[i].match(/fixHeightChild[a-z0-9_-]+/i);

					if ( !c ) continue;

					c = c.toString();

					if ( c ) classNames[c] = c;

				}

			});

			for ( var c in classNames ) childrenGroups.push( $parent.find("."+c) );

		}

		

		if ( !childrenGroups.length ) {

			$children = $parent.children();

			if ( $children.length ) childrenGroups.push( $children );

		}

		

		$parent.data("fixHeightChildrenGroups", childrenGroups );

		parents.push( $parent );

		

		return childrenGroups;

	}

	

	

	function init() {

		if ( isInitialized ) return;

		isInitialized = true;

		$fontSizeDiv = $(document).append('<div style="position:absolute;left:-9999px;top:-9999px;">s</div>');

		setInterval($.checkFixHeight,1000);

		$(window).resize($.checkFixHeight);

		$.checkFixHeight();

		$(window).load( function(){ $.checkFixHeight(true); } );

	}

	

})(jQuery);







jQuery(document).ready(function(){

	$(".fixHeight").fixHeight();

});


