GLSL shader problem

My shader program is clearly not computing vectors correctly, because I get these results:

NO Shader(fixed-function):

Shader

This is a plain diffuse shader that is supposed to create a green diffuse on the object:
.vert


varying vec3 vertex_light_position;
varying vec3 vertex_light_half_vector;
varying vec3 vertex_normal;
varying vec4 color;
varying vec3 N;
varying vec3 v;

 void main(void)
   {
      v = vec3(gl_ModelViewMatrix * gl_Vertex);
      N = normalize(gl_NormalMatrix * gl_Normal);

      color = gl_Color;
      vertex_normal = normalize(gl_NormalMatrix * gl_Normal);
      vertex_light_position = normalize(gl_LightSource[0].position.xyz);
      vertex_light_half_vector = normalize(gl_LightSource[0].halfVector.xyz);
      
      gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
   } 



.frag


varying vec3 vertex_light_position;
varying vec3 vertex_light_half_vector;
varying vec3 vertex_normal;
varying vec4 color;
varying vec3 N;
varying vec3 v;

void main()
{  
   vec3 L = normalize(gl_LightSource[0].position.xyz - v);
   vec3 E = normalize(-v);
   vec3 R = normalize(reflect(-L,N));
   
   vec4 diffuse_color = vec4(0.0,1.0,0.0,0.0);
   float diffuse_value = max(dot(vertex_normal, vertex_light_position), 0.0);

   if (gl_FrontFacing){
       gl_FragColor = color + ((diffuse_color-color) * (diffuse_value));
   }else{
       gl_FragColor = color;
   }

}

Im confused, because I get the correct effect on my shader designer:

The diffuse component should be dot(N,L) i.e eye space vertex normal with eye space light vector (vector from lightpos to vertex position in eye space) So you should change this line


float diffuse_value = max(dot(vertex_normal, vertex_light_position), 0.0);

to this


float diffuse_value = max(dot(N, L), 0.0);

PS: There are some redundant calculations going on here. you are calculating the eye space vertex postiion and normals twice.

Works perfect, thanks Mobeen! I understand the error in the dot product, now. http://oi33.tinypic.com/2je1qir.jpg