HTML5 Geolocation requires people to opt-in, which is pretty messy.
Better off getting the free version of the MaxMind city database[1] and running it on a server somewhere.
Better off getting the free version of the MaxMind city database[1] and running it on a server somewhere.