I think you have an error here:
vec3 NormalPosition_cameraspace = ( V * M * vec4(vertexNormal,1)).xyz;
Normal_cameraspace = -NormalPosition_cameraspace;
You should construct a vec4 from vertexNormal using 0 as the fourth component (not 1). This effectively means that any translation is ignored when multiplying by your model/view matrices. This is what you want because the normal represents a direction, not a position.
Also, I don't understand this calculation:
LightDirection_cameraspace = LightPosition_cameraspace + EyeDirection_cameraspace;
Shouldn't this be something like:
LightDirection_cameraspace = LightPosition_cameraspace - vertexPosition_cameraspace;