showing different content based on locaiton

Hi,
A client wants to be able to show different content based on what region of the united states or world the visitor is coming to the site from. They even want to have the ability to show different content based on city. Are there any plugins/methods to do this?