dojo.addOnLoad( function() { process_blogs_promote() } );
dojo.addOnLoad( function() { process_blogs_rate() } );
dojo.addOnLoad( function() { process_blogs_more() } );

function process_blogs_promote() {
    var links_containers = dojo.html.getElementsByClass('blogs_promote_links');
    
    for ( var i in links_containers ) {
        var links_div = links_containers[i];
        if ( dojo.html.hasClass( links_div, 'blogs_promote_links_processed' ) ) continue;
        dojo.html.addClass( links_div, 'blogs_promote_links_processed' );
        var parts = links_div.getAttribute('id').match(/^blogs_promote_links_(\d+)$/);
        if ( ! parts || ! parts[1] ) continue;
        
        var post_id = parts[1];
        var promote_button = dojo.byId( 'blogs_promote_promote_' + post_id );
        var demote_button = dojo.byId( 'blogs_promote_demote_' + post_id );
        
        if ( promote_button ) blogs_promote_attach( promote_button, post_id );
        if ( demote_button ) blogs_promote_attach( demote_button, post_id );
    }
}

function blogs_promote_attach( button, post_id ) {
    dojo.event.connect( button, 'onclick', function( evt ) {
        evt.preventDefault();
        dojo.io.bind({
            url: button.href,
            mimetype: "text/json",
            method: 'POST',
            content : {},
            load: function(type, data, evt) {
                var container = dojo.byId( 'blogs_promote_container_' + post_id );
                if ( container && data.messages_html ) {;
                    container.innerHTML = data.messages_html;
                    process_blogs_promote();
                }
                var points = dojo.byId( 'blogs_points_container_' + post_id );
                if ( points ) {
                    var p = data.total_points ? data.total_points : 0;
                    points.innerHTML = p;
                }
            },
            error: function(type, error) {
                alert('Error sending vote. Please try again.');
            }
        });
    } );
}

function process_blogs_rate() {
    var links_containers = dojo.html.getElementsByClass('blogs_rate_links');
    
    for ( var i in links_containers ) {
        var links_div = links_containers[i];
        if ( dojo.html.hasClass( links_div, 'blogs_rate_links_processed' ) ) continue;
        dojo.html.addClass( links_div, 'blogs_rate_links_processed' );
        var parts = links_div.getAttribute('id').match(/^blogs_rate_links_(\d+)$/);
        if ( ! parts || ! parts[1] ) continue;
        
        var enabled = 1;
        if ( dojo.html.hasClass( links_div, 'blogs_rating_disabled' ) ) enabled = 0;
        
        var post_id = parts[1];
        var buttons = dojo.html.getElementsByClass('blogs_rate_link_'  + post_id);
        for ( var j in buttons ) {
            blogs_rate_attach( buttons[j], post_id, enabled );
        }
    }
}

function blogs_rate_attach( button, post_id, enabled ) {
    dojo.event.connect( button, 'onclick', function( evt ) {
        evt.preventDefault();
        if ( enabled ) dojo.io.bind({
            url: button.href,
            mimetype: "text/json",
            method: 'POST',
            content : {},
            load: function(type, data, evt) {
                var container = dojo.byId( 'blogs_rate_container_' + post_id );
                if ( ! container ) return;
                container.innerHTML = data.messages_html;
                process_blogs_rate();
            },
            error: function(type, error) {
                alert('Error sending vote. Please try again.');
            }
        });
    } );
}

function process_blogs_more() {
    var more_containers = dojo.html.getElementsByClass('blogs_more_container');
    var load_time = gather_page_load_time()
    var ids_json = gather_shown_entry_ids_json();
    
    for ( var i in more_containers ) {
        var more_div = more_containers[i];
        if ( dojo.html.hasClass( more_div, 'blogs_more_container_processed' ) ) continue;
        dojo.html.addClass( more_div, 'blogs_more_container_processed' );
        var parts = more_div.getAttribute('id').match(/^blogs_more_container_(\d+)$/);
        if ( ! parts || ! parts[1] ) continue;
        
        var last_epoch = parts[1];
        var more_button = dojo.byId( 'blogs_more_button_' + last_epoch );
        blogs_more_attach( more_button, last_epoch, load_time, ids_json );
    }
}

function gather_shown_entry_ids_json() {
    var posts = dojo.html.getElementsByClass('blogPost');
    var ids = [];
    for ( var i in posts ) {
        var post = posts[i];
        var parts =post.getAttribute('id').match(/^blogs_entry_container_(\d+)$/);
        if ( ! parts || ! parts[1] ) continue;
        ids.push( parts[1] );
    }
    
    return dojo.json.serialize( ids );
}

function gather_page_load_time() {
    var listings = dojo.html.getElementsByClass('blogs_post_listing');
    for ( var i in listings ) {
        var listing = listings[i];
        var parts = listing.getAttribute('id').match(/^blogs_post_listing_(\d+)$/);
        if ( ! parts || ! parts[1] ) continue;
        return parts[1];
    }
    
    return 2147483647;
}

function blogs_more_attach( button, container_id, load_time, ids_json ) {
    dojo.event.connect( button, 'onclick', function( evt ) {
        evt.preventDefault();
        dojo.io.bind({
            url: button.href,
            mimetype: "text/json",
            method: 'POST',
            content : {
                page_load : load_time,
                shown_entry_ids : ids_json
            },
            load: function(type, data, evt) {
                var container = dojo.byId( 'blogs_more_container_' + container_id );
                if ( ! container ) return;
                container.innerHTML = data.messages_html;
                process_blogs_promote();
                process_blogs_rate();
                process_blogs_more();
            },
            error: function(type, error) {
                alert('Could not fetch more messages. Please try again.');
            }
        });
    } );
}

