/**

 * JavaScript code to detect available availability of a 

 * particular font in a browser using JavaScript and CSS. 

 * 

 * Author : Lalit Patel

 * Website: http://www.lalit.org/lab/jsoncookies

 * License: Creative Commons Attribution-ShareAlike 2.5

 *          http://creativecommons.org/licenses/by-sa/2.5/

 * Version: 0.15 

 *          changed comparision font to serif from sans-serif, 

 *          as in FF3.0 font of child element didn't fallback 

 *          to parent element if the font is missing.

 * Updated: 09 July 2009 10:52pm

 * 

 */



/**

 * Actual function that does all the work. Returns an array with all the info.

 * This test will fail for the font set as the default serif font.

 * 

 * Usage: d = new Detector();

 *        d.test('font_name');

 */

var Detector = function(){

	var h = document.getElementsByTagName("BODY")[0];

	var d = document.createElement("DIV");

	var s = document.createElement("SPAN");

	d.appendChild(s);

	d.style.fontFamily = "sans";			//font for the parent element DIV.

	s.style.fontFamily = "sans";			//serif font used as a comparator.

	s.style.fontSize   = "72px";			//we test using 72px font size, we may use any size. I guess larger the better.

	s.innerHTML        = "mmmmmmmmmmlil";		//we use m or w because these two characters take up the maximum width. And we use a L so that the same matching fonts can get separated

	h.appendChild(d);

	var defaultWidth   = s.offsetWidth;		//now we have the defaultWidth

	var defaultHeight  = s.offsetHeight;	//and the defaultHeight, we compare other fonts with these.

	h.removeChild(d);

	/* test

	 * params:

	 * font - name of the font you wish to detect

	 * return: 

	 * f[0] - Input font name.

	 * f[1] - Computed width.

	 * f[2] - Computed height.

	 * f[3] - Detected? (true/false).

	 */

	function debug(font) {

		h.appendChild(d);

		var f = [];

		f[0] = s.style.fontFamily = font;	// Name of the font

		f[1] = s.offsetWidth;				// Width

		f[2] = s.offsetHeight;				// Height

		h.removeChild(d);

		font = font.toLowerCase();

		if (font == "serif") {

			f[3] = true;	// to set arial and sans-serif true

		} else {

			f[3] = (f[1] != defaultWidth || f[2] != defaultHeight);	// Detected?

		}

		return f;

	}

	function test(font){

		f = debug(font);

		return f[3];

	}

	this.detailedTest = debug;

	this.test = test;	

}


