// korekce zobrazeni popup menu
// 050825 - http://marek.fiser.cz, mfiser@kabinet.cz
// rekurzivni zjisteni polohy elementu na strance
function topof(obj) {
	var y=0;
	if (obj.offsetParent) {
		y += obj.offsetTop + topof(obj.offsetParent);
	}
	return y;
}
function leftof(obj) {
	var x=0;
	if (obj.offsetParent) {
		x += obj.offsetLeft + leftof(obj.offsetLeft);
	}
	return x;
}
// funkce, ktera posune vetev menu nahoru, pokud zaliza za okraj obrazovky
function corrector(menuid) {
	var bds, vph, mm, mmh, mmt, mmvt, mmnt;
	bds = scroff() - 30;	// odrolovani stranky
	vph = qmvp();	// rozmer okna
	mm = document.getElementById(menuid);	// toto je opravovana vetev menu
	mmt = topof(mm);	// pozice vetve
	mmnt = mmt;	// nova pozice vetve
	mmh = mm.clientHeight;	//offsetHeight;	// vyska vetve, lze zjistit az po zobrazeni!
	if (mmh > 0) {	// jen pokud mam alespon nejaky udaj tak muzu pracovat
		mmvt = mmt - bds;	// vyska menu vuci viewportu
		if ((mmvt + mmh) > vph) {	// kontrola presahu viewportu
			mmnt = vph - mmh + bds;	// vypocet pozice vetve tak, aby nezalizala za spodek viewportu
			mmnt = mmnt<0?0:mmnt;	// osetreni prelezeni vrchem mimo okno, pak holt nebude viden ani spodek
			// Podminka pro uplne spravnou cinnost by musela byt mnohem slozitejsi.
			// Vetve si "pamatuji" upravenou pozici do reloadu! Musela by se nekde ukladat pozice puvodni a pripadne vracet.
			// Kdyby se odkazy vetve menu floatovaly, tak by se dala zmenit sirka vetve a odkazy by se presypalu!
			// MSIE nefunguje spolehlive, vysku vetve bere jen z clientHeight a obcas ji bere brzo;
		}
		mm.style.top = mmnt;	// nova pozice menu
	}
}
// funkce podle http://www.quirksmode.org/viewport/
// Inner width
// The inner dimensions of the window or frame.
function qmvp() {
	var y;
	if (self.innerHeight) // all except Explorer
	{
		y = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight)
		// Explorer 6 Strict Mode
	{
		y = document.documentElement.clientHeight;
	}
	else if (document.body) // other Explorers
	{
		y = document.body.clientHeight;
	}
	return y;	// potrebuju jen y
}
// Scrolling offset
// How much the page has scrolled.
function scroff() {
	var y;
	if (self.pageYOffset) // all except Explorer
	{
		y = self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop)
		// Explorer 6 Strict
	{
		y = document.documentElement.scrollTop;
	}
	else if (document.body) // all other Explorers
	{
		y = document.body.scrollTop;
	}
	return y;	// potrebuju jen y
}

