/**
 * @see http://www.useragentman.com/blog/2009/11/29/how-to-detect-font-smoothing-using-javascript/
 */
var TypeHelpers = new function () {

    // I use me instead of this.  For reasons why, please read:
    // http://w3future.com/html/stories/callbacks.xml
    var me = this;

    me.hasSmoothing = function() {

        // IE has screen.fontSmoothingEnabled - sweet!
        if (typeof(screen.fontSmoothingEnabled) != "undefined") {
            return screen.fontSmoothingEnabled;
        } else {
            try {
                // Create a 35x35 Canvas block.
                var canvasNode = document.createElement('canvas');
                canvasNode.width = "35";
                canvasNode.height = "35";
    
                // We must put this node into the body, otherwise
                // Safari Windows does not report correctly.
                canvasNode.style.display = 'none';
                document.body.appendChild(canvasNode);
                var ctx = canvasNode.getContext('2d');
    
                // draw a black letter 'O', 32px Arial.
                ctx.textBaseline = "top";
                ctx.font = "32px Arial";
                ctx.fillStyle = "black";
                ctx.strokeStyle = "black";
    
                ctx.fillText("O", 0, 0);
    
                // start at (8,1) and search the canvas from left to right,
                // top to bottom to see if we can find a non-black pixel.  If
                // so we return true.
                for (var j = 8; j <= 32; j++) {
                    for (var i = 1; i <= 32; i++) {
                        var imageData = ctx.getImageData(i, j, 1, 1).data;
                        var alpha = imageData[3];
                        if (alpha != 255 && alpha != 0) {
                            return true; // font-smoothing must be on.
                        }
                    }
                }
                // didn't find any non-black pixels - return false.
                return false;
            } catch (ex) {
                // Something went wrong (for example, Opera cannot use the
                // canvas fillText() method.  Return null (unknown).
                return null;
            }
        }
    }

    me.insertClasses = function(){
        var result = me.hasSmoothing();
        var htmlNode = document.getElementsByTagName('html')[0];
        if (result == true) {
            htmlNode.className += " hasFontSmoothing-true";
        } else if (result == false) {
            htmlNode.className += " hasFontSmoothing-false";
        } else { // result == null
            htmlNode.className += " hasFontSmoothing-unknown";
        }
    }
}

