// ### okna, změny location
function okno(url, sirka, vyska){
	okno_internal(url, '', sirka, vyska);
	return false;
}

function okno_max(url){
	return okno(url, screen.width, screen.height);
}

function fokno(url){
	okno_internal(url, 'fokno', screen.width, screen.height);
	return false;
}

function okno_internal(url, name, sirka, vyska){
	var o=window.open(url, name, 'width='+sirka+',height='+vyska+',resizable,scrollbars');
	addEvent(o, 'load', function(e){e.target.focus();});
	return o;
}

function loc_change(URL, win){
	win.location.href=URL;
	win.focus();
}

function popup_loc_change(URL){
	//důležité pořadí akcí; vymyslet nějak lépe, aby se během čekání na odpověď stránka už načítala - zkusit si pohrát s focusem
	var c=window.confirm('Zavřít toto okno?');//modální okno - otázka
	loc_change(URL, window.opener);//změna fokusu okna
	if(c)
		window.close();//zavření okna
}

// ### speciální okna
function validator(url){
 	// service='http://validator.w3.org/check?uri=';
	service='http://validator.webylon.info/check?ua=Validator%2F1.0+(czech%3B+http%3A%2F%2Fvalidator.webylon.info)&uri='; // bývalý validator.w3.cz
	window.open(service+escape(url));
}

function mail_decrypt(){
	var spans=document.getElementsByTagName('span');
	var URL;
	for(var i=0; i<spans.length; i++)
		if(spans[i].className.match(/(?:^| )mdecrypt(?:$| )/)){
			URL=spans[i].innerHTML.replace(/^(.+?) alt64 (.+)$/, '$2@$1').replace(/ /g, '.');
			removeChildNodes(spans[i]);
			spans[i].appendChild(createA('mailto:'+URL, URL));
		}
}

// ### hoverování
function kom(evt, textik){//bude dělat v IE problémy - vkládání <br /> přímo přes innerHTML
	//zmenit text
	document.getElementById('text').innerHTML=textik;

	//souradnice
	if(document.all){
		var levomys=parseInt(evt.x);
		var horemys=document.body.scrollTop+parseInt(evt.y);
	}else{
		var levomys=parseInt(evt.pageX);
		var horemys=document.body.scrollTop+parseInt(evt.pageY);
	}

	//rozmery stranky
	//spočítá šířku #text: pokud obsahuje jen jeden řádek, vezme se jeho délka; jinak se bere délka nejdelšího
	if(textik.replace('<br \/>','\n').indexOf('\n')==-1){
		var txtl=textik.length;
	}else{
		var radky=textik.replace('<br \/>','\n').split('\n');
		var txtev='Math.max(';
		for(i=0; i<radky.length; i++) {
			if(i!=0)
				txtev+=',';
			txtev+=radky[i].length.toString();
		}
		txtev+=')';
		var txtl=eval(txtev);
	}
	var sirkastr=document.body.clientWidth-(txtl*7+16);
	var vyskastr=document.body.scrollTop+document.body.clientHeight;
	var txt_element=document.getElementById('text');//nešlo by použít with(){}?
	txt_element.style.top=(horemys+20).toString()+'px';
	txt_element.style.left=Math.min(levomys-3, sirkastr).toString()+'px';
	window.objeveni=setTimeout("document.getElementById('text').style.visibility='visible'",400);
}

function pryc(){
	document.getElementById('text').style.visibility='hidden';
	if(typeof window.objeveni!='undefined')
		clearTimeout(window.objeveni);
}


function ion(co){
	co.style.backgroundColor='#fffae8';
}

function ipryc(co){
	co.style.backgroundColor='#fff';
}

function btno(co){
	co.style.borderColor='#64acd2';
	co.style.backgroundColor='#64acd2';
}

function btnp(co){
	co.style.borderColor='#3893c2';
	co.style.backgroundColor='#3893c2';
}

// ### skrývání částí stránky
// použitelné jen pro blokové elementy
// každá skrývaná část má své číslo (budu značit %id%)
// číslování %id% musí být souvislé, jinak se budou ignorovat položky s %id% větším než první přeskočené
// skrývání se aktivuje přidáním id "hidden%id%" elementu, který se má skrýt
// zobrazovací odkazy se vygenerují na konec stávajícího obsahu elementů s id "viewer%id%", pro které platí stejná pravidla jako pro skrývané elementy
// vygenerované zobrazovací odkazy budou mít text " (zobrazit)"
function hide(){
	var obj, id, a;
	for(id=1; (obj=document.getElementById('hidden'+String(id)))!==null; id++)
		obj.style.display='none';
	for(id=1; (obj=document.getElementById('viewer'+String(id)))!==null; id++){
		obj.appendChild(document.createTextNode(' ('));
		a=createA('', 'zobrazit');
		addEvent(//v podobě atributu, ať už přes moje addAttribute nebo a.setAttribute, IE 6 nežere => vůbec nespouští
			a,
			'click',
			new Function(
				'e',
				"if(typeof e.preventDefault!=='undefined')e.preventDefault(); return view("+String(id)+');'//preventDefault pro slušné prohlížeče, return false pro IE
			)
		);
		//var id=(typeof this.parentNode!=='undefined')?this.parentNode.id:'viewer"+String(id)+"'; id=id.substr('viewer'.length);//pro IE 6 nenalezen hack, jak se k id parentnodu dostat, protože this pro něj znamená okno
		obj.appendChild(a);
		obj.appendChild(document.createTextNode(')'));
	}
}
function view(id){
	var obj=document.getElementById('hidden'+String(id));
	if(obj!==null)
		obj.style.display=(obj.style.display==='none')?'block':'none';//při chybném použití se inline prvek skryje a následně převede na blokový => ošetřitelné pomocí if .. elseif
	return false;
}

// ### interní účely JS
function addEvent(obj, evType, fn){
	if(obj.addEventListener){
		obj.addEventListener(evType, fn, true);//standardní
		return true;
	}else if(obj.attachEvent){
		return obj.attachEvent('on'+evType, fn);//IE
	}else{
		return false;//chyba
	}
}
function removeChildNodes(obj){//odstraní všechny childNodes
	while(obj.childNodes.length>0)
		obj.removeChild(obj.childNodes[0]);//po odstranění dítěte se childNodes přeindexuje
}
function createA(hrefValue, content){
	if(content===null)
		content='';
	if(typeof content!=='object')
		content=document.createTextNode(content);
	var a=document.createElement('a');
	addAttribute(a, 'href', hrefValue);
	a.appendChild(content);
	return a;
}
function addAttribute(obj, attributeName, attributeValue){//ekvivalentní s obj.setAttribute(attributeName, attributeValue);
	var attribute=document.createAttribute(attributeName);
	attribute.nodeValue=attributeValue;
	obj.setAttributeNode(attribute);
}
function inspect(obj){
	var i=0;
	var text='';
	for(var member in obj){
		text+=member+': '+obj[member]+'\n';
		if(++i%20===0){
			alert(text.substr(0, text.length-1));
			text='';
		}
	}
}

// ### obsluhy načtení stránky
// úprava obfuskovaných mailů do původní podoby
addEvent(window, 'load', mail_decrypt);
// skrytí rozbalovacích částí stránky (seznam maturitních okruhů)
addEvent(window, 'load', hide);
// hračka pro stavový řádek, dědictví po Janu Markovi
addEvent(window, 'load', function(e){window.status=document.title;});
// vytvoření shortcutů (aktivují se poklepáním)
// 	validátor => #validator-shortcut copyright v patičce
// 	webmail => #webmail-shortcut hlavička kromě adresy školy
addEvent(
	window,
	'load',
	function(e){
		var elem = document.getElementById('validator-shortcut');
		if(elem !== null)
			addEvent(elem, 'dblclick', function(ev){validator(window.location.href);});
		elem = document.getElementById('webmail-shortcut');
		if(elem !== null)
			addEvent(elem, 'dblclick', function(ev){window.open('https://server.gymnasiumkladno.cz:10443/webmail/');});
			// CAVEAT: stejný odkaz je i v admin.php a client.php a je potřeba je ručně aktualizovat
	}
);
// box odkazy
addEvent(
	window,
	'load',
	function(e){
		var odk=document.getElementById('odkazy');
		if(odk===null)
			return;
		addEvent(odk.getElementsByTagName('select')[0], 'change', function(e){//bývala funkce smenu(selectObject)
			var url=this.options[this.selectedIndex].value;
			//var url=this.value;// IE6 neumí, IE7+ nezkoušeno; Opera a FF umí
			if(url!=window.location.href)
				window.open(url);//pozor na duplicity :-(
		});
		odk.getElementsByTagName('button')[0].style.display='none';
	}
);
// kom() box
addEvent(
	window,
	'load',
	function(e){
		var div=document.createElement('div');
		div.setAttribute('id', 'text');
		document.body.appendChild(div);//JavaScriptem využívaný box, který je jinak skrytý
	}
);

