Undefined WP_Query::has_posts()?

It isn’t has_posts, it is have_posts. You’ve just got the method name wrong. That’s all.

http://codex.wordpress.org/Class_Reference/WP_Query#Methods