$(function() {
    var runs   = $('div#run_list');
    var jobs   = $('div#job_list');
    var events = $('div#event_list');

    var state = {};

    t2hui.fetch(
        stream_uri,
        {done: function() {
            if (state.run_table) {
                state.run_table.make_sortable();
            }

            if (state.job_table) {
                state.job_table.make_sortable();
            }
        }},
        function(item) {
            if (item.type === 'event') {
                item.data.run_id  = state.run.run_id;
                item.data.job_key = state.job.job_key;
                state.event = item.data;
                if (!state.event_table) {
                    var event_controls = t2hui.eventtable.build_controls(state.run, state.job);
                    var event_table   = t2hui.eventtable.build_table(state.run, state.job, event_controls);

                    events.append(event_controls.dom);
                    events.append(event_table.render());

                    state.event_controls = event_controls;
                    state.event_table    = event_table;

                    if (state.job.status == 'running' || state.job.status == 'pending') {
                        events.addClass('live');
                    }
                }

                state.event_table.render_item(item.data, item.data.event_id);
            }
            else if (item.type === 'job') {
                item.data.run_id = state.run.run_id;
                state.job = item.data;
                if (!state.job_table) {
                    var job_table = t2hui.jobtable.build_table(state.run);
                    jobs.append(job_table.render());
                    state.job_table = job_table;
                }
                state.job_table.render_item(item.data, item.data.job_key);
            }
            else if (item.type === 'run') {
                state.run = item.data;
                if (!state.run_table) {
                    var run_table = t2hui.runtable.build_table();
                    runs.append(run_table.render());
                    state.run_table = run_table;
                }
                state.run_table.render_item(item.data, item.data.run_id);
            }
        }
    );

});