/*

FontJazz 1.2

http://www.fontjazz.com

(C) Copyright Rasmus Schultz, all rights reserved.

Free for use on all private/commercial websites. You may not
sell this script or FontJazz-generated fonts. Removing this
copyright statement is a violation of the licensing terms.

*/

var FontJazz = {
    
    _fonts: {},
    
    _initialized: false,
    
    _css: null,
    
    _initialize: function() {
        
        for (var fontname in FontJazz._fonts) {
            
            if (!FontJazz._fonts[fontname].initialized) {
                
                var image = FontJazz._fonts[fontname].image;
                var height = FontJazz._fonts[fontname].height;
                
        FontJazz._addRule(
          ".FontJazz-" + fontname + " div",
          "float:left; display:inline; overflow:visible;"
        );
        
                FontJazz._addRule(
                    ".FontJazz-" + fontname + " span",
                    "display:block; float:left; background-image:url(" + image + "); height:" + height + "px;"
                );
                
                FontJazz._addRule(
                    ".FontJazz-" + fontname + " br",
                    "clear:both;"
                );
                
                FontJazz._fonts[fontname].initialized = true;
                
            }
            
        }
        
    },
    
    _addRule: function(selector, rule) {
        
        if (!FontJazz._css) {
            if (document.createStyleSheet) {
                FontJazz._css = document.createStyleSheet();
            } else {
                FontJazz._css = document.createElement('style');
                FontJazz._css.setAttribute('type', 'text/css');
                document.getElementsByTagName("head")[0].appendChild(FontJazz._css);
            }
        }
        
        if (FontJazz._css.addRule) {
            FontJazz._css.addRule(selector, rule);
        } else {
            FontJazz._css.appendChild( document.createTextNode(selector + ' { ' + rule + " }\n") );
        }
        
    },
    
    register: function(fontname, data) {
        FontJazz._fonts[fontname] = data;
        FontJazz.initialized = false;
    },
    
    transform: function(element, fontname) {
        
        if (!document.styleSheets) return;
        
        if (!FontJazz.initialized) FontJazz._initialize();
        
        var font = FontJazz._fonts[fontname];
        var text = element.firstChild.nodeValue + ' ';
        
        var div = document.createElement('div');
        div.className = "FontJazz-" + fontname;
        
        var html = '<span style="overflow:hidden; width:0px;">' + text + '</span>';
        var adjust = font[text.charAt(0)][2];
        
    var word = '', w = 0, wm = 0;
        for (var i=0; i<text.length; i++) {
            var c = text.charAt(i), metrics = font[c];
            if (metrics) {
        w += metrics[1]+(adjust-metrics[2]);
        if (word == '') wm = adjust-metrics[2];
        word += '<span style="' + (word == '' ? '' : 'margin-left: ' + (adjust-metrics[2]) + 'px;') + 'background-position: -' + metrics[0] + 'px 0px; width: ' + metrics[1] + 'px;"></span>';
        if (c == ' ') {
          html += '<div style="margin-left:' + wm + 'px; width:' + (w-wm) + 'px;">' + word + '</div>';
          word = ''; w = 0; wm = 0;
        }
        adjust = metrics[3]-metrics[1];
            }
        }
        
        div.innerHTML = html + "<br />";
        
        element.parentNode.insertBefore(div, element);
        element.parentNode.removeChild(element);
        
    },
    
    apply: function(tagname, fontname, rootnode) {
        
        var collection = (rootnode || document.body).getElementsByTagName(tagname);
        
        var elements = new Array();
        
        for (var i=0; i<collection.length; i++)
            elements[i] = collection[i];
        
        for (var i=0; i<elements.length; i++)
            FontJazz.transform(elements[i], fontname);
        
    }
    
}
