var Environment = {
	getWidth : function() {
		if(window.innerWidth && typeof(window.innerWidth) == 'number' )
	    	return window.innerWidth;
	  	if(document.documentElement && document.documentElement.clientWidth)
		    return document.documentElement.clientWidth;
		if(document.body && document.body.clientWidth)
			return document.body.clientWidth;
	},
	getHeight : function() {
		if(window.innerHeight && typeof(window.innerHeight) == 'number' )
	    	return window.innerHeight;
	  	if(document.documentElement && document.documentElement.clientHeight)
		    return document.documentElement.clientHeight;
		if(document.body && document.body.clientHeight)
			return document.body.clientHeight;
	},
	getScrollTop : function() {
		if(window.pageYOffset && typeof(window.pageYOffset) == 'number')
			return window.pageYOffset;
		if(document.body && document.body.scrollTop)
			return document.body.scrollTop;
		if(document.documentElement && document.documentElement.scrollTop)
			return document.documentElement.scrollTop;
		return -1;
	},
	getScrollLeft : function() {
		if(window.pageXOffset && typeof(window.pageXOffset) == 'number')
			return window.pageXOffset;
		if(document.body && document.body.scrollLeft)
			return document.body.scrollLeft;
		if(document.documentElement && document.documentElement.scrollLeft)
			return document.documentElement.scrollLeft;
		return -1;
	}
}

var Bubble = function(element) {
	var self = this;
	
	var bubbleElement = document.createElement('div');
	var divLUC = document.createElement('div');
	var divLBC = document.createElement('div');
	var divRUC = document.createElement('div');
	var divRBC = document.createElement('div');
	var divTB = document.createElement('div');
	var divBB = document.createElement('div');
	var divC = document.createElement('div');
	var divP = document.createElement('div');
	
	var timer = null;
	var tmpOnMouseOver = null;
	var tmpOnMouseOut = null;
	
	var positionTop = Math.round(element.offsetHeight / 2);
	var positionLeft = Math.round(element.offsetWidth / 2);
	
	var parentNode = element;
	while(parentNode) {
		positionTop += parentNode.offsetTop;
		positionLeft += parentNode.offsetLeft;
		parentNode = parentNode.offsetParent;
	}
	
	var parentNode = element;
	while(parentNode) {
		if(parentNode.scrollLeft)
			positionLeft -= parentNode.scrollLeft;
		parentNode = parentNode.parentNode;
	}
	
	bubbleElement.className = 'bubble';
	bubbleElement.onmouseover = function() { stopTimeout(); };
	bubbleElement.onmouseout = function() { startTimeout(); };
	
	divLUC.className = 'luc';
	divLBC.className = 'lbc';
	divRUC.className = 'ruc';
	divRBC.className = 'rbc';
	divTB.className = 'tb';
	divBB.className = 'bb';
	divC.className = 'c';
	divP.className = 'pb';
	
	bubbleElement.appendChild(divLUC);
	bubbleElement.appendChild(divP);
	divLUC.appendChild(divLBC);
	divLBC.appendChild(divRUC);
	divRUC.appendChild(divRBC);
	divRBC.appendChild(divTB);
	divRBC.appendChild(divC);
	divRBC.appendChild(divBB);
	
	tmpOnMouseOut = element.onmouseout;
	tmpOnMouseOver = element.onmouseover;
	element.onmouseout = function() { startTimeout(); };
	element.onmouseover = function() { stopTimeout(); };
	
	var startTimeout = function() {
		if(!timer)
			timer = setTimeout(function() { self.Hide() }, 100);
	};
	var stopTimeout = function() {
		if(!timer)
			return;
		
		clearTimeout(timer);
		timer = null;
	};
	
	self.SourceElement = element;
	self.Content = '';
	self.IsHidden = true;
	
	self.Show = function() {
		divC.innerHTML = self.Content;
		
		//if(!bubbleElement.parentNode)
			document.getElementsByTagName('body')[0].appendChild(bubbleElement);

		var tmpPositionTop = positionTop - bubbleElement.offsetHeight;
		var tmpPositionLeft = positionLeft - Math.round(bubbleElement.offsetWidth / 2);
		
		if(tmpPositionTop < Environment.getScrollTop()) {
			bubbleElement.removeChild(divP);
			divP.className = 'pt';
			bubbleElement.insertBefore(divP, divLUC);
			tmpPositionTop += bubbleElement.offsetHeight;
		}
		
		bubbleElement.style.top = tmpPositionTop + 'px';
		bubbleElement.style.left = tmpPositionLeft + 'px';
		
		self.IsHidden = false;
	}
	self.Hide = function() {
		var parent;
		
		stopTimeout();
		self.IsHidden = true;
		if(!(parent = bubbleElement.parentNode))
			return;
		
		parent.removeChild(bubbleElement);
		element.onmouseover = tmpOnMouseOver;
		element.onmouseout = tmpOnMouseOut;
	}
	
}

function pokazDymek(element, tekst) {
	var bubble = new Bubble(element);
	bubble.Content = tekst;
	bubble.Show();
	
}