jQuery.fn.enabled = function(enableIt) {
    //sets object(s) to enabled/disabled or returns the enabled state of the first element
    if (enableIt == null || enableIt == undefined) //nothing passed, just return state of first element
    {
        return !($(this).attr("disabled") == "disabled");
    }
    else //setting element(s)
    {
        $(this).each(function(){
            if (enableIt)
            {
                $(this).removeAttr("disabled");
            }
            else
            {
                $(this).attr("disabled", "disabled");
            }
        });
        return this; //keep chain
    }
};

$(document).ready(function() {
	$('form.vote').each(function() {
		$(this).submit(function() {
			if(this.method.toLowerCase() != "post") {
				return true;
			}
		        
		    var form = $(this)
			var id = /(\d+)$/.exec(this.id)[1];
			var action_re = /(up|down|clear)vote/        
			var action = action_re.exec(form.attr('action'))[1];
			
			var score = $('#score'+id)
			var up = $('#up'+id)
			var down = $('#down'+id)
			var uparrow = $('#uparrow'+id)
			var downarrow = $('#downarrow'+id)
			
			$.ajax({type:"POST",
				  url:this.action,
				  dataType:"json",
				  success:function(data) {
				  	if(!data.success) {
				  		alert('Error')
				  	}
				  
					var img_re = /(-grey)?\.gif/        
			    	var up_src = uparrow.attr('src').replace(img_re, '-grey.gif') 
			    	var down_src = downarrow.attr('src').replace(img_re, '-grey.gif')  
			    	
			    	var up_url = up.attr('action').replace(action_re, 'upvote') 
			    	var down_url = down.attr('action').replace(action_re, 'downvote')  
				    
			    	if(action == 'up') {
		    			up_src = up_src.replace('-grey', '') 
		    			up_url = up_url.replace(action_re, 'clearvote')
			    	} else if(action == 'down') {
		    			down_src = down_src.replace('-grey', '') 
		    			down_url = down_url.replace(action_re, 'clearvote')
			    	}
			    	
					uparrow.attr('src', up_src)
					downarrow.attr('src', down_src)
					
					up.attr('action', up_url)
					down.attr('action', down_url)
					
					score.html(data.score.score || '0')
					score.attr('title', '')
				  }});
				  
			return false;
		})
	})
})