Index: /trunk/admin/themes/clear/theme.css
===================================================================
--- /trunk/admin/themes/clear/theme.css	(revision 22663)
+++ /trunk/admin/themes/clear/theme.css	(revision 22664)
@@ -188,4 +188,8 @@
 
 /* jQuery tooltips */
+.ui-tooltip {
+	color: #000;
+	background-color: #eee;
+}
 .cluetip-outer { border-color:#999; color: #777; background-color: #eee; }
 .cluetip-title { background-color: #ddd; }
Index: /trunk/admin/themes/default/js/jquery.geoip.js
===================================================================
--- /trunk/admin/themes/default/js/jquery.geoip.js	(revision 22664)
+++ /trunk/admin/themes/default/js/jquery.geoip.js	(revision 22664)
@@ -0,0 +1,42 @@
+
+GeoIp = {
+	cache: {},
+	pending: {},
+	
+	get: function(ip, callback){
+		if (GeoIp.cache.hasOwnProperty(ip))
+			callback(GeoIp.cache[ip]);
+		else if (GeoIp.pending[ip])
+			GeoIp.pending[ip].push(callback);
+		else {
+			GeoIp.pending[ip] = [callback];
+			jQuery.ajax( {
+				url: "http://freegeoip.net/json/" + ip,
+				dataType: "json",
+				success: function(data) {
+					var res=[];
+					if (data.city) res.push(data.city);
+					if (data.region_name) res.push(data.region_name);
+					if (data.country_name) res.push(data.country_name);
+					data.fullName = res.join(", ");
+
+					GeoIp.cache[ip] = data;
+					var callbacks = GeoIp.pending[ip];
+					delete GeoIp.pending[ip];
+					for (var i=0; i<callbacks.length; i++)
+						callbacks[i].call(null, data);
+				},
+
+				error: function() {
+					var data = {ip:ip, fullName:""};
+
+					GeoIp.cache[ip] = data;
+					var callbacks = GeoIp.pending[ip];
+					delete GeoIp.pending[ip];
+					for (var i=0; i<callbacks.length; i++)
+						callbacks[i].call(null, data);
+				}
+			});
+		}
+	}
+}
Index: /trunk/admin/themes/default/template/history.tpl
===================================================================
--- /trunk/admin/themes/default/template/history.tpl	(revision 22663)
+++ /trunk/admin/themes/default/template/history.tpl	(revision 22664)
@@ -7,7 +7,5 @@
 {/literal}{/footer_script}
 
-<div class="titrePage">
-  <h2>{'History'|@translate} {$TABSHEET_TITLE}</h2>
-</div>
+<h2>{'History'|@translate} {$TABSHEET_TITLE}</h2>
 
 <form class="filter" method="post" name="filter" action="{$F_ACTION}">
@@ -84,5 +82,5 @@
   </label>
 
-  <input class="submit" type="submit" name="submit" value="{'Submit'|@translate}">
+  <input type="submit" name="submit" value="{'Submit'|@translate}">
 </fieldset>
 </form>
@@ -125,5 +123,5 @@
   <td class="hour">{$detail.TIME}</td>
   <td>{$detail.USER}</td>
-  <td>{$detail.IP}</td>
+  <td class="IP">{$detail.IP}</td>
   <td>{$detail.IMAGE}</td>
   <td>{$detail.TYPE}</td>
@@ -137,2 +135,19 @@
 
 {if !empty($navbar) }{include file='navigation_bar.tpl'|@get_extent:'navbar'}{/if}
+
+{combine_script id='jquery.geoip' load='async' path='admin/themes/default/js/jquery.geoip.js'}
+{combine_script id='jquery.ui.tooltip' load='footer'}
+
+{footer_script}{literal}
+jQuery(".IP").tooltip( {
+	items: "*",
+	/*show: {delay:0, effect:"show"},
+	hide: {delay:50, effect:"hide"},*/
+	content: function(response) {
+		var that = $(this);
+		GeoIp.get( that.text(), function(data) {
+			response( data.fullName );
+		});
+	}
+});
+{/literal}{/footer_script}
Index: /trunk/admin/themes/default/theme.css
===================================================================
--- /trunk/admin/themes/default/theme.css	(revision 22663)
+++ /trunk/admin/themes/default/theme.css	(revision 22664)
@@ -505,4 +505,13 @@
 
 /* jQuery tooltips */
+.ui-tooltip {
+	padding: 8px;
+	position: absolute;
+	z-index: 9999;
+	max-width: 300px;
+	-webkit-box-shadow: 0 0 5px #aaa;
+	box-shadow: 0 0 5px #aaa;
+}
+
 .cluetip-outer {
 	position: relative;
Index: /trunk/admin/themes/roma/theme.css
===================================================================
--- /trunk/admin/themes/roma/theme.css	(revision 22663)
+++ /trunk/admin/themes/roma/theme.css	(revision 22664)
@@ -161,4 +161,8 @@
 
 /* jQuery tooltips */
+.ui-tooltip {
+	color: #eee;
+	background-color: #000;
+}
 .cluetip-outer { border-color: #666; color: #666; background-color: #222; }
 .cluetip-title { color: #ff3363; background-color: #111; }
