This site has the basic algorithm:
// in javascript, not hard to translate...
var y = Math.sin(dLon) * Math.cos(lat2);
var x = Math.cos(lat1)*Math.sin(lat2) -
Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon);
var brng = Math.atan2(y, x).toDeg();
UPDATED: See here for complete algorith Mapping Math and Javascript
That'll give you a number between 0 and 360 then it's just a matter of having a simple lookup:
var bearings = ["NE", "E", "SE", "S", "SW", "W", "NW", "N"];
var index = brng - 22.5;
if (index < 0)
index += 360;
index = parseInt(index / 45);
return(bearings[index]);
It's important to note that your bearing actually changes as you move around the earth. The algorithm above shows you initial bearing, but if you're traveling a long distance, your bearing to be significantly different when you reach the destination (if you're only traveling a short distance [< a few hundred kms] then it probably won't change enough to be a concern).