/**
 * 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 = "serif";      //font for the parent element DIV.
  s.style.fontFamily = "serif";      //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;  
}


