////////////////////////////////////////////////////////////////////////////////
//
//	フォントサイズ変更検知用＆イベント登録用 [UTF-8]
//
//	created on: December 4, 2008;
//
////////////////////////////////////////////////////////////////////////////////
var OnFontSizeChange = function(){
	this.idName = "_ONFONTSIZECHANGE_WRAPPER_";
	this.funcList = new Object();
	this.funcList["change"] = new Array();//CallBack関数のリスト
	this.funcList["smaller"] = new Array();//CallBack関数のリスト
	this.funcList["larger"] = new Array();//CallBack関数のリスト
	this.init();//フォントサイズチェック用ダミー要素配置
	this.isReady = true;//CallBack関数実行中はfalse
	var interval = 100;//フォントサイズチェック間隔[ms]
	var oldSize = this.getCurSize();
	
	var self = this;
	this.timer = setInterval(function(){
		if(self.isReady){
			var curSize = self.getCurSize();
			if(oldSize != curSize){
				self.callFunc("change");
				if(oldSize > curSize){
					self.callFunc("smaller");
				}else if(oldSize < curSize){
					self.callFunc("larger");
				}
			}
			oldSize = curSize;
		}
	}, interval);	
}
OnFontSizeChange.prototype.init = function(){
	var _dummyElement = document.getElementById(this.idName);
	if(_dummyElement){
		this.dummyElement = _dummyElement;
	}else{
		this.dummyElement = document.createElement("span");
		this.dummyElement.style.margin = "0px";
		this.dummyElement.style.padding = "0px";
		this.dummyElement.style.display = "inline";
		this.dummyElement.style.overflow = "visible";
		this.dummyElement.style.visibility = "hidden";
		this.dummyElement.style.textIndent = "0em";
		this.dummyElement.style.lineHeight = "1em";
		this.dummyElement.style.fontSize = "1000%";
		this.dummyElement.style.position = "absolute";
		this.dummyElement.style.zIndex = "-9999";
		this.dummyElement.style.left = "-9999px";
		this.dummyElement.style.top = "-9999px";
		this.dummyElement.innerHTML = "&nbsp;";
		this.dummyElement.setAttribute("id", this.idName);
		
		var body = document.getElementsByTagName("body").item(0);
		body.appendChild(this.dummyElement);
	}
}
OnFontSizeChange.prototype.addEventListener = function(eventName, func){
	if(eventName == "change" || eventName == "smaller" || eventName == "larger"){
		if(typeof func != "function"){
			return;
		}else{
			this.funcList[eventName].push(func);
		}
	}
}
OnFontSizeChange.prototype.callFunc = function(eventName){
	this.isReady = false;
	for(var i=0; i<this.funcList[eventName].length; i++){
		if(typeof this.funcList[eventName][i] == "function"){
			(this.funcList[eventName][i])();
		}
	}
	this.isReady = true;
}
OnFontSizeChange.prototype.getCurSize = function(){
	return this.dummyElement.clientHeight;
}
OnFontSizeChange.prototype.removeEventListener = function(eventName){
	if(eventName == "change" || eventName == "smaller" || eventName == "larger"){
		this.funcList[eventName] = null;
	}
}
/*
OnFontSizeChange.prototype.clearTimer = function(){
	clearInterval(this.timer);
}
*/
