(function($) {
    
    var removeUnusedBloggerBR = function(element) {
        element = $(element);
        switch(element.get(0).tagName.toLowerCase()) {
            case 'pre': {
                var brs = element.find('br');
                for (var j = 0, brLength = brs.length; j < brLength; j++) {
                    var newNode = document.createTextNode('\n');
                    element.get(0).replaceChild(newNode, brs[j]);
                }
                break;
            }
            case 'textarea': {
                var childNode = element.childNodes[0];
                var newNode = document.createTextNode(childNode.nodeValue.replace(/<br\s*\/?>/gi, '\n'));
                element.get(0).replaceChild(newNode, childNode);
                break;
            }
        }
    };
    
    // when dom ready
    $(function() {
    
        // convert old styl syntax highlighter to new style
        $('.post-body.entry-content textarea[name=code],pre[name=code]').each(function() {
            $(this).attr('class', 'brush:' + $(this).attr('class'));
        });
        // highlight
        $('.post-body.entry-content textarea[class*=brush],pre[class*=brush]').each(function() {
            SyntaxHighlighter.highlight({}, this);
        });
        
        // add post controls    
        $('.post.hentry>.post-title.entry-title').before('<div class="post-controls"/>');
        $('.post.hentry').each(function() {
            var post = $(this);
            $(this).find('.post-controls').append($('<a href="#" class="ctrl collapse">collapse</a>').click(function(e) {
                e.preventDefault();
                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(e) {
                e.preventDefault();
                var body = post.find('.post-body');
                body.find('object').show();
                body.slideDown();
                post.find('.post-controls .ctrl').toggle();
            }));
        });
        
        // add global controls    
        $('.blog-posts.hfeed>.date-outer:first').before('<div id="global-controls"/>');
        $('#global-controls').append($('<a id="ctrl-collapse-all" href="#">collapse all</a>').click(function(e) {
            e.preventDefault();
            $('.collapse').click();
        })).append($('<span> | </span>')).append($('<a id="ctrl-expand-all" href="#">expand all</a>').click(function(e) {
            e.preventDefault();
            $('.expand').click();
        }));

        // add dzone logo
        $('.post.hentry').each(function() {            
            var content = $(this).find('.post-title.entry-title a');
            var url = '';
            if(content.length == 0) {
                // in the post page
                content = $(this).find('.post-title.entry-title');
                url = document.location;
            } else {
                // in home page
                url = content.attr('href');
            }
            $(this).find('.post-body.entry-content').prepend('<div class="social-buttons"><div class="dzone-button"/></div>');
            $(this).find('.dzone-button').html('<iframe height="70" width="50" scrolling="no" frameborder="0" src="http://widgets.dzone.com/links/widgets/zoneit.html?t=1&url=' + encodeURIComponent(url) + '&title=' + encodeURIComponent(content.text()) + '"></iframe>');
        });

        // Formula generation
        $('.post-body.entry-content textarea[name=math],pre[name=math]').each(function() {
            var element = this;
            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;
            });
            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);
                    });
            }
        });
        
    });

})(jQuery)


