(function($) {

    $.fn.extend({

        tagName: function() {
            if (1 === this.length) {
                return this[0].tagName.toLowerCase();
            } else {
                var tagNames = [];
                this.each(function(i, el) {
                    tagNames[i] = el.tagName.toLowerCase();
                });
                return tagNames;
            }
        }

    });

}(jQuery));

var Mycila = Mycila || {

    removeUnusedBloggerBR: function(element) {
        element = $(element);
        if (element.tagName() == 'pre') {
            var brs = element.find('br');
            for (var j = 0, brLength = brs.length; j < brLength; j++) {
                var newNode = document.createTextNode('\n');
                element[0].replaceChild(newNode, brs[j]);
            }
        } else if (element.tagName() == 'textarea') {
            var childNode = element.childNodes[0];
            var newNode = document.createTextNode(childNode.nodeValue.replace(/<br\s*\/?>/gi, '\n'));
            element[0].replaceChild(newNode, childNode);
        }
    },

    generateFormula: function(element) {
        Mycila.removeUnusedBloggerBR(element);
        var size = element.getAttribute('size') || 12;
        var formulas = '';
        $.each(element.innerHTML.split('\n'), function(i, formula) {
            formula = formula.trim();
            if (formula.length > 0) formulas += '\n' + formula;
        });
        console.log(formulas);
        if (formulas.length > 0) {
            $.getJSON("http://res.mycila.com/phpmathpublisher/gen.php?callback=?",
            {formula: formulas, size: size},
                    function(data) {
                        var div = $('<div class="math"/>');
                        $.each(data, function(i, formula) {
                            div.append($('<img/>')
                                    .attr('src', formula.img)
                                    .attr('title', formula.title)
                                    .attr('alt', formula.title)
                                    .css('vertical-align', formula.valign + 'px'));
                            if (i < data.length - 1) div.append($('<br/>'));
                        });
                        $(element).replaceWith(div);
                    });
        }
    },

    addGlobalControls: function(root) {
        $(root).append($('<a id="ctrl-collapse-all" href="#">collapse all</a>').click(function() {
            $('.collapse').click();
        })).append($('<span> | </span>'))
                .append($('<a id="ctrl-expand-all" href="#">expand all</a>').click(function() {
            $('.expand').click();
        }));
    },

    addPostControls: function(post) {
        post = $(post);
        post.find('.post-controls').each(function() {
            $(this).append($('<a href="#" class="ctrl collapse">collapse</a>').click(function() {
                var body = post.find('.post-body');
                body.find('object').hide();
                body.slideUp();
                post.find('.post-controls .ctrl').toggle();
            })).append($('<a style="display: none;" href="#" class="ctrl expand">expand</a>').click(function() {
                var body = post.find('.post-body');
                body.find('object').show();
                body.slideDown();
                post.find('.post-controls .ctrl').toggle();
            }));
        });
    }

}
