var TM_TL = {
	
    CONSTANTS: {
        STREAM: 1,
        TAKE: 2
    },
    
    URL: { 
        TAKE: '/base/get_takes?numresults=10&get_fields=moments&moment_id='+moment.moment_id+'&emotion_id=all',
        STREAM: '/base/get_timeline?start=10&numresults=10&get_fields=moments'
    },

    PARAMS: {},

    // set this to stream or timeline
    MODE: false,
    
    // get everything ready
    init: function(){

        if (JS_VARS.user_id) {
            TM_TL.PARAMS.user_id = JS_VARS.user_id;
        }

        if (JS_VARS.moment_id) {
            TM_TL.PARAMS.moment_id = JS_VARS.moment_id;
        }

        TM_TL.STREAM_WRAP = $('#moment_stream');
        
        if (TM_TL.STREAM_WRAP.length > 0) {
            TM_TL.stream.init();
        }

        TM_TL.TAKE_WRAP = $('#take_stream');

        if (TM_TL.TAKE_WRAP.length > 0) {
            TM_TL.take.init();
        }

        if ($('.infacebook').length) {
            TM_TL.facebook = true;
        }

    }, 
    
    stream: {
    
        vars: {
            user_id: JS_VARS.user_id,
            right: 1,
            left: -1,
            direction: 1,
            first_order_id: JS_VARS.timeline.start,
            start: JS_VARS.timeline.start,
            total_moments: JS_VARS.timeline.total,
            moment: {} },
    
        init: function () {
            if (moment) {
                TM_TL.stream.vars.moment = moment;
            }
        
            TM_TL.MODE = TM_TL.CONSTANTS.STREAM;
            
            TM_TL.stream.vars.el = TM_TL.STREAM_WRAP;

            if (moment) {
                TM_TL.stream.vars.on_moment_id = moment.moment_id;
            }
            
            if (TM_TL.STREAM_WRAP.find('ul').length > 0) {
                TM_TL.stream.vars.ul = TM_TL.STREAM_WRAP.find('ul');
                TM_TL.stream.vars.el.find('.slide').remove();
                TM_TL.stream.vars.ul.find('li .thumb, li .title').hover(function(){$(this).parent().addClass('hover');},function(){$(this).parent().removeClass('hover');});
            } else {
                var BUILD_FROM_SCRATCH = true;
                TM_TL.stream.vars.ul = $('<ul><li/></ul>').appendTo(TM_TL.stream.vars.el);
                TM_TL.stream.vars.el.data('filter', '');
            }
                
            // change all the add links to open the wizard
            TM_TL.stream.vars.ul.find('li.add a').attr('href', '/moment/add');

            //add click tracking
            if (TM_TL.stream.vars.on_moment_id) {
                TM_TL.stream.vars.ul.find('li .thumb, li .title').click(function() { tm_clicks('timeline_moment_click'); });
            } else {
                TM_TL.stream.vars.ul.find('li .thumb, li .title').click(function() { tm_clicks('timeline_profile_click'); });
            }

            // figure out how many moments per page
            TM_TL.stream.vars.showing = Math.floor(TM_TL.stream.vars.el.width() / TM_TL.stream.vars.el.find('li').outerWidth(true));
            
            if (BUILD_FROM_SCRATCH) {
                TM_TL.stream.vars.ul.empty();
                for (i=0;i<TM_TL.stream.vars.showing;i++) {
                    TM_TL.stream.vars.ul.append('<li/>');
                }
            }

            // set width of el so it doesn't change until after you resize
            try {
            TM_TL.stream.vars.el.width(TM_TL.stream.vars.showing * TM_TL.stream.vars.el.find('li').outerWidth(true));
            } catch(e) {}
            
            // previous and next buttons
            TM_TL.stream.vars.prev = $('<a href="#" class="slide prev off"/>').click(TM_TL.stream.changePage).prependTo(TM_TL.stream.vars.el);
            TM_TL.stream.vars.next = $('<a href="#" class="slide next off"/>').click(TM_TL.stream.changePage).appendTo(TM_TL.stream.vars.el);

            if (TM_TL.stream.vars.total_moments > TM_TL.stream.vars.first_order_id + TM_TL.stream.vars.showing) {
                TM_TL.stream.vars.next.removeClass('off');
            }
            if (TM_TL.stream.vars.first_order_id > 0) {
                TM_TL.stream.vars.prev.removeClass('off');
            }

            /* the filter was changed while you weren't looking
            if (!TM_TL.stream.vars.el.data('filter') && TM_TL.stream.vars.el.data('filter') !== '') {
                TM_TL.stream.vars.el.data('filter', $.cookie('tl_filter') || $.cookie('tl_sort') || '');
            }
            if ($('#moment_user [name=filter_id]').length > 0 && TM_TL.stream.vars.el.data('filter') != $('#moment_user [name=filter_id]').val()) {
                $('#moment_user [name=filter_id]').change();
                return;
            }*/

            // add text for some filters
            TM_TL.stream.vars.prev.empty();
            TM_TL.stream.vars.next.empty();
            switch (TM_TL.stream.vars.el.data('filter')) {
            case 'popular':
                $('<span>less popular</span>').appendTo(TM_TL.stream.vars.prev);
                $('<span>more popular</span>').appendTo(TM_TL.stream.vars.next);
                break;
            case 'latest':
                $('<span>older</span>').appendTo(TM_TL.stream.vars.prev);
                $('<span>more recent</span>').appendTo(TM_TL.stream.vars.next);
                break;
            }
            
            // create an overflow hidden window to slide inside of
            TM_TL.stream.vars.window = $('<div class="window" style="width:' + TM_TL.stream.vars.el.width() + 'px"/>');
            TM_TL.stream.vars.ul.wrap(TM_TL.stream.vars.window);
            TM_TL.stream.vars.ul.css({ 'position': 'absolute', 'left': 0 , 'width': 5000 });

            // remove any extra moments
            TM_TL.stream.vars.el.find('li:gt('+(TM_TL.stream.vars.showing-1)+')').remove();
            
            if (BUILD_FROM_SCRATCH) {
                TM_TL.stream.get();
            }

        },
        
        refresh: function (output) {

            var moments = output.moments.moments || [];

            // the start isn't necessarily what i asked for
            TM_TL.stream.vars.first_order_id = parseInt(output.moments.start,10);
            
            // total can change
            TM_TL.stream.vars.total_moments = parseInt(output.moments.total_moments,10);
            if (TM_TL.stream.vars.first_order_id <= 0) {
                TM_TL.stream.vars.prev.addClass('off');
            } else {
                TM_TL.stream.vars.prev.removeClass('off');
            }
            if (TM_TL.stream.vars.first_order_id + moments.length >= TM_TL.stream.vars.total_moments) {
                TM_TL.stream.vars.next.addClass('off');
            } else {
                TM_TL.stream.vars.next.removeClass('off');
            }
            
            // add text for some filters
            TM_TL.stream.vars.prev.empty();
            TM_TL.stream.vars.next.empty();
            switch (TM_TL.stream.vars.el.data('filter')) {
            case 'popular':
                $('<span>less popular</span>').appendTo(TM_TL.stream.vars.prev);
                $('<span>more popular</span>').appendTo(TM_TL.stream.vars.next);
                break;
            case 'latest':
                $('<span>older</span>').appendTo(TM_TL.stream.vars.prev);
                $('<span>more recent</span>').appendTo(TM_TL.stream.vars.next);
                break;
            }
            
            var target_left = TM_TL.stream.vars.el.width() * -1;
            
            if (TM_TL.stream.vars.ul.children().length < TM_TL.stream.vars.showing) {
                var diff = TM_TL.stream.vars.showing - TM_TL.stream.vars.ul.children().length;
                for (i=0;i<diff;i++) {
                    $('<li/>').appendTo(TM_TL.stream.vars.ul);
                }
            }
            
            var li;
                        
            if (TM_TL.stream.vars.direction == TM_TL.stream.vars.left) {
                moments.reverse();
                for (i=0;i<TM_TL.stream.vars.showing;i++) {

                    li = TM_TL.stream.buildMoment(moments[i], i, true);

                    TM_TL.stream.vars.ul.prepend(li);
                
                    if (i > moments.length) { li.css('opacity',0); }
                }
                TM_TL.stream.vars.ul.css({'left':TM_TL.stream.vars.el.width() * -1});
                target_left = 0;
            } else {
                for (i=0;i<TM_TL.stream.vars.showing;i++) {
                
                    li = TM_TL.stream.buildMoment(moments[i], i, false);

                    TM_TL.stream.vars.ul.append(li);
                
                    if (i > moments.length) { li.css('opacity',0); }
                }
            }
            
            // add hover states
            TM_TL.stream.vars.ul.find('li .thumb, li .title').hover(function(){$(this).parent().addClass('hover');},function(){$(this).parent().removeClass('hover');});

            TM_TL.stream.vars.ul.animate({'left': target_left}, function(){
                TM_TL.stream.vars.ul.css('left',0);
                if (TM_TL.stream.vars.direction == TM_TL.stream.vars.right) {
                    TM_TL.stream.vars.ul.find('li:lt('+(TM_TL.stream.vars.showing)+')').remove();
                } else {
                    TM_TL.stream.vars.ul.find('li:gt('+(TM_TL.stream.vars.showing-1)+')').remove();
                }
            });

            JS_VARS.center_on_now = false;        

            //add click tracking
            if (TM_TL.stream.vars.on_moment_id) {
                TM_TL.stream.vars.ul.find('li .thumb, li .title').click(function() { tm_clicks('timeline_moment_click'); });
            } else {
                TM_TL.stream.vars.ul.find('li .thumb, li .title').click(function() { tm_clicks('timeline_profile_click'); });
            }
        },
        
        buildMoment: function (moment, pos, reverse) {
            var li = $('<li/>');
            
            if (moment) {
                if (moment.moment_id === 0) {
                    li.addClass('now');
                } else {
                    if (TM_TL.stream.vars.on_moment_id == moment.moment_id) {
                        li.addClass('on');
                    }
                    if (moment.group_first) {
                        li.addClass('first');
                    }
                    if (moment.group_last) {
                        li.addClass('last');
                    }
                    if (moment.momento_type) {
                        li.addClass('mot_'+moment.momento_type);
                    }

                    var url;
                    if (TM_TL.facebook) {
                        url = '/facebook?moment_id='+moment.moment_id;
                    } else {
                        url = '/?moment_id='+moment.moment_id;
                    }

                    var thumb = $('<a class="bordered thumb" href="'+url+'"><span/></a>').appendTo(li);
                    if (moment.moment_thumb) {
                        thumb.find('span').css('background-image', 'url(' + moment.moment_thumb + ')');
                    }
                    
                    var title_text = moment.moment_name;
                    
                    // we don't want the same text showing up before every moment
                    if (JS_VARS.partner_info && JS_VARS.partner_info.moment_prepend) {
                        title_text = $.trim(title_text.replace(JS_VARS.partner_info.moment_prepend, ''));
                    }
                    
                    var title = $('<a class="title" href="'+url+'"/>').appendTo(li).text(title_text);
                    
                    if (moment.moment_group > 0) {
                        li.addClass('group');
                        if (moment.group_first || ((pos === 0 && !reverse) || (pos === TM_TL.stream.vars.showing - 1 && reverse))) {
                            var group_link = $('<a href="' + $.buildUrl('group',moment.moment_group,moment.group_name) + '" class="group"/>').text(moment.group_name).prependTo(li);
                            var group_id = JS_VARS.group_id || TM_TL.stream.vars.moment.moment_group;
                            if (moment.moment_group === group_id) {
                                group_link.addClass('on');
                            }
                        }
                    }
    
                    if (moment.future > 0) {
                        li.addClass('future');
                        $('<span class="flag future" title="this is a future moment"><span class="fg">future</span><span class="bg">future</span></span>').appendTo(thumb);
                    }
                }
            }
        
            return li;
        
        },
        
        // add pagination controls if there are more moments than what's showing
        changePage: function (e) {
            e.preventDefault();

            // link is off
            if ($(this).hasClass('off')) {
                return;
            }

            TM_TL.stream.vars.lis = TM_TL.stream.vars.el.find('li');
            TM_TL.stream.vars.start = TM_TL.stream.vars.first_order_id + (TM_TL.stream.vars.numresults || TM_TL.stream.vars.showing);
            TM_TL.stream.vars.numresults = TM_TL.stream.vars.showing;
            TM_TL.stream.vars.direction = TM_TL.stream.vars.right;

            // reverse the li order for refreshing when going back
            if ($(this).hasClass('prev')) {
                TM_TL.stream.vars.lis = $($.makeArray(TM_TL.stream.vars.lis).reverse());
                TM_TL.stream.vars.start = TM_TL.stream.vars.first_order_id - TM_TL.stream.vars.showing;
                TM_TL.stream.vars.direction = TM_TL.stream.vars.left;
            }

            if (TM_TL.stream.vars.start <= 0) {
                TM_TL.stream.vars.prev.addClass('off');
                TM_TL.stream.vars.numresults = TM_TL.stream.vars.showing + TM_TL.stream.vars.start;
            } else {
                TM_TL.stream.vars.prev.removeClass('off');
            }

            if (TM_TL.stream.vars.start + TM_TL.stream.vars.showing >= TM_TL.stream.vars.total_moments) {
                TM_TL.stream.vars.next.addClass('off');
                TM_TL.stream.vars.numresults = TM_TL.stream.vars.total_moments - TM_TL.stream.vars.start + 1;
            } else {
                TM_TL.stream.vars.next.removeClass('off');
            }

            //update starting point
            TM_TL.stream.vars.first_order_id = TM_TL.stream.vars.start;

            var options = {};
            var filter = $('#moment_user [name=filter_id]').val();
            if (filter !== '' && filter != undefined) {
                if (TM_TL.STREAM_WRAP.data('filter_type') == 2) {
                    options.special_filter = filter;
                } else {
                    options.filter_id = filter.replace('f_','');
                }
            }
            
            TM_TL.stream.get(options);

        },
        
        get: function(options) {
            
            // make the call
            var defaults = {
                'user_id': TM_TL.stream.vars.user_id,
                'numresults': TM_TL.stream.vars.numresults || 23,
                'get_fields': 'moments',
                'style': 'stream' };
            
            if (JS_VARS.center_on_now==true) {
                defaults.center_on_now = true;
                defaults.special_filter = 'public';
            } else {
                defaults.start = TM_TL.stream.vars.start > 0 ? TM_TL.stream.vars.start : 0;
            }

            var input = $.extend(null, defaults, options);
            
            TM_TL.stream.vars.first_order_id = input.start;

            var source_url = TM_TL.URL.STREAM;            
            $.get(source_url, input, TM_TL.stream.refresh, 'json');
        }
    
    },


    take: {

        vars: {
            user_id: JS_VARS.user_id,
            right: 1,
            left: -1,
            direction: 1,
            first_order_id: JS_VARS.take.start,
            start: JS_VARS.take.start,
            total_moments: JS_VARS.take.total,
            emotion_id: 'all',
            moment: {} },

        init: function () {
            if (moment) {
                TM_TL.take.vars.moment = moment;
            }

            TM_TL.MODE = TM_TL.CONSTANTS.TAKE;

            TM_TL.take.vars.el = TM_TL.TAKE_WRAP;

            if (moment) {
                TM_TL.take.vars.on_moment_id = moment.moment_id;
            }

            if (TM_TL.take.vars.el.find('ul').length > 0) {
                TM_TL.take.vars.ul = TM_TL.TAKE_WRAP.find('ul');
                TM_TL.take.vars.el.find('.slide').remove();
                TM_TL.take.vars.ul.find('li .thumb, li .title').hover(function(){$(this).parent().addClass('hover');},function(){$(this).parent().removeClass('hover');});
            } else {
                var BUILD_FROM_SCRATCH = true;
                TM_TL.take.vars.ul = $('<ul><li/></ul>').appendTo(TM_TL.take.vars.el);
                TM_TL.take.vars.el.data('filter', '');
            }

            // change all the add links to open the wizard
            TM_TL.take.vars.ul.find('li.add a').attr('href', '/moment/add');

            //add click tracking
            if (TM_TL.take.vars.on_moment_id) {
                TM_TL.take.vars.ul.find('li .thumb, li .title').click(function() { tm_clicks('timeline_moment_click'); });
            } else {
                TM_TL.take.vars.ul.find('li .thumb, li .title').click(function() { tm_clicks('timeline_profile_click'); });
            }

            // figure out how many moments per page
            TM_TL.take.vars.showing = Math.floor(TM_TL.take.vars.el.width() / TM_TL.take.vars.el.find('li').outerWidth(true));

            if (BUILD_FROM_SCRATCH) {
                TM_TL.take.vars.ul.empty();
                for (i=0;i<TM_TL.take.vars.showing;i++) {
                    TM_TL.take.vars.ul.append('<li/>');
                }
            }

            // set width of el so it doesn't change until after you resize
            try {
            TM_TL.take.vars.el.width(TM_TL.take.vars.showing * TM_TL.take.vars.el.find('li').outerWidth(true));
            } catch(e) {}

            // previous and next buttons
            TM_TL.take.vars.prev = $('<a href="#" class="slide prev off"/>').click(TM_TL.take.changePage).prependTo(TM_TL.take.vars.el);
            TM_TL.take.vars.next = $('<a href="#" class="slide next off"/>').click(TM_TL.take.changePage).appendTo(TM_TL.take.vars.el);

            if (TM_TL.take.vars.total_moments > TM_TL.take.vars.first_order_id + TM_TL.take.vars.showing) {
                TM_TL.take.vars.next.removeClass('off');
            }
            if (TM_TL.take.vars.first_order_id > 0) {
                TM_TL.take.vars.prev.removeClass('off');
            }

            /* the filter was changed while you weren't looking
            if (!TM_TL.take.vars.el.data('filter') && TM_TL.take.vars.el.data('filter') !== '') {
                TM_TL.take.vars.el.data('filter', $.cookie('tl_filter') || $.cookie('tl_sort') || '');
            }
            if ($('#moment_user [name=filter_id]').length > 0 && TM_TL.take.vars.el.data('filter') != $('#moment_user [name=filter_id]').val()) {
                $('#moment_user [name=filter_id]').change();
                return;
            }*/

            // add text for some filters
            TM_TL.take.vars.prev.empty();
            TM_TL.take.vars.next.empty();
            switch (TM_TL.take.vars.el.data('filter')) {
            case 'popular':
                $('<span>less popular</span>').appendTo(TM_TL.take.vars.prev);
                $('<span>more popular</span>').appendTo(TM_TL.take.vars.next);
                break;
            case 'latest':
                $('<span>older</span>').appendTo(TM_TL.take.vars.prev);
                $('<span>more recent</span>').appendTo(TM_TL.take.vars.next);
                break;
            }

            // create an overflow hidden window to slide inside of
            TM_TL.take.vars.window = $('<div class="window" style="width:' + TM_TL.take.vars.el.width() + 'px"/>');
            TM_TL.take.vars.ul.wrap(TM_TL.take.vars.window);
            TM_TL.take.vars.ul.css({ 'position': 'absolute', 'left': 0 , 'width': 5000 });

            // remove any extra moments
            TM_TL.take.vars.el.find('li:gt('+(TM_TL.take.vars.showing-1)+')').remove();

            if (BUILD_FROM_SCRATCH) {
                TM_TL.take.get();
            }

        },

        refresh: function (output) {

            var moments = output.moments.takes || [];

            // the start isn't necessarily what i asked for
            TM_TL.take.vars.first_order_id = parseInt(output.moments.start,10);

            // total can change
            TM_TL.take.vars.total_moments = parseInt(output.moments.total_takes,10);
            if (TM_TL.take.vars.first_order_id <= 0) {
                TM_TL.take.vars.prev.addClass('off');
            } else {
                TM_TL.take.vars.prev.removeClass('off');
            }
            if (TM_TL.take.vars.first_order_id + moments.length >= TM_TL.take.vars.total_moments) {
                TM_TL.take.vars.next.addClass('off');
            } else {
                TM_TL.take.vars.next.removeClass('off');
            }

            // add text for some filters
            TM_TL.take.vars.prev.empty();
            TM_TL.take.vars.next.empty();
            switch (TM_TL.take.vars.el.data('filter')) {
            case 'popular':
                $('<span>less popular</span>').appendTo(TM_TL.take.vars.prev);
                $('<span>more popular</span>').appendTo(TM_TL.take.vars.next);
                break;
            case 'latest':
                $('<span>older</span>').appendTo(TM_TL.take.vars.prev);
                $('<span>more recent</span>').appendTo(TM_TL.take.vars.next);
                break;
            }

            var target_left = TM_TL.take.vars.el.width() * -1;

            if (TM_TL.take.vars.ul.children().length < TM_TL.take.vars.showing) {
                var diff = TM_TL.take.vars.showing - TM_TL.take.vars.ul.children().length;
                for (i=0;i<diff;i++) {
                    $('<li/>').appendTo(TM_TL.take.vars.ul);
                }
            }

            var li;

            if (TM_TL.take.vars.direction == TM_TL.take.vars.left) {
                moments.reverse();
                for (i=0;i<TM_TL.take.vars.showing;i++) {

                    li = TM_TL.take.buildMoment(moments[i], i, true);

                    TM_TL.take.vars.ul.prepend(li);

                    if (i > moments.length) { li.css('opacity',0); }
                }
                TM_TL.take.vars.ul.css({'left':TM_TL.take.vars.el.width() * -1});
                target_left = 0;
            } else {
                for (i=0;i<TM_TL.take.vars.showing;i++) {

                    li = TM_TL.take.buildMoment(moments[i], i, false);

                    TM_TL.take.vars.ul.append(li);

                    if (i > moments.length) { li.css('opacity',0); }
                }
            }

            // add hover states
            TM_TL.take.vars.ul.find('li .thumb, li .title').hover(function(){$(this).parent().addClass('hover');},function(){$(this).parent().removeClass('hover');});

            TM_TL.take.vars.ul.animate({'left': target_left}, function(){
                TM_TL.take.vars.ul.css('left',0);
                if (TM_TL.take.vars.direction == TM_TL.take.vars.right) {
                    TM_TL.take.vars.ul.find('li:lt('+(TM_TL.take.vars.showing)+')').remove();
                } else {
                    TM_TL.take.vars.ul.find('li:gt('+(TM_TL.take.vars.showing-1)+')').remove();
                }
            });

            JS_VARS.center_on_now = false;

            //add click tracking
            if (TM_TL.take.vars.on_moment_id) {
                TM_TL.take.vars.ul.find('li .thumb, li .title').click(function() { tm_clicks('timeline_moment_click'); });
            } else {
                TM_TL.take.vars.ul.find('li .thumb, li .title').click(function() { tm_clicks('timeline_profile_click'); });
            }
        },

        buildMoment: function (moment, pos, reverse) {
            var li = $('<li/>');

            if (moment) {
                if (moment.moment_id === 0) {
                    li.addClass('now');
                } else {
                    if (TM_TL.take.vars.on_moment_id == moment.moment_id) {
                        li.addClass('on');
                    }
                    if (moment.group_first) {
                        li.addClass('first');
                    }
                    if (moment.group_last) {
                        li.addClass('last');
                    }
                    if (moment.momento_type) {
                        li.addClass('mot_'+moment.momento_type);
                    }
                    
                    if (queryString('list_id')!='false') {
                        url += '?list_id=' + queryString('list_id');
                    }
                    var thumb = $('<a class="bordered thumb takelink" rel="'+moment.take_id+'" href="#"><span/></a>').appendTo(li);
                    if (moment.thumb) {
                        thumb.find('span').css('background-image', 'url(' + moment.thumb + ')');
                    }

                    var title_text = moment.take_name;

                    // we don't want the same text showing up before every moment
                    if (JS_VARS.partner_info && JS_VARS.partner_info.moment_prepend) {
                        title_text = $.trim(title_text.replace(JS_VARS.partner_info.moment_prepend, ''));
                    }

                    var title = $('<a class="title takelink" href="#" rel="'+moment.take_id+'"/>').appendTo(li).text(title_text);

                    if (moment.moment_group > 0) {
                        li.addClass('group');
                        if (moment.group_first || ((pos === 0 && !reverse) || (pos === TM_TL.take.vars.showing - 1 && reverse))) {
                            var group_link = $('<a href="' + $.buildUrl('group',moment.moment_group,moment.group_name) + '" class="group"/>').text(moment.group_name).prependTo(li);
                            var group_id = JS_VARS.group_id || TM_TL.take.vars.moment.moment_group;
                            if (moment.moment_group === group_id) {
                                group_link.addClass('on');
                            }
                        }
                    }

                    if (moment.future > 0) {
                        li.addClass('future');
                        $('<span class="flag future" title="this is a future moment"><span class="fg">future</span><span class="bg">future</span></span>').appendTo(thumb);
                    }
                }
            }

            return li;

        },

        // add pagination controls if there are more moments than what's showing
        changePage: function (e) {
            e.preventDefault();

            // link is off
            if ($(this).hasClass('off')) {
                return;
            }

            TM_TL.take.vars.lis = TM_TL.take.vars.el.find('li');
            TM_TL.take.vars.start = TM_TL.take.vars.first_order_id + (TM_TL.take.vars.numresults || TM_TL.take.vars.showing);
            TM_TL.take.vars.numresults = TM_TL.take.vars.showing;
            TM_TL.take.vars.direction = TM_TL.take.vars.right;

            // reverse the li order for refreshing when going back
            if ($(this).hasClass('prev')) {
                TM_TL.take.vars.lis = $($.makeArray(TM_TL.take.vars.lis).reverse());
                TM_TL.take.vars.start = TM_TL.take.vars.first_order_id - TM_TL.take.vars.showing;
                TM_TL.take.vars.direction = TM_TL.take.vars.left;
            }

            if (TM_TL.take.vars.start <= 0) {
                TM_TL.take.vars.prev.addClass('off');
                TM_TL.take.vars.numresults = TM_TL.take.vars.showing + TM_TL.take.vars.start;
            } else {
                TM_TL.take.vars.prev.removeClass('off');
            }

            if (TM_TL.take.vars.start + TM_TL.take.vars.showing >= TM_TL.take.vars.total_moments) {
                TM_TL.take.vars.next.addClass('off');
                TM_TL.take.vars.numresults = TM_TL.take.vars.total_moments - TM_TL.take.vars.start + 1;
            } else {
                TM_TL.take.vars.next.removeClass('off');
            }

            //update starting point
            TM_TL.take.vars.first_order_id = TM_TL.take.vars.start;

            var options = {};

            TM_TL.take.get(options);

        },

        get: function(options) {

            if (options.emotion_id) {
                TM_TL.take.vars.emotion_id = options.emotion_id;
            }
            
            // make the call
            var defaults = {
                'user_id': TM_TL.take.vars.user_id,
                'numresults': TM_TL.take.vars.numresults || 23,
                'get_fields': 'moments',
                'style': 'stream',
                'emotion_id': TM_TL.take.vars.emotion_id
            };

            if (JS_VARS.center_on_now==true) {
                defaults.center_on_now = true;
                defaults.special_filter = 'public';
            } else {
                defaults.start = TM_TL.take.vars.start > 0 ? TM_TL.take.vars.start : 0;
            }

            var input = $.extend(null, defaults, options);

            TM_TL.take.vars.first_order_id = input.start;

            var source_url = TM_TL.URL.TAKE;
            $.get(source_url, input, TM_TL.take.refresh, 'json');
        }

    }


};



$(document).ready(function(){
    TM_TL.init();
});

