/*

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; overflow: visible; height:" + height + "px;"
                );

                FontJazz._addRule(
					".FontJazz-" + fontname + " span",
					"display:block; float:left; background-position: center; background-repeat: no-repeat; background-image:url(" + image + "); height:" + height + "px; width: inherit;"
				);

                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 = '';
        var adjust = font[text.charAt(0)][2];

        var word = '';
        var w = 0;
        var wm = 0;
        var totalw = 0;

        for (var i = 0; i < text.length; i++) {
            var c = text.charAt(i);

            var 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>';
                totalw += metrics[1];
                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];
            }
        }

        totalw += 5;
        div.innerHTML = '<div style="display: none;overflow:hidden; width:'+totalw+'px;">' + text + '</div>' + 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);
        }

    }

}
