Why does my mesh give wierd results when I apply a subdivision surface modifier?
As said in the comments your biggest issue is the topology. Here are a couple of things you could try straight off the bat:


Install the Meshlint addon and make sure all of your faces are quads
Remove doubles (W > Remove Doubles)
Recalculate normals (Tool shelf > Shading/UVs > Normals: Recalculate)




Also mentioned in the comments was that you have some disconnected faces. You can see two of them here:

 

Because of their position, I think whats happened is that you have two large single faces (n-gons) that's filled in a large portion of the top and bottom of the mesh, as well as all the little ones, so what you can do is in wireframe mode just try selecting all around the top portion of the model, see if you can find those stray faces.



Once you have sorted those things out, you can try a couple of things to make the edges a little bit cleaner with the sub surf on. I would recommend two edge loops around the middle section of the mesh, drag each one close but on on the top and bottom sections (I know I haven't worded this very well, I hope you can understand it), this will make the edges nice and crisp. Alternatively you could use mean creases, just select the edge loop at the very top and bottom and use the shortcut Shift+E and adjust the slider.

Hope you understand all this! You should also checkout some of Jonothan Williamson's tutorials, he is very big on keeping good topology, something like this should do a lot of good for you!