﻿/*
--------- 使い方 --------------

まず func_lib_1_00.js と、このファイルを<script>タグで読み込む

class の一つに fixboxheight というクラスを指定すると、それが指定されているボックス要素全ての高さを、その中で最も高い要素（画像やテキストで高さを使っているもの）に揃える
class の一つに fixboxlineheight というクラスを指定すると、それが指定されているボックス要素全ての高さを行ごとの中で最も高い要素（画像やテキストで高さを使っているもの）に揃える


--------- 検証済み --------------
windows safari 4.00
firefox 3.5
IE 6～8
chrome

--------- バージョン --------------
1.01	ジグザグになってうまく動作しない現象。行ごとの計算に問題があるため、一度行ごとではなく全て同じ高さにしてしまい、そこから行ごとに調節する方法に変更

*/




add_event(window,"load",fix_box_height);
var g_fix_box_height_timer;

/*
function fix_box_height_main(){
	fix_box_height();
	fix_box_height();
}
*/

function fix_box_height(){
	var boxes=getbycindex("fixboxheight");
	fix_height(boxes);
	
	var line_boxes=getbycindex("fixboxlineheight");
	fix_height(line_boxes);
	var line_boxes_list=get_line_group(line_boxes);
	for(var i = 0; i < line_boxes_list.length ; i++){
		fix_height(line_boxes_list[i]);
	}	
	
}

//行ごとのボックス要素を取得
function get_line_group(line_boxes){
	var obj_info=[];
	var max_line_num=0;
	var line_group=[];
	
	for(var i = 0; i < line_boxes.length ; i++){
		obj_info[i]=[];
		line_boxes_pos=getElementPosition(line_boxes[i]);
		obj_info[i]["start_y"]=line_boxes_pos["top"];
		obj_info[i]["end_y"]=obj_info[i]["start_y"]+line_boxes[i].offsetHeight;
		
		for(var n = 0; n < line_boxes.length ; n++){
			if(obj_info[n]){
				if(obj_info[i]["end_y"]<obj_info[n]["start_y"] || obj_info[n]["end_y"]<obj_info[i]["start_y"]){
				}
				else{
					obj_info[i]["line_group"]=obj_info[n]["line_group"];
				}
			}
		}
		if(is_undefined(obj_info[i]["line_group"])){
			obj_info[i]["line_group"]=max_line_num;
			line_group[max_line_num]=[];
			max_line_num++;
		}
		
		if(line_group[obj_info[i]["line_group"]].length==0){
			line_group[obj_info[i]["line_group"]][0]=line_boxes[i];
		}
		else{
			line_group[obj_info[i]["line_group"]][line_group[obj_info[i]["line_group"]].length]=line_boxes[i];
		}
	}
	return line_group;
}

function fix_height(boxes){
	var max_height=0;
	for(var i = 0; i < boxes.length ; i++){
		boxes[i].style.height="auto";
		if(max_height<boxes[i].offsetHeight){
			max_height=boxes[i].offsetHeight;
		}
	}
	max_height+=5;
	for(var i = 0; i < boxes.length ; i++){
		boxes[i].style.height=max_height+"px";
	}
}

//g_fix_box_height_timer=setInterval(fix_box_height,1000)

//------------------------function
function getElementPosition(element)
{
	var offsetTrail = (typeof element == 'string') ? document.getElementById(element) : element;
	var offsetLeft = 0;
	var offsetTop = 0;

	while (offsetTrail) {
		offsetLeft += offsetTrail.offsetLeft;
		offsetTop += offsetTrail.offsetTop;
		offsetTrail = offsetTrail.offsetParent;
	}

	if (navigator.userAgent.indexOf('Mac') != -1 && typeof document.body.leftMargin != "undefined") {
		offsetLeft += document.body.leftMargin;
		offsetTop += document.body.topMargin;
	}

	return ({
		left: offsetLeft, top: offsetTop
	});
}

