var timeoutID;

/**
* zapsani stylu s poskocenim hlavniho divu nahoru - stara verze grafiky, ten neni potreba
*/
function changeStyle(styleSheetName){
	document.writeln('<link rel="stylesheet" href="'+styleSheetName+'.css">');
//	TODO: nezapisovat ^ do <body> ale do <head> - a je to nutny? ; )
}

/**
* vola vlozeni stylu s poskocenim divu nahoru, neni jiz treba
*/
function DOMtest(){
	if(window.addEventListener){
		changeStyle("czechdesign_menu");
	} else if(window.attachEvent){
		changeStyle("czechdesign_menu");
	} else {
		return false;
	}
}

/**
* v nove grafice netreba
*/
//DOMtest();

/** pridani event funkce na objekt
* @param obj Object - na kterz chci navesit event listener funkci
* @param evType string - jaky typ event chci on(Click, Release ...)
* @param fn string - nazev funkce ktera se bude volat
*/
function addEvent(obj,evType,fn){
	if(obj.addEventListener){
		obj.addEventListener(evType,fn,true);
		return true;
	} else if(obj.attachEvent){
		var r=obj.attachEvent("on"+evType,fn);
		return r;
	} else {
	return false;
	}
}
// init se ted provadi "primo" v html...
// addEvent(window,"load",init);

var elementy=new Array();
var showhide=new Array();

/** inicializace preklapeni
*
*/
function init(){
	//m - vyber vsechny LI prvni urovne z prvniho UL co je v kontejneru navigationBar, navesime na ne eventy
	var m=document.getElementById("navigationBar").getElementsByTagName("UL")[0].getElementsByTagName('LI');
	for (var i=0;i<m.length;i++){
		addEvent(m[i],"mouseover",swapMenu);
		addEvent(m[i],"mouseout",swapMenu);
		addEvent(m[i],"mousedown",swapMenu);
	}
	
	//list - vyber vsechny LI prvni urovne z prvniho UL co je v kontejneru navigationBar
	lis=document.getElementById("navigationBar").getElementsByTagName('UL')[0].getElementsByTagName('LI');
	lisleng=lis.length;
	l=0;
	while (l<lisleng){
		//jestlize nas konkretni LI element nema ID, vezmu si do idLi ID obalujiciho divu (tedy navigationBar)
		if((lis[l].getAttribute('id')==null)||(lis[l].getAttribute('id')=='')){
			idli=lis[l].parentNode.parentNode.getAttribute('id');
			right=false;
		//jinak si vezmu do idLi jeho ID
		} else {
			idli=lis[l].getAttribute('id');
			elementy[idli]=idli;
			showhide[idli]='';
			right=true;
		} 
		//mam v idLi spravne ID spravneho LI
		if(right==true){
			//pokud existuje v danem LI podseznam UL
			if(document.getElementById(idli).getElementsByTagName('UL')[0]){
				//a nema definovan styl DISPLAY (je zobrazeno), pak ho nastavim na NONE
				//debug(idli+'.style.display = '+document.getElementById(idli).getElementsByTagName('UL')[0].style.display);
				if(document.getElementById(idli).getElementsByTagName('UL')[0].style.display==''){
					document.getElementById(idli).getElementsByTagName('UL')[0].style.display='none';
				}
			}
		}
		l++;
	}
}

var timearray=new Array();

/** funkce provadi vlastni preklapeni - zobrazovani a schovavani
* @param e object - element LI prvni  urovne
*/
function swapMenu(e){
	e=fixE(e);
	
	/** typ eventu ktery na elementu e nastal (onmouseover, onmouseout, ...)
	* @var t string 
	*/
	var t=e.type; 
	
	/** objekt LI menu prvni urovne 
	* @var obj object
	*/
	var obj;
	
	if(e.currentTarget){
		obj=e.currentTarget;
	} else {
		obj=e.target;
		while (obj.tagName!='LI'){
			obj=obj.parentElement;
		}
	}
	
	/** ID objektu LI prvni urovne (oprojektu, teorie, zive,..)
	* @var elid string
	*/
	var elid=obj.getAttribute('id'); 
	rExp=/\w/i;
	if(!rExp.test(elid)){
		while (obj.tagName!='UL'){
			obj=obj.parentElement;
		}
		var elid=obj.parentElement.getAttribute('id');
	}
//	debug('spustena akce '+t+' na prvku '+elid);

	/** promenna urcujici zda chci zobrazit nebo schovat podmenu
	* @var suf string - boolean typ "1" / "0"
	*/
	var suf="";
	if(t.substr(5)=="over"){suf="1";}
	if(t.substr(5)=="out"){suf="0";}
	if(t.substr(5)=="down"){suf="1";}
	
	//podmenu je schovano, chci zobrazit
	if(suf=='1'){
		if((elid!=null)&&(elid!='')){
			if(document.getElementById(elid).getElementsByTagName('UL')[0]){
				if(document.getElementById(elid).getElementsByTagName('ul')[0].style.display=='none'){
					//schovat viditelne menu - onmouseOut
					if (visibleUL != null && visibleUL != document.getElementById(elid).getElementsByTagName('ul')[0]) {
//						info('schovani meho UL');
						visibleUL.style.display = 'none';
					}
					document.getElementById(elid).getElementsByTagName('ul')[0].style.display='';
					showhide[elid]='over';
				} else {
					showhide[elid]='over';
					if(elementy[elid]==timeoutID){
						showhide[elid]='over';
						clearTimeout(timeoutID);
					}
					//schovat viditelne menu - onmouseOver
					if (visibleUL != null && visibleUL != document.getElementById(elid).getElementsByTagName('ul')[0]) {
//						info('schovani meho UL');
						visibleUL.style.display = 'none';
					}
				}
			}
		}
	}
	//podmenu je zobrazeno, chci schovat
	if(suf=='0'){
		if((elid!=null)&&(elid!='')){
			if(document.getElementById(elid).getElementsByTagName('ul')[0]){
				if(document.getElementById(elid).getElementsByTagName('ul')[0].style.display==''){
					//jak dlouho bude stary menu soubezne zobrazeno se starym
					timeoutID=setTimeout("hideMSIE()",10);
					elementy[elid]=timeoutID;
					showhide[elid]='out';
					//zobrazit schovane menu co ma byt def. videt
					if (visibleUL != null) {
//						info('zobrazeni meho UL');
						visibleUL.style.display = 'block';
					}
				}
			}
		}
	}
	return false;
}

/** funkce co dela to same jako hideMSIE ale asi nefunguje v IE, takze neni pouzivana
* @param elid string - ID elementu
*/
function hidemenu(elid){
	if((elid!=null)&&(elid!='')&&document.getElementById(elid).getElementsByTagName('ul')[0]){
		if(document.getElementById(elid).getElementsByTagName('ul')[0].style.display==''){
			document.getElementById(elid).getElementsByTagName('ul')[0].style.display='none';
		}
	}
}

/** schova menu pro dany id
* @param elid string - ID elementu
*/
function hideMSIE(elid){
	//lis - vyber vsechny LI prvni urovne z prvniho UL co je v kontejneru navigationBar
	lis=document.getElementById("navigationBar").getElementsByTagName('UL')[0].getElementsByTagName('LI');
	lisleng=lis.length;
	l=0;
	//projizdim vsechny LI prvni urovne
	while (l<lisleng){
		if((lis[l].getAttribute('id')==null)||(lis[l].getAttribute('id')=='')){
			idli=lis[l].parentNode.parentNode.getAttribute('id');
			right=false;
		} else {
			idli=lis[l].getAttribute('id');
			right=true;
		}
		//pokud znam ID pak provadim
		if(right==true){
			// pokud je prvek UL druhe urovne a pro ID LI parenta je nastavena akce out, 
			if((document.getElementById(idli).getElementsByTagName('UL')[0])&&(showhide[idli]=='out')){
				//a pokud UL prvek je zobrazen, schovam ho
				if((document.getElementById(idli).getElementsByTagName('UL')[0].style.display=='')&&(showhide[idli]=='out')){
					document.getElementById(idli).getElementsByTagName('UL')[0].style.display='none';
				}
			}
		}
		l++;
	}
}

function fixE(e){
	if(!e&&window.event) 
		e=window.event;
	if(!e.target) 
		e.target=e.srcElement;
	return e;
}
