FontLoader detects when web fonts specified in the "fontFamiliesArray" array were loaded and rendered. Then it
notifies the specified delegate object via "fontLoaded" and "fontsLoaded" methods when specific or all fonts were
loaded respectively. The use of this functions implies that the insertion of specified web fonts into the
document is done elsewhere.

If timeout (default 3000ms) is reached before all fonts were loaded and rendered, then "fontsLoaded" delegate
method is invoked with an error object as its single parameter. The error object has two fields: the "message"
field holding the error description and the "notLoadedFontFamilies" field holding an array with all the
font-families that weren't loaded. Otherwise the parameter is null.

@param {Array}     fontFamiliesArray       Array of font-family strings.
@param {Object}    delegate                Delegate object whose delegate methods will be invoked in its own context.
@param {Function}  [delegate.fontsLoaded]  Delegate method invoked after all fonts are loaded or timeout is reached.
@param {Function}  [delegate.fontLoaded]   Delegate method invoked for each loaded font with its font-family string as its single parameter.
@param {Number}    [timeout=3000]          Timeout in milliseconds. Pass "null" to disable timeout.
@constructor
function FontLoader(fontFamiliesArray, delegate, timeout) {
		// Public
		this.delegate = delegate;
		this.timeout = (typeof timeout !== "undefined") ? timeout : 3000;

		// Private
		this._fontFamiliesArray = fontFamiliesArray.slice(0);
		this._testContainer = null;
		this._adobeBlankSizeWatcher = null;
		this._timeoutId = null;
		this._intervalId = null;
		this._intervalDelay = 50;
		this._numberOfLoadedFonts = 0;
		this._numberOfFontFamilies = this._fontFamiliesArray.length;
		this._fontsMap = {};
		this._finished = false;
	}