new function(){
	
	function init(){
		
		this.className="nestHeightFix";
		this.object = new Array();
		var objAll = document.getElementsByTagName ? document.getElementsByTagName("*") : document.all;
		this.depth_arr = new Array();
		
		reg = new RegExp(this.className+"-([a-zA-Z0-9-_]+)", "i");

		var objAll = document.getElementsByTagName ? document.getElementsByTagName("*") : document.all;
		for(var i = 0; i < objAll.length; i++) {
			var eltClass = objAll[i].className.split(/\s+/);
			for(var j = 0; j < eltClass.length; j++) {
				if(eltClass[j].match(reg)){
					//入れ子の深さを検出
					var depth = getDepth(objAll[i]);
					var conf = eltClass[j].split("-");
					var type = conf[1];
					if(type == "number" || type == "parent"){
						//親の場合は1つ足す
						depth++;
					}
					if(!this.object[depth]){
						this.object[depth] = new Array();
						this.depth_arr.push(depth);
					}
						
					switch(type){
						case "group":
							if(!this.object[depth][conf[2]]) this.object[depth][conf[2]] = new Array();
							
							this.object[depth][conf[2]].push(objAll[i]);
						break;
						case "number":
						case "parent":
						
						if(conf[1] == "number" && Number(conf[2])){
							var count =  Number(conf[2]);
						}else{
							var count = objAll[i].childNodes.length;
						}
						var c = 0;
						for(var k=0; k<objAll[i].childNodes.length; k++){
							if(!this.object[depth][type+c]) this.object[depth][type+c] = new Array();
							if(objAll[i].childNodes[k].nodeType == 1) this.object[depth][type+c].push(objAll[i].childNodes[k]);
							
							if(this.object[depth][type+c].length >= count){
								c++;
							}
						}
						break;
					}
				}
			}
		}
		
		
		//階層順にソート
		depth_arr.sort(
			function(a,	b){
				return (a - b);
			}
		);
		//alert(depth_arr);
		//深い順に
		depth_arr.reverse();
		
		changeHeight();
		
		if(fontSizeWatcher){
			fontSizeWatcher.addEventListener("change", changeHeight);
		}else{
			//check font size
			var e = document.createElement("div");
			var s = document.createTextNode("S");
			e.appendChild(s);
			e.style.visibility="hidden"
			e.style.position="absolute"
			e.style.top="0"
			document.body.appendChild(e);
			
			var defHeight = e.offsetHeight;
			var checkBoxSize = function(){
				
				if(defHeight != e.offsetHeight){
					changeHeight();
					defHeight= e.offsetHeight;
				}
			}
			setInterval(checkBoxSize,1000);
		}
		
	}
	
	
	function changeHeight(){
		
		for(var d = 0; d<depth_arr.length; d++){
			var depth = depth_arr[d];
			//alert(depth);
			for(var k in this.object[depth]){
				var _array = this.object[depth][k];
				var height = 0;
				//高さの最大を取得
				for(var i=0; i<_array.length; i++){
					var elm = _array[i];
					if(elm){
						elm.style.height = "auto";
						height = Math.max(elm.offsetHeight, height);
					}
				}
				
				for(var i=0; i<_array.length; i++){
					var elm = _array[i];
					if(elm){
						elm.style.height = height+"px";
					}
				}
			}
		}
	}
	
	function getDepth(elm){
		var depth = 0;
		while(elm){
			depth++;
			elm = elm.parentNode;
		}
		return depth;
	}


	function addEvent(elm,listener,fn){
		try{
			elm.addEventListener(listener,fn,false);
		}catch(e){
			elm.attachEvent("on"+listener,fn);
		}
	}
	addEvent(window,"load",init);

}