/* ===================================================================
 * 										 TOOLTIP - PLOVOUCI NAPOVEDA
 * ===================================================================
 *
 * autor: Jakub Hruby - WEB&DTP (http://web-dtp.cz)
 * release: 1.2 druha oprava vypoctu pozice napovedy
 * 					1.1 opravena pozice napovedy pri odskrolovani
 * 					1.0 startovaci verze
 *
 *
 * INSTALACE
 * ---------
 * volani napovedy probiha pridanim eventu elementu: on[event]="TLTooltip.otevri('text napovedy',event,this)";
 * pro upravu vzhledu je mozne menit hodnoty nize v bloku LAYOUT
 *
 *
 * SEZNAM FUNKCI
 * -------------
 * TLTInit()											//iniciacni funkce, vola se pri window.onload
 * TLTTool()											//konstruktor objektu TLTTool, ktery je volan funkci TLTInit()
 * TLTTool.otevri(text,event,el)	//zobrazi, umisti a naplni napovedu
 * 	@string text									//text, ktery se zobrazi v napovede
 * 	@Event event									//objekt udalosti predavany pri volani metody TLTTool.otevri()
 *  @DOMObject el									//objekt elementu, kteremu je nastavena udalost "onmouseout"
 * TLTTool.zavri()								//zavre napovedu
 */


// ==========================================================================
//                     LAYOUT - MENIT HODNOTY DLE POTREBY
// ==========================================================================

//rodina fontu
	var TLTFontFamily="trebuchet ms,arial,sans-serif";

//velikost textu [px/em]
	var TLTFontSize="1em";

//barva fontu
	var TLTColor="#000000";

//urcuje, zda bude font tucnym rezem [true/false]
	var TLTBold=false;

//sirka napovedy [px/em]
	var TLTWidth="150px";

//pozadi napovedy [#000000/url("URL") x-position y-position repeat-mode]
	var TLTBackground="#ffffff";

//sirka okraje napovedy [vsechny/horni prvay dolni levy][px/em]
	var TLTBorder="0px";

//druh okraje napovedy [solid/dotted/dashed/double/groove/ridge/inset/outset]
	var TLTBorderStyle="solid";

//barva okraje napovedy
	var TLTBorderColor="#ffffff";

//zarovnani textu [left/justify/center/right]
	var TLTAlign="center";

//vzdalenost textu od okraje [px/em]
	var TLTPadding="5px";

//vodorovne odsazeni od kurzoru
	var TLTXOffset=20;

//svisle odsazeni od kurzoru
	var TLTYOffset=20;


// =============================================================
//                     VYKONNY KOD - NEMENIT
// =============================================================

var TLTDiv,TLTTooltip;

//prida event iniciacni funkce do window.onload
if(window.addEventListener){
				window.addEventListener("load",TLTInit,false);
}
else{
				window.attachEvent("onload",TLTInit);
}

//iniciacni funkce - zalozi objekt TLTTool a nastavi layout napovedy
function TLTInit(){
				TLTTooltip=new TLTTool();
				TLTDiv=document.createElement("div");
				TLTDiv.style.position="absolute";
				TLTDiv.id="TLTTLTTooltip";
				TLTDiv.style.zIndex=10;
				TLTDiv.style.display="none";
				TLTDiv.style.fontSize=TLTFontSize;
				if(TLTBold){TLTDiv.style.fontWeight="bold";}
				else{TLTDiv.style.fontWeight="normal";}
				TLTDiv.style.fontFamily=TLTFontFamily;
				TLTDiv.style.color=TLTColor;
				TLTDiv.style.width=TLTWidth;
				TLTDiv.style.background=TLTBackground;
				TLTDiv.style.borderWidth=TLTBorder;
				TLTDiv.style.borderStyle=TLTBorderStyle;
				TLTDiv.style.borderColor=TLTBorderColor;
				TLTDiv.style.textAlign=TLTAlign;
				TLTDiv.style.padding=TLTPadding;
				document.body.appendChild(TLTDiv);
}

//konstruktor objektu TLTTool
function TLTTool(){}

//otviraci funkce
TLTTool.prototype.otevri=function(text,event,el){
				//zakladni XY pozice
				var left=getTLTEventX(event)+TLTXOffset;
				var top=getTLTEventY(event)+TLTYOffset;
				//snap na vysku
				var pad=0;
				if(!TLTBrowser.ie && !TLTBrowser.ie7 && !TLTBrowser.ie8){pad=parseInt(TLTPadding)*2;}
				var spodniHrana=top-getTLTYOffset()+getTLTVyskaElementu(getTLTElement("TLTTLTTooltip"))+pad+10;
				var vyskaOkna=getTLTVyskaOkna();
				if(spodniHrana>vyskaOkna){top=vyskaOkna+getTLTYOffset()-getTLTVyskaElementu(getTLTElement("TLTTLTTooltip"))-pad-10;}
				if(top<(getTLTVyskaElementu(getTLTElement("TLTTLTTooltip"))+pad+10)){top=getTLTVyskaElementu(getTLTElement("TLTTLTTooltip"))+pad+10;}
				//snap na sirku
				var pad=0;
				if(!TLTBrowser.ie){pad=parseInt(TLTPadding)*2;}
				var pravaHrana=left+parseInt(TLTWidth)+pad+10;
				var sirkaOkna=getTLTSirkaOkna();
				if(pravaHrana>sirkaOkna){left=sirkaOkna-parseInt(TLTWidth)-pad-10;}
				if(left<pad+10){left=pad+10;}

				TLTDiv.style.left=left+"px";
				TLTDiv.style.top=top+"px";
				TLTDiv.innerHTML=text;
				TLTDiv.style.display="block";
				//nastaveni udalosti pro zavreni napovedy
				el.onmouseout=this.zavri;
}

//zaviraci funkce
TLTTool.prototype.zavri=function(){
				TLTDiv.style.display="none";
}


// ===============================================
//                     GETTERY
// ===============================================

//vraci objekt elementu
function getTLTElement(id){
				return document.getElementById(id);
}

//vraci souradnici x udalosti
function getTLTEventX(event){
			if(event.pageX){return event.pageX;}
			else if(event.clientX){return event.clientX;}
			else{return -1;}
}

//vraci souradnici y udalosti
function getTLTEventY(event){
			if(event.pageY){return event.pageY;}
			else if(document.documentElement){return event.clientY+document.documentElement.scrollTop;}
			else if(document.body.scrollTop){return event.clientY+document.body.scrollTop;}
			else{return -1;}
}

//vraci sirku okna
function getTLTSirkaOkna(){
				return (document.documentElement.clientWidth)?document.documentElement.clientWidth:document.body.clientWidth;
}

//vraci vysku okna
function getTLTVyskaOkna(){
				return (document.documentElement.clientHeight)?document.documentElement.clientHeight:document.body.clientHeight;
}

//vraci vysku elementu
function getTLTVyskaElementu(el){
				return (window.getComputedStyle)?parseInt(window.getComputedStyle(el,null).getPropertyValue("height")):parseInt(el.offsetHeight);
}

//vraci miru odskrolovani
function getTLTYOffset(){
				var max1=0,max2=0,max3=0;
				if(document.documentElement.scrollTop!="undefined"){max1=document.documentElement.scrollTop;}
				if(document.body.scrollTop!="undefined"){max2=document.body.scrollTop;}
				if(window.pageYOffset){max3=window.pageYOffset;}
				return Math.max(max1,max2,max3);
}

//vraci vysku dokumentu
function getTLTVyskaDokumentu(){
				var vyska=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight);
				vyska+=document.body.scrollTop;
				if(vyska>getTLTVyskaOkna()){return vyska;}
				else{return getTLTVyskaOkna();}
}

//vraci typ prohlizece
var TLTBrowser=new TLTProhlizec();
function TLTProhlizec(){
				var regIE=new RegExp("MSIE [0-9\.[0-9]");
				var regFF=new RegExp("firefox");
				this.jiny=this.opera=this.ff=this.ie=this.ie7=this.ie8=false;
				//ie
				if(navigator.appName=="Microsoft Internet Explorer"){
					var ieVerze=String(navigator.appVersion.match(regIE));
					ieVerze=ieVerze.substr(5);
					ieVerze=parseInt(ieVerze);
					if(ieVerze<=6){this.ie=true;} //IE 6 a vyšší
					else if(ieVerze==7){this.ie7=true;} // IE 7
					else{this.ie8=true;} // IE 8
				}
				//opera
				else if(navigator.appName=="Opera"){this.opera=true;}
				//firefox
				else if(regFF.test(navigator.userAgent)){this.ff=true;}
				//jiny
				else{this.jiny=true;}
}
