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();
});





$.extend({

    // format bytes into MB or KB
    'formatBytes': function(bytes) {
        function addCommas(nStr) {
            nStr += '';
            x = nStr.split('.');
            x1 = x[0];
            x2 = x.length > 1 ? '.' + x[1] : '';
            var rgx = /(\d+)(\d{3})/;
            while (rgx.test(x1)) {
                x1 = x1.replace(rgx, '$1' + ',' + '$2');
            }
            return x1 + x2;
        }
        var suffix = 'kb';
        var num = bytes / 1024;
        if (num > 1024) {
            suffix = 'mb';
            num = num / 1024;
        }
        return addCommas(num.toFixed(2)) + suffix;
    },

    'logError': function (args) {

        var input = {
            url: document.location.href,
            message: 'javascript error' };

        $.post('/log/error', $.extend(null,input,args));

    },

      // build a video player, this will replace the individual functions
    'buildVideoEmbed': function (site_id, media_id, options) {

        var settings = {};
        $.extend(settings, options);

        var html = '<span>not a video site_id - '+site_id+'</span>';
        var width, height, url;

        switch (site_id) {
        case JS_CONSTANTS.JOOST:
            width = settings.width || 640;
            height = settings.height || 360;
            url = 'http://www.joost.com/embed/' + media_id
            html = '<object width="' + width + '" height="' + height + '">';
            html+= '<param name="movie" value="' + url + '">';
            html+= '<param name="allowFullScreen" value="true">';
            html+= '<param name="allowNetworking" value="all">';
            html+= '<param name="allowScriptAccess" value="always">';
            html+= '<param value="transparent" name="wmode">';
            html+= '<embed src="' + url + '" type="application/x-shockwave-flash" allowfullscreen="true" wmode="transparent" allowscriptaccess="always" allownetworking="all" width="' + width + '" height="' + height + '">';
            html+= '</object>';
            break;
        case JS_CONSTANTS.YOUTUBE:
            width = settings.width || 624;
            height = settings.height || 375;
            url = settings.url || 'http://www.youtube.com/v/' + media_id;
            url+= '&autoplay=1&rel=0&iv_load_policy=3';
            html = '<object width="' + width + '" height="' + height + '">';
            html+= '<param name="movie" value="' + url + '">';
            html+= '<param value="transparent" name="wmode">';
            html+= '<param name="allowFullScreen" value="true">';
            html+= '<embed src="' + url + '" type="application/x-shockwave-flash" allowfullscreen="true" wmode="transparent" width="' + width + '" height="' + height + '">';
            html+= '</object>';
            break;
        case JS_CONSTANTS.S3_VIDEO:
            width = settings.width || 480;
            height = settings.height || 368;
            embwidth = width < 480 ? 480 : width;
            url = S3_HOSTNAME + '/video/' + media_id + '_proc.m4v';
            var flashVars = 'fpFileURL=' + url + '&embedWidth=' + embwidth + '&embedHeight=' + height + '&videoWidth=' + width + '&videoHeight=' + height;
            html = '<object width="' + embwidth + '" height="' + height + '">';
            html+= '<param value="http://image.thismoment.com/static/TmVideoPlayer.swf" name="movie">';
            html+= '<param value="transparent" name="wmode">';
            html+= '<param name="FlashVars" value="' + flashVars + '">';
            html+= '<embed salign="TL" allowFullScreen = "true" width="' + embwidth + '" height="' + height + '" wmode="transparent" type="application/x-shockwave-flash" src="http://image.thismoment.com/static/TmVideoPlayer.swf" flashvars="' + flashVars + '">';
            html+= '</object>';
            break;
        }

        return $(html);

    },

    // use this to build urls in javascript
    'buildUrl': function(type, id, name) {
        if (name) {
            name = name.replace(/[^A-Za-z0-9\s]/g, '');
            //name = name.replace(/\./g, '');
            //name = name.replace(/\//g, '');
            //name = name.replace(/\\\\/g, '');
            name = name.replace(/ /g, '-');
            name = name.toLowerCase();
            name = $.trim(name);
            name = escape(name);
            name = name.replace(/--+/g, '-');
            name = name.replace(/-+$/g, '');
        } else {
            name = '';
        }

        switch (type) {
        case 'group':
            url = '/group/' + id + '/' + name;
            break;
        case 'moment':
            url = '/moment/view/' + id + '/' + name;
            break;
        case 'moment-big':
            url = '/moment/big_theater?moment_id=' + id;
            break;
        case 'user':
            url = '/' + name + '/' + id;
        }
        return JS_VARS.TM_URL + url;
    },

    // javascript version of md5 generator
    'md5': function(s) {

        function md5 ( str ) {
            // http://kevin.vanzonneveld.net
            // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
            // + namespaced by: Michael White (http://getsprink.com)
            // +    tweaked by: Jack
            // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
            // -    depends on: utf8_encode
            // *     example 1: md5('Kevin van Zonneveld');
            // *     returns 1: '6e658d4bfcb59cc13f96c14450ac40b9'

            var RotateLeft = function(lValue, iShiftBits) {
                return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
            };

            var AddUnsigned = function(lX,lY) {
                var lX4,lY4,lX8,lY8,lResult;
                lX8 = (lX & 0x80000000);
                lY8 = (lY & 0x80000000);
                lX4 = (lX & 0x40000000);
                lY4 = (lY & 0x40000000);
                lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
                if (lX4 & lY4) {
                    return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
                }
                if (lX4 | lY4) {
                    if (lResult & 0x40000000) {
                        return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
                    } else {
                        return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
                    }
                } else {
                    return (lResult ^ lX8 ^ lY8);
                }
            };

            var F = function(x,y,z) { return (x & y) | ((~x) & z); };
            var G = function(x,y,z) { return (x & z) | (y & (~z)); };
            var H = function(x,y,z) { return (x ^ y ^ z); };
            var I = function(x,y,z) { return (y ^ (x | (~z))); };

            var FF = function(a,b,c,d,x,s,ac) {
                a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
                return AddUnsigned(RotateLeft(a, s), b);
            };

            var GG = function(a,b,c,d,x,s,ac) {
                a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
                return AddUnsigned(RotateLeft(a, s), b);
            };

            var HH = function(a,b,c,d,x,s,ac) {
                a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
                return AddUnsigned(RotateLeft(a, s), b);
            };

            var II = function(a,b,c,d,x,s,ac) {
                a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
                return AddUnsigned(RotateLeft(a, s), b);
            };

            var ConvertToWordArray = function(str) {
                var lWordCount;
                var lMessageLength = str.length;
                var lNumberOfWords_temp1=lMessageLength + 8;
                var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
                var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
                var lWordArray=Array(lNumberOfWords-1);
                var lBytePosition = 0;
                var lByteCount = 0;
                while ( lByteCount < lMessageLength ) {
                    lWordCount = (lByteCount-(lByteCount % 4))/4;
                    lBytePosition = (lByteCount % 4)*8;
                    lWordArray[lWordCount] = (lWordArray[lWordCount] | (str.charCodeAt(lByteCount)<<lBytePosition));
                    lByteCount++;
                }
                lWordCount = (lByteCount-(lByteCount % 4))/4;
                lBytePosition = (lByteCount % 4)*8;
                lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
                lWordArray[lNumberOfWords-2] = lMessageLength<<3;
                lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
                return lWordArray;
            };

            var WordToHex = function(lValue) {
                var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
                for (lCount = 0;lCount<=3;lCount++) {
                    lByte = (lValue>>>(lCount*8)) & 255;
                    WordToHexValue_temp = "0" + lByte.toString(16);
                    WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
                }
                return WordToHexValue;
            };

            var x=Array();
            var k,AA,BB,CC,DD,a,b,c,d;
            var S11=7, S12=12, S13=17, S14=22;
            var S21=5, S22=9 , S23=14, S24=20;
            var S31=4, S32=11, S33=16, S34=23;
            var S41=6, S42=10, S43=15, S44=21;

            str = utf8_encode(str);
            x = ConvertToWordArray(str);
            a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;

            xl = x.length;
            for (k=0;k<xl;k+=16) {
                AA=a; BB=b; CC=c; DD=d;
                a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
                d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
                c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
                b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
                a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
                d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
                c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
                b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
                a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
                d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
                c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
                b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
                a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
                d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
                c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
                b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
                a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
                d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
                c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
                b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
                a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
                d=GG(d,a,b,c,x[k+10],S22,0x2441453);
                c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
                b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
                a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
                d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
                c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
                b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
                a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
                d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
                c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
                b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
                a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
                d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
                c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
                b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
                a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
                d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
                c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
                b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
                a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
                d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
                c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
                b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
                a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
                d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
                c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
                b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
                a=II(a,b,c,d,x[k+0], S41,0xF4292244);
                d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
                c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
                b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
                a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
                d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
                c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
                b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
                a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
                d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
                c=II(c,d,a,b,x[k+6], S43,0xA3014314);
                b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
                a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
                d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
                c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
                b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
                a=AddUnsigned(a,AA);
                b=AddUnsigned(b,BB);
                c=AddUnsigned(c,CC);
                d=AddUnsigned(d,DD);
            }

            var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);

            return temp.toLowerCase();
        }

        function utf8_encode(string) {
            // http://kevin.vanzonneveld.net
            // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
            // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
            // +   improved by: sowberry
            // *     example 1: utf8_encode('Kevin van Zonneveld');
            // *     returns 1: 'Kevin van Zonneveld'
            string += '';
            string = string.replace(/\r\n/g, "\n");
            var utftext = "";
            var start, end;

            start = end = 0;
            for (var n = 0; n < string.length; n++) {
                var c = string.charCodeAt(n);
                var enc = null;

                if (c < 128) {
                    end++;
                }
                else if ((c > 127) && (c < 2048)) {
                    enc = String.fromCharCode((c >> 6) | 192) + String.fromCharCode((c & 63) | 128);
                }
                else {
                    enc = String.fromCharCode((c >> 12) | 224) + String.fromCharCode(((c >> 6) & 63) | 128) + String.fromCharCode((c & 63) | 128);
                }
                if (enc !== null) {
                    if (end > start) {
                        utftext += string.substring(start, end);
                    }
                    utftext += enc;
                    start = end = n + 1;
                }
            }

            if (end > start) {
                utftext += string.substring(start, string.length);
            }

            return utftext;
        }

        return md5(s);

    }




});

$.fn.extend({

    // get a value from a class
    'getValueFromClass': function(c) {
        if (!$(this).attr('class')) {
            return '';
        }
        var classes = $(this).attr('class').split(' ');
        for (i = 0; i < classes.length; i++) {
            if (classes[i].indexOf(c) != -1) {
                return classes[i].split(c + '_')[1];
            }
        }
        return '';
    },

    'styleCheckbox': function() {
        $(this).each(function() {
            $(this).find('input[type="checkbox"]').hide().each(function(i) {
                var label = $('label[for="' + $(this).attr('id') + '"]').click(function(e) {
                    e.preventDefault();
                });
                var span = $('<span class="ui-checkbox"/>').data('input', $(this)).insertAfter(label).append('<span class="ui-checkbox-style"/>').append($(this)).append(label).addClass($(this).attr('id')).addClass($(this).attr('class'));

                if ($(this).attr('checked')) {
                    span.addClass('ui-checkbox-checked');
                }

                span.click(handleClick).hover(handleOver, handleOut);

                if ($(this).attr('disabled')) {
                    span.addClass('ui-disabled');
                }
            });

            function handleClick() {
                $(this).parents('li:first').removeClass('focus');
                if ($(this).hasClass('ui-disabled')) { return; }
                var input = $(this).data('input');
                input.attr('checked', input.attr('checked') ? '': 'checked');
                $(this).toggleClass('ui-checkbox-checked');
            }

            function handleOver() {
                if ($(this).hasClass('ui-disabled')) { return; }
                $(this).addClass('ui-checkbox-hover');
            }

            function handleOut() {
                if ($(this).hasClass('ui-disabled')) { return; }
                $(this).removeClass('ui-checkbox-hover');
            }
        });
    }
});

var SU = {
    settings: {
        debug: false,
        flash_url: "/js/swfupload-2.2/flash/swfupload.swf",

        // moment id sometimes isn't available at this point. it is reset in SU.init below
        upload_url: SIGNAL_URL + "/base_media/upload?id=" + $('#maker input[name=moment_id]').val(),

//        http_success: [301, 202, 201, 302, 200],
//        assume_success_timeout: 3,

        // parameters for every file
        post_params: {
            'get_fields[]': 'upload_results',
            response: 'json'
        },

        // Button Settings
        button_image_url: SIGNAL_URL+"/images/peds-btn-upl.png",
        button_placeholder_id: 'add_files',
        button_width: 300,
        button_height: 50,
        button_text: '<span class="btnText">CHOOSE FILE</span>',
        button_text_style: ".btnText { color: #999999; font-size: 18px; font-weight: bold; font-family: Arial,sans-serif; }",
        button_text_top_padding: 12,
        button_text_left_padding: 85,

        // FILE RESTRICTIONS
        file_size_limit: "1 GB",
        file_types: "*.png;*.jpg;*.jpeg;*.mov;*.mpg;*.mpeg;*.avi;*.wmv;*.mkv;*.3gp;*.mp4;*.m4v;*.m2ts",
        file_types_description: "Videos or Photos" },

    // swfuploader is ready
    suLoaded: function () {
        SU.swf = this;
    },

    // file is queued
    fileQueued: function (file) {
        $('.upload-button').css({'left':-999});
        var li = $('<div class="'+file.id+'"/>').appendTo('#results');
        $('#results').css({'height':140}).show();
        var inner = $('<div class="inner"/>').appendTo(li);

        $('<span class="file"/>').text(file.name).appendTo(inner);
        $('<span class="progress-visual"><span/></span>').appendTo(inner);
        $('<span class="size"/>').text($.formatBytes(file.size)).appendTo(inner);
        $('<span class="progress-verbose"/>').appendTo(inner);

        var remove = $('<a href="#" class="remove">remove</a>').appendTo(inner).click(function(e){
            e.preventDefault();
            SU.swfu.cancelUpload(file.id,false);
            li.fadeOut('fast');
        });
        this.startUpload();
    },

    // starting to upload a file
    uploadStart: function (file) {
        $('.upload-button').css({'left':-999});
        SU.uploadInProgress = true;
    },

    uploadProgress: function (file, bytesSent, bytesTotal) {
        $('.upload-button').css({'left':-999});
        var progress = Math.floor(bytesSent / bytesTotal * 100);
        progress = progress === 0 ? 1 : progress;
        progress = progress == 100 ? 99 : progress;
        var li = $('#results .'+file.id);
        li.find('.progress-visual span').stop().animate({width: progress + '%'}, 'slow');
        if (progress==99) {
            li.find('.progress-verbose').text('processing...');
        } else {
            li.find('.progress-verbose').text('uploading ' + progress + '%');
        }
    },

    uploadSuccess: function (file, output) {
        var li = $('#results .'+file.id), thumb_url, msg, data;
        // attempt to evaluate JSON object, bail out if you can't
        try {
            output = $.evalJSON(output);
        }
        catch (err) {
            li.find('.progress-visual, .size').remove();
            li.addClass('error').find('.progress-verbose').text('error - please try again');
            $.logError({message:"uploadSuccess failed in wizard:\n\nJS Error: " + err + "\n\nRaw Output Follows:\n\n" + output});
            return;
        }
		
		//console.log(output);

        // check for backend errors
        if (output.upload_results.error) {
            li.find('.progress-visual, .size').remove();
            li.addClass('error').find('.progress-verbose').text('error - ' + output.upload_results.error);
            return;
        }

        // handle video upload
        if (file.name.toLowerCase().match("(mov|avi|wmv|3gp|mkv|mpg|mpeg|mp4|m4v|m2ts)$")) {

            msg = "success - video added to moment";

            thumb_url = output.upload_results.thumb_url; 

            data = {
                site_id: JS_CONSTANTS.THISMOMENT,
                id: output.upload_results.id,
                thumb: output.upload_results.thumb_url,
                preview: output.upload_results.thumb_url, 
                processing: true };

            // add id and data to li so you can change the caption
            li.attr('id', 'upload_'+$.md5(data.site_id+'|'+data.id)).find('input');

            // add media to moment
            add(data);

        }
        // handle image upload
        else {
            msg = "file uploaded - image added to moment";
            data = {
                site_id: JS_CONSTANTS.THISMOMENT,
                id: output.upload_results.media_id,
                thumb: output.upload_results.image_urls.thumb,
                preview: output.upload_results.image_urls.small
            };

            // add to moment
            add(data);

        }

        li.height(li.height());

        var inner = li.find('.inner').fadeOut(function () {
            li.addClass('complete').find('.progress-visual, .progress-verbose, .remove').remove();
            li.find('.file, .size').show();

            // load thumbnail
            $('<img src="'+thumb_url+'">').css({'position': 'absolute', 'left': '-5000px'}).appendTo('body').load(function () {
                li.animate({height: $(this).height() + 8}, function () {
                    info.css('display','inline-block');
                    inner.fadeIn();
                    // when you're done, remove the file.id class
                    // if you switch tabs and come back this will avoid conflicts
                    $(this).removeClass(file.id);
                });
                $(this).removeAttr('style').addClass('bordered').prependTo(inner).wrap('<div class="thumb"/>');
            });

            // can't move these until after the fade out
            li.find('.size').prepend('<span>size:</span>').prependTo(info);
            li.find('.file').prependTo(info);
        });

        $('#step_uppho').fadeOut('fast', function(){
            $('#final').hide();
            $('.upload-button').css({'left':-999});
        });
        setTimeout(save, 100);

        var info = $('<span class="info">').hide().appendTo(inner);
        info.append('<span class="msg">'+msg+'</span>');
        info.append('<br>');

    },

    uploadComplete: function (file) {
        var stats = this.getStats();

        // if you have more files queued, keep going
        if (stats.files_queued > 0) {
            this.startUpload();
        } else {
            SU.uploadInProgress = false;
        }
    },

    uploadResized: function (file, output) {

        if (!output || !output.queue_results) {
            $.logError({message:'uploadResized received no output or no output.queue_results'});
            return false;
        }

        var data = {
            site_id: output.queue_results.site_id, //JS_CONSTANTS.THISMOMENT,
            id: output.queue_results.saved_id,
            thumb: output.queue_results.final_url.t,
            preview: output.queue_results.final_url.m };

        var li = $('#results .'+file.id).attr('id', 'upload_'+$.md5(data.site_id+'|'+data.id));
        li.find('input').data('data',data);

        // add to moment
        add(data);

        $('#step_uppho').fadeOut('fast', function(){
            $('#tray').show();
            $('#savetake').show().attr('style','');
        });

    },

    fileQueueError: function(file, errorCode, message) {

        var msg = "There was a problem with your upload. Please try again.";

        msg+= "\n\n" + message;

        switch (errorCode) {
        case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:
            msg += 'You exceeded the number of files allowed.';
            break;
        case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
        case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
        case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
            break;
        }

        $.displayMsg(msg + "\n\ncode: " + errorCode);
        $.logError({message:'fileQueueError: ' + message + ' ' + errorCode});

    },

    uploadError: function(file, errorCode, message) {

        var msg = "Whoops, there was a problem with your upload. Please try again.";

        msg+= "\n\nError: " + message;

        switch (errorCode) {

        // handle these
        case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
        case SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL:
        case SWFUpload.UPLOAD_ERROR.IO_ERROR:
        case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
        case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
        case SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND:
        case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
        case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
            break;

        // ignore these
        case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
        case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
            return;
        }

        $.displayMsg(msg + "\n\nError Code: " + errorCode, JS_CONSTANTS.ERROR);
        $.logError({message:'uploadError: ' + message + ' ' + errorCode});

    },

    addToMoment: function (data) {
    },

    cancelUpload: function () {
    },

    init: function(upurl) {
        if ($('.infacebook').length) {
            $('.upload-button').css({'left':230});
        } else if (JS_VARS.inframe == true) {
			$('.upload-button').css({'left':210});
		} else {
            $('.upload-button').css({'left':330});
        }
        $('#final').show();
        if (this.swfu) { return; }

        var moment_id = $('#moment_id').val() || '';

        if (moment_id) {
            SU.settings.upload_url = SIGNAL_URL + "/base_media/upload?id=" + moment_id;
        }

        // override for upload url for video (not active)
        if (upurl && upurl.length>5) {
            SU.settings.upload_url = upurl;
        }

        if (MEDIA.limit>0) {
            SU.settings.file_upload_limit = MEDIA.limit;
        }
        var event_handlers = {
            swfupload_loaded_handler: this.suLoaded,
            file_queued_handler: this.fileQueued,
            upload_start_handler: this.uploadStart,
            upload_progress_handler: this.uploadProgress,
            upload_success_handler: this.uploadSuccess,
            upload_complete_handler: this.uploadComplete,
            file_queue_error_handler: this.fileQueueError,
            upload_error_handler: this.uploadError };

        this.swfu = new SWFUpload($.extend(this.settings, event_handlers));
    }
};

function tm_clicks_async (ref_type, ref_type_id, moment_id) {
    //$.post('/tracking/tracklink', {ref_type: ref_type, ref_type_id: ref_type_id, moment_id: moment_id});
}

function tm_clicks (tracking_id) {
    //$.cookie('tm_clicks', tracking_id, { expires: 0.00864, path: '/' });
}

function clearField(e) {
    var i = $(e.target).val();
    if (i=="DESCRIBE" || i=="YOUR MOMENT NAME" || i=="VIDEO TITLE" || i=="VIDEO DESCRIPTION" || i=="KEYWORDS" || (!$(e.target).hasClass('cleared'))) {
        $(e.target).val("").addClass('cleared');
    }
}



// MEDIA BEGIN
    var MEDIA = {
        'limit':1,
        'in_tray':[],
        'type':''
    }

    function browseMedia (site_id, source, options, preview_callback) {

        $('#tray').show();
        $('#final').show();

        site_id = parseInt(site_id, 10);
        var numresults;
        if (JS_VARS.isFB===true) {
            numresults = $.inArray(site_id, JS_CONSTANTS.VIDEO_SITES) >= 0 ? 6 : 12;
        } else {
            numresults = $.inArray(site_id, JS_CONSTANTS.VIDEO_SITES) >= 0 ? 7 : 14;
        }
        if (source == 'sets' && JS_VARS.isFB===true) {
            numresults = 6;
        } else if (source == 'sets') {
            numresults = 7;
        }

        // set some defaults
        settings = {
            start: 0,
            numresults: numresults,
            source: source || 'latest' };

        $.extend(settings, options);

        if(JS_VARS.isFB===true){
            var browse_url = '/facebook/browse_media?'+requestgets+'&site_id='+site_id+'&get_fields=data&numresults='+settings.numresults+'&start='+settings.start+'&source='+settings.source;
        } else {
            var browse_url = '/base_Media/browse_pedaids?'+requestgets+'&site_id='+site_id+'&get_fields=data&numresults='+settings.numresults+'&start='+settings.start+'&source='+settings.source;
        }

        if (settings.source == 'set' && settings.id) {
            browse_url+= '&id=' + settings.id;
        }

        if (settings.user) {
            browse_url+= '&user=' + settings.user;
        }


        var section = $('#results').css({'height':250}).show().empty().append('<img src="/images/loading.gif" class="loading">');

        $.getJSON(browse_url, function (output) {
            output = output.data;
            section.empty();

            // something bad happened if you don't have any media
            if (!output || !output.media || output.media.length === 0) {
                section.append('<div class="error">We couldn\'t find any media.</div>');
                return;
            }

            var crumbs = $('<div class="crumbs"/>').appendTo(section);

            if (output.user) {
                $('<img src="'+(output.user.avatar_url || 'http://l.yimg.com/g/images/buddyicon.jpg')+'">').appendTo(crumbs);
                $('<span class="user"/>').text(output.user.username + ':').appendTo(crumbs);
            }

            if (settings.title) {
                $('<span class="title"/>').text(': ' + settings.title).appendTo(crumbs);
            }

            // add media to section
            formatResults(output.media, output.site_id).appendTo(section);

            // add pagination to section
            formatPagination(output.total, output.media.length, output.start, output.numresults, function(start, preview_callback) {
                browseMedia(output.site_id, settings.source, {start: start, id: settings.id, title: settings.title, user: settings.user}, preview_callback);
            }).appendTo(section);

            if (settings.source!='sets' && site_id==3) {
                $('<a href="#" id="sets">&laquo; back</a>').click(function(e){
                    e.preventDefault();
                    $('#results').empty();
                    $(this).remove();
                    browseMedia(3, 'sets');
                }).prependTo($('.pagination .show'));
            } else if (settings.source=='sets') {
                $('<span>albums: </span>').prependTo($('.pagination .show'));
            }

            if (preview_callback) {
                (preview_callback)();
            }

        });

    }


    function formatPagination (total, showing, start, numresults, callback) {

        var pagination = $('<div class="pagination"/>');

        if (total > numresults) {
            pagination.html('<span class="show">&nbsp; &nbsp; showing: '+ (start + 1) + ' - ' + (start + showing) + ' of ' + total + '</span>');

            var prev = $('<a href="#" class="pag prev"></a>').prependTo(pagination).data('start', start - numresults);
            var next = $('<a href="#" class="pag next"></a>').appendTo(pagination).data('start', start + numresults);

            pagination.find('a').data('callback', callback);

            if (start === 0) {
                prev.addClass('off');
            }
            if (start + showing == total) {
                next.addClass('off');
            }
        } else {
            pagination.html('<span class="show"></span>');
        }

        return pagination;

    }



    // each site has it's own way of naming things
    function getSiteText (site_id, section) {

        var text = '';

        switch (section) {
        case 'latest':
            switch (site_id) {
            case JS_CONSTANTS.FLICKR:
                text = 'photostream';
                break;
            default:
                text = 'latest';
                break;
            }
            break;
        case 'sets':
            switch (site_id) {
            case JS_CONSTANTS.FACEBOOK:
                text = 'albums';
                break;
            case JS_CONSTANTS.THISMOMENT:
                text = 'moments';
                break;
            default:
                text = 'sets';
            }
            break;
        }

        return text;

    }


    function formatResults (media, site_id) {
        // no results, let's bail
        if (!media || media.length === 0) {
            return $('<span>no results</span>');
        }

        var results = $('<div class="results site_'+site_id+'"/>');

        $.each(media, function () {

            var span = $('<span class="media" id="out_'+$.md5(site_id + '|' + this.id)+'"></span>').css('opacity',0).appendTo(results).data('data', this);

            // total can be zero
            if (this.total === undefined) {
                span.append('<a class="thumb preview" href="#"/>').click(addMedia).append('<a href="#" class="add">+add</a>');
                span.find('.preview').attr('title', this.title + ' - ' + this.author);
            }

            // if you have a total, you're looking at sets
            if (this.total !== undefined) {
                $('<a class="thumb set" href="#"/>').appendTo(span);
                $('<span class="title"/>').text(this.title + ' ').append('<span class="count">('+this.total+')</span>').appendTo(span);
            }
            // add a title for videos
            else if ($.inArray(site_id, JS_CONSTANTS.VIDEO_SITES) >= 0) {
                $('<span class="title"/>').text(this.title).appendTo(span);
            }

            // add the data to the anchors, need this for click handlers
            span.find('a').data('data',$.extend(this, {site_id: this.site_id || site_id}));


            // load thumb, fade in span when it's done
            var thumb = $('<img class="bordered" src="'+this.thumb+'">').appendTo(span.find('.thumb')).load(function () {
                span.animate({opacity: 1});
            });

            // if thumb has /video/ in the path, it's a video
            if (this.thumb && this.thumb.indexOf('/video/')!=-1) {
                $('<span class="overlay"/>').appendTo(span.find('.thumb'));
            }

        });

        return results;
    }

    function addMedia(e) {
        e.preventDefault();
        add($(this).data('data'));
    }


    function add(data) {
        // no data
        if (!data) { return; }

        var md5 = $.md5(data.site_id+'|'+data.id);
        var moment_id = $('#moment_id').val() || '';
        var title = data.title || '';
        var caption = data.caption || '';
        var media_val = data.site_id+'|'+data.id+'|'+moment_id+'|'+caption;

        // user global user var
        try {
            data.author = user.full_name;
        } catch(e) {
            //console.log(e);
        }

        // remove any media already in the tray
        var intray = $('#tray a.remove');
        if (intray.length>0) {
            intray.click();
        }

        // build media and put it in tray
        var span = $('<span/>').attr('id', 'in_'+md5).attr('title', caption).css('opacity',0).appendTo('#tray').animate({opacity: 1});
        $('<img src="'+data.thumb+'">').data('data',data).click(remove).appendTo(span);
        $('<a class="remove">X</a>').data('data',data).click(remove).appendTo(span);
        $('<input type="hidden" name="media[]">').val(media_val).appendTo(span);
        if ($.inArray(data.site_id, [JS_CONSTANTS.YOUTUBE, JS_CONSTANTS.S3_VIDEO]) >= 0) {
            $('<span class="overlay"/>').appendTo(span);
        }

        // fade out media
        $('#out_' + md5).animate({'opacity': 0.5}).addClass('sel');

        // add to in_tray only after the thumbnail loads
        MEDIA.in_tray.push($.md5(data.site_id+'|'+data.id));

        if (MEDIA.in_tray.length>0) {
            $('#savetake').show().attr('style','');
        }

    }

    function remove(e) {
        var data = $(this).data('data');
        var md5 = $.md5(data.site_id+'|'+data.id);

        // remove from to in_tray
        MEDIA.in_tray.splice($.inArray(md5, MEDIA.in_tray),1);

        // fade in media
        $('#out_' + md5).animate({'opacity': 1}).removeClass('sel');

        $(this).parent().remove();

        if (MEDIA.in_tray.length<1) {
            $('#savetake').hide();
        }

    }
// END MEDIA



// BEGIN YOUTUBE UPLOADS
    function initYouTube() {
        $('#final').hide();
        $('input, textarea').focus(function(e) {clearField(e);});
        $('#yt_step_one').unbind().click(function(e){
            e.preventDefault();
            var data = {
                'title': $('#yt_title').val(),
                'description': $('#yt_desc').val(),
                'keywords': $('#yt_keywords').val(),
                'category': $('#yt_category').val(),
                'get_fields[]': 'token_data'
            }
            $.post('/base_Media/get_yt_token', data, postToYouTube, 'json');
        });
    }

    var upload_success = 0;

    function checkUploadSuccess() {
        if (upload_success==1) return;
        var res = window.yt_frame.location.href;
        if (res.split('&id=').length>1 || res.split('nexturl').length>1) {
            if (res.split('&id=').length>1) {
                finalizeUpload();
            } else {
                upload_success = 1;
                alert('Sorry, there may have been an error. Please try again.');
            }
        } else {
            setTimeout(checkUploadSuccess, 1000);
        }
    }

    function finalizeUpload() {
        if (upload_success==1) return;
        upload_success = 1;
        MEDIA.type = 'video';
        $('#final').hide();
        var ytid = window.yt_frame.location.href.split('&id=')[1];
        var data = {
            'site_id': 1,
            'id': 'http://www.youtube.com/watch?v=' + ytid,
            'thumb': 'http://i.ytimg.com/vi/' + ytid + '/default.jpg'
        }
        add(data);
        $('#ytloading').fadeOut('fast', function(){
            //$('#tray').show();
            //$('#savetake').show();
            setTimeout(save, 500);
        });
    }

    function postToYouTube(output) {
        if (output.token_data.errors) {
            alert('There was an error: ' + output.token_data.errors + '\nPlease try again.');
            return;
        }
        upload_success = 0;
        $('#final').hide();
        var upurl = output.token_data.url + '?nexturl='+SIGNAL_URL +'/base_media/catch_yt_upload_response';
        SU.settings.post_params = {
            'get_fields[]': 'upload_results',
            'response': 'json',
            'token': output.token_data.token
        };
//        SU.init(upurl);
        var ytsteptwo = $('#yt_step_two');

        $('<iframe name="yt_frame" id="yt_frame" width="1" height="1" frameborder="0" scrolling="no" src="#"></iframe>').css({'position':'absolute','left':-999}).appendTo(ytsteptwo);

        $('#step_upvid').fadeOut('fast', function() {
            ytsteptwo.show().find('form').attr('action', upurl).find('#token').val(output.token_data.token);
        });

        $('#yt_submit').click(function(e){
            setTimeout(checkUploadSuccess, 1000);
            $('<div id="ytloading"/>').html('<h3><img src="/images/loading.gif"> video is uploading, please stand by...</h3>').insertBefore($('#final'));
            ytsteptwo.hide();
            $('#savetake').hide();
            $('#final').show();
            $('#yt_frame').load(finalizeUpload);
        });

    }
// END YOUTUBE UPLOADS


// checks if you are linked, and
function confirmLink(site_id, mode) {
    $.getJSON('/base_Media/get_linked_account?site_id='+site_id+'&get_fields=linked', function (output) {
        if (output.linked) {
            switch (mode) {
                case 'br':
                    browseMedia(site_id);
                    break;
                case 'su':
                    SU.init();
                    break;
                case 'yt':
                    initYouTube();
                    break;
            }
            switch (site_id) {
                case 1:
                    $('#step_myvid .sitelogo, #step_upvid .sitelogo').removeClass('sidelogo');
                    $('#step_uppho, #step_myvid, #step_upvid').addClass('linked');
                    break;
                case 3:
                    $('#step_faceb .sitelogo').removeClass('sidelogo');
                    $('#step_faceb, #step_uppho').addClass('linked');
                    break;
                case 11:
                    $('#step_uppho').addClass('linked');
                    break;
            }
            $('.proceed').remove();
        } else {
            alert('This account is not linked, please try again.');
            $('.proceed').remove();
            $('.youlink').show();
            $('.svc').show().parents('.ui-button').show();
        }
    });
}

function initStepOne() {
    $('#final').show();
    $('.nstep').unbind().click(function(e){
        e.preventDefault();
        var choice = $(this).attr('id');
		if (choice == 'upvid') {
			choice = 'uppho';
		}
         $('#step_one').fadeOut('fast', function(){
            if (choice == 'faceb' && $('.infacebook').length) {
                if ($('#step_faceb').hasClass('linked')) {
                    $('#results').show();
                    $('#step_faceb .sitelogo').removeClass('sidelogo');
                }
                FB.Connect.requireSession(function() {
                    var data = {'get_fields[]':'has_permission'};
                    $.getJSON(SIGNAL_URL + '/auth/facebook_canvas?'+requestgets, data, function(output){
                        $('#step_faceb').show();
                        $('#step_faceb .sitelogo').removeClass('sidelogo');
                        if(output.has_permission == '0' || output.has_permission == null){
                            FB.Connect.showPermissionDialog('publish_stream', null);
                        }
                        browseMedia(3, 'sets');
                        $('#step_faceb, #step_uppho').addClass('linked');
                    },'json');
                });
            } else {
                $('#step_' + choice).show();
                initStepTwo(choice);
            }
        });
    });
}

function initStepTwo(choice) {
    switch(choice) {
        /*case 'upvid':
            var upvid = $('#step_upvid');
            upvid.find('#yt_title').val($('#takename').val());
            upvid.find('#yt_desc').val($('#takedesc').val());
            var emoterm = $('#takeemo option[value='+$('#takeemo').val()+']').text();
            upvid.find('#yt_keywords').val(SITE_NAME +', '+ emoterm);
            $('#final').hide();
            if (upvid.hasClass('linked')) {
                initYouTube();
                $('#step_myvid .sitelogo').removeClass('sidelogo');
            } else {
                $('.youlink').unbind().click(function(e){
                    $('.linknote:visible').text('Once you\'ve allowed access to your YouTube account, click to continue.')
                    $('<a href="#" class="proceed">continue &raquo;</a>').data('site_id', 1).click(function(e){
                        e.preventDefault();
                        confirmLink(1, 'yt');
                    }).insertBefore($(this).hide());
                });
            }
            break;*/
        case 'myvid':
            if ($('#step_myvid').hasClass('linked')) {
                $('.youlink').closest('.ui-button').hide();
                $('#step_myvid .sitelogo').removeClass('sidelogo');
                browseMedia(1);
            } else {
                $('.youlink').unbind().click(function(e){
                    $('<a href="#" class="proceed">continue &raquo;</a>').click(function(e){
                        e.preventDefault();
                        confirmLink(1, 'br');
                    }).insertBefore($(this).hide());
                });
            }
            break;
        case 'uppho':
            if ($('#step_uppho').hasClass('linked') || 1 == 1) {
                //$('.svc').hide();
				$('#step_uppho').addClass('linked')
                SU.init();
            } else {
                $('.svc').unbind().click(function(e){
                    $('.svc').closest('.ui-button').hide();
                    if ($(this).hasClass('facelink')) {
                        e.preventDefault();
                        FB.Connect.requireSession(function() {
                            var data = {'get_fields[]':'has_permission'};
                            $.post(SIGNAL_URL + '/auth/facebook', data, function(output){
                                if(output.has_permission == '0' || output.has_permission == null){
                                    FB.Connect.showPermissionDialog('publish_stream', null);
                                }
                                SU.init();
                                $('#step_faceb, #step_uppho').addClass('linked');
                            },'json');
                        });
                    } else if ($(this).hasClass('youlink')) {
                        $('<a href="#" class="proceed">continue &raquo;</a>').click(function(e){
                            e.preventDefault();
                            confirmLink(1, 'su');
                        }).insertBefore($(this).hide());
                    } else if ($(this).hasClass('twitlink')) {
                        $('<a href="#" class="proceed">continue &raquo;</a>').click(function(e){
                            e.preventDefault();
                            confirmLink(11, 'su');
                        }).insertBefore($(this).hide());
                    }
                    $('#step_uppho .nolink h3').text('Click continue below to upload your photo');
                    $('.proceed').parents('.ui-button').show();
                });
            }
            break;
        case 'picas':
            break;
        case 'faceb':
            if ($('#step_faceb').hasClass('linked')) {
                $('.facelink').hide();
                $('#step_faceb .sitelogo').removeClass('sidelogo');
                browseMedia(3, 'sets');
            } else {
                $('.facelink').unbind().click(function (e) {
                    e.preventDefault();
                    FB.Connect.requireSession(function() {
                        var data = {'get_fields[]':'has_permission'};
                        $.post(SIGNAL_URL + '/auth/facebook', data, function(output){
                            $('#step_faceb .sitelogo').removeClass('sidelogo');
                            if(output.has_permission == '0'){
                                FB.Connect.showPermissionDialog('publish_stream', null);
                            }
                            browseMedia(3, 'sets');
                            $('#step_faceb, #step_uppho').addClass('linked');
                        },'json');
                    });
                });
            }
            break;

    }
    //redraw the form to fix safari ghost bug
    var redw = $('#takeform').hide();
    var xx = redw.height();
    redw.show();
}

function cancelStep(e){
    e.preventDefault();
    var step = $('.stbox:visible').eq(0);
    $('#results').empty().hide();
    $('.upload-button').css({'left':-999});
    if (step.hasClass('st_two')) {
        $('#tray').empty().hide();
        $('.st_two:visible').fadeOut('fast', function(){
            $('#step_one').show();
            $('.sitelogo').addClass('sidelogo');
        });
    } else if (step.hasClass('st_one')) {
        $('.st_one:visible').fadeOut('fast', function(){
            $('#final').hide();
            $('#step_zero, #themoment li').show();
        });
    } else if (step.hasClass('yt_two')) {
        $('#yt_step_two').fadeOut('fast', function(){
            $('#final').hide();
            $('#step_zero, #themoment li').show();
        });
    }
}

function resetForm() {
    var form = $('#takeform');
    form.find('#takeperson').val('Your name');
	form.find('#takeemail').val('Your email address');
	form.find('#takename').val('Your moment name');
    form.find('#takeemo').val('');
    form.find('#takedesc').val('Your story');
    form.find('#step_upvid input').val('');
    form.find('#yt_category').val('');
    $('#tray').empty().hide();
    $('.st_one, .st_two, #results, #final, #success, #yt_step_two').hide();
    $('#take_box_wrap, #takeform, #step_zero, #themoment li').show();
    dclick = 0;
}


function save() {
    var form = $('#takeform');
    if (MEDIA.in_tray.length < 1) {
        alert('You haven\'t added a photo or video, please try again.');
        return;
    }
    var data = form.serializeArray();
    data.push({'name':'get_fields[]','value':'take_id'});
    data.push({'name':'get_fields[]','value':'posted_facebook'});
    data.push({'name':'get_fields[]','value':'posted_twitter'});

    $.post(form.attr('action')+'?'+requestgets, data, function(output){
        $('#takeform').fadeOut('fast', function(){
            $('#success').show();
            var fheight = $('#embwrap object').height(),
                fwidth = $('#embwrap object').width();
            
$('#embwrap').html('<object width="'+fwidth+'" height="'+fheight+'" type="application/x-shockwave-flash" data="/theater_embed.swf" id="membed" style="visibility: visible;"><param name="movie" value="/theater_embed.swf"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><param name="flashvars" value="moment_id='+moment.moment_id+'&amp;introURL='+SIGNAL_URL+'/first_frame.swf&amp;introWidth=960&amp;introHeight=450&amp;config='+SIGNAL_URL+'/xml/moment_config.xml&amp;take_id='+output.take_id+'"/></object>');

var flash = window.membed || document.membed;
//            flash.getNewMoment($('#moment_id').val());
            $('#emo_filter .emolink').eq(0).click();
            var msgp = $('#success p');
            var smsg = msgp.text();
            if (output.posted_facebook || output.posted_twitter) {
                smsg = smsg.replace(/\./, "");
                if (output.posted_facebook && output.posted_twitter) {
                    smsg += ' and posted to Facebook and Twitter.';
                } else if (output.posted_facebook) {
                    smsg += ' and posted to Facebook.';
                } else if (output.posted_twitter) {
                    smsg += ' and posted to Twitter.';
                }
            }
            if (MEDIA.type == 'video') {
                smsg += ' <br><br><b>PLEASE NOTE:</b> Your video may take several minutes to process before it can be viewed in the player above.';
            }
            msgp.html(smsg);
            $('#seemine').click(function(e){
                if (JS_VARS.segregation===true) {
                    userstreamloaded = 1;
                    flash.getUserTakesWithId(output.take_id);
                } else {
                    flash.getTake(output.take_id);
                }
                $('#take_box_wrap').fadeOut().slideUp('fast', function(){
                    resetForm();
                });
            });
            //redraw the form to fix safari ghost bug
            var redw = $('#success').hide();
            var xx = redw.height();
            redw.show();
        });
    }, 'json');
}




function swapTakeStream(e) {
    e.preventDefault();
    var targ = $(e.target),
        emo_id = targ.attr('rel');
    targ.parents('ul').find('li').removeClass('on').end().end().parents('li:first').addClass('on');
    TM_TL.take.vars.total_moments = targ.getValueFromClass('total');
    if (emo_id == 'official') {
        TM_TL.take.get({'emotion_id': 'all', 'start':0, 'user_id': 1});
    } else if (emo_id == 'all') {
        var win = $('#take_stream .window'),
            winw = win.width(),
            liw = win.find('li').eq(0).width(),
            numr = Math.floor(winw / (liw+20));
        TM_TL.take.get({'emotion_id': 'all', 'numresults': numr});
    } else {
        TM_TL.take.get({'emotion_id': emo_id, 'start':0});
    }
}

var userstreamloaded = 0;
function showTake(e) {
    e.preventDefault();
    var targ = $(e.target).closest('.takelink'),
        flash = window.membed || document.membed,
        target_take = targ.attr('rel');
    if (JS_VARS.segregation===true && userstreamloaded==0) {
        userstreamloaded = 1;
        flash.getUserTakesWithId(target_take);
    } else {
        flash.getTake(target_take);
    }
}

function killHighlight() {
}

function checkData() {
    var form = $('#takeform');
    $('.focus').removeClass('focus');
    var fields = form.find('input[type="text"], select, textarea');
    var fail = 0;
	$.each(fields, function(i){
        if ($(this).attr('id')=='takeemail') {
            var email = $(this).val();
            if (!email.match(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})/)) {
                $(this).focus().addClass('focus');
                alert('You must enter a valid email address.');
                fail = 1;
                return false;
            }
        }
    });
    if (fail==1) {
        return false;
    }
    return true;
}

var dclick = 0;
$(document).ready(function() {
    $('#take_box input[type="text"], #take_box textarea').focus(function(e) {clearField(e);});
    $('#termscheck').styleCheckbox();
    $('#addmedia').click(function(e) {
        e.preventDefault();
        var form = $('#takeform');
        var tname = form.find('#takename');
        $('.focus').removeClass('focus');
        if (form.find('#takeperson').val()== '' || form.find('#takeperson').val()=='Your name') {
			form.find('#takeperson').focus().parents('li:first').addClass('focus');
            alert('You must enter your name.');
            return;
		}
		if (form.find('#takeemail').val()== '' || form.find('#takeemail').val()=='Your email address') {
			form.find('#takeemail').focus().parents('li:first').addClass('focus');
            alert('You must enter your email address.');
            return;
		}
		if (tname.val()=='' || tname.val()=='Your moment name') {
            tname.focus().parents('li:first').addClass('focus');
            alert('Your moment needs a name before you can submit.');
            return;
        }
        if (tname.val().length > tname.getValueFromClass('tlimit')) {
            tname.focus().parents('li:first').addClass('focus');
            alert('Title cannot exceed ' +tname.getValueFromClass('tlimit')+ ' characters.');
            return;
        }
        if (form.find('#takeemo').val()=='') {
            form.find('#takeemo').focus().parents('li:first').addClass('focus');
            alert('Please select an emotion.');
            return;
        }
        var desc = form.find('#takedesc');
        if (desc.val()=='' || desc.val()=='Your story') {
            desc.focus().parents('li:first').addClass('focus');
            alert('Please describe the moment.');
            return;
        }
        if (desc.val().length > desc.getValueFromClass('tlimit')) {
            desc.focus().parents('li:first').addClass('focus');
            alert('Description cannot exceed ' +desc.getValueFromClass('tlimit')+ ' characters.');
            return;
        }
        if (form.find('#termscheck input:checked').length<1) {
            form.find('#submit-terms').focus().parents('li:first').addClass('focus');
            alert('You must agree to the terms of use before you can continue.');
            return;
        }
		if (!checkData()) {
			return;
		}
        $('#step_zero').fadeOut('fast', function(){
            var themoment = $('#themoment');
            themoment.height(themoment.height()).find('li').hide();
            $('#step_one').show();
            initStepOne();
        });
    });

    var txtar = $('#takename, #takedesc');
    $.each(txtar, function(obj) {
        var txtlimit = $(this).getValueFromClass('tlimit');
        if (txtlimit > 1) {
            $(this).keypress(function(e) {
                $(this).parents('li:first').removeClass('focus');
                if ($(this).val().length >= txtlimit && e.which!=8 && e.which!=120) {
                    alert('Text is limited to '+txtlimit+' characters.');
                    return false;
                }
            });
        }
    });

    $('.cancel').live('click', cancelStep);

    $('#results .add').live('click', addMedia);

    $('#results a.set').live('click', function (e) {
        e.preventDefault();
        browseMedia(3, 'set', $(this).data('data'));
    });

    // handle pagination
    $('#results .pagination a').live('click', function (e) {
        e.preventDefault();
        if ($(this).hasClass('off')) { return; }

        // fire off the callback and pass the start and a preview callback
        ($(this).data('callback'))($(this).data('start'), $(this).data('preview_callback'));

        // get rid of the preview callback
        $(this).data('preview_callback', null);
    });

    $('#savetake').click(function(e) {
        e.preventDefault();
        if (dclick==1) {return;}
        dclick = 1;
        $(this).fadeOut();
        save();
    });

    $('.emolink').click(swapTakeStream);

    $('.takelink').live('click', showTake);

    $('#fbshr').live('click', function(e){
        e.preventDefault();
        var data = {
            'moment_id': moment.moment_id,
            'facebook': 1,
            'get_fields[]':['attachment','message']
        }
        $.post('/base/publish_out', data, function(output){
            FB.Connect.streamPublish(output.message, output.attachment);
        }, 'json');
    });

	/* get user name and email */
	$('#addmedia').click(function(e){
		e.preventDefault();
		$.post('/auth/api/set/create_user.json',{'take_person':$('#takeperson').val(), 'take_email':$('#takeemail').val()});
	});

    var tweetpage = 2,
        tweetlock = 0,
        boxheight = $('#tweetbox ul').height();
    $('#tweetbox').animate({'height': boxheight + 10}, 400, 'swing');
    $('#moretweets').click(function(e){
        e.preventDefault();
        if (tweetlock==1) {
            return;
        } else {
            tweetlock = 1;
            var btn = $(this);
            var msg = btn.text();
            btn.width(btn.width()).css('text-align','center').html('<img src="/images/loading.gif">');
            boxheight = $('#tweetbox ul').height();
            $.post('/base/get_more_tweets',{'response':'tpl', 'page':tweetpage},function(output){
                var newbatch = $('<ul/>')
                    .hide()
                    .html(output)
                    .insertAfter($('.tweetfeed').removeClass('tweetfeed').addClass('oldfeed'))
                    .css('top', boxheight)
                    .addClass('tweetfeed')
                    .fadeIn('fast', function(){
                        $('.tweetfeed').animate({'top':0},1200,'swing');
                        $('.oldfeed').animate({'top': boxheight * -1},1200,'swing', function(){
                            $(this).remove();
                            btn.text(msg).width('auto');
                            tweetlock = 0;
                            boxheight = newbatch.height();
                            $('#tweetbox').animate({'height': boxheight + 10}, 400, 'swing');
                            tweetpage = tweetpage + 1;
                        });
                    });
            });
        }
    });

/*
    if (queryString('take_id')>1) {
        setTimeout(function(){
            var flash = window.membed || document.membed;
            flash.getTake(queryString('take_id'));
        }, 1200);
    }
*/

});
