YAHOO.namespace("util.EU")
/** 
 *  @fileoverview TextResizeDetector
 * 
 *  Detects changes to font sizes when user changes browser settings
 *  <br>Fires a custom event with the following data:<br><br>
 * 	iDelta : difference in pixels from previous setting<br>
 *  iSize  : size in pixel of text<br>
 *
 *  * @author Lawrence Carvalho carvalho@uk.yahoo-inc.com
 * @version 1.0
 */

/**
 * @constructor
 */
YAHOO.util.EU.TextResizeDetector = function() { 
    var el  = null;
	var onTextSizeChange = new YAHOO.util.CustomEvent('textSizeChanged');
	var iIntervalDelay  = 200;
	var iInterval = null;
	var iCurrSize = -1;
 	var createControlElement = function(sId) {
	 	el = document.createElement('span');
		el.id='textResizeControl';
		el.innerHTML='&nbsp;';
		el.style.position="absolute";
		el.style.left="-9999px"
		var elC = YAHOO.util.Dom.get(sId);
		// insert before firstChild
		if (elC)
			elC.insertBefore(el,elC.firstChild);
		iCurrSize = YAHOO.util.EU.TextResizeDetector.getSize();
 	};
 	function _stopDetector() {
		window.clearInterval(iInterval);
		iInterval=null;
	};
	function _startDetector() {
		if (!iInterval) {
			iInterval = window.setInterval('YAHOO.util.EU.TextResizeDetector.detect()',iIntervalDelay);
		}
	};
 	
 	 function _detect() {
 		var iNewSize = YAHOO.util.EU.TextResizeDetector.getSize();

 		if (iNewSize !=iCurrSize) {
 			onTextSizeChange.fire({  iDelta:(iNewSize - iCurrSize),iSize:iCurrSize = iNewSize});
 		}
 		return iCurrSize;
 	};


 	return {
		 	/*
		 	 * Initializes the detector
		 	 * 
		 	 * @param {String} sId The id of the element in which to create the control element
		 	 */
		 	init: function(sId) {
		 		createControlElement(sId);		
				_startDetector();
 			},
			/**
			 * Adds listeners to the ontextsizechange event
			 * 
			 */
 			addEventListener:function(fn,obj,bScope) {
				onTextSizeChange.subscribe(fn,obj,bScope);
			},
			/**
			 * performs the detection and fires textSizeChanged event
			 * @return the current font size
			 * @type {integer}
			 */
 			detect:function() {
 				return _detect();
 			},
 			/**
 			 * Returns the height of the control element
 			 * 
			 * @return the current height of control element
			 * @type {integer}
 			 */
 			getSize:function() {
		 		return el.offsetHeight;
 			},
 			/**
 			 * Stops the detector
 			 */
 			stopDetector:function() {
				return _stopDetector();
			},
			/*
			 * Starts the detector
			 */
 			startDetector:function() {
				return _startDetector();
			}
 	}
 }()
