JJ McCarthy finally agrees to his rookie contract with Vikings