Complex query and posts pagination

First of all, the post_nav_link() function is used to paginate the main query on home and archive pages. It does not work with custom queries (unless you hack the main query which I strongly discourage, it is the same as using query_posts then).

To paginate your custom query, you need to use

which will echo the links. If you need it returned, just use their get_* counterparts. There is a nice example of how to paginate a custom query on the next_posts_link() codex page.

I have also written a custom pagination function which work with any query and either display pagination as links or as numbers. You can check it out here

If you are going to using ajax for infinite scrolling, there are quite a few plugins (and tutorials IIRC) to check out and from which you can ‘borrow’ some code. Just make sure, I have seen one or two plugins/tutorials that uses query_posts. You should avoid using those as you should never ever use query_posts as it breaks/hacks the main query object.

One last note, I’m not sure where you would want to use the query, but static frontpages make use of get_query_var( 'page' ) and not get_query_var( 'paged' ), so if you are using the query on a static front page, make sure to change accordingly