//var event_tracker;
//var UNLIMITED_EVENTS = 0;

$('document').ready(function() {
	//init_event_tracker();
    init_ticker();

    init_facebook_join_link();
    init_facebook_signin_link();
    init_facebook_logout_link();

    init_facebook_share();
    init_twitter_share();
    init_tumblr_share();

//    init_notification_bar();

    if (typeof(modal) != 'undefined') {
        modal.show_callbacks.push(init_facebook_signin_link);
        modal.show_callbacks.push(init_facebook_join_link);
        modal.show_callbacks.push(init_facebook_logout_link);
        modal.show_callbacks.push(init_prevent_multiple_submit);
    }
});

var live_feed;
var answer_current;
var answer_count;
var answer_show_count;
function move_live_feed(is_slide) {
    if (answer_current == answer_count) {
        answer_current = 0;
        update_live_feed_answers();
        $('.live_feed li[displayed=true]:gt('+answer_show_count+')').remove();
    }
    new_answer = $('.live_feed li:last').hide().detach();
    if (is_slide) {
        new_answer.prependTo($('.live_feed ul')).slideDown('slow');
    } else {
        new_answer.prependTo($('.live_feed ul')).show();
    }
    new_answer.attr('displayed','true');
    answer_current++;
}
function update_live_feed_answers() {
    live_feed = clearInterval(live_feed);
    $(".live_feed .status").fadeIn();
    $.get('/live/latest', {}, function(data) {
        $(".live_feed .answers ul").append(data.html);
        $(".live_feed .status").fadeOut();
        var total_answer_count = $('.live_feed li').length;
        answer_count = total_answer_count - answer_count;
        live_feed = setInterval(function() { move_live_feed(true) }, 2000);
    }, 'json');
}
function init_ticker() {
    if ($('.live_feed .answers').length > 0) {
        answer_show_count = Math.floor($('.live_feed div.answers').height() / $('.live_feed li:first').height());
        answer_count = $('.live_feed li').length;
        answer_current = 0;

        for (var i=0; i<10; i++) {
            move_live_feed(false);
        }
        live_feed = setInterval(function() { move_live_feed(true) }, 2000);
    }
}

function init_facebook_join_link() {
    $('.facebook_join_link').unbind('click');
    $(".facebook_join_link").click(function() {
        FB.getLoginStatus(function(response) {
            if (response.status != "connected") {
                if (typeof(fb_permissions) !== 'undefined') {
                    FB.login(facebook_redirect_on_join, { perms:fb_permissions });
                } else {
                    FB.login(facebook_redirect_on_join, { perms:"email,user_birthday,publish_stream" });
                }
            } else {
                facebook_redirect_on_join(response);
            }
        });
    });
}

function init_facebook_signin_link() {
    $('.facebook_signin_link').unbind('click');
    $(".facebook_signin_link").click(function() {
        FB.getLoginStatus(function(response) {
            if (response.status != "connected") {
                if (typeof(fb_permissions) !== 'undefined') {
                    FB.login(facebook_redirect_on_join, { perms:fb_permissions });
                } else {
                    FB.login(facebook_redirect_on_join, { perms:"email,user_birthday,publish_stream" });
                }
            } else {
                facebook_redirect_on_signin(response);
            }
        });
    });
}

function init_facebook_logout_link() {
    $('.facebook_logout_link').unbind('click');
    $('.facebook_logout_link').click(function() {
        FB.logout(function(response) {
            if ((typeof modal != 'undefined') && (modal.is(':visible'))) {
                redirect_path = modal.find('#redirect_path').val();
                modal.trigger('load', '/signup?redirect_path='+redirect_path);
                return;
            }
            location.reload(true);
        });
        return false;
    });
}

function facebook_redirect_on_join(response) {
    if (response.status == 'connected') {
        if ((typeof modal != 'undefined') && (modal.is(':visible'))) {
            redirect_path = modal.find('#redirect_path').val();
            modal.trigger('load', '/signup?redirect_path='+redirect_path);
            return;
        }
        location.reload(true);
    }
}
function facebook_redirect_on_signin(response) {
    if (response.status == 'connected') {
        if ((typeof modal != 'undefined') && (modal.is(':visible'))) {
            redirect_path = modal.find('#redirect_path').val();
            modal.trigger('load', '/signin?redirect_path='+redirect_path);
            return;
        }
        location.reload(true);
    }
}

function init_facebook_share() {
    //event_tracker.trigger('add_tracker', [UNLIMITED_EVENTS, 'share', 'sharing', 'facebook_share', 'facebook_share', '1']);
    $(".facebook_share").click(function() {
        window.open($(this).attr('href'), null, 'width=626,height=436');
        //event_tracker.trigger('track', ['share', 'facebook_share']);
        // Temprorary until we get GA working properly
        post_event({type: 100, source: window.location.href});
        return false;
    });
}

function init_twitter_share() {
    //event_tracker.trigger('add_tracker', [UNLIMITED_EVENTS, 'share', 'sharing', 'twitter_share', 'twitter_share', '1']);
    $(".twitter_share").click(function() {
        var sharelink = $(this).attr('href').replace('&amp;','&');
        window.open(sharelink, null, 'width=550,height=450');
        //event_tracker.trigger('track', ['share', 'twitter_share']);
        
        // Temprorary until we get GA working properly
        post_event({type: 200, source: window.location.href});
        
        return false;
    });
}

function init_tumblr_share() {
    $('.tumblr_share').click(function() {
        var sharelink = $(this).attr('href').replace('&amp;','&');
        window.open(sharelink, null, 'width=550,height=420');
        post_event({type: 300, source: window.location.href});
        return false;
    });
}

function init_prevent_multiple_submit() {
    $('#'+modal_id+' form').preventMultipleSubmit();
}

jQuery.fn.preventMultipleSubmit = function(options) {
    var defaults = {
        success_callback: function(form, e) {
            $(form).find('input[type="submit"]').addClass('disabled');
        },
        error_callback: function(form, e) {
            $(form).find('input[type="submit"]').attr('disabled', true);
            e.preventDefault();
        }
    };
    var options = $.extend(defaults, options);
    return this.each(function(){
        $(this).submit(function(e) {
            ! this.submitted ? options.success_callback(this, e) : options.error_callback(this, e);
            this.submitted = true;
        });
    });
}

/*function init_event_tracker() {
    event_tracker = $(document);
    event_tracker.events = new Array();
    event_tracker.bind('add_tracker', function(e, limit, tracker_name, category, action, label, value){
        event_tracker.events[tracker_name] = {
            'category': category,
            'action': action,
            'label': label,
            'value': parseInt(value),
            'limit': limit,
            'count': 0
        };
    });
    event_tracker.bind('track', function(e, tracker_name, label_append) {
        tracker_event = event_tracker.events[tracker_name];
        if ((tracker_event['limit'] == 0) || (tracker_event['count'] < tracker_event['limit'])) {
            label = typeof label_append != 'undefined' ? tracker_event['label'] +'-'+ label_append : tracker_event['label'];
            if (typeof _gaq != 'undefined') {
                _gaq.push(['_trackEvent', tracker_event['category'], tracker_event['action'], label, tracker_event['value'] ]);
            } else if (typeof console != 'undefined') {
                console.log('_gaq.push([\'_trackEvent\', \''+tracker_event['category']+'\', \''+tracker_event['action']+'\', \''+label+'\', \''+tracker_event['value']+'\')');
            }
            tracker_event['count']++;
        }
    });
}*/

function init_notification_bar(message, event_close, event_link_click) {
    var shown = get_cookie('shown_cookie');
    var show_notification = get_cookie('visited');
    if (show_notification===null || show_notification != message) {
        if (shown == 'true') {
            $('.notification_bar').show();
        }
        else {
            $('.notification_bar').slideDown('slow');
        }
        set_cookie('shown_cookie','true',365);
    }

    $('#close_notification').click(function(e) {
        set_cookie('visited', message, 365);
        set_cookie('shown_cookie','false',365);
        $('.notification_bar').slideUp();
        post_event({type: event_close, source: message});
        return false;
    })
    
    
    $('.notification_bar a').click(function() {
        var shown = get_cookie('shown_cookie');
        if (shown=='true') {
            post_event({type: event_link_click, source: message});
        }
    });

}

function post_event(posted_data) 
{
   $.ajax({
        type: 'POST',
        url: '/events/new',
        data: posted_data,
        dataType: 'json'
    });
}

function set_cookie(name, value, days) {
    if (days) {
      var date = new Date();
      date.setTime(date.getTime()+(days*24*60*60*1000));
      var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+encodeURIComponent(value)+expires+"; path=/";
};

function get_cookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
      var c = ca[i];
      while (c.charAt(0)==' ') c = c.substring(1,c.length);
      if (c.indexOf(nameEQ) == 0) return decodeURIComponent(c.substring(nameEQ.length,c.length));
    }
    return null;
};

function init_signup_form() {
    var username_check_timeout_length = 1000;
    var username_check_timeout;

    var check_username = function() {
        clearTimeout(username_check_timeout);
        username_check_timeout = setTimeout(function() {
            $('#signup #username').trigger('check');
        }, username_check_timeout_length);
    };
    var username_modified = ! ($('#signup #username').val() == '');

    $('#signup #email').bind('keyup blur', function() {
        if ( ! username_modified) {
            var email_parts = $(this).val().split('@');
            if ($('#signup #username').val() == email_parts[0]) {
                return;
            }
            $('#signup #username').val(email_parts[0]);
            check_username();
        }
    });
    $('#signup #username').bind('keyup blur', function() {
        username_modified = true;
        check_username();
    }).bind('check', function() {
        var params = {
            username: $(this).val()
        };
        $.post('/signup/check_username', params, function(data) {
            $('#signup #username')
                .closest('.field')
                .removeClass('error')
                .find('.validation_message')
                .remove();

            if ( ! data.result) {
                $('#signup #username')
                    .closest('.field')
                    .addClass('error');
                $('<p class="validation_message username_error">'+data.errorHtml+'</p>').appendTo($('#signup #username').closest('.field'));
                return;
            }

            $('#signup #username').nextAll('.username_error').remove();

        }, 'json');
    });
}
