//Author: kingthy
//Date: 2009/01/06

if(typeof(jslib) == 'undefined')var jslib = {};

if(typeof(jslib.tipdialog) == 'undefined'){
	jslib.tipdialog = function(){
		var self = this;
		var div = null;

		var offX = 5;
		var offY = 10;

		var dialogDefaultWidth = 500;
		var dialogWidth = 0;
		var dialogTimeout = 1000;
		var dialogIsVisible = false;
		var dialogCssName = 'jslib_tipdialog';

		this.init = function(){
			initTipDialogLayer();
			initTipDialogEvent();
		}

		function initTipDialogLayer(){
			var div_id = '_jslib_tipdialog';
			div = document.getElementById(div_id);
			if(div == null){
				div = document.createElement('div');
				div.id = div_id;
				div.style.display = 'none';
				div.style.position = "absolute";
				div.className = dialogCssName;
				div.onmouseover = function(){dialogIsVisible = true;};
				div.onmouseout = function(){
					dialogIsVisible = false;
					setTimeout(hidden_tipdialog, dialogTimeout);
				};
				document.body.appendChild(div);
			}
		}

		function hidden_tipdialog(){
			if(!dialogIsVisible){
				div.style.display = 'none';
			}
		}
		
		this.attach = function(o){
			if(o.getAttribute("tip")){
				if(o.attachEvent){
					o.attachEvent("onmouseover", on_mouseover);
					o.attachEvent("onmouseout", on_mouseout);
				}else if(o.addEventListener){
					o.addEventListener("mouseover", on_mouseover, false);
					o.addEventListener("mouseout", on_mouseout, false);
				}else{
					o.onmouseover = on_mouseover;
					o.onmouseout = on_mouseout;
				}
			}
		}

		function initTipDialogEvent(){
			var items = document.all ? document.all : document.getElementsByTagName("*");
			for(var i=0; i<items.length; i++){
				self.attach(items[i]);
			}
		}

		function getPosition(e){
			var o = e.srcElement || e.target;
			var p = jslib.dom.position(o);

			var width = dialogWidth || div.style.width || div.offsetWidth;

			p.x = (p.left + p.width / 2) - (width / 2);
			p.y = p.top + p.height + offY;
			return p;
		}

		function on_mouseover(event){
			dialogIsVisible = true;
			var e = event || window.event;
			var o = e.srcElement || e.target;
			if(o){
				var tip = o.getAttribute("tip");
				if(tip){
					div.innerHTML = tip;
				}
				var tipCssName = o.getAttribute("tipclass") || dialogCssName;
				div.className = tipCssName;
				if(o.getAttribute("tipwidth")){
					dialogWidth = parseInt(o.getAttribute("tipwidth"));
				}else{
					dialogWidth = dialogDefaultWidth;
				}

				var p = getPosition(e);
				div.style.left = p.x + 'px';
				div.style.top = p.y + 'px';
				div.style.display = '';
			}

		}
		function on_mouseout(event){
			dialogIsVisible = false;
			setTimeout(hidden_tipdialog, dialogTimeout);
		}
	};

	var jslib_tipdialog = new jslib.tipdialog();

	if(window.attachEvent){
		window.attachEvent("onload",jslib_tipdialog.init);
	}else{
		window.addEventListener("load",jslib_tipdialog.init,false);
	}
}
