dojo.addOnLoad( function() { process_presentations() } );


function process_presentations_more() {
    var more_containers = dojo.html.getElementsByClass('presentations_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, 'presentations_more_container_processed' ) ) continue;
        dojo.html.addClass( more_div, 'presentations_more_container_processed' );
        var parts = more_div.getAttribute('id').match(/^presentations_more_container_(\d+)$/);
        if ( ! parts || ! parts[1] ) continue;
        
        var last_epoch = parts[1];
        var more_button = dojo.byId( 'presentations_more_button_' + last_epoch );
        presentations_more_attach( more_button, last_epoch, load_time, ids_json );
    }
}

function gather_shown_entry_ids_json() {
    var posts = dojo.html.getElementsByClass('presentations_prese_container');
    var ids = [];
    for ( var i in posts ) {
        var post = posts[i];
        var parts =post.getAttribute('id').match(/^presentations_prese_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('presentations_prese_listing');
    for ( var i in listings ) {
        var listing = listings[i];
        var parts = listing.getAttribute('id').match(/^presentations_prese_listing_(\d+)$/);
        if ( ! parts || ! parts[1] ) continue;
        return parts[1];
    }
    
    return 2147483647;
}

function presentations_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( 'presentations_more_container_' + container_id );
                if ( ! container ) return;
                container.innerHTML = data.messages_html;
                process_presentations();
            },
            error: function(type, error) {
                alert('Could not fetch more messages. Please try again.');
            }
        });
    } );
}

function process_presentations_rate() {
    var links_containers = dojo.html.getElementsByClass('presentations_rate_links');
    
    for ( var i in links_containers ) {
        var links_div = links_containers[i];
        if ( dojo.html.hasClass( links_div, 'presentations_rate_links_processed' ) ) continue;
        dojo.html.addClass( links_div, 'presentations_rate_links_processed' );
        var parts = links_div.getAttribute('id').match(/^presentations_rate_links_(\d+)$/);
        if ( ! parts || ! parts[1] ) continue;
        
        var enabled = 1;
        if ( dojo.html.hasClass( links_div, 'presentations_rating_disabled' ) ) enabled = 0;
        
        var post_id = parts[1];
        var buttons = dojo.html.getElementsByClass('presentations_rate_link_'  + post_id);
        for ( var j in buttons ) {
            presentations_rate_attach( buttons[j], post_id, enabled );
        }
    }
}

function presentations_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( 'presentations_rate_container_' + post_id );
                if ( ! container ) return;
                container.innerHTML = data.messages_html;
                process_presentations();
            },
            error: function(type, error) {
                alert('Error sending vote. Please try again.');
            }
        });
    } );
}

function process_presentations_select() {
    var links_containers = dojo.html.getElementsByClass('presentations_type_select');
    
    for ( var i in links_containers ) {
        var links_div = links_containers[i];
        if ( dojo.html.hasClass( links_div, 'presentations_type_select_processed' ) ) continue;
        dojo.html.addClass( links_div, 'presentations_type_select_processed' );
        var input_element = dojo.byId('presentations_type_select_input');
        var buttons = dojo.html.getElementsByClass('presentations_type_select_link');
        for ( var j in buttons ) {
            presentations_select_attach( buttons[j], input_element );
            presentations_select_refresh( buttons[j], input_element );
        }
    }
}

function presentations_select_attach( button, input_element ) {
    dojo.event.connect( button, 'onclick', function( evt ) {
        evt.preventDefault();
        input_element.value = button.title;
        presentations_select_refresh_all( input_element );
    } );
}

function presentations_select_refresh_all( input_element ) {
    var buttons = dojo.html.getElementsByClass('presentations_type_select_link');
    for ( var j in buttons ) {
        presentations_select_refresh( buttons[j], input_element );
    }
}

function presentations_select_refresh( button, input_element ) {
    if ( input_element.value == button.title ) {
        dojo.html.addClass( button, 'selected' );
    }
    else {
        dojo.html.removeClass( button, 'selected' );
    }
}

function process_presentations() {
    process_presentations_more();
    process_presentations_rate();
    process_presentations_select();
}

