/*--------------------------------------------------------------------------*
*  
*  heightLine JavaScript Library beta4
*  
*  MIT-style license. 
*  
*  2007 Kazuma Nishihata 
*  http://www.webcreativepark.net
*  
*--------------------------------------------------------------------------*/
new function() {

	// var
	var styleSheet; 			// /css/common/heightLine.css
	var subContainer; 			// www.master div#subContainer
	var article; 				// www.master div#article
	var heightLinePractice1;	// practice.aspx div.heightLine-practice1
	var heightLinePractice2;	// practice.aspx div.heightLine-practice2
	var heightLinePractice3;	// practice.aspx div.heightLine-practice3
	var heightLinePractice4;	// practice.aspx div.heightLine-practice4

	function heightLine() {

		// styleSheet
		if (document.styleSheets.length != 0) {
			(function() {
				for (var i = 0; i < document.styleSheets.length; i++) {
					if (document.styleSheets[i].href.match(/heightLine\.css$/i)) {
						styleSheet = document.styleSheets[i];
						break;
					}
				}
			})();
		}

		// selector
		if (styleSheet != null) {
			if (typeof (styleSheet.rules) != "undefined") {
				// for IE
				if (subContainer == null) {
					(function() {
						var i = styleSheet.rules.length;
						styleSheet.addRule("div#subContainer", "height: auto", i);
						subContainer = styleSheet.rules[i];
					})();
				}
				if (article == null) {
					(function() {
						var i = styleSheet.rules.length;
						styleSheet.addRule("div#article", "height: auto", i);
						article = styleSheet.rules[i];
					})();
				}
				if (heightLinePractice1 == null) {
					(function() {
						var i = styleSheet.rules.length;
						styleSheet.addRule("div.heightLine-practice1", "height: auto", i);
						heightLinePractice1 = styleSheet.rules[i];
					})();
				}
				if (heightLinePractice2 == null) {
					(function() {
						var i = styleSheet.rules.length;
						styleSheet.addRule("div.heightLine-practice2", "height: auto", i);
						heightLinePractice2 = styleSheet.rules[i];
					})();
				}
				if (heightLinePractice3 == null) {
					(function() {
						var i = styleSheet.rules.length;
						styleSheet.addRule("div.heightLine-practice3", "height: auto", i);
						heightLinePractice3 = styleSheet.rules[i];
					})();
				}
				if (heightLinePractice4 == null) {
					(function() {
						var i = styleSheet.rules.length;
						styleSheet.addRule("div.heightLine-practice4", "height: auto", i);
						heightLinePractice4 = styleSheet.rules[i];
					})();
				}
			}
			else if (typeof (styleSheet.cssRules) != "undefined") {
				// for Fire Fox
				if (subContainer == null) {
					(function() {
						var i = styleSheet.cssRules.length;
						styleSheet.insertRule("div#subContainer {height: auto}", i);
						subContainer = styleSheet.cssRules[i];
					})();
				}
				if (article == null) {
					(function() {
						var i = styleSheet.cssRules.length;
						styleSheet.insertRule("div#article {height: auto}", i);
						article = styleSheet.cssRules[i];
					})();
				}
				if (heightLinePractice1 == null) {
					(function() {
						var i = styleSheet.cssRules.length;
						styleSheet.insertRule("div.heightLine-practice1 {height: auto}", i);
						heightLinePractice1 = styleSheet.cssRules[i];
					})();
				}
				if (heightLinePractice2 == null) {
					(function() {
						var i = styleSheet.cssRules.length;
						styleSheet.insertRule("div.heightLine-practice2 {height: auto}", i);
						heightLinePractice2 = styleSheet.cssRules[i];
					})();
				}
				if (heightLinePractice3 == null) {
					(function() {
						var i = styleSheet.cssRules.length;
						styleSheet.insertRule("div.heightLine-practice3 {height: auto}", i);
						heightLinePractice3 = styleSheet.cssRules[i];
					})();
				}
				if (heightLinePractice4 == null) {
					(function() {
						var i = styleSheet.cssRules.length;
						styleSheet.insertRule("div.heightLine-practice4 {height: auto}", i);
						heightLinePractice4 = styleSheet.cssRules[i];
					})();
				}
			}
		}

		//		if (styleSheet != null) {
		//			if (typeof (styleSheet.rules) != "undefined") {
		//				for (var i = 0; i < styleSheet.rules.length; i++) {
		//					if (styleSheet.rules[i].selectorText == "#subContainer") {
		//						subContainer = styleSheet.rules[i];
		//					}
		//					else if (styleSheet.rules[i].selectorText == "#article") {
		//						article = styleSheet.rules[i];
		//					}
		//				}
		//			}
		//			else if (typeof (styleSheet.cssRules) != "undefined") {
		//				for (var i = 0; i < styleSheet.cssRules.length; i++) {
		//					if (styleSheet.cssRules[i].selectorText == "#subContainer") {
		//						subContainer = styleSheet.cssRules[i];
		//					}
		//					else if (styleSheet.cssRules[i].selectorText == "#article") {
		//						article = styleSheet.cssRules[i];
		//					}
		//				}
		//			}
		//		}

		this.className = "heightLine";
		this.parentClassName = "heightLineParent"
		reg = new RegExp(this.className + "-([a-zA-Z0-9-_]+)", "i");
		objCN = new Array();
		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] == this.className) {
					if (!objCN["main CN"]) objCN["main CN"] = new Array();
					objCN["main CN"].push(objAll[i]);
					break;
				} else if (eltClass[j] == this.parentClassName) {
					if (!objCN["parent CN"]) objCN["parent CN"] = new Array();
					objCN["parent CN"].push(objAll[i]);
					break;
				} else if (eltClass[j].match(reg)) {
					var OCN = eltClass[j].match(reg)
					if (!objCN[OCN]) objCN[OCN] = new Array();
					objCN[OCN].push(objAll[i]);
					break;
				}
			}
		}

		//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;

		changeBoxSize = function() {
			for (var key in objCN) {
				if (objCN.hasOwnProperty(key)) {
					//parent type
					if (key == "parent CN") {
						for (var i = 0; i < objCN[key].length; i++) {
							var max_height = 0;
							var CCN = objCN[key][i].childNodes;
							for (var j = 0; j < CCN.length; j++) {
								if (CCN[j] && CCN[j].nodeType == 1) {
									CCN[j].style.height = "auto";
									// CCN[j].style.height = "auto";
									if (CCN[j].id == "subContainer" && subContainer != null) {
										subContainer.style.height = "auto";
									}
									else if (CCN[j].id == "article" && subContainer != null) {
										article.style.height = "auto";
									}
									else if (CCN[j].className.match(/heightLine\-practice1/i) && heightLinePractice1 != null) {
										heightLinePractice1.style.height = "auto";
									}
									else if (CCN[j].className.match(/heightLine\-practice2/i) && heightLinePractice2 != null) {
										heightLinePractice2.style.height = "auto";
									}
									else if (CCN[j].className.match(/heightLine\-practice3/i) && heightLinePractice3 != null) {
										heightLinePractice3.style.height = "auto";
									}
									else if (CCN[j].className.match(/heightLine\-practice4/i) && heightLinePractice4 != null) {
										heightLinePractice4.style.height = "auto";
									}
									else {
										CCN[j].style.height = "auto";
									}
									max_height = max_height > CCN[j].offsetHeight ? max_height : CCN[j].offsetHeight;
								}
							}
							for (var j = 0; j < CCN.length; j++) {
								if (CCN[j].style) {
									var stylea = CCN[j].currentStyle || document.defaultView.getComputedStyle(CCN[j], '');
									var newheight = max_height;
									if (stylea.paddingTop) newheight -= stylea.paddingTop.replace("px", "");
									if (stylea.paddingBottom) newheight -= stylea.paddingBottom.replace("px", "");
									if (stylea.borderTopWidth && stylea.borderTopWidth != "medium") newheight -= stylea.borderTopWidth.replace("px", "");
									if (stylea.borderBottomWidth && stylea.borderBottomWidth != "medium") newheight -= stylea.borderBottomWidth.replace("px", "");
									// CCN[j].style.height =newheight+"px";
									if (CCN[j].id == "subContainer" && subContainer != null) {
										subContainer.style.height = newheight + "px";
									}
									else if (CCN[j].id == "article" && article != null) {
										article.style.height = newheight + "px";
									}
									else if (CCN[j].className.match(/heightLine\-practice1/i) && heightLinePractice1 != null) {
										heightLinePractice1.style.height = newheight + "px";
									}
									else if (CCN[j].className.match(/heightLine\-practice2/i) && heightLinePractice2 != null) {
										heightLinePractice2.style.height = newheight + "px";
									}
									else if (CCN[j].className.match(/heightLine\-practice3/i) && heightLinePractice3 != null) {
										heightLinePractice3.style.height = newheight + "px";
									}
									else if (CCN[j].className.match(/heightLine\-practice4/i) && heightLinePractice4 != null) {
										heightLinePractice4.style.height = newheight + "px";
									}
									else {
										CCN[j].style.height = newheight + "px";
									}
								}
							}
						}
					} else {
						var max_height = 0;
						for (var i = 0; i < objCN[key].length; i++) {
							// objCN[key][i].style.height = "auto";
							if (objCN[key][i].id == "subContainer") {
								subContainer.style.height = "auto";
							}
							else if (objCN[key][i].id == "article") {
								article.style.height = "auto";
							}
							else if (objCN[key][i].className.match(/heightLine\-practice1/i) && heightLinePractice1 != null) {
								heightLinePractice1.style.height = "auto";
							}
							else if (objCN[key][i].className.match(/heightLine\-practice2/i) && heightLinePractice2 != null) {
								heightLinePractice2.style.height = "auto";
							}
							else if (objCN[key][i].className.match(/heightLine\-practice3/i) && heightLinePractice3 != null) {
								heightLinePractice3.style.height = "auto";
							}
							else if (objCN[key][i].className.match(/heightLine\-practice4/i) && heightLinePractice4 != null) {
								heightLinePractice4.style.height = "auto";
							}
							else {
								objCN[key][i].style.height = "auto";
							}
							max_height = max_height > objCN[key][i].offsetHeight ? max_height : objCN[key][i].offsetHeight;
						}
						for (var i = 0; i < objCN[key].length; i++) {
							if (objCN[key][i].style) {
								var stylea = objCN[key][i].currentStyle || document.defaultView.getComputedStyle(objCN[key][i], '');
								var newheight = max_height;
								if (stylea.paddingTop) newheight -= stylea.paddingTop.replace("px", "");
								if (stylea.paddingBottom) newheight -= stylea.paddingBottom.replace("px", "");
								if (stylea.borderTopWidth && stylea.borderTopWidth != "medium") newheight -= stylea.borderTopWidth.replace("px", "")
								if (stylea.borderBottomWidth && stylea.borderBottomWidth != "medium") newheight -= stylea.borderBottomWidth.replace("px", "");
								// objCN[key][i].style.height = newheight + "px";
								if (objCN[key][i].id == "subContainer") {
									subContainer.style.height = newheight + "px";
								}
								else if (objCN[key][i].id == "article") {
									article.style.height = newheight + "px";
								}
								else if (objCN[key][i].className.match(/heightLine\-practice1/i) && heightLinePractice1 != null) {
									heightLinePractice1.style.height = newheight + "px";
								}
								else if (objCN[key][i].className.match(/heightLine\-practice2/i) && heightLinePractice2 != null) {
									heightLinePractice2.style.height = newheight + "px";
								}
								else if (objCN[key][i].className.match(/heightLine\-practice3/i) && heightLinePractice3 != null) {
									heightLinePractice3.style.height = newheight + "px";
								}
								else if (objCN[key][i].className.match(/heightLine\-practice4/i) && heightLinePractice4 != null) {
									heightLinePractice4.style.height = newheight + "px";
								}
								else {
									objCN[key][i].style.height = newheight + "px";
								}
							}
						}
					}
				}
			}
		}

		checkBoxSize = function() {
			if (defHeight != e.offsetHeight) {
				changeBoxSize();
				defHeight = e.offsetHeight;
			}
		}
		changeBoxSize();
		setInterval(checkBoxSize, 1000)
		window.onresize = changeBoxSize;
	}

	function addEvent(elm, listener, fn) {
		try {
			elm.addEventListener(listener, fn, false);
		} catch (e) {
			elm.attachEvent("on" + listener, fn);
		}
	}
	addEvent(window, "load", heightLine);
}

