var __hint_id = 1;

$.fn.hint = function(settings){
	if(settings == "close"){
		if($(this).attr("hint")){
			$("#" + $(this).attr("hint")).fadeOut("normal",function(){
				$(this).remove();
			});
			$(this).removeAttr("hint");
		}
		return true;
	}
	
	settings = $.extend({
		text:"",
		position:"top"
	},settings);
	$(this).filter(":visible").each(function(){
		$(this).hint("close");
		var box = document.createElement("div");
		document.body.appendChild(box);
		$(box).attr({
			"id":"hint_" + (__hint_id++)
		}).css({
			"border":($.browser.msie ? "1px solid #666666": "none"),
			"background-color":($.browser.msie ? "RGB(255,255,210)" : "RGBA(255,255,210,0.9)"),
			"color":"#444444",
			"cursor":"default",
			"font-size":"8pt",
			"padding":"12px",
			"padding-right":"20px",
			"position":"absolute",
			"z-index":"3"
		}).css3({
			"border-radius":"10px",
			"box-shadow":"0px 0px 5px #111111"
		}).hide().html(settings.text);
		
		$(this).attr("hint",$(box).attr("id"));
		
		var bclose = document.createElement("img");
		box.appendChild(bclose);
		var bclose_left = parseInt($(box).width()) + 16;
		$(bclose).attr({
			"alt":"Fechar",
			"src":"../image/close.gif",
			"title":"Fechar"
		}).css({
			"cursor":"pointer",
			"left":bclose_left,
			"position":"absolute",
			"top":"4px"
		}).bind("click",function(){
			var box = $(this).parent();
			$("*[hint='" + $(box).attr("id") + "']").hint("close");
		}).bind("load",function(){
			$(this).css({
				"left":bclose_left
			});
		});
		
		switch(settings.position){
			case "bottom":
				var top = $(this).offset().top;
				if($.browser.msie){
					top += $(box).height() - 5;
				}else{
					top += $(box).height() / 2;
				}
				break;
			case "top":
				var top = $(this).offset().top + $(box).height() * (-2);
				break;
			default:
				var top = 0;
				break;
		}
		
		$(box).css({
			"left":$(this).offset().left + $(this).width() / 2 - $(box).width() / 2 - 15,
			"top":top
		}).fadeIn("normal");
	});
	return this;
}
