This is a guess, but it looks like all of your normals are... well, weird.
Normally a normal is a unit vector (dot product is 1). You've got some normals defined as (-5, 0, 0) which is odd. Since the only geometry I see is a cube (12 triangles), your normals are very likely to be either (1, 0, 0) or (0, 1, 0) or (0, 0, 1). Other normals (something like (0.2, 0.4, 0.1)) are generally created by a 3d Drawing program.
When the normal is off, the lighting calculations built into Direct3D behave oddly, including making things too dark or too light or just not having the light blend across a surface quite right (compared to what's expected - the math is working right).
I noticed that in loadGeometry, you also define 3 vectors: v0, v1, v2, and v3. They're used in calls to PositionNormalTextured as both the position AND normal vector. I think you'll probably want only one vector for the normal. The position vector can change according to the position you need (I didn't check your code for accuracy on position though the cube does draw).
-Nerseus