jQuery(function() {
	attach_handlers();
});

function attach_handlers() {
	//jQuery('tfoot td:first a').click(redraw_table_handler_from_footer);
	jQuery('table#cf-leaderboard thead th:not(".disabled")').css('cursor', 'pointer').click(redraw_table_handler_from_th);

	jQuery('a.vote-for, a.vote-against').click(thumbs_up_thumbs_down_handler);
	jQuery('span.vote-for, span.vote-against').click(must_be_logged_in_handler);
	
	// this function is living in tdi/js/tdi.js
	setLeaderboardAccordian();
}

function must_be_logged_in_handler() {
	elem = jQuery(this);
	
	must_be_logged_in_message(elem);
	return false;
}

function thumbs_up_thumbs_down_handler() {
	has_voted(this) ? already_voted_display(this) : cf_digg_vote(this);
	
	return false;
}		

function redraw_table_handler_from_footer() {
		var page = get_requested_page(jQuery(this));
			
		_redraw(page);
		
		return false;
}

function redraw_table_handler_from_th() {
	elem = jQuery(this);
	//jQuery('table#cf-leaderboard').after('<img id="cf-leaderboard-loading" class="loading" src="' + cb_pathToImage + '" alt="Loading" />')
	
	// wipe sort column from previous active row
	// might *not* be necessary if the selected element were being passed into _redraw directly, obviating
	// the need to make .active unique before the redraw
	jQuery('table#cf-leaderboard .active').removeClass('active');
	
	elem.addClass('active');  // being grepped for in _redraw (get_sort_by_column())
	//elem.toggleClass('asc');  // being grepped for in _redraw (get_sort_direction())
	
	//var page = get_current_page_number();
	
	//_redraw(page);
	
	switch(elem.attr('id')) {
	    case "nameHeader":
	        lbManager.sortByName();
	        break;        
		case "rankHeader":
			lbManager.sortByRank();
			break;
	    case "mpgHeader":
	        lbManager.sortByMPG();
	        break;
	    case "commentHeader":
	        lbManager.sortByComments();
	        break;
	}

	return false;
}

function _redraw(page) {	
	jQuery.get('index.php', 
				{
					cfvw_leaderboard: 'true',
					page: page,
					col: get_sort_by_column(),
					dir:  get_sort_direction()
				}, 
				function(html) {
					var disclaimer_clone = jQuery('a#leaderboard-legal-disclaimer').clone(true);										
					
					jQuery('table#cf-leaderboard').before(html).remove(); // replacing element
					
					jQuery('#cf-leaderboard-loading').remove();
					
					jQuery('a#leaderboard-legal-disclaimer')
							.parent()
							.append(disclaimer_clone)
							.end()
							.remove();
					
					
					attach_handlers();
				}
			  );
}


function get_current_page_number() {
	if( jQuery('a.cf-global-pagination-previous').size() == 0 ) {
		return 1;
	} else {
		return get_requested_page( jQuery('a.cf-global-pagination-previous') ) + 1;
	}
}

function get_requested_page(elem) {
	return parseInt(elem.attr('rel').split("-").pop());
}

function get_sort_by_column() {
	var klass = jQuery('table.rankings thead th.active').attr('class');
	
	if(klass) {		
		var result = klass.split(' ').shift();
		
		return result;
	} else {
		return;
	}
	
}

function get_sort_direction() {
	return jQuery('table.rankings thead th.active').hasClass('asc') ? 'asc' : 'desc';
}

function cf_digg_vote(elem) {
	elem    =  jQuery(elem);
	wrapper =  elem.parent().parent();

	post_id =  wrapper.attr('id').split('-').pop();
	blog_id =  wrapper.attr('class').split(' ')[1].split('-').pop();
	vote    =  elem.attr('rel');

	jQuery.ajax({
		type: 'POST',
			data: {'post_id': post_id, 'blog_id': blog_id, 'vote': vote, 'cf_digg_action': 'cf_digg_vote'},
			url: 'http://tdi.vw.com/index.php',
		timeout: 2000,
			error: function() { alert('Sorry we are unable to complete your request at this time. Please try again later.'); },
			success: function(res) {
				undo_opposing_vote_if_set(wrapper);
				mark_as_voted(elem);
				increment_count(elem);
			}
	})

	return false;
}

function increment_count(elem) {
	jQuery(elem).cf_increment();
}

function has_voted(elem) {
	return jQuery(elem).hasClass('voted');
}

// keeping this stubbed out in case client wants this functionality later
function already_voted_display(elem) {
	// alert('you already voted that way...');	
}

function mark_as_voted(elem) {
	jQuery(elem).parent().addClass('wrapper-voted');
	jQuery(elem).addClass('voted');
}

function undo_opposing_vote_if_set(wrapper) {
	wrapper.find('td.wrapper-voted').removeClass('wrapper-voted');
	wrapper.find('a.voted').cf_decrement().removeClass('voted');
}

jQuery.fn.cf_increment = function() {
	return this.each(function() {
		elem = jQuery(this);
		elem.text(parseInt(elem.text()) + 1);
	})	
}

// duplication i know...let me refactor in a bit...
jQuery.fn.cf_decrement = function() {
	return this.each(function() {
		elem = jQuery(this);
		elem.text(parseInt(elem.text()) - 1);
	})	
}

function must_be_logged_in_message(elem) {
	alert("You must be registered and logged in to do that...");
}