// Use this file to add small snippets of Javascript used by the application
var event_tracker;
// Based on David Gouch's To Title Case Javascript <http://individed.com/code/to-title-case/>
function toTitleCase(str) {
    return str.replace(/([\w&`'‘’"“.@:\/\{\(\[<>_]+-? *)/g, function(match, p1, index, title) {
        if (index > 0 && title.charAt(index - 2) !== ":" &&
            match.search(/^(a(nd?|s|t)?|b(ut|y)|en|for|i[fn]|o[fnr]|t(he|o)|vs?\.?|via)[ \-]/i) > -1)
            return match.toLowerCase();

        if (title.substring(index - 1, index + 1).search(/['"_{(\[]/) > -1)
            return match.charAt(0) + match.charAt(1).toUpperCase() + match.substr(2);
            
        if (match.substr(1).search(/[A-Z]+|&|[\w]+[._][\w]+/) > -1 || 
            title.substring(index - 1, index + 1).search(/[\])}]/) > -1)
            return match;
            
        return match.charAt(0).toUpperCase() + match.substr(1);
    });
}

$('document').ready(function() {
    init_event_tracker();
    init_answers();
    init_save_answer_button();
    init_top_links();
});

function init_top_links() {
    $('a[target != "_self"][target != "_blank"]').attr('target', '_top');
}

function init_save_answer_button() {
    $('#question #save').click(function() {
        if ($('#new_user').is(':visible')) {
            return true;
        }
        $('#new_user').slideDown('fast');
        event_tracker.trigger('track', ['save_answer_button']);
        return false;
    });
    event_tracker.trigger('add_tracker', [1, 'save_answer_button','Answer','Click','Join or Sign In to Publish','1']);
}

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_answers() {
    event_tracker.trigger('add_tracker', [0, 'share', 'Share', 'General', 'Answer', '1']);
    event_tracker.trigger('add_tracker', [0, 'twitter_share', 'Share', 'Twitter', 'Answer', '1']);
    event_tracker.trigger('add_tracker', [0, 'facebook_share', 'Share', 'Facebook', 'Answer', '1']);
    event_tracker.trigger('add_tracker', [0, 'vote_up', 'Vote', 'Like', 'Answer', '1']);
    $('.answer').init_answer();
}

jQuery.fn.init_answer = function() {
    this.find('a.vote').click(answer_vote);
    this.find('a.hide').click(answer_hide);
    this.find('a.share').click(function() {
        $(this).parent().find('.share_panel').toggle();
        if ($(this).parent().find('.share_panel').is(':visible')) {
            event_tracker.trigger('track', ['share', $(this).parents('.answer').attr('id').replace('answer_','')]);
        }
        return false;
    });
    this.find(".twitter_share").click(function() {
        window.open(decodeURIComponent($(this).attr('href')), null, 'width=550,height=450');
        event_tracker.trigger('track', ['twitter_share', $(this).parents('.answer').attr('id').replace('answer_','')]);
        return false;
    });
    this.find(".facebook_share").click(function() {
        window.open($(this).attr('href'), null, 'width=626,height=436');
        event_tracker.trigger('track', ['facebook_share', $(this).parents('.answer').attr('id').replace('answer_','')]);
        return false;
    });
    return this;
}

function answer_vote() {
    if ($('#current_user_id').val()) {
        action_url = $(this).attr('href');
        $.ajax({
            url: action_url,
            dataType: 'json',
            success: function(data) {
                $('#answer_' + data.answer_id).replaceWith(data.html);
                answer = $('#answer_' + data.answer_id);
                answer.init_answer();
                if (answer.find('.vote.up.selected').length > 0) {
                    event_tracker.trigger('track', ['vote_up', answer.attr('id').replace('answer_','')]);
                }
            }
        });
    } else {
        window.location = '/signin?redirect_path=' + window.location;
    }
    return false;
}

function answer_hide() {
    if ($('#current_user_id').val()) {
        action_url = $(this).attr('href');
        $.ajax({
            url: action_url,
            dataType: 'json',
            success: function(data) {
                $('#answer_' + data.answer_id).replaceWith(data.html);
                answer = $('#answer_' + data.answer_id);
                answer.init_answer();
            }
        });
    } else {
        window.location = '/signin?redirect_path=' + window.location;
    }
    return false;
}

