(function($){
	$.likeit = {
		settings: {
			link: 'likeit-vote', 
			update: 'likeit-votes', 
			activeclass: 'likeit-vote-active', 
			inactiveclass: 'likeit-vote-inactive', 
			path: 'mt-vote.cgi', 
			updatesuffix: 'people like this'
		},
		init: function(params) {
			$.likeit.settings = $.extend({}, $.likeit.settings, params);
			if ($.likeit.settings.entryid) {
				var params = {
					action: 'rating-get', 
					entry_id: $.likeit.settings.entryid
				};
				var vote_callback = function (event) {
					$.post($.likeit.settings.path, {
						action: 'rating-post', 
						entry_id: $.likeit.settings.entryid
					}, function(data){
						if (data.likeit_count) {
							$('#' + $.likeit.settings.update).text(data.likeit_count + ' ' + $.likeit.settings.updatesuffix);
						}
						var cookie = $.cookie('norc_likeit_entries_voted');
						if (!cookie) {
							cookie = $.likeit.settings.entryid
						} else {
							cookie += ',' + $.likeit.settings.entryid
						}
						$.cookie('norc_likeit_entries_voted', cookie, {
							expires: 360, 
							path: '/'
						});
						if (data.has_voted && data.has_voted == 'true') {
							$.likeit.disable();
							$('#' + $.likeit.settings.link).unbind('click', vote_callback);
						}
					}, 'json');
					//stop event from further propagation and prevent default action
					event.preventDefault();
					event.stopPropagation();
				};
				//update count
				$.getJSON($.likeit.settings.path, params, function(data){
					if (data.likeit_count) {
						$('#' + $.likeit.settings.update).text(data.likeit_count + ' ' + $.likeit.settings.updatesuffix);
					}
					//if the user hasn't voted yet, then attach event to allowe voting
					if (!data.has_voted || data.has_voted == 'false') {
						$('#' + $.likeit.settings.link).click(vote_callback);
					} else {
						$.likeit.disable();
					}
				});
			}
		}, 
		disable: function() {
			var vote_element = $('#' + $.likeit.settings.link);
			vote_element.removeClass($.likeit.settings.activeclass);
			vote_element.addClass($.likeit.settings.inactiveclass);
		}
	};
})(jQuery);